MATLAB并行计算工具箱 - 并行化 vs GPU?

10
我正在与一个想要加速Matlab代码的人合作。他们目前尝试将所有代码转换为CUDA,以使其在CPU上运行。我认为使用Matlab的并行计算工具箱来加速这一过程并在拥有Matlab分布式计算工具箱的集群上运行,可以提高速度,让我能够在多个不同的工作节点上运行。现在,在并行计算工具箱的一部分中,你可以使用类似于GPUArray等工具。但是,我对此如何工作感到困惑。使用像parfor(并行化)和gpuarray(gpu编程)这样的东西是否兼容?我可以同时使用两者吗?在分割到不同的工作节点(并行化)的同时,还可以利用每个工作节点上可用的GPU吗?
他们认为仍然值得探索将所有Matlab代码转换为CUDA代码并在多个GPU机器上运行所需的时间,但我认为正确的方法是使用已经内置在Matlab中的功能。
非常感谢您提供任何帮助、建议或指导!
谢谢!

你可以考虑尝试使用Jacket而不是gpuArrays。我没有听说过有人对gpuArrays的性能感到满意,原因在这里:http://accelereyes.com/compare - arrayfire
3个回答

11
使用parfor时,您实际上是将for循环划分为任务,每个循环迭代一个任务,并将这些任务拆分为由多个工作器并行计算的任务,其中每个工作器可以被视为没有交互式GUI的MATLAB会话。您配置集群以在每个节点上运行指定数量的工作器(通常,您会选择在该节点上运行与可用处理器核心数相等的工作器数量)。
另一方面,gpuarray表示您希望使矩阵可供GPU处理。在幕后,MATLAB将数据从主内存调度到图形板的内部存储器中。某些MATLAB函数(文档中有列表)可以在gpuarrays上运行,计算发生在GPU上。
两种技术之间的关键区别在于parfor计算发生在具有直接访问主内存的CPU节点上。 CPU内核通常具有较高的时钟速率,但在CPU集群中的CPU内核通常比GPU内核少。单独来看,GPU内核比典型的CPU内核慢,并且它们的使用需要将数据从主内存传输到视频内存,然后再传回主内存,但在集群中它们有更多的内核。据我所知,混合方法应该是可能的,其中您有一组PC群集,每个PC都有一个或多个Nvidia Tesla板,并且您同时使用parfor循环和gpuarrays。然而,我还没有试过这种方法。

5
如果你主要关注模拟,GPU处理是完美的选择。但如果你想分析(大)数据,请选择并行化。原因是,如果不需要来回复制数据,GPU处理才比CPU处理更快。在模拟的情况下,你可以在GPU上生成大部分数据,然后只需要将结果复制回来。如果你尝试在GPU上处理更大的数据,很可能会遇到内存不足的问题。 如果你有大数据结构并且电脑CPU有两个以上核心,则并行化非常好用。

-2

如果您在CUDA中编写代码,它将保证在芯片级别并行运行,而不是使用MATLAB的非并行体系结构的最佳猜测,并尽力使其并行运行。

就像喝新鲜的山泉水流出而不是购买过滤水一样。选择纯粹的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接