【发布时间】:2014-05-29 15:48:49
【问题描述】:
我正在尝试在 С++ DLL 中为 CUDA 做一个包装器,以便能够在 C# 中使用它(是的,我知道有 managedCuda 和 cudafy,但我仍然想试试这个)
问题是,为了能够将指针引用传回 c#,我不能像往常一样使用 float* 执行 cuda malloc。我试图用 CUdeviceptr 管理所有内容,但是,即使 cudaMalloc 显然有效(cudaGetLastError 没有给出错误),当我使用 CUdevicptr 变量执行 cudaMemcpy 时,它会中断并给出“无效参数”错误。
extern "C" __declspec(dllexport) void __cdecl allocateDeviceMemory(float*, CUdeviceptr, unsigned int);
extern void allocateDeviceMemory(float* data, CUdeviceptr device_pointer, unsigned int numElements){
cudaMalloc((void**)&device_pointer,numElements * sizeof(float));
cudaError_t error = cudaGetLastError();
printf("CudaError.... 1 %s\n", cudaGetErrorString(error));
cudaMemcpy((void*)&device_pointer ,data,numElements * sizeof(float), cudaMemcpyHostToDevice);
error = cudaGetLastError();
printf("CudaError.... 2 %s\n", cudaGetErrorString(error));
}
有人对如何做到这一点有任何想法吗?
【问题讨论】: