Сколько байтов Xeon помещает в кэш за каждый доступ к памяти?

Я работаю над системой, написанной на C ++, работающей на Xeon в Linux, которая должна работать как как можно быстрее. В ОЗУ хранится большая структура данных (в основном массив структур) размером более 10 ГБ, и к ее элементам необходимо периодически обращаться. Я хочу пересмотреть структуру данных, чтобы максимально работать с механизмом кэширования системы.

В настоящее время доступ осуществляется в основном случайным образом по всей структуре, и каждый раз при чтении 1–4 32-битных целых числа. До следующего чтения в том же месте проходит много времени, поэтому кеш не дает никакой пользы.

Теперь я знаю, что когда вы читаете байт из случайного места в ОЗУ, в кэш попадает не только этот байт. У меня вопрос, сколько байтов внесено? Это 16, 32, 64, 4096? Это называется строкой кэша?

Я хочу изменить структуру данных, чтобы минимизировать случайные обращения к ОЗУ и работать с кешем, а не против него. Знание того, сколько байтов втягивается в кеш при произвольном доступе, будет влиять на мой выбор дизайна.

Обновление (октябрь 2014 г.): Вскоре после того, как я задал вопрос выше, проект был приостановлен. С тех пор он возобновился, и на основе предложений в ответах ниже я провел несколько экспериментов с доступом к ОЗУ, потому что казалось вероятным, что происходит сбой TLB.Я изменил программу для работы с огромными страницами (2 МБ вместо стандартных 4 КБ) и заметил небольшое ускорение, примерно на 2,5%. Я нашел отличную информацию о настройке больших страниц здесь и здесь .

12
задан Randall Cook 10 October 2014 в 16:32
поделиться