Рассчитать шаг (расстояние в байтах) для циклического перебора массивов основных рядов

Я понимаю основную концепцию шага (расстояние между двумя последовательными обращениями к массиву). Тем не менее, когда мне задают вопрос о том, как обстоят дела между различными типами циклов, обращающихся к одному и тому же массиву, я не уверен в том, каков точный ответ.

Например, я не уверен, как рассчитать доступ к массиву во вложенных циклах. Вот два примера вопросов, на которых я застрял:

Функция А:

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;
  }
}

* А. Каков шаг (в байтах) обращений к array_a?

б. Каков шаг (в байтах) обращений к array_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]
    }
  }
}

* А. Каков шаг (в байтах) обращений к array_a?

б. Каков шаг (в байтах) обращений к array_b?*

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

Выложите мое понимание вопросов здесь:

В функции A к массиву _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]).

Таким образом, ответы для функции А должны быть:

а. Каков шаг (в байтах) обращений к array_a?

Ответ: 4 байта (поскольку целое число обычно составляет 4 байта, то есть расстояние между двумя последовательными целыми числами)

б. Каков шаг (в байтах) обращений к array_b?

Ответ: MSIZE x 4 байта (Учебник также отметил MSIZE = 500, поэтому он должен быть 2000 байтов)

В функции B к array_a и array_b обращаются случайным образом. Таким образом, их шаг составляет 4 байта.

Функция Б

а. Каков шаг (в байтах) обращений к array_a?

Ответ: 4 байта

б. Каков шаг (в байтах) обращений к array_b?

Ответ: 4 байта

0 ответов

Другие вопросы по тегам