Могу ли я использовать thrust::host_vector или я должен использовать cudaHostAlloc для нулевого копирования с Thrust?
Я хочу использовать нулевое копирование в отображенной памяти cudaHostGetDevicePointer
, Могу ли я использовать thrust::host_vector
или я должен использовать cudaHostAlloc(...,cudaHostAllocMapped)?
Или это как-то проще сделать с Thrust?
1 ответ
Решение
Я почти уверен, что по-прежнему невозможно использовать thrust::host_vector в качестве назначенного хоста. Есть закрепленный распределитель памяти, но я не верю, что сопоставленная память доступна. Что вам нужно сделать, это что-то вроде этого:
- Выделенная сопоставленная, закрепленная память хоста с
cudaHostAlloc
- Получить указатель устройства для нулевой копии памяти, используя
cudaHostGetDevicePointer
- Создать
thrust::device_ptr
с помощьюthrust::device_pointer_cast
на указателе этого устройства (см. здесь для получения дополнительной информации)
Вы можете либо сделать thrust::device_vector
с использованием thrust::device_ptr
или прямо пройти thrust::device_ptr
к любым алгоритмам, которые принимают итератор.