12

所以看起来多核及其所有相关的并发症都将继续存在。我正在计划一个肯定会从并行性中受益的软件项目。问题是我几乎没有编写并发软件的经验。我在大学学习过它,并且很好地理解了概念和理论,但是从学校开始,我在构建可在多个处理器上运行的软件方面的有用经验为零。

所以我的问题是,开始多处理器编程的最佳方式是什么? 我主要熟悉 Mac OS X 上的 C/C++ 和 Obj-C 中的 Linux 开发,Windows 经验几乎为零。此外,我计划的软件项目将需要对大量数据进行 FFT 和可能的浮点比较。

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

以下是我正在考虑的几个堆栈选项,但不确定它们是否会让我尝试朝着我的目标努力:

  • 我应该获得 Snow Leopard 并尝试让 OpenCL Obj-C 程序在我的笔记本电脑上的 ATI X1600 GPU 上运行吗?或者
  • 我是否应该获得一个 Playstation 并尝试编写 C 代码以跨越其六个可用的 Cell SPE 内核?或者
  • 我应该用 Nvidia 卡构建一个 Linux 机器并尝试使用 CUDA 吗?

在此先感谢您的帮助。

4

7 回答 7

4

我建议最初使用 OpenMP 和 MPI,不确定您首先选择哪个重要,但您绝对应该(在我看来 :-))学习并行计算的共享和分布式内存方法。

我建议首先避免使用 OpenCL、CUDA、POSIX 线程:在开始处理子结构之前,先打好并行应用程序的基础知识。例如,学习在 MPI 中使用广播通信比在线程中编程要容易得多。

我会在你的 Mac 上坚持使用 C/C++,因为你已经熟悉了它们,并且有适用于该平台和这些语言的优秀开源 OpenMP 和 MPI 库。

而且,对于我们中的一些人来说,这是一个很大的优势,无论您学习 C/C++ 和 MPI(在较小程度上也适用于 OpenMP),当您毕业到真正的超级计算机时,都会为您提供很好的服务。

所有主观和争论,所以如果你愿意,请忽略这一点。

于 2009-10-08T12:22:24.470 回答
3

如果您对 OS X 中的并行性感兴趣,请务必查看Grand Central Dispatch,尤其是因为该技术已经开源并且可能很快会得到更广泛的采用。

于 2009-10-06T22:57:49.040 回答
3

传统的命令式“带锁的共享状态”不是您唯一的选择。用于 JVM 的 Lisp 1 Clojure 的创建者 Rich Hickey 提出了一个非常有说服力的反对共享状态的论点。他基本上认为,要正确几乎是不可能的。您可能想阅读消息传递 ala Erlang 演员或 STM 库。

于 2009-10-10T06:06:47.523 回答
2

您不需要像显卡和单元这样的特殊硬件来进行并行编程。您的简单多核 CPU 也将从并行编程中受益。如果您有使用 C/C++ 和 Objective-c 的经验,请从其中之一开始并学习使用线程。从矩阵乘法或迷宫求解之类的简单示例开始,您将了解那些令人讨厌的问题(并行软件是非确定性的并且充满了 Heisenbugs)。

如果你想进入大规模的多重并行,我会选择 openCL,因为它是最便携的。Cuda 仍然拥有更大的社区、更多的文档和示例,并且更容易一些,但您需要一张 nvidia 卡。

于 2009-10-07T08:27:59.967 回答
2

你应该学习一些 Erlang。非常好。

于 2009-10-06T22:38:26.340 回答
0

也许您的问题适合MapReduce范式。它自动处理负载均衡和并发问题,谷歌的研究论文已经是经典。你有一个在 GPU 上运行的名为 Mars 的单机实现,这对你来说可能工作得很好。还有 Phoenix 在多核和对称多处理器上运行 map-reduce。

于 2009-10-16T10:14:57.270 回答
0

当您学习如何处理分布式内存时,我将从 MPI 开始。Pacheco 的书很老,但是很好,而且 MPI 在 OS X 上开箱即用运行良好,现在提供了相当不错的多核性能。

于 2010-07-01T16:43:05.447 回答