PyCuda выполняет Thrust с использованием потоков

Я пытаюсь адаптировать код, найденный здесь:
https://wiki.tiker.net/PyCuda/Examples/ThrustInterop
…использовать потоки CUDA.

(Пожалуйста, извините, что я новичок в c ++, и у меня есть несколько недель опыта только с cuda.)

Моя основная попытка и точка преткновения заключалась в том, чтобы настроить функцию NVCC следующим образом: получить поток cuda в виде аргумента и подать запрос на вызов Thrust:

nvcc_function = FunctionBody(
FunctionDeclaration(Value('void', 'my_sort'),
[Value('CUdeviceptr', 'input_ptr'),
Value('int', 'length'),
Value('cudaStream_t','stream')]),
Block([Statement('thrust::device_ptr<float> thrust_ptr((float*)input_ptr)'),
Statement('thrust::sort(thrust::cuda::par.on(stream),thrust_ptr, thrust_ptr+length)')]))

Я получаю ошибку «cudaStream_t не был объявлен» (ссылаясь на аргумент функции NVCC).

Я попытался добавить cuda_runtime.h в списки хоста и устройства, но безрезультатно.

1

Решение

Я не знаком с PyCUDA или тяги, но я знаком с CUDA. Одна из возможных вещей, которая приходит на ум, заключается в том, что по какой-то причине «cuda_runtime.h» может не быть включен, несмотря на то, что он указан. Вы уверены, что инфраструктура pyCUDA укажет на ошибку, когда она не может найти конкретное включение?

Еще одна вещь, которая привлекла мое внимание, это то, что вы используете CUdeviceptr которая является частью driver api, в то время как cudaStream_t является частью runtime api, который работает на другом уровне.

Из документации NVIDIA кажется, что driver api эквивалентный тип будет CUstream,
Источник: http://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__STREAM.html#group__CUDA__STREAM

Таким образом, проблема может заключаться в смешивании функциональности apis на разных уровнях. Как я уже сказал, я не знаком с точной структурой, которую вы используете, это лишь некоторые предложения, которые могут или не могут оказаться полезными.

Удачи с отладкой!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]