5

我面临一个简单的问题,我对 cudaMalloc 的所有调用都失败了,给了我一个内存不足的错误,即使它只是我分配的一个字节。

cuda 设备可用,并且还有大量可用内存(通过相应调用检查机器人)。

知道问题可能是什么吗?

4

2 回答 2

2

请尝试在代码本身的开头调用 cudaSetDevice()、cudaDeviceSynchronize() 和 cudaThreadSynchronize()。

cudaSetDevice(0) 如果只有一个设备。默认情况下,CUDA 运行时将初始化设备 0。

cudaSetDevice(0);
cudaDeviceSynchronize();
cudaThreadSynchronize();

请回复您的观察。如果仍然失败,请指定操作系统、架构、CUDA SDK 版本、CUDA 驱动程序版本。如果可能,请提供失败的代码/代码片段。

于 2012-12-19T08:49:33.603 回答
2

谢谢大家的帮助。

问题不在于 cudaMalloc 本身,但它掩盖了真正的问题,这是由于 cuda 的初始化似乎失败了。

因为第一次调用 cuda 是在一个单独的线程中,所以我没有可用的 GLContext,导致失败。在初始化上下文之后,我需要确保在主线程中通过虚拟 malloc 初始化了 cuda。

于 2012-12-19T11:44:07.927 回答