2016-11-13 79 views
7

軒尼詩 - 帕特森書中對計算機體系結構(定量方法5天)說,在與多個存儲體的矢量架構,可如果滿足以下條件時發生銀行衝突(第279 5天):條件的內存庫存的向量處理器的內存訪問衝突

(銀行數)銀行/最小公倍數(數,步幅)<銀行忙時

不過,我覺得應該是GreatestCommonFactor代替LCM,因爲內存衝突會發生,如果有效銀行數量你已經少於繁忙時間。通過有效的銀行數量,我的意思是說 - 假設你有8家銀行,而且有2家銀行。然後有效地你有4家銀行,因爲存儲訪問只會排在四家銀行(例如,假設你的訪問都是偶數,從0開始,那麼你的訪問將排在銀行0,2,4,6)。

事實上,這個公式甚至失敗右它下面給出的例子。 假設我們有8個存儲體,其中6個時鐘週期的忙時間,總存儲器延遲時間爲12個時鐘週期,需要多長時間才能完成64步矢量加載,步長爲1? - 這裏他們計算時間爲12 + 64 = 76個時鐘週期。但是,根據給定的條件會發生內存銀行衝突,所以我們顯然不能在每個週期訪問一次(方程式中的64)。

上午我得到它錯了,或者有錯誤的公式設法生存5個版本本書的(不太可能)?

+0

這聽起來很正確的,如果它的工作原理是英特爾的Sandy Bridge的L1高速緩存,其中每對緩存線(128B總)在不同線路分爲八個16B銀行,併發負載從同一家銀行是銀行的衝突。 (但是同一行中同一個銀行的兩次讀取可能發生在同一個週期內)。 [Agner Fog's microarch pdf](http://agner.org/optimize/)對此進行了描述。 Haswell和後來沒有銀行衝突,所以這僅適用於SnB和IvB,前兩代Intel微架構支持每時鐘兩次讀取。 –

回答

3

GCD(銀行,步幅)應該進入;你對此的爭論是正確的。

讓我們試試這個幾個不同的進展,看看我們得到什麼, 爲b = 8銀行的數量=。

# 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 

B/LCM(S,B)總是< = 1,所以它總是預測衝突。

我認爲GCF(又名GCD)尋找適合我看了到目前爲止步幅值。如果步幅沒有將訪問權限分配給所有銀行,那麼您只會遇到問題,這就是b/GCF(s,b)告訴您的。


步幅= 8應該是最壞的情況,每次使用同一個庫。 gcd(8,8)= 1cm(8,8)= 8。因此,這兩個表達式都給出8/8 = 1,這比銀行忙/恢復時間少,從而正確預測衝突。

步幅= 1當然是最好的情況下(不存在衝突,如果存在足夠的銀行隱藏的忙碌時間)。 gcd(8,1)= 1正確地預測沒有衝突:(8/1 = 8,不小於6)。 lcm(8,1)= 8(8/8 < 6爲true)會錯誤地預測衝突。

+0

*所以這兩個表達式似乎都是假的,給8/8 = 1,這比銀行忙/恢復時間少,因此預測不會有衝突* - 我認爲這裏有一個小錯誤。條件說明,如果不等式滿足*,那麼*就是衝突。對於第8步,不平等是滿足的,因此存在衝突。對於第1步,gcd預測* no *衝突。事實上,對於第1步,確實不會有任何衝突 - 因爲你有8個銀行,而且忙時間是6.所以當你跳回到銀行#1時,你花了8個週期,因此第一個銀行又是免費的。 –

+1

@ParthThakkar:是的,不只是一個小錯誤;我的結論是錯誤的!我混了起來,在某個時候衝突/不衝突。解決之後,我認爲你是對的,GCD在H&P公式中工作。恭喜發現一個錯誤,你應該給他們發一封電子郵件讓他們知道。 –

+0

我想我會這樣做。感謝您的確認。 :) –