2012-06-29 8 views
1

저는 pycuda를 사용하는 데 익숙합니다. 지금까지 "Cuda by Example"에서 커널을 작성하는 방법을 배웠습니다. 다음 과제는 클래스를 사용하는 것입니다. , 이것은 이미 커널 내부에서 C++로 작성되었습니다. 이 .h 파일을 pycuda로 어떻게 가져올 수 있습니까? 파이썬에서 다른 모듈처럼 가져올 수 있도록이 .h를 전송하기 위해 부스트 파이썬을 사용해야합니까? 이 특수 변수는 커널 내부에서만 필요합니다. 이 클래스는 파생 상품을 계산하기 위해 사용되며, 당신이 그것을 구축 어떻게 볼 수 있도록 내가 당신에게 몇 줄을 쓸 것입니다 :PyCuda에서 새 클래스 구현하기

adoublecuda.h : 등

namespace adtl { 
class adouble { 
public: 
    // ctors 
    __device__ __host__ inline adouble(); 
    __device__ __host__ inline adouble(const double v); 
    __device__ __host__ inline adouble(const adouble& a); 

    __device__ __host__ inline adouble operator -() const; 
    __device__ __host__ inline adouble operator +() const; 

....

나는이 클래스를 #include "adoublecuda.h"를 타이프하는 C-CUDA 내부에서 사용하는데, 지금은 같은 것을 PyCUDA에 포함하고 싶다. 나는 커널 내부에서만이 클래스를 사용하고있다. (나는 main 내부에 adouble 변수가 필요 없다.) 그렇다면 PyCuda에이 헤더 파일을 포함시키기 위해 부스트 파이썬을 사용해야합니까?

모든 조언을 주시면 감사하겠습니다. 저를 도와 주셔서 감사합니다!

+0

초심자이므로 Python 코딩에 대해 PyCuda와 ArrayFire를 함께 사용하면 멋진 결과를 얻었습니다. 나는 최근 MATLAB 대신 파이썬에서 많은 프로토 타이핑을 해왔고 좋은 성능을 얻는 가장 빠른 방법 인 콤보를 발견했습니다. 당신이 시작했을 때 그것을 시도해보십시오. –

답변

1

장치 코드 내에서만 사용되며 메타 프로그래밍을 수행하지 않으려한다면 실제로 작동하게하려면 Python이나 PyCUDA로 수행 할 필요가 없습니다. 장치 코드를 CUBIN 개체로 컴파일하면 (nvcc -cubin을 사용) driver.module_from_file()을 사용하여 해당 CUBIN 파일을로드하면됩니다.

this 내 대답은 이전 예제에서 볼 수 있습니다.

+0

자, 예제를 읽었으므로 함수를 사용할 때마다이 바이너리 파일에서 함수 코드를 찾아야하므로 결국에는 코드를 읽을 수 없게됩니다. :)하지만이 조언을 주셔서 감사합니다. boostpython을 사용하고 C++ 클래스를 사용하여 전송할 것입니다. – Banana