Могу ли я использовать thrust::host_vector или я должен использовать cudaHostAlloc для нулевого копирования с Thrust?

Я хочу использовать нулевое копирование в отображенной памяти cudaHostGetDevicePointer, Могу ли я использовать thrust::host_vector или я должен использовать cudaHostAlloc(...,cudaHostAllocMapped)?Или это как-то проще сделать с Thrust?

1 ответ

Решение

Я почти уверен, что по-прежнему невозможно использовать thrust::host_vector в качестве назначенного хоста. Есть закрепленный распределитель памяти, но я не верю, что сопоставленная память доступна. Что вам нужно сделать, это что-то вроде этого:

  1. Выделенная сопоставленная, закрепленная память хоста с cudaHostAlloc
  2. Получить указатель устройства для нулевой копии памяти, используя cudaHostGetDevicePointer
  3. Создать thrust::device_ptr с помощью thrust::device_pointer_cast на указателе этого устройства (см. здесь для получения дополнительной информации)

Вы можете либо сделать thrust::device_vector с использованием thrust::device_ptr или прямо пройти thrust::device_ptr к любым алгоритмам, которые принимают итератор.

Другие вопросы по тегам