【问题标题】:Copying an array in CUDA在 CUDA 中复制数组
【发布时间】:2015-01-13 04:34:38
【问题描述】:

为什么我的cudaMemcpy 不起作用?我将它包装在checkCUDAErrors 中,这是我正在学习的课程提供的调试功能。我的程序没有错误,除了一个:

CUDA error at: student_func.cu:202
invalid argument cudaMemcpy(&d_filter,&h_filter, sizeof(float) * filterWidth * 
filterWidth, cudaMemcpyHostToDevice);

但是,NVCC 没有报告任何错误。我哪里错了?

unsigned char *d_red, *d_green, *d_blue;
const float* const *d_filter;

void allocateMemoryAndCopyToGPU(const size_t numRowsImage, const size_t numColsImage,
                                const float* const h_filter, const size_t filterWidth)
{

  checkCudaErrors(cudaMalloc(&d_red,   sizeof(unsigned char) * numRowsImage * numColsImage));
  checkCudaErrors(cudaMalloc(&d_green, sizeof(unsigned char) * numRowsImage * numColsImage));
  checkCudaErrors(cudaMalloc(&d_blue,  sizeof(unsigned char) * numRowsImage * numColsImage));
  d_filter = &h_filter;
  checkCudaErrors(cudaMalloc(&d_filter, sizeof(float) * filterWidth * filterWidth));
  checkCudaErrors(cudaMemcpy(&d_filter,&h_filter, sizeof(float) * filterWidth * filterWidth, cudaMemcpyHostToDevice)); //line with error

}

【问题讨论】:

    标签: pointers memory cuda


    【解决方案1】:

    原型是:

    cudaMemcpy  (   void *  dst,
    const void *    src,
    size_t  count,
    enum cudaMemcpyKind     kind     
    )   
    

    所以你应该去掉 & 而不是将 dst 设为 const

    所以改变这个:

    const float* const *d_filter;
    

    到这里:

    float *d_filter;
    

    然后改变这个:

    checkCudaErrors(cudaMemcpy(&d_filter,&h_filter, sizeof(float) * filterWidth * filterWidth, cudaMemcpyHostToDevice)); //line with error
    

    到这里:

    checkCudaErrors(cudaMemcpy(d_filter,h_filter, sizeof(float) * filterWidth * filterWidth, cudaMemcpyHostToDevice));
    

    【讨论】:

    • 我认为都是。这些已经是指针,使用 & 将指针传递给指针
    • 导致 NVCC 给出以下错误:student_func.cu(203): error: argument of type "const float *const *" is incompatible with parameter of type "void *"
    • 是的,去掉 const
    • 在你的浮动声明中
    • 我把它改成了const float* *d_filter;,得到了以下错误:student_func.cu(188): error: a value of type "const float *const *" cannot be assigned to an entity of type "常量浮动**"
    猜你喜欢
    • 2012-08-21
    • 2022-12-18
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 2013-10-03
    • 2017-09-20
    • 2015-06-10
    相关资源
    最近更新 更多