我已经包含了helper_cuda.h
,并且在我的代码中的每个CUDA调用上都使用了checkCudaErrors
宏。我已通过以下代码强制执行错误:
checkCudaErrors(cudaMalloc(&GPUCameraData, sizeof(float) /*<-- Should be HCameraData */ ));
checkCudaErrors(cudaMemcpy(GPUCameraData, CPUCameraData, sizeof(HCameraData)
, cudaMemcpyHostToDevice));
该应用程序只是退出,错误代码为1,但应该不会打印任何信息。如果我在第一行中断并进入第二行,我会看到
_cudaGetErrorEnum()
中的helper_cuda.h
确实返回"cudaErrorInvalidValue"
,但是输出中未打印任何信息。我使用的开发环境是Visual Studio 2013,并且已经在“调试”和“发布”模式下对此进行了测试。
注意:OpenGL和glGetError有相同的问题。似乎来自不在我自己文件结构内的代码的任何
fprintf(stderr, ...);
调用都不会打印任何内容。
最佳答案
原因可能是您正在创建其他类型的应用程序,而不是默认的C++应用程序(在您的情况下,将CUDA和OpenGL进行升级),即正在将此代码编译为要在非c++或其他项目中使用的库中链接问题(您需要哪种类型的项目...需要信息!)。当我将cuda代码编译为Matlab-Mex文件时,会遇到相同的问题,该文件将使用在“checkCudaErrors”中使用的命令“mexPrintf”而非“fprintf”进行打印。您可能会测试将helper_cuda.h中的print命令从 fprintf更改为可以打印信息的命令,以防您从程序中调用它。
关于c++ - checkCudaErrors没有打印错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682005/