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