こんにちは、最近openMPでプログラミングを始めました。特定のスレッドを再起動するたびに特定のスレッドに関連付けるために使用できるディレクティブがあるかどうかを知りたいと思いました。
4 つのコアと各コアに 4 つのスレッドがあるとします。コア 1 - スレッド 1 コア 2 - スレッド 2 コア 3 - スレッド 3 コア 4 - スレッド 4。
今、私が欲しいのは、スレッド1がスケジュール/開始されるたびに、コア1自体で開始する必要があるということです。糸綴じのようです。
こんにちは、最近openMPでプログラミングを始めました。特定のスレッドを再起動するたびに特定のスレッドに関連付けるために使用できるディレクティブがあるかどうかを知りたいと思いました。
4 つのコアと各コアに 4 つのスレッドがあるとします。コア 1 - スレッド 1 コア 2 - スレッド 2 コア 3 - スレッド 3 コア 4 - スレッド 4。
今、私が欲しいのは、スレッド1がスケジュール/開始されるたびに、コア1自体で開始する必要があるということです。糸綴じのようです。
現在の OpenMP リビジョンにはそのようなプラグマはありませんが、バインディングを指定する標準的な方法が OpenMP 4.0 で登場します。それまでは、GNU のGOMP_CPU_AFFINITYや Intel のKMP_AFFINITYなどのベンダー固有のバインディング拡張機能を使用できます。
F1() 、 F2() 、 F3() 、 F4() の 4 つの関数を呼び出すラッパーを作成できます。
今使っている、
#pragma omp sections
{
#pragma omp section
{
F1()
}
#pragma omp section
{
F2()
}
#pragma omp section
{
F3()
}
#pragma omp section
{
F4()
}
}
ここで、F1() は常にスレッド 0 で実行され、F2() はスレッド 1 で実行されます。
ターミナルでこれを行います:
export GOMP_CPU_AFFINITY="0 1 2 3"
現在、 Thread0 は Core0 に接続され、 Thread1 は Core1 に接続されています。