这是cudaMemcpyToSymbol vs cudaMemcpy的后续 Q
我的印象是 -G 标志是用于构建 cudaGDB 的。我也看到了明显的错误。(下面代码中的错误是故意的。Q是关于为什么返回错误没有显示它。)
__constant__ float flt[480]; // 1920 bytes
__constant__ int ints[160]; // 640 bytes
Main() {
float* pFlts;
cudaMalloc((void**)&pFlts, 1920+640);
cudaError_t eerr=cudaMemcpyToSymbol(ints,pFlts,sizeof(ints),sizeof(ints),cudaMemcpyDeviceToDevice);
printf("ErrVal= %d\n",(int)eerr);
}
当我构建 w/: nvcc junk.cu -o junk并使用: ./junk运行它时,我的结果是: ErrVal= 11,这是“无效参数”。
当我构建 w/: nvcc junk.cu -G -o junk并使用: ./junk运行它时,我的结果是: ErrVal= 0,即 cudaSuccess。
我没有很多使用 -G 标志的经验,但这似乎是一种奇怪的行为。为什么 -G 擦除返回错误?