2011-09-22 85 views
7

我正在和一些有一些MATLAB代码的人一起工作,他们希望加快速度。他们目前正试图将所有这些代码转换成CUDA,以便让它在CPU上运行。我认为使用MATLAB的并行计算工具箱加快速度,并在具有MATLAB的分布式计算工具箱的集群上运行它会更快,从而允许我在多个不同的工作节点上运行它。现在,作为并行计算工具箱的一部分,您可以使用things like GPUArray。但是,我很困惑这将如何工作。正在使用诸如parfor(并行化)和gpuarray(gpu编程)之类的东西相互兼容吗?我可以同时使用吗?是否可以在不同的工作节点上进行拆分(并行化),同时还可以利用每个工人可用的GPU?MATLAB Parallel Computing Toolbox - Parallization vs GPU?

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

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

谢谢!

+0

你可能会考虑尝试使用Jacket来代替gpuArrays。我没有听说任何人对gpuArrays的性能感到满意,因为这些原因:http://accelereyes.com/compare – arrayfire

回答

8

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

另一方面,gpuarray向MATLAB表明您想要使矩阵可供GPU处理。在引擎盖下,MATLAB将数据从主存储器编组到显卡的内部存储器。某些MATLAB函数(文档中有这些函数的列表)可以在gpu数组上运行,并且计算发生在GPU上。

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

-2

如果你在CUDA中编写它,它将保证在芯片级上并行运行,而不是使用MATLAB对非并行体系结构的最佳猜测以及尽最大努力让它并行运行。

有点像喝新鲜的山水溢出与买过滤水。去纯粹的解决方案。

3

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