0

OpenMP を使用して 1 つの関数を特定のコアで実行するように修正することはできますか?

例: Foo1Foo2という 2 つの関数があります。

私のコンピューター(Linux OS)には、 core0core1の2つのコアがあります。

では、アプリケーションFoo1 を常に core0 で実行しFoo2 を常に core1 で同時に実行するにはどうすればよいでしょうか?

コーディングには C++ を使用しています。

助けてください!!

4

2 に答える 2

1

したいようですね

  1. OpenMP スレッドの数を 2 ( omp_set_num_threads(2)) に設定し、
  2. 並列領域では、スレッド ID を確認し、それに応じてFoo1orを呼び出しますFoo2

これらを行う方法は、OpenMP のドキュメントに記載されています。

別の方法として、2 つの openMP タスクを作成し、それぞれが関数の 1 つを実行することもできます。

于 2012-12-26T09:24:38.320 に答える
0

@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 にバインドします。

于 2012-12-27T04:47:24.440 に答える