Как GFortran обрабатывает массивы stride=1?

#performance #fortran #compiler-construction #gfortran

Вопрос:

Когда массивы stride равны 1 (очень распространенный случай), кажется, что код, скомпилированный для общего случая (любого ненулевого stride ), часто будет неоптимальным.

С другой стороны, создание нескольких версий скомпилированных функций и подпрограмм, когда некоторые аргументы stride=1 масштабируются экспоненциально с количеством аргументов, являющихся массивами.

Какого подхода придерживается здесь ГФортран?

Комментарии:

1. Предположительно, это для фиктивных аргументов массива, и вас волнует СМЕЖНЫЙ атрибут?

2. Что-то с шагом 1 является смежным, но атрибут СМЕЖНОСТИ сильнее: он делает объект просто смежным. Это то, к чему должен обратиться тот, кто отвечает?

3. @francescalus Я никогда не использовал F2008, но, как я понимаю, матрица NxN с ведущим размером > N не будет смежной, но каждый из ее столбцов может быть смежным (шаг=1). Я не думаю, что ответ должен касаться СМЕЖНОГО тега.

4. [Привет @bobcat, вот один ответ от разработчиков gfortran groups.google.com/g/comp.lang.fortran/c/jcUiMfc4xi0/m/… Возможно, было бы полезно задать этот вопрос также на этом форуме]

5. @roygvib Спасибо. Я переориентировал вопрос на GFortran, чтобы сделать его более понятным, если какие-либо эксперты GFortran захотят написать ответ.