项目场景:
问题描述
terminate called after throwing an instance of ‘xxxxxx’
编译没问题,但运行出错
原因1:内存不足
解决方案:
查看当前所有可用的GPU,选择使用率较低的设备。
在代码里
import os
os.environ[‘CUDA_VISIBLE_DEVICES’] = ‘0’
或者在terminal选其他GPU即可解决
export CUDA_VISIBLE_DEVICES=3
原因2:传入了错误指针/参数
要注意引用、指针的使用是否正确,尤其涉及host端和device端的互相传输的时候。
原因3: block线程数超出了GPU 的限制
每个block设定的线程数超出了GPU 的限制,如NVIDIA GeForce RTX 3080的maxThreadsPerBlock为1024(可以通过getDevice Properties读到),若CUDA编程时给block里的线程数超出1024,则会报如上error:
dimBlock(32, 32, 1); // 正好1024,则正常运行
dimBlock(33,32, 1); // 超出1024,报错