OpenMP を使用して 1 つの関数を特定のコアで実行するように修正することはできますか?
例: Foo1とFoo2という 2 つの関数があります。
私のコンピューター(Linux OS)には、 core0とcore1の2つのコアがあります。
では、アプリケーションFoo1 を常に core0 で実行し、Foo2 を常に core1 で同時に実行するにはどうすればよいでしょうか?
コーディングには C++ を使用しています。
助けてください!!
OpenMP を使用して 1 つの関数を特定のコアで実行するように修正することはできますか?
例: Foo1とFoo2という 2 つの関数があります。
私のコンピューター(Linux OS)には、 core0とcore1の2つのコアがあります。
では、アプリケーションFoo1 を常に core0 で実行し、Foo2 を常に core1 で同時に実行するにはどうすればよいでしょうか?
コーディングには C++ を使用しています。
助けてください!!
したいようですね
omp_set_num_threads(2)
) に設定し、Foo1
orを呼び出しますFoo2
。これらを行う方法は、OpenMP のドキュメントに記載されています。
別の方法として、2 つの openMP タスクを作成し、それぞれが関数の 1 つを実行することもできます。
@Novelocrat と @Joachim の有用なコメントに感謝します。
私はこのようにしました:
int main() {
#pragma omp parallel num_threads(2)
{
#pragma omp sections
{
#pragma omp section
{
foo1();
}
#pragma omp section
{
foo2();
}
}
}
return 0; }
foo1() は常にスレッド 1 で実行され、foo2() は常にスレッド 2 で実行されます。
実行時に環境変数を設定:GOMP_CPU_AFFINITY="0 1"
スレッド 1 を core0 にバインドし、スレッド 2 を core1 にバインドします。