私はマルチコア プログラミング (言語固有ではない) に取り組みたいと考えており、この分野を探索するためにどのハードウェアを推奨できるか疑問に思いました。私の目的は、既存のデスクトップをアップグレードすることです。
8 に答える
可能であれば、できればクアッドコアチップを搭載したデュアルソケットマシンを入手することをお勧めします。確かにシングル ソケット マシンを入手できますが、デュアル ソケットを使用すると、コア数が増えるにつれて悪化する NUMA メモリの影響が見られるようになります。
なんで気にするの?現在、マルチコア開発者が直面している 2 つの大きな問題があります。
プログラミング モデル 並列プログラミングは難しく、(現在) これを回避する方法はありません。クアッドコア システムでは、実際の同時実行性とすべての一般的なパラダイム (スレッド、UPC、MPI、OpenMP など) を試してみることができます。
メモリ 複数のスレッドを持つようになると、リソースの競合が発生し、メモリの壁がますます大きくなります。arstechnicaの最近の記事では、Sandia での (非常に予備的な) 調査の概要が説明されており、現在の傾向が続けば、これがどれほど悪いものになるかが示されています。マルチコア マシンは、すべてを供給し続ける必要があり、そのためには、人々がメモリ システムに精通している必要があります。デュアルソケットは NUMA をミックスに追加します (少なくとも AMD マシンでは)。これにより、この困難な道を歩み始めることができます。
マルチソケット マシンのパフォーマンスの不一致について詳しく知りたい場合は、このテーマに関するテクニカル レポートもご覧ください。
また、CUDA 対応の GPU を搭載したシステムを入手することを提案する人もいますが、これもマルチスレッド プログラミングを始めるのに最適な方法だと思います。上記のものよりも低レベルですが、可能であれば、それらのいずれかをマシンに投げてください。新しい Portland Group コンパイラは、CUDA を使用したループの最適化を暫定的にサポートしているため、CUDA を自分で学びたくない場合でも GPU をいじることができます。
クアッドコア。これにより、同時プロセス数が 2 を超える問題を実行できるため、問題が自明でなくなることがよくあります。
また、まったくのオタク squeeのために、素敵な NVidia カードを手に取り、CUDA API を使用します。お金があれば、ケーブルと拡張スロットを介してメイン コンピューターに接続するスタンドアロンの CUDA ワークステーションがあります。
それはあなたが何をしたいかによります。
マルチスレッド プログラミングの基礎を学びたい場合は、既存のシングルコア PC で学習できます。(2 つのスレッドがある場合、OS はシングルコア PC でそれらを切り替えます。その後、デュアルコア PC に移行すると、2 倍のスピードアップのために、それらは自動的に別々のコアで並列に実行されます)。これは無料であるという利点があります!短所は、スピードアップが見られないこと (実際、並列実装はオーバーヘッドのためにおそらくわずかに遅くなる) と、バグのあるコードが動作する可能性がわずかに高くなることです。
ただし、シングルコア ボックスでマルチスレッド プログラミングを学習することはできますが、デュアルコア (またはハイパースレッディング) CPU は非常に役立ちます。
書いているコードのストレス テストを実際に行いたい場合は、「青いタキシード」が言うように、余裕のある限り多くのコアを使用し、可能であればハイパースレッディングも取得する必要があります。
x86 マルチコアとはまったく異なる領域であるグラフィックス カードで実行するためのアルゴリズムについて学びたい場合は、CUDA を入手して、それをサポートする通常の nVidia グラフィックス カードを購入してください。
CUDAをいじってみることができます。無料で、それほど難しくなく、最近の NVIDIA カードで動作します。
または、PlayStation 3 とLinux SDKを入手して、Cell プロセッサのプログラミング方法を理解することもできます。Cell BE 開発の次に安価なオプションは、PS3 よりも桁違いに高価であることに注意してください。
最後に、Core Quad または Quad-core Opteron (Asus またはその他の評判の良いメーカーから良いものを入手してください) を採用する最新のマザーボードでは、合理的な金額でマルチコア PC システムを試すことができます。
マルチスレッド/コア プログラミングの難しい点は、まったく新しいワームの可能性を広げることです。直面するバグは、通常、慣れ親しんだものではありません。競合状態は、噛み付くまで何年も休眠状態のままになる可能性があり、主流の言語コンパイラは何の助けにもなりません。通常、最も不思議な条件下で、1日/1週間/1か月/1年に1回だけ発生するランダムなデータおよび/またはクラッシュが発生します...
幸いなことに、1 つのことは依然として真実です。コンピューターが示す同時実行性が高いほど、より多くの競合状態が明らかになるということです。
したがって、マルチスレッド/コア プログラミングに真剣に取り組んでいる場合は、できるだけ多くの CPUコアを使用してください。ハイパースレッディングも SMT も、複数のコアが提供するレベルの同時実行を許可しないことに注意してください。
最終的に何をしたいのかにもよりますが、おそらく現在のシングルコアシステムだけで十分に対応できるでしょう。マルチコア プログラミングは基本的にマルチスレッド プログラミングであり、シングルコア チップ上で確実に実行できます。
私が学生だったとき、私たちのプロジェクトの 1 つは、C 用の malloc ライブラリのスレッド セーフな実装を構築することでした。シングル コア プロセッサ上でさえ、マルチスレッド プログラミングを始めたいという私の欲求を癒すには十分すぎるほどでした。あなたがたくさんのお金を使うことを考える前に、私はそのような小さなことを試してみます.
少なくともクアッドコア プロセッサをお勧めします。
クアッドコア プロセッサにアップグレードするという他の意見に同意します。私は ASUS マザーボードの大ファンでもあります (P5Q Pro は Core2Quad および Core2Duo プロセッサに最適です)。
マルチコア プログラミングの利点は、より多くのリソースを使用して作業を高速化できることです。マルチコア プログラミングに真剣に取り組んでいるなら、クアッドコア プロセッサを絶対に手に入れます。Core2Duo や Core2Quad を利用するために書かれたものは新しいアーキテクチャでよりよく動作するため、マルチコア処理を利用するために Intel から新しい i7 アーキテクチャを取得する必要はないと思います。
マルチコア プログラミングに手を出すつもりなら、私は優れた Core2Duo プロセッサを手に入れるでしょう。コアの数だけでなく、コアがジョブを処理する速度も重要であることを忘れないでください。マルチコア プログラムを使用している場合でも、4 GHz で実行されている Core2Duo は、2.4 GHz で実行されている Core2Quad よりも高速にジョブを完了します。
これが役立つかどうか教えてください!JFV