开始并行编程

12

看起来多核处理器及其相关的复杂性似乎已经成为了不可避免的趋势。我正在计划一个软件项目,这个项目肯定会从并行计算中获益。问题是,我很少有编写并发软件的实际经验。虽然我在大学里学过这个知识,并且对相关概念和理论非常熟悉,但是自从毕业后就没有在多处理器上构建过软件。

那么我的问题是,如何最好地开始多处理器编程? 我比较熟悉使用C/C++和Obj-C在Mac OS X上进行Linux开发,但几乎没有Windows的经验。另外,我的计划中的软件项目需要对大量数据进行FFT和可能的浮点数比较。

有OpenCL、OpenMP、MPI、POSIX线程等技术...应该从哪些技术入手呢?

以下是我正在考虑的几个选项,但不确定它们是否能帮助我实现目标:

  • 我应该获取Snow Leopard,并尝试让OpenCL Obj-C程序在我的笔记本电脑上的ATI X1600 GPU上运行吗?或者
  • 我应该获取Playstation,并尝试编写C代码,以利用其六个可用的Cell SPE核心?或者
  • 我应该构建一个Linux桌面系统,安装Nvidia显卡,并尝试使用CUDA开发?

提前感谢您的帮助。


2
安装VS2010或2012在Windows下,启动它,进入F#交互式界面,输入Array.map ((+) 3) [|1..10|]。这样你就写了一个串行的F#程序。然后输入Array.Parallel.map ((+) 3) [|1..10|]。这样你就进行了并行编程。 - J D
7个回答

4
我建议一开始使用OpenMP和MPI,不确定先选择哪个更好,但是你绝对应该想要(在我看来 :-))学习共享和分布式内存的并行计算方法。
我建议一开始避免使用OpenCL、CUDA、POSIX线程:在开始处理子结构之前,先扎实掌握并行应用程序的基础知识。例如,在MPI中学习使用广播通信比在线程中编写它们容易得多。
由于你已经熟悉C/C++,所以我建议在Mac上继续使用它们,并且这些语言和平台都有很好的开源OpenMP和MPI库。
对于我们中的一些人来说,无论你学习C/C++和MPI的什么内容(在较小程度上也适用于OpenMP),都将为你进入真正的超级计算机领域打下坚实的基础。
以上纯属主观看法和争议性观点,如果你愿意可以忽略它们。

嗨,马克,你能给我发几个链接来开始学习OpenMP和MPI吗?-Talesh-Talesh - Talesh

3
如果您对OS X中的并行性感兴趣,请务必查看Grand Central Dispatch,特别是由于该技术已开源,可能很快会得到更广泛的采用。请参考此处了解更多信息。

你知道GCD是否允许我在X1600 GPU上运行FFT吗? - Talesh
在这种情况下,您应该看OpenCL,而不是GCD。GCD用于CPU,OpenCL用于GPU。 - Warren Young

3
传统和强制性的“锁定共享状态”并不是你唯一的选择。Clojure的创造者Rich Hickey,一个运行在JVM上的Lisp 1,对共享状态提出了非常有力的反驳。他基本上认为这几乎是不可能做到正确。您可能想要阅读Erlang actors或STM库等消息传递的相关内容。

2

2
您不需要像图形卡和Cells这样的特殊硬件来进行并行编程。您简单的多核CPU也可以从并行编程中获益。如果您有C/C++和objective-c的经验,请从其中一个开始学习如何使用线程。从矩阵乘法或迷宫解决等简单示例开始,您将了解到那些麻烦的问题(并行软件是不确定性的,并充满了Heisenbugs)。
如果您想进入大规模多重并行计算,我建议选择openCL,因为它是最可移植的。CUDA仍然拥有更大的社区、更多的文档和示例,并且稍微容易一些,但您需要nvidia卡。

我认为CUDA可能是我的最佳选择,因为它的社区更加发达,英伟达似乎致力于高性能计算,此外...它是C语言和Linux系统。我仍然不知道GPU是否能够运行FFT等内容,甚至不确定这个问题是否有意义! - Talesh
FFT非常有意义。例如,请参见http://www.macresearch.org/cuda-quick-look-and-comparison-fft-performance - Matthias Winkelmann

0

如果你想学习如何处理分布式内存,我建议从MPI开始。Pacheco的书虽然有些老旧,但仍是一本好书。现在,在OS X上,MPI可以直接使用,并且可以提供相当不错的多核性能。


0
也许你的问题适合 MapReduce 范式。它自动处理负载平衡和并发问题,Google 的研究论文已经成为经典。你可以使用单机实现的 Mars,在 GPU 上运行,这可能对你很有效。还有 Phoenix,它在多核和对称多处理器上运行 map-reduce。

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