なの登場によりマルチコア構築には影響としてソフトウェア開発?
質問
としてのソフトウェア開発に関しては、どの高度なプログラミング言語をお使いいただくことによってがんに適切な注目のオムニ存在のマルチコアコンピュータ書いてい主に経常と非要求の厳しい用途では、しかしすることが重要だと思い知り合いを変更する必要があるプロセスを統合してシームで言語をマスター。
私の質問で:
How to deal with increasing multicore presence in day-by-day hacking?
解決
ハーブサッターは、2005年にそれについて書いた:フリーランチは終わった:に向けて基本的な電源を入れソフトウェアでの同時実行する
他のヒント
ほとんどの問題は、多くのCPU時間を必要としません。本当に、単一のコアは、多くの目的のために十分な非常に高速です。あなたのプログラムが遅すぎる見つける行うと、最初にそれをプロファイルし、アルゴリズム、アーキテクチャ、およびキャッシングのあなたの選択を見てください。それが十分であなたを取得していない場合は、別々のプロセスに問題を分割してみてください。多くの場合、これは、障害の分離のために、単純にやって、あなたは、各プロセスのCPUとメモリの使用状況を把握することができますように価値があります。また、通常、各プロセスは、特定のコア上で実行され、プロセッサキャッシュを有効に利用すること、あなたは一貫性のあるキャッシュラインを保つことの実質的なパフォーマンスのオーバーヘッドを苦しまなければならないだろうします。あなたは、マルチプロセス設計のために行くと、まだ問題を見つけた場合、あなたが持っているマシンで取得するよりも多くのCPU時間を必要とする、あなたはよくクラスタ上で実行、それを拡張するために配置されています。
がありますが、同じアドレス空間内で複数のスレッドを必要とする状況がありますが、スレッドが権利を取得するために本当にハードであることを注意してください。特に非安全な言語での競合状態は、時々、デバッグに数週間を要します。多くの場合、単にトレースしたり、デバッガの下で実行されている追加することで問題を隠蔽するのに十分なタイミングを変更します。単にどこでもロックを置くことは、多くの場合、あなたは、オーバーヘッド、時にはあなたが本当にあなたが望んでいた同時実行性の利点を得ることはありませんので、多くのロック競合のロックの多くを得ることを意味します。あなたがロック権利を持っている場合でも、あなたはその後、キャッシュ・コヒーレンシのためのチューニングをプロファイルする必要があります。最終的に、あなたは本当に調子いくつかの非常に並行コードは、おそらく現在のマルチスレッドライブラリに比べてロックフリー構造と、より複雑なロッキングスキームを見てしまいますしたい場合。
並行処理の利点、および制限(例えば、アムダールの法則)を学びます。
だから、可能な場合は、オープンになるだろう、より高いパフォーマンスのための唯一のルートを利用することができます。そこに簡単なアプローチ(先物およびタスク・ライブラリー)で起こった革新的な多くの作業があり、古い作品は(関数型言語と不変のデータ)。
再発見されていますフリーランチは終わったが、それが悪用するものは何もないことを意味するものではありません。
一般的には、スレッドと非常に友好的になります。これは、並列化のためのひどい仕組みだが、それは我々が持っているものです。
あなたが.NETで動作しない場合は、、パラレル拡張機能を見てください。彼らはあなたが簡単に多くの並列プログラミングのタスクを達成することができます。
ちょうど1つのコアあなたのコードを並列化を検討すべきであることをより多くの恩恵を受けること。複数のスレッド、不変の種類、および同期の最小値は、あなたの新しい友達です。
私はそれはあなたが書いているアプリケーションの種類に依存すると思います。
アプリケーションのいくつかの種類は、彼らが他の人その後、mutliコアCPU上で実行しているという事実をより多くの利益をもたらします。 お使いのアプリケーションがマルチコア実際の恩恵を受けることができる場合は、パラレルに行く準備ができなければなりません。 フリーランチは終わりました。それは、次のとおりです。過去に、新しいCPUがリリースされたときにアプリケーションが速くなり、あなたはその余分な速度を得るためにあなたのアプリケーション内のすべての努力をする必要はありませんでした。 今、マルチコアCPUの提供機能を利用するためには、アプリケーションがそれを利用できることを確認しました。つまり:あなたは、マルチスレッド/並行して実行できるタスクを参照してきたが、これは、テーブルにいくつかの問題をもたらします...
(プラットフォームに応じて)アーラン/ F#の学習
私は、同じ質問をしてきた、と答えは、「それが依存します」。あなたのジョーWinformsのであれば、そうでないかもしれないそんなに。はい、パフォーマンスでなければならないあなたの文章コードの場合。私は並列プログラミングで見ることができる最大の問題の一つはこれです:何かがparallizedすることができない、とあなたはうそととにかく並行して行うには、実行時に言うならば、クラッシュするつもりはない、それだけで間違ったことをするつもりです、あなたはがらくたの結果を取得し、フレームワークのせいでしょう。
CおよびC ++コードのためのOpenMPとMPIをご覧ください。
OpenMPのも、私が思うにもFortranのような他の言語にも適用されます。
小さなプログラムを書く。
(マルチスレッドは任意の言語で本当に難しいまだですが)他のコード言語/スタイルは、あなたがより良いマルチスレッドんようになるが、通常の開発者、私見のための大きな利点は、小さなプログラムの多くは、同時にいくつかの非常に大きな達成するために実行する能力でありますタスクます。
だから、あなたはいつでも実行できる独立したコンポーネントにあなたの問題を打破するのが習慣に取得します。
あなたもより保守ソフトウェアを構築します。