cudaメモリを割り当ててcuda(デバイス)メモリへのポインタを取り戻すDLL関数を書き込もうとしています。
2番目の関数はこのポインターを受け入れて計算を行う必要があります。
同じデータに対して多くの計算を行う必要があり、同じデータをGPUメモリに繰り返しコピーしないようにしているため、この操作を分離したいと思います(時間がかかります)-
Q:ポインタをにエクスポートできるようにするには、DLLに何を追加する必要がありますi_d
か?
私のDLL:
main.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;
}
simple.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 );
}
LabVIEWの関数i_d
からポインタを取得できません。cuda_Malloc