2016-07-27 158 views
0

我有一个名为Titan Z的双GPU卡。我有Matlab 2016a试图解决为不同'b'值设置的稀疏Ax=b方程。泰坦Z有两个GPU和6 GB RAM每个GPUMatlab双GPU内存使用

这是问题所在。

  1. 如果我解决1个GPU一个Ax=b问题,比方说,一个 2GB,MATLAB副本这个矩阵的“A”矩阵大小,每个GPU的显存。 GPU-Z报告 每个GPU拥有2 GB的数据,仅1 GPU工作
  2. 如果我解决两个Ax=b问题2 GPU,让我们说“A” 2GB,MATLAB再次复制这个矩阵的矩阵大小,每个GPU的vram两次。现在GPU-Z报告每个GPU有4GB数据,两个GPU同时工作。
  3. 如果我尝试同时解决'4GB'问题Nvidia驱动程序由于Vram不足而崩溃。但我可以在一个GPU上解决它。不是同时在2个GPU上。

问题是Matlab的拷贝那些矩阵两次,当不需要它,更有趣的是,它这样做时两个GPU使用完全相同的“A”矩阵但不同的“b”向量。

我该如何解决这个问题?

+0

你能分享你的代码吗?你使用'spmd'还是类似的? – Edric

+0

它其实很简单。我使用gpuArray进行分配和传输,之后使用parfor循环(i = 1:2)来解决方程组。在GPU上。 – coercion

+0

所以,你不是在'parfor'循环中构建'gpuArray'?如果你在'parfor'里面构建'gpuArray',会发生什么? – Edric

回答

0

对我自己的问题有点晚了,但这里是解决方案。 禁用Nvidia控制面板中的多GPU模式解决了这个问题。 基本上它禁用sli和gpus可以独立运行。这很简单。