【发布时间】:2016-07-27 05:09:16
【问题描述】:
我有一个名为 Titan Z 的双 GPU 卡。我有 Matlab 2016a 试图解决一个稀疏的 Ax=b 方程组,用于不同的“b”值。 Titan Z 有两个 GPU 和每个 gpu 的 6 GB 内存
这就是问题所在。
- 如果我在 1 个 GPU 上解决
Ax=b问题,假设“A”矩阵大小为 2GB,Matlab 将此矩阵复制到每个 GPU 的 vram。 GPU-Z 报告 每个 GPU 有 2 GB 的数据,只有 1 个 GPU 在工作 - 如果我在 2 个 GPU 上解决两个
Ax=b问题,假设“A”矩阵大小为 2GB,Matlab 再次将此矩阵复制到每个 GPU 的 vram 两次。现在 GPU-Z 报告每个 GPU 有 4GB 的数据,并且两个 GPU 同时工作。 - 如果我尝试同时解决“4GB”问题,Nvidia 驱动程序会因 Vram 不足而崩溃。但我可以在一个 GPU 上解决它。不能同时在 2 个 GPU 上。
问题是 Matlab 复制这些矩阵两次,当不需要时,更有趣的是,当两个 GPU 使用完全相同的“A”矩阵但不同的“b”向量时,它会这样做。
我该如何解决这个问题?
【问题讨论】:
-
你能分享你的代码吗?您使用的是
spmd还是类似的? -
其实很简单。我使用 gpuArray 进行分配和传输,然后使用 parfor 循环 (i=1:2) 来求解方程组。在 GPU 上。
-
所以您没有在
parfor循环内构建gpuArray?如果你在parfor中构建gpuArrays 会发生什么? -
我也尝试在内部构建它。我什至在里面调用了 gpuDevice 以确保它能够正确使用 GPU。我尝试了很多其他的东西。我怀疑 Nvidia 驱动程序会将任何数据镜像到一个 GPU,因为这是一张双 GPU 卡。下一步我将插入另一个 GPU,看看它是否也将它复制到第三个。我必须再次提醒您,两个 GPU 必须具有相同的矩阵但不同的向量
b