这是来自cudaMemcpyToSymbol vs cudaMemcpy
的后续问答我认为-G标志用于制作cudaGDB版本。我也看到了明显的错误。 (以下代码中的错误是故意的。问题是关于返回错误没有显示的原因。)
__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 ,并运行它w /: ./ junk 时,我的结果是:ErrVal = 11 ,这是"无效的参数"。
当我构建w /: nvcc junk.cu -G -o junk ,然后运行它w /: ./ junk 时,我的结果是:ErrVal = 0 ,这是cudaSuccess。
我没有很多带-G标志的经验,但这似乎很奇怪。 为什么-G擦除返回错误?