2016-11-13 80 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

我想我会这样做。感谢您的确认。 :) –