我正面临一个简单的问题,我对cudaMalloc的所有调用都失败了,给我一个内存不足错误,即使它只是我正在分配的一个字节。
cuda设备可用,并且还有大量可用内存(通过相应的呼叫检查机器人)。
知道问题可能是什么?
答案 0 :(得分:2)
请尝试调用cudaSetDevice(),然后调用cudaDeviceSynchronize(),然后在代码本身的开头调用cudaThreadSynchronize()。
cudaSetDevice(0)如果只有一个设备。默认情况下,CUDA运行时将初始化设备0.
cudaSetDevice(0);
cudaDeviceSynchronize();
cudaThreadSynchronize();
请回复你的观察。如果仍然失败,请指定操作系统,体系结构,CUDA SDK版本,CUDA驱动程序版本。如果可能请提供失败的代码/代码段。
答案 1 :(得分:2)
谢谢大家的帮助。
问题不在于cudaMalloc本身,但它掩盖了真正的问题,这是由于cuda的初始化似乎失败了。
因为对cuda的第一次调用是在一个单独的线程中,我确实没有可用的GLContext,导致失败。在初始化上下文之后,我需要确保在主线程中通过虚拟malloc初始化cuda。