CUDA.Net을 사용하여 유치한 앱을 작성하려고하지만 운이 없습니다. 유형 GASS.CUDA.Types.CUfunction
이어야 분명히Hello world for CUDA.Net
using GASS.CUDA;
// ...
var c = new CUDA();
// c.Launch(myfunc); // ???? how ???
myfunc
하지만 난 하나를 정의하는 방법을 찾을 수 없습니다 :
가 나는에 알아 냈어요.
CUDA.Net을 사용하여 유치한 앱을 작성하려고하지만 운이 없습니다. 유형 GASS.CUDA.Types.CUfunction
이어야 분명히Hello world for CUDA.Net
using GASS.CUDA;
// ...
var c = new CUDA();
// c.Launch(myfunc); // ???? how ???
myfunc
하지만 난 하나를 정의하는 방법을 찾을 수 없습니다 :
가 나는에 알아 냈어요.
불행히도 CUDA.net은 매우 잘못 작성되었지만 http://www.hoopoe-cloud.com/files/cuda.net/2.0/CUDA.NET_2.0.pdf으로 시작하는 것이 좋습니다. 또한 CUDA C에 커널을 작성해야하기 때문에 http://developer.download.nvidia.com/compute/cuda/3_2_prod/toolkit/docs/CUDA_C_Programming_Guide.pdf을 살펴보고 CUDA.net으로 포팅하기 전에 CUDA C 애플리케이션을 시작하는 것이 좋습니다.
먼저 커널 (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 컴파일러는 수동으로 호출하는 것보다 빌드 동작으로 호출해야합니다. 누구든지 그 방법을 알고 있다면 저희에게 알려주십시오.