Вы должны помнить, что выполнение NxN, умноженное на NxN, требует 2xN ^ 3 вычислений. Несмотря на это, это не должно занять несколько часов. Вы должны получить улучшение путем транспонирования второй матрицы (около 30%), но на самом деле это не должно занимать часы.
Так что, когда вы 2х N, вы увеличиваете время на 8х. Хуже того, матрица, которая вписывается в ваш кэш, очень быстрая, но требует больше, чем несколько МБ, и они должны исходить из основной памяти, что замедляет ваши операции еще в 2-5 раз.
Размещение данных на диске действительно замедлит процесс вычисления, я советую вам делать это только в том случае, если мартикс не помещается в памяти, но это сделает его в 10-100 раз медленнее, поэтому покупка немного большего объема памяти - хорошая идея. , (В вашем случае ваши матрицы должны быть достаточно маленькими, чтобы поместиться в память)
Я попробовал Jama, которая является очень простой библиотекой, в которой вместо одного используются двумерные массивы, а 4-летнему labtop потребовалось 7 минут. Вы должны быть в состоянии получить половину этого времени, просто используя новейшее оборудование и с несколькими потоками сократить это менее одной минуты.
РЕДАКТИРОВАТЬ: Используя Xeon X5570, Джама умножил две матрицы 5000x5000 за 156 секунд. Используя параллельную реализацию, которую я написал, сократите это время до 27 секунд.