Что касается моего кода на C++, я задал этот вопрос около двух дней назад. Но теперь я понимаю, что мне нужно кодировать на Фортране, поскольку ядра, которые я пишу, будут частью существующего приложения, написанного на Фортране 77. Поэтому я снова задаю этот вопрос, на этот раз в контексте Фортрана. Спасибо.
У меня есть разные функции для умножения квадратных матриц в зависимости от размера матрицы, который варьируется от 8x8 до 20x20. Функции отличаются друг от друга, поскольку каждая из них использует разные стратегии оптимизации, а именно разные перестановки циклов и разные коэффициенты развертывания циклов. Размер матрицы не меняется в течение жизни программы и известен во время компиляции. Моя цель — сократить время на принятие решения о том, какую функцию следует использовать. Например, наивная реализация:
if (matrixSize == 8) C = mxm8(A, B);
else if (matrixSize == 9) C = mxm9(A,B);
...
else if (matrixSize == 20) C = mxm20(A,B);
Время, затрачиваемое на то, чтобы решить, какую функцию использовать для каждого матричного умножения, в этом случае нетривиально, особенно потому, что матричное умножение часто происходит в коде. Заранее спасибо за любое предложение о том, как справиться с этим в Fortran 77.