0

次のコードがあります。

#pragma omp parallel sections private(x,y,cpsrcptr) firstprivate(srcptr) lastprivate(srcptr)
{
    #pragma omp section
    {
       //stuff
    }
    #pragma omp section
    {
       //stuff
    }
}

Zoom プロファイラーによると、2 つのスレッドが作成され、1 つのスレッドが両方のセクションを実行し、もう 1 つのスレッドは単純にブロックします。

誰かが以前にこのようなことに遭遇したことがありますか? (そして、はい、私はデュアル コア マシンを持っています)。

4

2 に答える 2

2

私はまだプロファイラーについてあまりよく知らないと思いますが、私が遭遇した 1 つの問題は、OpenMP フラグを使用してサポートを有効にするのを忘れていることです。

あるいは、単純なアプリケーションを作成してスレッドの検証を試みるとどうなるでしょうか?

#pragma omp parallel num_threads(2)
{
#pragma omp critical
    std::cout << "hello from thread: " << omp_get_thread_num() << "\n" << std::endl;
}

それが機能するかどうかを確認しますか?

于 2010-06-03T20:33:44.823 に答える
0

いいえ、以前にこのようなものに遭遇したとは言えません。ただし、OpenMP コードでさまざまな問題に遭遇しました。

コード スニペットにすぐに問題があることはわかりません。Zoom プロファイラーを使用すると、プログラムの実行に影響します。プロファイラーの外で、プログラムが異なるスレッドでセクションを実行することを確認しましたか? より多くのセクションがある場合、それらはすべて同じスレッドで実行されますか、それとも異なるスレッドで実行されますか? セクションが 2 つしかない場合は、テスト中にダミーのセクションを追加してください。

于 2010-06-02T05:18:48.717 に答える