5

C で基本的な OpenMP 機能の使用を開始しようとしています。「omp parallel for」の基本的な理解から、次のループの反復をスレッド間で分散し、同時に実行する必要があると思います。私が得ている出力は次のとおりです。以下のコード。私のハローワールドの例に欠けている微妙なものはありますか?

omp スレッド 0 からの Hello World omp スレッド 0 からの Hello World omp スレッド 0 からの Hello World omp スレッド 0 からの Hello World omp スレッド 0 からの Hello World omp スレッド 0 からの Hello World など.

 int HelloFunc()
{
    int i;
    int numthreads = 8;
#pragma omp parallel for default(none) num_threads(numthreads) private(i)
    for (i = 0; i < 100; i++)
    {
        int tid = omp_get_thread_num();
        printf("Hello world from omp thread %d\n", tid);
    }
    return -1;
}

int main()
{
    int result = HelloFunc();
}
4

2 に答える 2

2

お使いのコンピューターは、このプログラムの実行に 1 つのスレッドのみを使用している可能性があります。OMP は、複数のスレッドで実行することを強制するのではなく、コンパイラにそれが可能であることを伝え、それを実現するために必要な環境をセットアップするだけです。

OMP が他の方法よりも多くのスレッドで何かを実行するように強制する方法はありません。また、OMP はすべてを自動的に設定して、可能な限り高速に実行できるようにするため、そうしたくないでしょう。

于 2015-03-05T20:57:38.460 に答える