3

私はAmdahlの法則に困惑して、パフォーマンスの向上とシリアルアプリケーションの部分を決定し、これを理解できません。既知のAmdahlの法則を使用してパフォーマンスを計算する

は次のとおりです。

S(N) = Speedup factor for (N) CPU's 
N = Number of CPU's 
f = The part of the program which is executed sequential 
S(N) = N/(1 + f * (N - 1)) 

私は3倍の4 CPUのスピードアップと因子(パフォーマンスゲイン)を持っている場合。 fは何ですか?

私の推測:

S(N) = 3 (that's our performance gain using 4 CPU's) 
N = 4 

だから式でこれらの値を入力:

3 = 4/(1 + f * (4 - 1)) 

は、私はF = 0,11と言うとき、私は修正アム?または、S(N)を1に設定する必要がありますか(3で割りますか?)それとも別のことをやっているのですか?

答えて

0

これはあなたが使用するはずの方程式であれば少し間違っていると思いますので、説明しようとしましょう。

fは、シングルコア実装で並列化しなかったコードの部分でプログラムが費やした時間の割合(別名、0 < = f < = 1)です。たとえば、次のようなプログラムがある場合:

// this takes 15 seconds 
init(); 

for (int i = 0; i < 10; i++) { 
    // this takes 10 seconds, and will be split 
    // between threads when in parallel 
    calculate(); 
} 

// this takes 5 seconds 
finalize(); 

これは15+(10 * 10)+ 5 = 120秒で(連続して)実行されます。しかし、並列に実装すると、複数のコアに分割することができない実行時間は20秒です。つまり、並列部分が高速化されても10回の繰り返しを実行するのに10秒かかりますが、プログラム全体では30秒かかります。これはfが私たちに助けになることです - どのくらいの問題が並列化の恩恵を受けることができますか?この例では、合計120のうち20秒を連続して実行する必要があるため、f = 20/120 = 1/6となります。

この新しいf値を使用すると、Amdahlに従って速度を上げることができます。 1つの免責事項 - これはスピードアップを測定する唯一の方法ではなく、さまざまな方法にはそれぞれ長所と短所があります。

+0

タイラーありがとう、私は主にあなたの答えを理解しています。私の例では、連続して実行される部分を計算したいと思います。私は宿題の残りの部分を手に入れる前にこれを理解する必要があります;-) – user1204156

1

私の同級生は、(これまでの作業/右の)答えを出しました。

私は次のクラスを作成しました: 重大な混乱に取り除かれました。

これで解決します。

EDIT:

[OK]を、previuos答えが間違っているが、私は解決策を見つけました。

あなたが最初に計算します平行して実行できる部分(これはウィキペディアにありますが、理解するのにはしばらく時間がかかりました)、次にシリアル部分を計算します。

ので、最終的なクラスは、このようになります。

/** 
* @param s - The maximum performance profit. 
* @param n - The amount of processors that are usable.. 
* @return f - The sequential part of the program. 
*/ 
public final double sequentialCalculation(final double s, final double n) { 
    double p = 0; //the part that can be executed in parallel 
    double f = 0; 

    if (s <= 0) { 
     throw new IllegalArgumentException("S > 0"); 
    } 

    if (n <= 0) { 
     throw new IllegalArgumentException("N > 0"); 
    } 

    p = ((1/s) - 1)/((1/n) - 1); 

    f = 1 - p; 

    return f; 
} 

あなたは歓迎されています。

関連する問題