PyCuda使用Streams执行Thrust

时间:2017-11-30 00:10:42

标签: c++ cuda thrust pycuda

我正在尝试调整此处的代码: https://wiki.tiker.net/PyCuda/Examples/ThrustInterop ......使用cuda流。

(请原谅我是c ++的新手,并且只有几周的cuda经验。)

我的主要尝试和关键点一直是调整NVCC功能,以便接收一个cuda流作为arg,并提供给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 个答案:

答案 0 :(得分:2)

我不熟悉pyCUDA或推力,但我熟悉CUDA。我想到的一个可能的事情是,某些原因是&#34; cuda_runtime.h&#34;尽管被指定,但可能不包括在内。你确定pyCUDA框架在找不到特定的包含时会指出错误吗?

引起我注意的另一件事是你使用的CUdeviceptrdriver api的一部分,而cudaStream_truntime api的一部分,在不同的层面上运作。

从NVIDIA文档中,driver api等效类型似乎是CUstream。 资料来源:http://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__STREAM.html#group__CUDA__STREAM

所以问题可能在于在不同级别混合api的功能。正如我所说,我不熟悉你正在使用的确切框架,这些只是一些可能会或可能不会有用的建议。

祝你好好调试!