参照一维数组的情况,不难证明,如果二维数组的各个元素采用按地址顺序存储的方案,当并行存储体的个数是偶数时,对于n×n二维数组就不可能实现按行、按列、按对角线和反对角线的无冲突访问。 对于n×n的二维数组,P·Budnik和D·J·Kuck提出了一种能够实现上述要求的无冲突存储方案。这种方案要求并行存储体的个数m≥n,并且取质数,同时还要在行、列方向上错开一定的距离存储数组元素。设同一列相邻元素在并行存储器中错开d1个存储体存放,同一行相邻元素在并行存储器中错开d2个存储体存放。当m=22p+1(p为任意自然数)时,能够同时实现按行、按列、按对角线和按反对角线无冲突访问的充要条件是:d1=2p,d2=1。 |
||||||||||||||||||||||||||||||||||||
图4.19 没有访问都不冲突的存储方案 | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
很明显,按照图4.19所示的存储方案,4×4二维数组在按行、列、对角线和反对角线访问时均没有冲突。并且,由于并行存储体的个数是质数,对于不同的变址位移量,对这个数组的访问仍然是没有冲突的。 |
||||||||||||||||||||||||||||||||||||