计算跨行优先顺序数组的步幅(字节距离)

时间:2018-12-06 04:32:13

标签: stride row-major-order

我了解步幅的基本概念(两次连续访问数组之间的距离)。然而,当遇到一个应用问题,即访问同一数组的不同类型的循环之间的步幅如何时,我不确定确切的答案是什么。

例如,我不确定如何在嵌套循环中计算数组访问。这是我遇到的两个示例问题:

功能A:

int i, j, k;

for (i = 0; i < MSIZE; i++) {
  for (j = 0; j < MSIZE; j++) {
    for (k = 0; k < MSIZE; k++) {
      sum = sum + (array_a[i][k] * array_b[k][j]);
    }
    array_r[i][j] = sum;
  }
}

* a。访问array_a的步幅(以字节为单位)是什么?

b。访问数组_b的步幅(以字节为单位)是什么?*

功能B

int i, j, k;

for (i = 0; i < MSIZE; i++) {
  for (k = 0; k < MSIZE; k++) {
    for (j = 0; j < MSIZE; j++) {
      array_r[i][j] = array_r[i][j]+ (array_a[i][k] * array_b[k][j]
    }
  }
}

* a。访问array_a的步幅(以字节为单位)是什么?

b。访问数组_b的步幅(以字节为单位)是什么?*

======================

将在此处发表我对问题的理解:

在函数A中,连续访问array_a(因为k是内部循环,所以访问数组_a的方式类似于 array_a [i] [k],array_a [i] [k + 1],array_a [i] [k + 2] ,因此检索到的元素始终彼此相邻)。 array_b从一列跳到另一列(因为 array_b [k] [j],array_b [k + 1] [j],array_b [k + 2] [j] )。

因此,函数A的答案应为:

a。访问array_a的步幅(以字节为单位)是多少?

Ans:4个字节(因为一个整数通常为4个字节,这使得两个连续整数之间的距离)

b。访问array_b的步幅(以字节为单位)是什么?

答案:MSIZE x 4字节(教科书还指出MSIZE = 500,因此应该为2000字节)

在功能B中,连续访问array_a和array_b。因此,它们的步幅均为4个字节。

功能B

a。访问array_a的步幅(以字节为单位)是多少?

回答:4个字节

b。访问array_b的步幅(以字节为单位)是什么?

回答:4个字节

0 个答案:

没有答案