Я не уверен, что делает ваш код, он не очень дружелюбен к авторам.Но если вы обращаетесь к данным в этих массивах во всех направлениях (влево, вверх, вправо, вниз), то для вас может быть следующее:
Индексируйте свой массив, используя Morton Code / ZКривая порядка. .Это увеличивает локальность ссылок , что улучшает поведение при кэшировании, когда вы получаете доступ к элементам полностью вокруг элементов.
Подумайте об этом: при использовании классической двумерной индексации расстояние до верхних и нижних соседей представляет собой высоту или ширину.Если ваша ширина / высота очень высоки, то вы получаете доступ к очень отдаленным элементам вашего массива.Учитывая, что ЦП выполняет много спекулятивного кэширования, многие из этих спекуляций приводят к напрасным усилиям (так называемый cache-miss ).У вас есть несколько хороших показателей (левый и правый соседи), а некоторые очень и очень плохие (верхний и нижний соседи).
С индексированием Мортона у вас нет идеальных левых / правых соседей, но в равной степени у вас нет дальних верхних / нижних соседей.
Если в среднем вы делаете попадания в кэшированные данные, то доступ к этим данным действительно дешевый (данные могут быть уже в кеше, даже если вы даже не начали доступ к ним, благодаря [http://en.wikipedia.org/wiki/Speculative_execution](speculativeвыполнение) и предварительная выборка .
Конечно, если большая часть вашего кода обращается к элементам в порядке слева направо или если это не является существенным узким местом, вы можете не захотетьсделай это.