Có một bao bì cuda 4.2 hoàn chỉnh đẹp như ManagedCuda. Bạn chỉ cần thêm dự án CUDA C++ để giải pháp của bạn, trong đó có bạn C# dự án, sau đó bạn chỉ cần thêm
call "%VS100COMNTOOLS%vsvars32.bat"
for /f %%a IN ('dir /b "$(ProjectDir)Kernels\*.cu"') do nvcc -ptx -arch sm_21 -m 64 -o "$(ProjectDir)bin\Debug\%%~na_64.ptx" "$(ProjectDir)Kernels\%%~na.cu"
for /f %%a IN ('dir /b "$(ProjectDir)Kernels\*.cu"') do nvcc -ptx -arch sm_21 -m 32 -o "$(ProjectDir)bin\Debug\%%~na.ptx" "$(ProjectDir)Kernels\%%~na.cu"
để gửi-xây dựng các sự kiện trong C# thuộc tính dự án của bạn, điều này biên dịch file * .ptx và sao chép nó vào bạn C# thư mục đầu ra của dự án.
Sau đó, bạn chỉ cần tạo ngữ cảnh mới, tải mô-đun từ tệp, chức năng tải và làm việc với thiết bị.
//NewContext creation
CudaContext cntxt = new CudaContext();
//Module loading from precompiled .ptx in a project output folder
CUmodule cumodule = cntxt.LoadModule("kernel.ptx");
//_Z9addKernelPf - function name, can be found in *.ptx file
CudaKernel addWithCuda = new CudaKernel("_Z9addKernelPf", cumodule, cntxt);
//Create device array for data
CudaDeviceVariable<cData2> vec1_device = new CudaDeviceVariable<cData2>(num);
//Create arrays with data
cData2[] vec1 = new cData2[num];
//Copy data to device
vec1_device.CopyToDevice(vec1);
//Set grid and block dimensions
addWithCuda.GridDimensions = new dim3(8, 1, 1);
addWithCuda.BlockDimensions = new dim3(512, 1, 1);
//Run the kernel
addWithCuda.Run(
vec1_device.DevicePointer,
vec2_device.DevicePointer,
vec3_device.DevicePointer);
//Copy data from device
vec1_device.CopyToHost(vec1);
loại bỏ các liên kết. không cần để hiển thị một chết liên kết thêm. sẽ rất tử tế nếu bạn xóa nhận xét của mình. Mọi người có thể không được giải thích về điều này. –
Tôi đã không nhận ra rằng bạn chỉ có thể PInvoke các cuộc gọi CUDA. Xấu hổ mà bạn cần phải mua vào NVidia để làm việc này. –