Matlab双GPU内存使用
问题描述:
我有一个名为Titan Z的双GPU卡。我有Matlab 2016a试图解决为不同'b
'值设置的稀疏Ax=b
方程。泰坦Z有两个GPU和6 GB RAM每个GPUMatlab双GPU内存使用
这是问题所在。
- 如果我解决1个GPU一个
Ax=b
问题,比方说,一个 2GB,MATLAB副本这个矩阵的“A
”矩阵大小,每个GPU的显存。 GPU-Z报告 每个GPU拥有2 GB的数据,仅1 GPU工作 - 如果我解决两个
Ax=b
问题2 GPU,让我们说“A
” 2GB,MATLAB再次复制这个矩阵的矩阵大小,每个GPU的vram两次。现在GPU-Z报告每个GPU有4GB数据,两个GPU同时工作。 - 如果我尝试同时解决'4GB'问题Nvidia驱动程序由于Vram不足而崩溃。但我可以在一个GPU上解决它。不是同时在2个GPU上。
问题是Matlab的拷贝那些矩阵两次,当不需要它,更有趣的是,它这样做时两个GPU使用完全相同的“A
”矩阵但不同的“b
”向量。
我该如何解决这个问题?
答
对我自己的问题有点晚了,但这里是解决方案。 禁用Nvidia控制面板中的多GPU模式解决了这个问题。 基本上它禁用sli和gpus可以独立运行。这很简单。
你能分享你的代码吗?你使用'spmd'还是类似的? – Edric
它其实很简单。我使用gpuArray进行分配和传输,之后使用parfor循环(i = 1:2)来解决方程组。在GPU上。 – coercion
所以,你不是在'parfor'循环中构建'gpuArray'?如果你在'parfor'里面构建'gpuArray',会发生什么? – Edric