Будет ли выравнивание большой константы массива уменьшать количество пропусков кэша L1? - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть программа 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]

Если при выравнивании массива фактически уменьшается количество кеш-ошибок, почему компилятор не сгладит массив для меня и не изменит явноиндексирование?

Если этого не произойдет, как бы я сократил количество кешей?

...