5

8 コアのハードウェアで 8 つ以上のスレッドを同時に実行できるかどうかは疑問です。

もしそうなら、openMP を使用して N 個の計算を並列化すると、たとえば N/8 のサイズのチャンクを作成でき、各スレッドでさらに (N/8)/8 個のスレッドに分岐できます。

並列化を入れ子にするとどうなりますか? 入れ子になった並列に使用できるスレッドはまだ 8 つあるのでしょうか?

ありがとう!!

4

3 に答える 3

10

8 コアは、特定の時点で最大 8 スレッドしか同時に実行できません。ただし、スレッドが何をしているかに大きく依存します。CPU を集中的に使用するタスクを実行している場合、コア数よりも多くのスレッドを生成することはお勧めしません (少数でも問題ありません)。そうしないと、過剰なコンテキストの切り替えとキャッシュ ミスにより、パフォーマンスが低下し始めます。ただし、大量の I/O がある場合、CPU を使用せずにスレッドが大量にブロックされる可能性があるため、より多くのスレッドを並行して実行できます。

要するに、特定のケース、特定の環境でのパフォーマンスを測定する必要があるということです。

この関連スレッドも参照してください。

于 2012-04-16T16:41:02.557 に答える
2

最新の CPU プロセッサには、ハイパースレッディングのオプションがあります。
これは、パイプラインが同時に 2 つ以上のスレッドを実行できることを意味します。

したがって、同時に実行できるスレッドの数は次のようになります:
total_threads = num_procs * hyperthreading factor

通常、ハイパースレッディング係数 = 2 です。

CPU を集中的に使用するワークロードの場合は、total_threads を実行する必要があります。IO 集中型ワークロードの場合、total_threads * 2 スレッドを使用する必要があります。このようにして、一部のスレッドの計算を他のスレッドの io とオーバーラップさせることができます。

これらの経験則は私が従うものです。作業量によって変更する場合があります。

于 2012-04-18T06:49:22.320 に答える
0

まず、8 つ以上のスレッドを実行することはできません。次に、openmp はこの面で大幅に改善する必要があるため、他に何も機能しない場合は、ネストされた並列処理に頼ります。

于 2012-04-16T19:10:21.043 に答える