c++ - CudaMalloc 在分配内存时失败
问题描述
cudaMalloc((void**)&count_d, N*sizeof(long));
我正在尝试使用 cudaMalloc 在 GPU上分配大量内存:
unsigned long N = 999999999L;
我在那个地方收到一条错误消息,所以问题是我分配了太多内存还是做错了其他事情。
我得到的错误消息:
CUDA error : an illegal memory access was encountered (77)
解决方案
正如@talonmies 所说,正如cudaMalloc()
文档告诉你的那样,调用cudaMalloc()
不能触发“非法内存访问”错误——这是关于设备代码的非法访问。(主机端代码进行非法内存访问会导致 Unix 上的 SIGSEGV 信号或 Windows 上的保护错误)。
那么你怎么可能在你之后看到这个错误cudaMalloc()
?简单:它发生得更早,而您之前根本没有检查错误;或者您没有同步您的流以执行待处理的内核。
最后,考虑关注@alterIgel 作为评论发布的链接,以阅读有关正确检查 CUDA API 调用的错误。
推荐阅读
- java - 为什么 Integer.class 的 Java 官方文档中没有 getChars(int i, int index, char[] buf) 方法
- python - 在 mac 上卸载 pip3
- google-chrome - RobotFramework - 同时处理 2 个浏览器选项卡并测试它们
- php - 使用 php foreach 提取 XML 没有循环
- r - R 中的 Julia(JuliaCall 和 XRJulia 不适用于 Julia 0.7 或更高版本)
- jenkins - 为 Jenkins 的 Nunit 插件写入测试结果日志
- javascript - 想要在按下按钮时终止事件
- java - 参数化 Spring bean 配置
- python - 将带有布尔输入占位符的 TensorFlow 模型转换为 TensorFlow Lite
- sql-server - SQL Server 动态 SQL 大小超过 4000 个字符