テテのつぶやきテテの不定期日記です。
OpenMPとマルチコアCPU等について、ネットで調べました (Windows)。論理CPUと同数のスレッドを生成し、それらを個々別々の論理CPUで実行させるのが良さそうだということが分かりました。
インテルの「マルチコアのパフォーマンス」の例。SetThreadAffinityMaskを使って、各スレッドが個々別々の論理CPUだけで実行されるようにしています。
Wikipediaの「Affinity mask」にも同じ例が載ってました。
Wikipediaの「OpenMP - Thread affinity」によれば、上記のようにすると以下の理由で性能が向上するとのこと。
ただし、SetThreadAffinityMaskで各スレッドを個々の論理CPUに束縛すると、ある論理CPUに多くの負荷がかかった場合などに他のスレッドが待たされて、性能が落ちるかも…。なので、SetThreadAffinityMaskの代わりに、しばりのゆるいSetThreadIdealProcessorを使ってみることにしました。