1

私は、いくつかの重い数値計算を行うアプリケーションに取り組んでいます。単一のコンピューターで実行することを目的としています。最近、計算を高速化するためにマルチスレッド化を検討し始めました。アルゴリズムの中には、それほど労力をかけずに並列実行できるものもあり、私は固定スレッド プールを使用して各サブタスクを実行しています。

私が疑問に思っていたのは、これらの種類のアルゴリズムに対して通常指定されているスレッドの数 (プールのサイズ) はどのようになっているのかということです。これは通常、構成ファイルまたはコマンドライン パラメーターのいずれかを使用して行われると思われますが、そのような例を見たことがないので、より良い方法があるかどうか疑問に思っていました。

これに関連: スレッド数を指定することは関係ありますか? プール サイズを割り当て可能なコアの数に設定すると最も高速に実行される可能性が高いと考えていましたが、過剰な割り当ての場合の処理​​能力のスレッド競合は、パフォーマンスにも関連していますか? 例: 4 コア マシンで 20 の最大スレッドを設定することは、4 つの最大スレッドを設定するよりも悪くなりますか?

編集:アプリケーションは販売を目的としているため、どのコンピューターで実行されるかわかりません. 一般的なガイドラインとベスト プラクティスを探しています。

4

2 に答える 2

2

経験則では、NUMBER_OF_CORES + 1スレッドを使用します(特定の並列ビルドシステムはこれを使用します)。1つの「スペア」スレッドが別のスレッドのIO中に機能します。コアの数を見つけるには、このSOの質問を参照してください。

于 2012-06-05T09:25:45.840 に答える
0

スレッドの数は、いくつかの要因、主にあなたが言及したようなHWコアの数、およびスレッドで解決/処理されている問題に依存します。さまざまなスレッドプールサイズで試行錯誤を行うのが最善の場合があります。

スレッドが実行している作業が、おっしゃるようにハードコアの数値計算である場合、HWコアよりも多くのスレッドを使用することで、パフォーマンスが大幅に向上することは期待できません。スレッドが外部エンティティ(ネットワークなど)を待機する必要がある場所で作業を行っている場合は、より多くのスレッドを使用することでパフォーマンスが向上する可能性があります。

于 2012-06-05T09:25:04.500 に答える