В чем разница между хранением многомерных массивов в памяти по типу Major Row или Column Major? - PullRequest
1 голос
/ 08 декабря 2010

В чем разница между хранением многомерных массивов в памяти в стиле Major Row или Column Major?

Насколько я знаю, 'C', похоже, следует стилю Row Major.

Просто из любопытства я хотел бы знать, есть ли преимущества одного стиля над другим?

1 Ответ

2 голосов
/ 08 декабря 2010

В общем, вы можете подражать друг другу, так что нет никакого преимущества перед другим.Тем не менее, реализации кеша обычно рассматривают локальность ссылок как положительный фактор для оценки того, будет ли доступ к памяти в ближайшее время доступным.Это может иметь последствия для производительности.Например, в реализации с основными строками этот фрагмент кода:

int sum = 0;
for (int i = 0; i < n; ++i)
  for (int j = 0; j < m; ++j) 
     sum += a[i][j];

скорее всего будет быстрее, чем:

int sum = 0;
for (int i = 0; i < m; ++i)
  for (int j = 0; j < n; ++j) 
     sum += a[j][i];

Вам следует попытаться спроектировать свои алгоритмы так, чтобы вы кодироваливнешние циклы над строками в основной среде строк и над столбцами в основной среде столбцов, чтобы минимизировать потери в кэше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...