6

より多くのパフォーマンスが必要なプロジェクトに取り組んでいます。時間の経過とともに、(スレッドと分散の両方で) より並列に動作するように設計を進化させ続けてきました。その後の最新のステップは、その一部を 16 コアの新しいマシンに移動することでした。共有メモリ モデルでこれほど多くのコアにスケーリングする方法を再考する必要があることがわかりました。たとえば、標準のメモリ アロケータでは十分ではありません。

人々はどのリソースを推奨しますか?

これまでのところ、Sutter のコラム Dr. Dobbs が良い出発点であることがわかりました。The Art of Multiprocessor Programming と Intel Threading Building Blocks に関する O'Reilly の本を手に入れました

4

8 に答える 8

6

参考になる他の本は次のとおりです。

また、並行プロセス間で状態を共有することへの依存を減らすことを検討してください。それを避けることができれば、はるかにうまくスケーリングできます。なぜなら、独立した作業単位をそれらの間でそれほど多くの同期を行わなくても分割できるからです。

一部の状態を共有する必要がある場合でも、実際の処理から共有状態を分割できるかどうかを確認してください。これにより、完了した作業単位を統合して共有状態に戻すこととは別に、できるだけ多くの処理を並行して行うことができます。作業単位間に依存関係がある場合、これは明らかに機能しませんが、状態が常に共有されると想定するのではなく、調査する価値があります。

于 2008-08-09T22:13:12.233 に答える
3

Google の Performance Toolsをチェックしてみてください。彼らは、マルチスレッド アプリケーションに使用する malloc のバージョンをリリースしました。また、優れたプロファイリング ツールのセットも含まれています。

于 2008-08-09T16:59:53.190 に答える
2

Jeffrey Richter はスレッド化に夢中です。彼の著書にはスレッド化に関するいくつかの章があり、彼のブログをチェックしてください。

http://www.wintellect.com/cs/blogs/jeffreyr/default.aspx .

于 2008-08-09T17:19:00.610 に答える
2

モンティ・パイソンが言うように、「そして今はまったく違うもののために」 - スレッドを使用しない言語/環境を試すことができますが、プロセスとメッセージング (共有状態はありません)。最も成熟したものの 1 つは erlang です (この優れた楽しい本: http://www.pragprog.com/titles/jaerlang/programming-erlang )。あなたの状況に正確に関連しているわけではないかもしれませんが、他のツールに適用できる可能性のある多くのアイデアを学ぶことができます.

他の環境の場合:

.Net には F# があります (関数型プログラミングを学ぶため)。JVM には Scala があります (Erlang と非常によく似たアクターがあり、機能的なハイブリッド言語です)。また、Java 用の Doug Lea による「フォーク ジョイン」フレームワークもあります。

于 2008-08-09T23:26:30.570 に答える
1

最近、FreeBSD のアロケーターが FreeBSD 7 用に更新されました。新しいものはjemalocと呼ばれ、明らかに複数のスレッドに関してはるかにスケーラブルです。

使用しているプラ​​ットフォームについて言及していないので、おそらくこのアロケーターを利用できます。( Firefox 3 は Windows でも jemallocを使用していると思います。したがって、ポートはどこかに存在する必要があります。)

于 2008-08-09T18:51:36.803 に答える
0

いつかHoard、Google Perftools、jemallocをチェックアウトする必要があります。今のところ、Intel Threading Building Blocksのscalable_mallocを使用しており、十分に機能します。

良くも悪くも、WindowsではC ++を使用していますが、コードの多くはgccで問題なくコンパイルされます。redhat(私たちが使用するメインのLinuxディストリビューション)に移行するやむを得ない理由がない限り、移行することは頭痛や政治的な問題に値するものではないと思います。

Erlangを使いたいのですが、今ここでやり直す方法がたくさんあります。電話会社の設定でのアーランの開発に関する要件を考えると、それは私たちの世界(電子取引)と非常によく似ています。アームストロングの本は私のスタックを読むためにあります:)

4コアから16コアにスケールアウトするためのテストで、コードの並列部分でのロック/競合のコストを理解することを学びました。幸いなことに、データに合わせてスケーリングする部分が大部分ありますが、それでも、余分なロックとメモリアロケータが原因で、最初は機能しませんでした。

于 2008-08-10T16:15:10.097 に答える
0

多くのメモリ割り当てを行っている場合は、Hoardを調べてください。

独自のLock Free Listを作成します。優れたリソースはこちらです。これは C# ですが、アイデアは移植可能です。それらがどのように機能するかに慣れると、リストだけでなく、それらを使用できる他の場所が見え始めます.

于 2008-08-10T13:45:43.970 に答える
0

私は継続的に関心があるかもしれない同時実行リンクのブログを維持しています:

http://concurrency.tumblr.com

于 2008-09-26T12:07:21.557 に答える