1

OpenMP ライブラリを使用して実装する必要がある C プログラムがあります。その構造は次のとおりです。

for (t = 0; t < IT; ++t) {
#pragma omp parallel for private(i, j, k, l) schedule(dynamic)
    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j) {
                for (k = 0; k < n; ++k) {
                    for (l = 0; l < n; ++l) {
                        // calculations 0
                    }
                }

        // calculations 1
        }
    }

#pragma omp parallel for private(i, j) schedule(dynamic)
    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j) {
            // calculations 2
        }
    } 
}

このプログラムは、行列に対していくつかの計算を行います。計算 2 は、計算 0 と 1 が完了した後に実行する必要があります。これは、行列にいくつかの変更を加えるためです。

問題は、スピードアップが非常に悪いことです。つまり、プログラムはスケーラブルではありません。特定の入力のシリアル バージョンは 79.46 秒で実行されます。2 スレッドで実行すると 41 秒で終了し、ほぼ完全に 1.93 倍の速度アップが得られますが、3 スレッドで実行すると 37.86 秒 (わずか 2.1 倍の速度向上) で終了し、4 スレッドで実行すると 34.104 秒 (速度向上) かかります。わずか2.3倍)。

なぜこれはスケーラブルではないのですか?

PS。4 コアの Intel i5 430M を使用しています。

4

1 に答える 1

8

Intel Core I5 を使用しているため、それほどスケーラブルではありません。Intel Core I5 には 2 つのコアと 4 つのスレッドがあるため、実際のコアは 4 ではなく 2 つだけです (このタイプのプロセッサは、ハイパースレッディングのテクノロジを使用します)。

2 コアと 2 スレッドのプロセッサ (デュアル コア、Core 2 Duo、Core I3 など) と Core I5 (2 コアと 4 スレッドを持ち、ハイパースレッディングを使用してクアッドコア プロセッサのように動作する) の違いは次のとおりです。ハイパースレッド Core I5のパフォーマンスは最大 30% 向上します。ただし、ハイパースレッド Core I5 を Core I7 (4 コアと 4 スレッド) と比較することはできません。

于 2012-11-02T17:50:34.413 に答える