Отображение памяти всего файла может значительно упростить процесс.
Вы хотите выложить свои данные для оптимизации для наиболее распространенного шаблона доступа. Похоже, что данные будут записаны один раз (по столбцам) и прочитаны несколько раз (по строкам). Это говорит о том, что данные должны храниться в основном порядке строк.
Пометка матрицы только для чтения после выполнения предварительного вычисления, вероятно, не повлияет на производительность (возможны некоторые низкоуровневые оптимизации, но я не думаю, что что-то реализует их), но это предотвратит случайные ошибки запись в данные, которые вы не собираетесь. Мог бы также.
madvise
может оказаться полезным, как только ваше приложение написано и работает.
Мой общий совет: напишите программу как можно проще, сначала сначала последовательно, а затем установите таймеры вокруг всего этого и различных основных операций. Убедитесь, что время основных операций суммируется с общим временем, чтобы вы могли быть уверены, что ничего не пропустили. Затем направьте усилия по повышению производительности на компоненты, которые на самом деле занимают больше всего времени.
Согласно упоминанию JimR о страницах размером 4 МБ в его комментарии, вы, возможно, захотите заглянуть в hugetlbfs или использовать версию Linux Kernel с прозрачной поддержкой огромных страниц (объединенная для 2.6.38, возможно, будет исправлена в более ранние версии). Это, скорее всего, сэкономит вам массу промахов TLB и убедит ядро выполнить дисковый ввод-вывод достаточно большими порциями, чтобы амортизировать любые затраты на поиск.