C++ 为什么cudaMemGetInfo报告设备内存总量的变化?
当我运行下面的代码时,我的GPU上报告的内存总量会根据CudameGetInfo发生变化。cudaMemGetInfo的文档中没有提到这种行为,它说total应该包含我的设备上可以分配的内存总量,如果不在我的系统中放置不同的GPU,这些内存总量是无法更改的,对吗?。有人能解释为什么会这样吗?当我不叫cudaMallocManaged时,它似乎不会发生 包括 无效打印统计信息 { 无尺寸,总尺寸; cudaMemGetInfo&免费和总计;C++ 为什么cudaMemGetInfo报告设备内存总量的变化?,c++,cuda,C++,Cuda,当我运行下面的代码时,我的GPU上报告的内存总量会根据CudameGetInfo发生变化。cudaMemGetInfo的文档中没有提到这种行为,它说total应该包含我的设备上可以分配的内存总量,如果不在我的系统中放置不同的GPU,这些内存总量是无法更改的,对吗?。有人能解释为什么会这样吗?当我不叫cudaMallocManaged时,它似乎不会发生 包括 无效打印统计信息 { 无尺寸,总尺寸; cudaMemGetInfo&免费和总计; std::cout事实证明,当您的CUDA驱动程序版本不
std::cout事实证明,当您的CUDA驱动程序版本不适合CUDA运行时版本时,会发生这种未定义的行为。对于遇到此问题的任何其他人,我建议检查cudaGetLastError的输出,这就是我发现问题的原因
我通过将我的CUDA版本降级到10.1解决了这个问题,因为这是我的驱动程序支持的最新版本。你可以使用nvidia smi工具检查你的CUDA和驱动程序版本。我不建议使用free这个词作为变量名,但我认为这不是问题所在。使用CUDA memcheck运行代码时会发生什么?是一个问题吗报告了任何错误?@RobertCrovella未报告任何错误,错误摘要:0个错误。好的,问题似乎与所选设备有关。cudaGetDeviceCount每次都给出更改的值。好的,cuda memcheck未产生错误,但cudaGetLastError返回35,这似乎意味着cuda驱动程序版本不足以或者CUDA运行时版本,不管这意味着什么。现在尝试修复它。
free: 94383273356630
total: 20
free: 5661994326
total: 4
free: 140729276827856
total: 94383273355680