Я работаю в системе, написанной на C ++, работающей на Xeon в Linux, которая должна работать как можно быстрее. В оперативной памяти содержится большая структура данных (в основном массив структур), объем которой превышает 10 ГБ, и к элементам ее необходимо периодически обращаться. Я хочу пересмотреть структуру данных, чтобы максимально использовать механизм кэширования системы.
В настоящее время доступ осуществляется в основном случайным образом по всей структуре, и каждый раз считываются 1-4 32-битных целых числа. Прошло много времени, прежде чем в том же месте произойдет повторное чтение, поэтому кеш не принесёт пользы.
Теперь я знаю, что когда вы читаете байт из произвольного места в ОЗУ, в кэш заносится не только этот байт. У меня вопрос, сколько байтов занесено? Это 16, 32, 64, 4096? Это называется строкой кэша?
Я хочу изменить структуру данных, чтобы минимизировать случайный доступ к ОЗУ и работать с кешем вместо него. Знание того, сколько байтов заносится в кеш при произвольном доступе, сообщит выбор дизайна, который я делаю.
Обновление (октябрь 2014 г.):
Вскоре после того, как я поставил вопрос выше, проект был приостановлен. С тех пор он возобновился и, основываясь на предложениях в ответах ниже, я провел несколько экспериментов по доступу к ОЗУ, потому что казалось вероятным, что происходил трэш TLB. Я пересмотрел программу для работы с огромными страницами (2 МБ вместо стандартных 4 КБ) и заметил небольшое ускорение, около 2,5%. Я нашел отличную информацию о настройке огромных страниц здесь и здесь .