2017-11-30 26 views
0

나는 여기에있는 코드를 적용하려고합니다 : https://wiki.tiker.net/PyCuda/Examples/ThrustInterop ... cuda 스트림을 사용합니다.스트림을 사용하여 추력을 실행하는 PyCuda

(필자는 C++에 새로 온 것을 변명, 단지 CUDA와 몇 주 경험을하시기 바랍니다.)

내 주요 시도 및 부착 지점이 같은 NVCC 기능을 조정하는 라인을 따라왔다 그래서 수신 추력 호출에 CUDA의 인수로 스트림 및 공급 :

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 프레임 워크가 특정 include를 찾을 수 없을 때 오류를 표시하는지 확신합니까?

또한 내 관심을 끌었 또 다른 한가지는 cudaStream_t 다른 수준에서 작동하는 runtime api의 일부 반면 당신의 driver api의 일부입니다 CUdeviceptr을 사용하는 것입니다.

NVIDIA 설명서에서 driver api에 해당하는 유형이 CUstream 인 것으로 보입니다. 출처 : http://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__STREAM.html#group__CUDA__STREAM

그래서 apis의 기능을 여러 수준으로 혼합하는 데 문제가있을 수 있습니다. 내가 말했듯이, 나는 당신이 사용하고있는 정확한 프레임 워크에 익숙하지 않다. 그것들은 유용 할 수도 있고 그렇지 않을 수도있는 몇 가지 제안 일 뿐이다.

디버깅을 통한 행운을 빕니다!

+0

감사합니다. 아직이 전반적인 문제를 해결하기 위해 매우 초기 단계에 있지만 함수 인수를 'CUstream'으로 바꾸는 것은 최소한 오류를 제거했습니다. – FunkyOne

+0

기꺼이 도와 드리겠습니다. – Addy