2016-11-13 10 views
7

コンピュータアーキテクチャ(定量的アプローチ5ed)に関するHennessy-Pattersonの書籍は、複数のメモリバンクを有するベクトルアーキテクチャでは、以下の条件が満たされると5EDでページ279):メモリバンクベクタプロセッサにおけるメモリアクセス競合の条件

(バンクの数)/最小公倍数(バンク数、ストライド)<銀行忙しい時間

しかし、私は場合は、メモリの競合が発生するので、それは、GreatestCommonFactor代わりのLCMすべきだと思います有効銀行数がである場合は、ビジー時間未満です。実効銀行数とは、8つの銀行と2つのストライドがあるとしましょう。その後、効果的に4つの銀行があります。なぜなら、メモリアクセスは4つの銀行でのみ行われるからです(たとえば、アクセスはすべて偶数、0から始まり、あなたのアクセスは銀行0,2,4,6で整列されます)。

実際、この数式はその下の例でも失敗します。 6クロックサイクルのビジー時間を持つ8つのメモリバンクがあり、合計メモリレイテンシが12クロックサイクルで、ストライドが1の64要素ベクタロードを完了するのにどれくらいの時間がかかるのですか? - ここでは、時間を12 + 64 = 76クロックサイクルとして計算します。しかし、与えられた条件に従ってメモリバンクの競合が発生するので、サイクルごとに1つのアクセス権を持つことはできません(式の64)。

私は間違っているか、または間違った公式がこの本の5版を生き延びた(おそらくない)か?

+0

インテルSandybridgeのL1キャッシュのように動作する場合は、キャッシュライン(128B合計)のペアは8つの16Bバンクに分割され、異なるラインの同じバンクからの同時ロードはバンク衝突です。 (しかし同じ行の同じ銀行の2回の読み込みは同じサイクルで起こる可能性があります)。 [Agner Fogのmicroarch pdf](http://agner.org/optimize/)で説明しています。 Haswellは後に銀行間の競合を起こさないため、これはクロック当たり2回の読み取りをサポートする最初の2世代のIntelマイクロアーキテクチャであるSnBとIvBにのみ適用されます。 –

答えて

3

GCD(バンク、ストライド)が入ります。あなたの議論は正しいです。

いくつかの進歩を試してみましょう。銀行の数は = b = 8です。 B/LCM(S、B)

# generated with the calc(1) function 
define f(s) { print s, "  | ", lcm(s,8), " | ", gcd(s,8), " | ", 8/lcm(s,8), "  | ", 8/gcd(s,8) }` 

stride | LCM(s,b) | GCF(s,b) | b/LCM(s,b) | b/GCF(s,b) 
1  | 8  | 1  | 1  | 8  # 8 < 6 = false: no conflict 
2  | 8  | 2  | 1  | 4  # 4 < 6 = true: conflict 
3  | 24 | 1  | ~0.333 | 8  # 8 < 6 = false: no conflict 
4  | 8  | 4  | 1  | 2  # 2 < 6 = true: conflict 
5  | 40 | 1  | 0.2  | 8 
6  | 24 | 2  | ~0.333 | 4 
7  | 56 | 1  | ~0.143 | 8 
8  | 8  | 8  | 1  | 1 
9  | 72 | 1  | ~0.111 | 8 

x   >=8  2^0..3  <=1   1 2 4 or 8 

常に= 1 <あるので、常に衝突を予測します。

GCF(別名GCD)は、私がこれまで見てきたストライド値を正しく見ていると思います。ストライドがすべての銀行にアクセスを分配しないと、b/GCF(s、b)があなたに伝えるものだけが問題になります。


ストライド= 8は、毎回同じバンクを使用する最悪のケースです。したがって、両方の式は8/8 = 1となり、バンクのビジー/リカバリ時間よりも短く、したがって競合を正しく予測します。

もちろん、ストライド= 1が最善のケースです(ビジー時間を隠すのに十分な銀行がある場合は競合しません)。 gcd(8,1)= 1は競合がないことを正しく予測します(8/1 = 8、6以上)。 lcm(8,1)= 8.(8/8 < 6が真)は競合を間違って予測します。

+0

*両方の式が偽であると思われるので、銀行のビジー/リカバリ時間よりも短い8/8 = 1を与えて、競合がないと予測します* - ここでは小さなエラーがあると思います。条件には、不等式が* satisf *の場合、競合が存在すると記載されています。ストライド8については、不等式が満たされているため、競合が存在する。ストライド1の場合、gcdは代わりに* no *の競合を予測します。実際にはストライド1の場合、実際には8つの銀行があり、忙しい時間は6であるため、実際には競合は起こりません。したがって、銀行#1に戻ってくるまでに8サイクルを費やしたため、銀行は再び自由です。 –

+1

@ParthThakkar:うん、ちょっとしたエラーではない。私の結論は間違っていた!私は混乱し、ある時点で競合/競合が逆転してしまった。それを修正した後、GCDがH&Pの公式で働くのは正しいと思います。間違いを発見したら、あなたに知らせるために電子メールを送るべきです。 –

+0

私はそれをやっていると思います。確認していただきありがとうございます。 :) –

関連する問題