我在两个3-D域上进行7点模板更新。第一个是258x130x258
,第二个是130x258x258
。它们都具有相同数量的元素被更新。在C中,它们表示为连续数组:a1[258][130][258]
和x1[130][258][258]
。简单地说明了他们的x-dimension
和y-dimension
已经交换,但z-dimension
(最快变化的指数)是相等的。
循环1:
for(i = 1; i <= 256 ; i++)
for(j = 1; j <= 128 ; j++)
for(k = 1; k <= 256; k++)
a1[i][j][k] = alpha * b1[i][j][k] + (Omega_6) *(b1[i-1][j][k] + b1[i+1][j][k] +
b1[i][j-1][k] + b1[i][j+1][k] +
b1[i][j][k-1] + b1[i][j][k+1] +
c1[i][j][k] * H);
循环2:
for(i = 1; i <= 128 ; i++)
for(j = 1; j <= 256 ; j++)
for(k = 1; k <= 256; k++)
x1[i][j][k] = alpha * y1[i][j][k] + (Omega_6) *(y1[i-1][j][k] + y1[i+1][j][k] +
y1[i][j-1][k] + y1[i][j+1][k] +
y1[i][j][k-1] + y1[i][j][k+1] +
z1[i][j][k] * H);
a1, b1, c1
具有相同的尺寸,x1, y1, z1
具有相同的尺寸。 alpha
和Omega_6
是常量。循环1比循环2运行0.5 seconds
更快。为什么会发生这种情况?