2

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

基本上我的目标是使用笔记本电脑来执行计算,并使用我的主台式电脑来增加更多的力量(并更快地完成任务)。我从事细胞模拟和化学相互作用的工作,所以对我来说,利用我在家中可用的所有东西会很棒。

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

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

我计划不使用我的桌面的全部功能,而只使用一些可用的内核(这样我就可以继续在桌面上工作,做其他资源不那么密集的任务)。我特别喜欢使用显卡的能力(它是 ATI 卡,所以没有 CUDA),因为我所做的主要是电子表格、文字和 Xcode 编码,而显卡资源在那种情况下基本上没有使用。

在前面提到的 3 个中,是否有一组特定的库或 API 可以让我有选择地路由任务,并在另一台机器上使用资源,而不会将控制权完全交给编译器?我听说 GCD 很棒,但它对块的执行位置的控制非常有限,而 MPI 则处于光谱的另一端……OpenCL 似乎处于中间位置。

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

提前致谢。

4

2 回答 2

0

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

于 2012-10-02T22:43:15.917 回答
0

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

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

在不了解您的计算的情况下,我会步步为营。首先尝试一个简单的多处理器框架,比如 GCD(它已经内置在 OS X 中,不需要使用额外的依赖项),并弄清楚如何分解代码,以便它可以有效地使用单台机器上的所有可用内核. 一旦你知道了胜利在哪里(如果有的话——如果多线程没有帮助,多机并行化几乎肯定也不会),尝试在几台机器上设置几个计算实例一个简单的 IPC 模型,允许分发工作。已经为多个线程考虑了您的算法,

于 2012-10-04T00:37:47.930 回答