0
私は、内部でOMPループを利用するmyFunc()関数を持っていますが、使用可能なすべてのコアを消費しません。より高いレベルでは、この関数をループ内で何度も呼びます。この外部ループでOMPを使用する簡単な方法はありますが、各ループパスを単一のスレッドに限定することはできませんか?C++各ループのOpenMP複数のスレッド
例えば:
// I have 24 cores
// Would like to allow each for loop pass to have 12 cores
for (int outIter=0; outIter<2; outIter++) {
x[outIter] = myFunc(...) // This function has OMP inside
}
ありがとうございます、ええ、私はそれが並行ではないことを知っています。プラグマ文をforループのすぐ上に置くと、これは各ループ反復に1つのスレッドしか提供しないということです(通常の使用例はloop_iterations >> number_of_cores)。使用可能なスレッドが1つしかないため、ループ内の追加のOMP呼び出しは無効になります。関数の内部では、forループは繰り返し回数が少ないため、これをやろうとしています。 – user2364295
内部であなたのompコールを使用しないでください。これは外側のループを2つに分解します。内部動作を2つのコアに限定するものではありません。 KMP_AFFINITYを指定して何かを取得した場合は、さらに見る必要があります。 –