1

私は、2つのコアと4つのスレッドを持つInteli5コアマシンで並列アルゴリズムを開発しています。

nは、計算を実行するマトリックスのサイズを定義します。下の表からわかるように、1スレッドから2スレッドの使用率はほぼ50%減少しますが、2スレッドと4スレッドの間にほとんど違いはありません。数字は経過した秒数を示します

スレッド数-計算時間

私のコンパイラは、Windowsプラットフォームではmingw-gccです。私の並列化ツールはopenmpです。omp_set_num_threads(numThreads);並列ルーチンの最初にスレッド数を定義しています。

「実際の」8コアマシンでアルゴリズムをテストする手段がありません。私のi5マシンでは、1スレッドで、タスクマネージャーは合計CPUパワーの25%が使用されていることを示しています。2スレッドでは50%、4スレッドでは予想どおり96〜99%です。

では、その状況の理由は何でしょうか?なぜ計算時間が半分にならないのですか?

並列コードセグメントは以下にあります。

    #pragma omp parallel for schedule(guided) shared(L,A) \
    private(i)
    for (i=k+1;i<row;i++){
        double dummy = 0;
        for (int nn=0;nn<k;nn++){
            dummy += L[i][nn]*L[k][nn];
            L[i][k] = (A[i][k] - dummy)/L[k][k];
        }
    }
4

1 に答える 1

4

さて、あなたのマシンには2つのコア4つのスレッドがあります。

コアは2つしかないため、1〜4スレッドで4倍のスピードアップは得られません。

次に、スレッド数を増やすと、メモリ帯域幅の最大化など、リソースの競合が発生する可能性があります。

于 2012-04-07T18:55:33.163 に答える