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

时间:2011-09-22 17:34:33

标签: parallel-processing gpu matlab

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

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

任何帮助,建议,方向都会非常感激!

谢谢!

3 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:-2)

如果你用CUDA编写它,它可以保证在芯片级并行运行,而不是MATLAB对非并行架构的最佳猜测,并尽最大努力让它并行运行。

有点像喝新鲜的山区水径流而不是购买过滤水。选择纯粹的解决方案。

相关问题