У меня есть программа Rust, которая использует несколько буквальных констант.Константы являются массивами типа [u128; 8]
- [u128; 10]
и одним двумерным массивом размером [[[u128; 8]; 8]; 100]
;размер этого массива составляет 100 КБ.
Анализ с помощью KCachegrind говорит мне, что чтение из этого массива является причиной около 70% L1-Read-Misses, что существенно замедляет мою программу.
Будет ли кешпромахи быть уменьшены, если массив был сплющен?То есть вместо индексации с помощью arr[x][y][z]
я бы индексировал с помощью arr[64 * x + 8 * y + z]
Если при выравнивании массива фактически уменьшается количество кеш-ошибок, почему компилятор не сгладит массив для меня и не изменит явноиндексирование?
Если этого не произойдет, как бы я сократил количество кешей?