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

StackOverflow https://stackoverflow.com//questions/11692326

  •  12-12-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top