MATLAB并行计算工具箱 - Parallization与GPU?

Die*_*ego 8 parallel-processing matlab gpu

我正在和一些他们希望加速的MATLAB代码合作.他们目前正在尝试将所有这些代码转换为CUDA,以使其在CPU上运行.我认为使用MATLAB的并行计算工具箱加快速度,并在具有MATLAB的分布式计算工具箱的集群上运行它会更快,允许我在几个不同的工作节点上运行它.现在,作为并行计算工具箱的一部分,您可以使用GPUArray之类的东西.但是,我很困惑这是如何工作的.使用像parfor(并行化)和gpuarray(gpu编程)这样的东西是否相互兼容?我可以同时使用吗?可以在不同的工作节点(并行化)之间拆分某些东西,同时还可以使用每个工作者可用的任何GPU吗?

他们认为仍然值得探索将所有matlab代码转换为cuda代码以在具有多个GPU的机器上运行所花费的时间......但我认为正确的方法是使用已经内置在MATLAB中的功能.

任何帮助,建议,方向将非常感谢!

谢谢!

Mat*_*att 10

当您使用parfor时,您实际上将for循环划分为任务,每个循环迭代一个任务,并将这些任务拆分为多个工作人员并行计算,其中每个工作人员可以被认为是没有交互式GUI的MATLAB会话.您将群集配置为在群集的每个节点上运行指定数量的工作线程(通常,您将选择运行与该节点上可用处理器核心数相等的多个工作线程).

另一方面,gpuarray向MATLAB表明你想让矩阵可供GPU处理.在引擎盖下,MATLAB将数据从主存储器编组到图形卡的内部存储器中.某些MATLAB函数(文档中有它们的列表)可以在gpuarrays上运行,并且计算在GPU上进行.

这两种技术之间的主要区别在于,parfor计算发生在集群节点的CPU上,可直接访问主存储器.CPU内核通常具有高时钟速率,但CPU群集中的CPU内核通常比GPU内核更少.单独地,GPU核心比典型的CPU核心慢,并且它们的使用要求数据从主存储器传输到视频存储器并再次传输,但是在集群中有更多的核心.据我所知,混合方法应该是可能的,其中你有一组PC,每台PC有一个或多个Nvidia Tesla板,你使用parfor循环和gpuarray.但是,我还没有机会尝试这个.


mem*_*elf 5

如果您主要对模拟感兴趣,GPU 处理是完美的选择。但是,如果您想分析(大)数据,请使用并行化。这样做的原因是,如果您不必来回复制数据,GPU 处理仅比 CPU 处理快。在模拟的情况下,您可以在 GPU 上生成大部分数据,只需将结果复制回来。如果您尝试在 GPU 上处理更大的数据,您将经常遇到内存不足的问题。如果您的计算机 CPU 具有大数据结构和 2 个以上的内核,则并行化非常有用。