2011-01-04 2 views
7

CUDA.Net을 사용하여 유치한 앱을 작성하려고하지만 운이 없습니다. 유형 GASS.CUDA.Types.CUfunction이어야 분명히Hello world for CUDA.Net

using GASS.CUDA; 

// ... 

var c = new CUDA(); 

// c.Launch(myfunc); // ???? how ??? 

myfunc하지만 난 하나를 정의하는 방법을 찾을 수 없습니다 :

가 나는에 알아 냈어요.

답변

8

먼저 커널 (GPU에서 실행되는 기능)과 함께 .cu 파일이 필요합니다. 의 파일 mykernel.cu에게 보자 :

extern "C" 
__global__ void fooFunction(float4* data) { 
    // there can be some CUDA code ... 
} 

이것은 NVCC 컴파일러와 .cubin 파일로 컴파일해야합니다. 비주얼 C++ 컴파일러의 컴파일러 노하우를하게하기 위해, 당신은 비주얼 스튜디오 명령 프롬프트 내에서 호출해야합니다

nvcc mykernel.cu --cubin 

이 같은 디렉토리에 mykernel.cubin 파일을 만듭니다.

다음 C# 코드에서이 이진 모듈을로드하고 커널을 실행할 수 있습니다. GASS.CUDA의 더 높은 수준의 객체 API에서 다음과 같이 보일 수 있습니다 :

using GASS.CUDA; 

// ... 

CUDA cuda = new CUDA(true); 
// select first available device (GPU) 
cuda.CreateContext(0); 
// load binary kernel module (eg. relative to from bin/Debug/) 
CUmodule module = cuda.LoadModule("../../mykernel.cubin"); 
// select function from the module 
CUfunction function = cuda.GetModuleFunction(module, "fooFunction"); 
// execute the function fooFunction() on a GPU 
cuda.Launch(function); 

그게 전부입니다!

nvcc 컴파일러는 수동으로 호출하는 것보다 빌드 동작으로 호출해야합니다. 누구든지 그 방법을 알고 있다면 저희에게 알려주십시오.