【问题标题】:minimize data transfers (use device memory?)最小化数据传输(使用设备内存?)
【发布时间】:2014-02-26 12:49:20
【问题描述】:

我正在使用一个生成随机数的 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 文件。 我不知道如何传递设备内存?

【问题讨论】:

  • 如果您所做的只是在设备上生成随机数,然后在主机代码 (myfunction) 中使用它们,那么您将无法比现有的更好在传递数据方面。您的 myfunction 位于 .cpp 文件中,可能是为了使用主机代码而编写的,因此没有必要将驻留在设备上的数据传递给它。
  • @Robert Crovella:嗯..我想你是对的。如果我可以从 cu 文件中调用该函数,我可以尝试的唯一可能性..
  • @Robert Crovella:我开了一个新帖子stackoverflow.com/questions/22064072/how-to-use-the-cula-device。我想使用设备内存,但不知道如何通过。

标签: cuda


【解决方案1】:

如果您所做的只是在设备上生成随机数,然后在主机代码 (myfunction) 中使用它们,那么在通过数据。您的myfunction 位于.cpp 文件中,可能是为了使用主机代码而编写的,因此没有必要将驻留在设备上的数据传递给它。

【讨论】:

    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 2016-04-06
    • 2011-04-03
    • 2010-10-15
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多