Re: [,] или [][]
От: Mr.Delphist  
Дата: 18.07.19 13:26
Оценка: 2 (1) +2
Здравствуйте, Passerby, Вы писали:

P>Программа критична к быстродействию. Есть массивы [,] размерностью 2000 Х 3 для хранения decimal. Кроме того программа обрабатывает и одномерные массивы. Программу можно сделать короче, если заменить массив [,] на [][]: тогда код обработки одномерного массива будет обрабатывать и массивы в [i][]. Но как будет с памятью? Если в массиве [,] выделенная память = 2000 Х 3 Х число бит в одном decimal, то в [][] первый ряд будет хранить ссылки на расположение в памяти второго ряда. Т.е. памяти потребуется значительно больше. И как с быстродействием? В [,] вычисляется адрес decimal, а в [][] идет переход по ссылкам. Или я в ошибаюсь?


При скоростной работе с массивами надо в первую очередь опираться на то, как работает кэширование.

Данные, которые обрабатываются алгоритмом по порядку, в идеале должны лежать рядом (тогда они будут вычитываться с упреждением, иначе придётся ждать подсасывания данных из RAM или вообще получать размывание кэша при random access или многократной тасовке куска, превышающего по размеру кэш).

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

Ну и в экзотических NUMA-сценариях не забываем про разную скорость доступа к разным адресам RAM.
Отредактировано 18.07.2019 14:49 Mr.Delphist . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.