2009-10-06 7 views
12

マルチコアのように見えますが、それに関連するすべての合併症がここにあります。私は並列処理のメリットがあるソフトウェアプロジェクトを計画しています。問題は、並行ソフトウェアを作成する経験がほとんどないことです。私は大学でそれを勉強し、概念や理論をよく理解していますが、学校以来複数のプロセッサで実行するためのソフトウェアを構築する便利な経験はありません。並列プログラミングで始める

私の質問は、マルチプロセッサプログラミングを始める最良の方法は何ですか? 私はC/C++でのLinux開発とMac OS XでのObj-CでのWindows開発にほとんど慣れています。また、私の計画されたソフトウェアプロジェクトは、FFTと多分多くのデータの浮動小数点比較を必要とします。

OpenCL、OpenMP、MPI、POSIXスレッドなどがあります。どの技術を使い始めるべきですか?

  • は私がへのOpenCLのObj-Cのプログラムを取得Snow Leopardのを取得し、 しようとする必要があります:彼らは私の目標に向かって取り組んでくれた実験をできるようになるならばここで

    はカップルのスタック私は検討していたオプションが、確認されていません ラップトップのATI X1600 GPUで を実行しますか?または
  • プレイステーションを取得し、 に6つの利用可能なCell SPEコアを投げるCコードを書き留めてください。 または
  • Nvidiaカードを使用して Linuxボックスを構築し、 をCUDAで試してみてください。

ご協力いただきありがとうございます。

+1

WindowsでVS2010または2012をインストールして起動し、F#対話に移動し、 'Array.map((+)3)[| 1..10 |]'と入力します。あなたは、シリアルF#プログラムを書いています。次に、 'Array.Parallel.map((+)3)[| 1..10 |]'とタイプします。あなたは並列プログラミングです。 –

答えて

3

OS Xの並列処理に興味がある場合は、技術が公開されており、まもなく多くの普及が見込まれるため、Grand Central Dispatchを確認してください。

+0

GCDでX1600 GPUでFFTを実行できるかどうか知っていますか? – Talesh

+0

その場合、GCDではなくOpenCLを見たいと思っています。 GCDはCPU用、OpenCLはGPU用です。 –

2

パラレルプログラミングを行うには、グラフィックカードやセルのような特別なハードウェアは必要ありません。シンプルなマルチコアCPUは、並列プログラミングのメリットもあります。 C/C++とobjective-cの経験がある方は、それらの1つから始め、スレッドの使用方法を学んでください。行列の乗算や迷路の解決などの簡単な例から始めましょう。あなたはこれらの厄介な問題について学びます(パラレルソフトウェアはHeisenbugsで完全ではありません)。

大規模な多重並列性に移行したい場合は、最も移植性の高いものとしてopenCLを選択します。 Cudaにはまだ大きなコミュニティがあり、ドキュメンテーションやサンプルがたくさんありますが、もう少し簡単ですが、あなたはnvidiaカードでしょう。

+0

私は、コミュニティが少し発展しているので、CUDAはおそらく私の最善の策だと思っています.NvidiaはHPCにもコミットしているようです。そのCとLinux。私はまだGPUがFFTのようなものを動かすことができるかどうか、あるいはその質問が全く意味をなしているかどうか分からない! – Talesh

+0

FFTは非常に意味があります。たとえば、http://www.macresearch.org/cuda-quick-look-and-comparison-fft-performance –

4

最初にOpenMPとMPIを使うことをお勧めしますが、あなたが最初に選択することは重要ではありませんが、(私の意見では:-))、並列コンピューティングへの共有メモリと分散メモリの両方のアプローチを学びたいと思います。

まず、OpenCL、CUDA、POSIXスレッドを避けることをお勧めします。まず、並列アプリケーションの基本を十分に理解してから、サブストラクチャに取り掛かります。たとえば、MPIでブロードキャスト通信を使用することをスレッドでプログラムするよりもはるかに簡単です。

あなたのMacにはすでに慣れ親しんでおり、そのプラットフォームとそれらの言語用のオープンソースのOpenMPおよびMPIライブラリがありますので、私はあなたのMacのC/C++に固執します。

そして、私たちの中には、C/C++とMPIについて学んだこと(それほどではありませんが、OpenMPでもそうです)が本当のスーパーコンピュータに卒業したときにうまくいきます。

すべての主観的で議論の余地がありますので、ご希望の場合は無視してください。

+0

を参照してください。Hi Mark、 OpenMPとMPIを使い始めるためのリンクがありますか? -allet -talesh – Talesh

3

伝統的で不可欠な「ロックされた状態を共有する」というのはあなたの唯一の選択肢ではありません。 JVMのLispであるClojureの作成者であるRich Hickeyは、共有状態に対して非常に説得力のある議論をしています。彼は基本的に正しいことはほとんど不可能だと主張する。 ErlangのアクターやSTMライブラリを渡すメッセージを読みたいかもしれません。

0

多分、あなたの問題はMapReduceパラダイムに適しています。ロードバランシングと並行処理の問題は自動的に処理されますが、Googleの研究論文は既に古典的なものです。 GPUで動作するMarsという単一マシンの実装がありますが、これはうまくいくかもしれません。また、マルチコアと対称型マルチプロセッサでmap-reduceを実行するPhoenixもあります。

0

私は、分散メモリの扱い方を学ぶにつれ、MPIから始めます。 Pacheco's bookはおいしいですが、MPIはOS X上ですぐに動作し、かなり良いマルチコア性能を発揮します。

関連する問題