我已经实现了一个计算向量之间距离的内核。程序按预期运行,结果与 CPU 相同。程序释放设备中使用的资源(cudaFree
)并正常退出。另外,在退出之前我使用了cudaDeviceReset()
.
所有 CUDA API 调用都被包装以检查 Eclipse Nsight API 示例中的错误。程序执行过程中不报告错误。
内核在对全局内存执行读或写访问之前检查内存位置索引,即if ( idx < N ) ...
在 CPU 中,循环是在调用内核之前p
执行 acudaMalloc
和 a的执行次数,以及在下一次迭代之前执行 a 的次数。A放置在内核之后和 cudaFree 调用之前以等待 GPU 启动的工作完成。cudaMemcpy(HtoD)
cudaFree()
cudaDeviceSynchronize()
在cuda-memcheck
Release 和 Debug 模式下分析程序时不会报告任何错误。
但是,有时计算机在运行程序时会重新启动,而我没有找到任何重复模式来跟踪错误。所以,我的问题是:我怎么能捕获这个错误?
我在运行 X 系统的 Ubuntu x86_64 GNU/Linux 中使用 CUDA 版本 5.0、V0.2.1221。设备为GTX480,安装的驱动版本为304.54。