内存中内存访问冲突的条件

关于计算机体系结构(定量方法5ed)的Hennessy-Patterson书中说,在具有多个存储体的矢量体系结构中,如果满足以下条件(如5ed),则可能发生银行冲突:

(银行数量)/ LeastCommonMultiple(银行数量,步幅)<银行忙碌时间

不过,我认为它应该是GreatestCommonFactor而不是LCM,因为如果您拥有的银行有效数量少于繁忙时间,就会发生内存冲突。 通过有效的银行数量,我的意思是说 - 假设你有8家银行,而且有2家银行。然后有效地你有4家银行,因为存储访问只会排在四家银行(例如,假设你的访问都是偶数,从0开始,那么你的访问将排在银行0,2,4,6)。

事实上,这个公式甚至在下面给出的例子中失败了。 假设我们有8个存储体,其中6个时钟周期的忙时间,总存储器滞后时间为12个时钟周期,需要多长时间才能完成64步矢量加载,步长为1? - 在这里他们计算时间为12 + 64 = 76个时钟周期。 但是,根据给定的条件会发生内存银行冲突,所以我们显然不能在每个周期访问一次(方程式中的64)。

我是否错了,或者有错误的公式设法在本书的5个版本中生存(不太可能)?


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为真)不正确地预测冲突。

链接地址: http://www.djcxy.com/p/37015.html

上一篇: Condition for memory access conflict in memory

下一篇: buffer areas around lines ggplot2