我正在尝试编写 DLL 函数来分配 cuda 内存并取回指向 cuda(设备)内存的指针。
第二个函数应该接受这个指针并进行计算。
我希望这个操作是分开的,因为我需要对相同的数据进行多次计算,并且我试图避免重复将相同的数据复制到 GPU 内存(这需要很多时间)-
问:我需要添加什么到我的 DLL 才能将指针导出到i_d
?
我的 DLL:
主.cpp:
extern "C" __declspec(dllexport) int cuda_Malloc ( float *i, void **i_d, int N ){
for( float x=0; x<N; x++ )
i[x]=x;
kernel_cuda_Malloc( i, i_d, N );
return 0;
}
extern "C" __declspec(dllexport) int cuda_Calculation( void *i_d, float *result, int N ) {
kernel_cuda_calculation( i_d, result, N );
return 0;
}
简单的.cu:
__global__ void kernelTest( float *i, int N ){
unsigned int tid = blockIdx.x*blockDim.x + threadIdx.x;
if ( tid<N )
i[tid] += 10;
}
int kernel_cuda_Malloc( float *i, void **i_d, int N ){
cudaMalloc( (void**)&i_d, N*sizeof( float ) );
cudaMemcpy( i_d, i, N*sizeof( float ), cudaMemcpyHostToDevice );
return 0;
}
void kernel_cuda_calculation( float *i_d, float *result, int N ){
dim3 threads; threads.x = 240;
dim3 blocks; blocks.x = ( N/threads.x ) + 1;
kernelTest<<< threads, blocks >>>( i_d, N );
cudaMemcpy( result, i_d, N*sizeof( float ), cudaMemcpyDeviceToHost );
cudaFree( i_d );
}
我无法i_d
从cuda_Malloc
LabVIEW 中的函数中获取指针。