我正在使用cu文件,我在其中生成随机数。
...
__global__ void kernel(double* A,double *B, curandState* globalState,int Asize,int Bsize)
{...
void kernel_wrapper(double** A_host,double** B_host, int Asize ,int Bsize)
{
int N=1000; // random numbers
//create random states
curandState* devStates;
gpuErrchk(cudaMalloc(&devStates,N*sizeof(curandState)));
//allocate host memory
*A_host=(double*)malloc(Asize*sizeof(double));
*B_host=(double*)malloc(Bsize*sizeof(double));
//allocate device memory
double* A_dev,*B_dev;
gpuErrchk(cudaMalloc((void**) &A_dev,Asize* sizeof(double)));
gpuErrchk(cudaMalloc((void**) &B_dev,Bsize* sizeof(double)));
// setup seeds
setup_kernel<<<1,N>>>(devStates,unsigned(time(NULL)));
gpuErrchk( cudaPeekAtLastError() );
gpuErrchk( cudaDeviceSynchronize() );
//define threads and blocks
const int NUM_BLOCKS=16;
const int NUM_THREADS=256;
dim3 dimGrid(NUM_BLOCKS);
dim3 dimBlock(NUM_THREADS);
//generate random numbers
kernel<<<1,1>>>(A_dev,B_dev,devStates,Asize,Bsize);
gpuErrchk( cudaPeekAtLastError() );
gpuErrchk( cudaDeviceSynchronize() );
// copy result from device to host
gpuErrchk(cudaMemcpy(*A_host, A_dev,Asize* sizeof(double), cudaMemcpyDeviceToHost));
gpuErrchk(cudaMemcpy(*B_host, B_dev,Bsize* sizeof(double), cudaMemcpyDeviceToHost));
//clean up device memory
gpuErrchk(cudaFree(A_dev));
gpuErrchk(cudaFree(B_dev));
gpuErrchk(cudaFree(devStates));
}
然后,我从cpp文件加载这些值,并将它们用作函数的参数。
...
extern void kernel_wrapper(double** A,double** B, int Asize ,int Bsize);
...
int main()
{
...
kernel_wrapper(&A,&B,Asize ,Bsize);
...
myfunction(...A,B)
...
free(A);
free(B);
如何最大限度地减少数据传输并主要在设备中完成工作? 因为现在我正在分配主机内存并将其传递给cpp文件。 我无法计算如何传递设备内存?
答案 0 :(得分:0)
如果你所做的只是在设备上生成随机数,然后在主机代码(myfunction
)中使用它们,那么你将无法做到比你所拥有的更好的传递数据。您myfunction
文件中的.cpp
被编写为使用主机代码,因此没有必要将数据传递给驻留在设备上的数据。