12

したがって、マルチコアのように見え、それに関連するすべての複雑さがそのまま残ります。私は、並列処理から確実に恩恵を受けるソフトウェア プロジェクトを計画しています。問題は、並行ソフトウェアを書いた経験がほとんどないことです。私は大学でそれを学び、概念と理論を非常によく理解していますが、学校以来、複数のプロセッサで実行するソフトウェアを構築するのに役立つ経験はありません。

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

OpenCL、OpenMP、MPI、POSIX スレッドなどがあります。どのテクノロジから始めるべきですか?

以下に、私が検討しているいくつかのスタック オプションを示しますが、それらが私の目標に向けて実験できるかどうかはわかりません。

  • Snow Leopard を入手して、ラップトップの ATI X1600 GPU で OpenCL Obj-C プログラムを実行できるようにする必要がありますか? また
  • プレイステーションを手に入れて、利用可能な 6 つの Cell SPE コアを処理する C コードを書いてみるべきでしょうか? また
  • Nvidia カードを搭載した Linux ボックスを構築し、CUDA で作業してみるべきですか?

よろしくお願いします。

4

7 に答える 7

4

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

最初は OpenCL、CUDA、POSIX スレッドを避けることをお勧めします。サブ構造と格闘する前に、並列アプリケーションの基礎を十分に理解しておいてください。たとえば、ブロードキャスト通信をスレッドでプログラムするよりも、MPI でブロードキャスト通信を使用する方がはるかに簡単です。

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

C/C++ と MPI について何を学んでも (それほどではありませんが、OpenMP にも当てはまります)、実際のスーパーコンピューターを卒業するときに役に立ちます。

すべて主観的で議論の余地があるため、必要に応じてこれを無視してください。

于 2009-10-08T12:22:24.470 に答える
3

従来の必須の「ロック付きの共有状態」が唯一の選択肢ではありません。JVM用のLisp1であるClojureの作成者であるRichHickeyは、共有状態に対して非常に説得力のある議論をしています。彼は基本的に、正しく理解することはほとんど不可能であると主張しています。メッセージパッシングalaErlangアクターまたはSTMライブラリーを読みたいと思うかもしれません。

于 2009-10-10T06:06:47.523 に答える
3

OS X での並列処理に興味がある場合は、 Grand Central Dispatchを確認してください。特に、この技術はオープンソース化されており、すぐに広く採用される可能性があります。

于 2009-10-06T22:57:49.040 に答える
2

Erlang を学ぶべきです。とても良いです。

于 2009-10-06T22:38:26.340 に答える
2

並列プログラミングを行うために、グラフィック カードやセルなどの特別なハードウェアは必要ありません。シンプルなマルチコア CPU も、並列プログラミングから利益を得ることができます。C/C++ と Objective-C の経験がある場合は、それらのいずれかから始めて、スレッドの使用方法を学んでください。行列の乗算や迷路の解法などの簡単な例から始めれば、それらの厄介な問題について学ぶことができます (並列ソフトウェアは非決定論的であり、ハイゼンバグでいっぱいです)。

大規模なマルチパラレル化を行いたい場合は、最も移植性の高い openCL を選択します。Cuda にはまだ大きなコミュニティがあり、より多くのドキュメントとサンプルがあり、少し簡単ですが、nvidia カードが必要です。

于 2009-10-07T08:27:59.967 に答える
0

分散メモリの扱い方を学ぶときは、MPIから始めます。Pachecoの本は古き良きものですが、優れたものであり、MPIはOS Xですぐに使用でき、かなり優れたマルチコアパフォーマンスを提供します。

于 2010-07-01T16:43:05.447 に答える
0

おそらく、あなたの問題はMapReduceパラダイムに適しています。負荷分散と同時実行の問題を自動的に処理します。Google の研究論文はすでに古典的です。GPU で実行される Mars という単一マシンの実装がありますが、これは問題なく動作する可能性があります。マルチコアおよび対称型マルチプロセッサで map-reduce を実行する Phoenix もあります。

于 2009-10-16T10:14:57.270 に答える