cudaMemCpy2d error (cudaErrorInvalidValue) 运行时"debug"配置
cudaMemCpy2d error (cudaErrorInvalidValue) when running "debug" configuration
这让我发疯了。我一辈子都想不通为什么会这样。基本上,我的这段代码在Linux(Nsight eclipse版(下运行良好。我尝试通过创建Visual Studio 2013项目并对其进行配置来使其与Windows兼容。
在这一点上,一切似乎都很好,代码编译没有任何问题。当我使用"发布"配置时,它甚至可以正常运行。但是,一旦我尝试调试配置,下面的部分就会崩溃并显示cudaErrorInvalidValue
错误。
我已经将问题追踪到优化标志。禁用优化将导致崩溃。使用 /O2
或 /O1
,代码运行良好!
同样,这在有或没有优化的 Linux 下工作得很好。我想知道Windows优化有什么。如果有任何帮助,我正在使用带有CUDA 6.5和静态库链接的Visual Studio 2013(更新4(。(在Linux上是CUDA 6.5,但动态库链接(。
完整代码可在此处获得。
size_t hostPitch = (size_t)getHostPitch();
size_t devicePitch = (size_t)getDevicePitch();
size_t cal = (size_t)(width * numChannels * sizeof(T));
size_t h = (size_t)height;
cudaError_t eCUDAResult = cudaMemcpy2D((void*)this->hostData, hostPitch, (const void*)this->deviceData, devicePitch, cal, h, cudaMemcpyDeviceToHost);
Young-Bae @Park的评论解决了我的问题(尽管这比一个简单的断点需要更多的努力!
不确定的行为是由我的粗心造成的。在其中一个类中,我忘记覆盖复制和分配。因此,当一个对象被返回时,它的析构函数被调用并释放了所有的 CUDA 内存!因此,对该对象的后续 CUDA API 调用正在处理悬而未决的引用。
简直不敢相信在C++中错过一些微小的东西并花费数小时进行调试是多么容易
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 无法找到/读取配置文件.conf-FileIOException
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 一种在C++中读取TXT配置文件的简单方法
- 生成MRPT库时cmake配置失败
- FFMPEG配置文件级别id大小无效
- 如何通过Conan和CMake找到用于pkg配置的.pc文件
- 配置文件解析器仅返回以前的值
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 可视化C++:发布模式的运行时库作为'Multi-threaded Debug DLL'
- 是否可以配置提升日志刷新?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- C/C++:打印(配置)头文件的内容
- 配置:错误:找不到 MySQL 包含目录
- 安装 psutil 和为 pypy 配置期间出错
- 叮当格式化程序多行格式配置错误
- 在Visual Studio中,C++构建配置类型是Debug,Debug3D,DebugDLL4,DebugDLL9,
- 我可以将OpenCV的Release配置与我的应用程序的Debug配置一起使用吗
- cudaMemCpy2d error (cudaErrorInvalidValue) 运行时"debug"配置