Программы на FORTRAN 77 быстрее, чем на Fortran 90? - PullRequest
7 голосов
/ 03 января 2012

Сегодня я читал код из некоторых очень популярных числовых библиотек, написанных на FORTRAN 77, таких как QUADPACK ( последнее обновление в 1987 ), и мне было интересно, есть ли причина не переписывать эти библиотеки в Fortran 90, помимо большого объема работы, которую он будет выполнять, учитывая большие улучшения, которые Фортран 90 внес в язык, включая исходный код свободной формы, улучшенные структуры управления, позволяющие забыть GO TO, векторизацию, интерфейсы и т. Д.

Это потому, что компиляторы FORTRAN 77 производят более оптимизированный код, может, лучше для параллельного выполнения? Обратите внимание, что я даже не говорю о Fortran 2003, например, которому всего 8 лет: я говорю о Fortran 90, поэтому я предполагаю, что он достаточно распространен и компиляторы готовы. Во всяком случае, я не имею связи с индустрией.

Редактировать: Джаннеб прав: LAPACK на самом деле написан на Фортране 90.

Ответы [ 4 ]

17 голосов
/ 03 января 2012

Ну, как и в случае с "pst", "большой объем работы, который он излагает" - довольно серьезная причина.

Некоторые дополнительные незначительные моменты:

  • LAPACK - это Fortran 90, в наши дни, в том смысле, что последняя версия больше не компилируется с компилятором F77.При этом, это далеко не переписано, только несколько вещей, которые были изменены.

  • Большинство функций F90, о которых вы упомянули, упрощают и ускоряют написание надежных программ.необходимо ускорить выполнение получающихся программ.

  • Не так давно бесплатные компиляторы F90 были недоступны (многие использовали g77!), поэтому для широко используемой библиотекикак LAPACK, не использующий функции F90, вероятно, было сознательным решением.

  • Компилятор F77, как правило, не производит более быстрый код, чем компилятор F90.Если не по какой-либо другой причине, то потому, что она, вероятно, устарела и не может быть оптимизирована для последних процессоров.Современный компилятор Фортрана может создавать более быстрый код из F77, чем из эквивалентной программы F90, которая широко использует такие вещи, как указатели и т. Д., Но это сильно зависит от рассматриваемой программы (например, использование указателей и более изящных структур данных может позволить использовать более качественныеалгоритмы, позволяющие программе F90 производить результаты быстрее, даже если она может выполняться при более низком среднем использовании арифметических единиц ЦП.

  • Векторизация, если под этим подразумевается синтаксис массива F90 +, главным образом, для удобства программиста, а не для ускорения написания кода.Компетентный компилятор также будет векторизовать эквивалентный цикл DO.

6 голосов
/ 03 января 2012

Нет причин вкладывать кучу работы, чтобы (возможно) улучшить что-то, что работает хорошо.Следует отметить, что, хотя Fortran 90 представил много новых функций, он не изменил язык.Помните, что Fortran 90 Standard обратно совместим с FORTRAN 77. Современный компилятор также сможет оптимизировать код FORTRAN 77.В Fortan 90 введены функции (например, указатели), которые снижают эффективность, и этого следует избегать, если заботиться о времени выполнения, например, в HPC.

Так что на самом деле это ничего не изменит.Для современного компилятора хорошо написанный FORTAN 77 столь же оптимизируем, как пирог без глазури.Здесь, в случае с Fortran 90 и выше, глазурь выглядит лучше, чем на вкус - это удобно для программиста, но не обязательно повышает эффективность программы.

5 голосов
/ 04 января 2012

Есть одна главная причина, почему программы на Fortran 77 могут быть быстрее:

Выделенные массивы (Fortran 90) намного медленнее, чем объявленные во время компиляции. Оба не помещаются в одно и то же место в памяти. Это стек по сравнению с управлением кучей памяти в Fortran.

Смотрите здесь, например,

При этом в Fortran 90+ выполняются быстрые операции с массивами «все в блоке». Я большой поклонник gcc-fortran (gfortran) и без какой-либо опции компиляции, для массива размером N

a = a + 1

в 4 раза быстрее, чем

do i = 1 , N
  a(i) = a(i) + 1
end do

Этот стенд для меня, на моей машине, на gfortran без опции оптимизации и без всяких претензий, что это профессиональный бенчмаркинг.

Распределение «проблема» (которая является не проблемой, а особенностью) - это не архитектура, компилятор или что-либо другое, а стандарт Fortran.

1 голос
/ 03 января 2012

Будет ли программа F77 медленнее или быстрее, чем эквивалентная программа F90, переписанная с более новым синтаксисом , является предметом обсуждения, но давайте пока проигнорируем это.

Что следует принять во внимание, что на самом деле никто не заботится о скорости только .Людей волнует только скорость исполнения в тех случаях , где это имеет значение и где это бизнес прибыльный (я уверенесть лучший термин для этого, но прямо сейчас ничего не приходит в голову ... экономически выгодно возможно).

Поскольку эти две (довольно популярные библиотеки) все еще находятся в F77, этоОчевидно, что по общему мнению, затраты на их переписывание перевешивают полученные выгоды, выгоды с точки зрения скорости выполнения и выгоды с точки зрения экономической эффективности всего этого процесса.

...