在不同体系结构上使用并行计算的最有效方法

时间:2012-10-02 22:33:47

标签: parallel-processing opencl mpi grand-central-dispatch

我打算写一些东西来利用我家里的许多设备。

基本上我的目标是使用笔记本电脑执行计算,并使用我的主桌面计算机添加更多电量(并更快地完成任务)。我使用细胞模拟和化学相互作用,所以对我来说,充分利用我家里的所有东西都是很好的。

我主要使用的是OSX,所以我需要一些可能适合该操作系统的东西。我可以用Objective-C,C和C ++编写代码。

我知道GCD,OpenCL和MPI,但我不知道该走哪条路。

我计划不使用我桌面的全部功能,而只使用一些可用内核(这样我就可以继续在桌面上完成其他不太耗费资源的任务)。特别是我想使用显卡功能(它是ATI卡,所以没有CUDA),因为我所做的主要是电子表格,字和Xcode编码,并且图形卡资源在这种情况下基本上不使用。

上述3中是否有一组特定的库或API,允许我有选择地路由任务,并在不将控制完全留给编译器的情况下在另一台机器上使用资源?我听说GCD很棒,但它对块的执行位置控制非常有限,而MPI则处于频谱的另一端...... OpenCL似乎处于中间位置。

在深入了解其中一项技术之前,我想知道哪种技术最适合我的需求;我确信其他一些研究人员已经成功地使用并行计算来实现我想要实现的目标。

提前致谢。

2 个答案:

答案 0 :(得分:0)

MPI更适用于科学计算大规模许多处理器许多节点不适用于周末项目,对于您所描述的我建议使用OpenCl或任何一个更分散的AMQP协议系列框架,例如zeromq或者是RabbitMQ,或OpenCl和AMQP的组合,甚至更简单的考虑多线程,我会建议使用OpenMP。我不确定你是在寻找直接求解器还是并行函数,但是对于你可以在网上找到的gpu和cpu,还有许多存在

答案 1 :(得分:0)

很抱歉,但这个问题根本无法有意义地回答。可以肯定的是,我可以抛出一系列流行语,描述各种技术,如GCD,OpenMPI,OpenCL,CUDA以及任何其他技术,允许一个人在多个核心上运行单个程序,在不同的协作计算机上运行多个程序,或者是一个分布在CPU和GPU上的单个程序,听起来你已经了解了很多这样的程序,所以我甚至不会在列出流行语中增加太多价值。

在不知道你想要解决的问题的全部细节的情况下简单地抛弃这些术语,但是,有点像说你知道英语,法语和一点德语,所以肯定 - 无论如何 - 混合它们所有这些都在一个段落中,而不了解目标受众!类似地,您可以在任意数量的不同处理元素中以任意数量的方式并行化给定计算,但是并行化是否实际上是 win 将完全取决于算法,它的数据依赖性,每个合理的“工作块”预计会有多少计算,以及它是否可以在具有足够数值精度的GPU上执行,以及许多其他因素。您选择的技术越复杂,这些因素就越重要,并且生成的代码实际上的可能性也大于其单线程单机对应的可能性。 IPC开销和数据复制可以并且经常会淹没可能通过尝试天真地并行化某些东西而实现的所有增益,然后在其上添加额外的开销,从而导致净损失。这就是为什么能够有意义地完成这种工作的工程师需求如此之高。 :)

在不知道任何关于你的计算的情况下,我会继续迈步。首先尝试一个简单的多处理器框架,如GCD(已经内置在OS X中,不需要额外的依赖项),并弄清楚如何将代码分解,以便它可以有效地使用单个机器上的所有可用内核。一旦你了解了胜利的位置(如果有任何 - 如果多线程没有帮助,多机器并行化几乎肯定也不会),尝试在几台机器上设置几个计算实例一个简单的IPC模型,允许分发工作。已经考虑了多个线程的算法因此,在多台机器上进一步推广该方法应该相对简单(尽管它注意到两者不是同一个问题,并且无论哪种方式,你仍然想要使用所有的在任何给定的目标机器上都可以使用核心,因此这两个挑战都是互补的和正交的。)