В основе структуры индексации я задаюсь вопросом, можно ли сделать оптимизацию для следующей проблемы:
У меня большой (несколько ГБ ОЗУ) массив небольших структур (в ОЗУ), у меня есть меньший массив индексов (порядка 10e4 элементов). Индексы почти распределены случайным образом. У меня есть функция агрегирования, которая является независимой от заказа ( "ассоциативной" для математиков), скажем, например, "сумма".
Я хочу агрегировать значения, полученные из большого массива, по индексам, указанным в малом массиве.
В настоящее время я трачу большую часть времени на выбор из памяти (так как индексы распределены случайным образом, а таблица большая, есть много промахов в кеше, но, поскольку я знаю данные об индексах, имеется некоторая предварительная выборка). Мне сложно определить, будут ли в настоящее время выполняться какие-либо предварительные оптимизации, или сколько ускорений я могу ожидать от такой оптимизации?
Итак, мой вопрос: какой самый быстрый способ получить из известных мест памяти. Есть ли волшебство программирования темного искусства? Есть ли какой-нибудь подход к архитектуре/платформе? Я ищу решения С++ или С#.