为什么我的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
}
答案 0 :(得分: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));