2009-10-06 64 views
12

所以它看起来像多核及其所有相关的复杂功能都在这里。我正在计划一个软件项目,它肯定会从并行性中受益。问题是我没有经验编写并发软件。我在大学学习了它,很好地理解了这些概念和理论,但是从零开始学习建立软件在多处理器上运行的有用经验。并行编程入门

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

有OpenCL,OpenMP,MPI,POSIX线程等等......我应该从哪些技术开始?

这里是我正在考虑几个堆栈的选择,但不知道他们会让我的实验中对我的目标而努力:

  • 我应该得到雪豹,并尝试 得到的OpenCL的OBJ-C程序在我的 笔记本电脑上的ATI X1600 GPU上执行 执行?或
  • 我是否应该得到一个 Playstation,并尝试将C代码编写为 ,并在其六个可用的Cell SPE内核中投掷? 或
  • 我应该用Nvidia卡构建一个Linux机箱 ,并尝试使用CUDA工作 ?

在此先感谢您的帮助。

+1

在Windows下安装VS2010或2012,启动它,进入F#交互式并输入'Array.map((+)3)[| 1..10 |]'。你已经写了一个串行F#程序。然后输入'Array.Parallel.map((+)3)[| 1..10 |]'。你是并行编程。 – 2013-05-12 18:38:59

回答

3

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

+0

你知道GCD是否允许我在X1600 GPU上运行FFT吗? – Talesh 2009-10-07 00:19:17

+0

您希望在这种情况下查看OpenCL,而不是GCD。 GCD用于CPU,OpenCL用于GPU。 – 2009-10-08 03:29:34

2

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

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

+0

我认为CUDA可能是我最好的选择,因为社区有点更加发达,Nvidia似乎致力于HPC以及它的C和Linux。我仍然不知道GPU是否能够运行像FFT这样的东西,或者即使这个问题有意义! – Talesh 2009-10-07 15:55:29

+0

FFT很有意义。请参阅http://www.macresearch.org/cuda-quick-look-and-comparison-fft-performance – 2009-10-10 23:23:08

4

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

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

因为您已经熟悉C/C++,所以我会坚持使用C/C++,并且针对该平台和这些语言还有良好的开源OpenMP和MPI库。

而且,对于我们中的一些人来说,这是一个很大的优势,无论您了解C/C++和MPI(在较小的程度上,OpenMP也如此),您毕业后才能真正为超级计算机服务。

所有主观和议论性的,所以如果你愿意忽略这一点。

+0

Hi Mark, 您是否有几条链接,可以向我发送OpenMP和MPI入门指南? -Talesh -Talesh – Talesh 2009-10-10 23:05:17

3

传统的和必要的'带锁的共享状态'不是您唯一的选择。 Rich Hickey,Clojure的创建者,JVM的Lisp 1,对共享状态提出了非常引人注目的论点。他基本上认为几乎不可能做到正确。您可能需要阅读关于传递ala Erlang actor或STM库的消息。

0

也许你的问题适用于MapReduce范例。它自动处理负载平衡和并发问题,谷歌的研究论文已经是一个经典。你有一个叫做Mars的单机实现,可以在GPU上运行,这对你来说可能很好。还有Phoenix在多核和对称多处理器上运行map-reduce。

0

我会从MPI开始学习如何处理分布式内存。 Pacheco's book是一个老派,但是很好,MPI在OS X上运行良好,现在可以提供相当不错的多核性能。