Улучшение производительности компилятора Фортрана (время компиляции и память) - PullRequest
1 голос
/ 12 марта 2019

У меня есть кроссплатформенный проект, созданный с помощью cmake и make или visual studio, в основном с исходным кодом Fortran.Размер исходных файлов варьируется от порядка 1000 строк (от 10 с до 100 с КБ) до самых больших из 31000 (1,3 МБ) строк.Тем не менее, время компиляции составляет около 20 минут, даже если распараллелено с make -jN.Существует 14 модулей, которые в конечном итоге импортируются и связаны для создания окончательного исполняемого файла.Модули могут быть статически или динамически связаны.Это последний шаг, который занимает все время: сборка исходных файлов для исполняемого файла и связывание с библиотеками модулей.Я использую компиляторы gfortran (gcc@7.3) и ifort (intel 2017).

Файл из 31 000 строк, упомянутый выше, импортируется в исполняемый исходный код, а не в любую из базовых библиотек.Я попытался разбить исполняемый источник на более мелкие файлы, хотя они относительно малы для начала.Однако исполняемый источник в конечном итоге импортирует значительную часть связанных библиотек.Я также попытался импортировать только те части больших библиотек, которые требуются, а не все.Например, я заменил USE ModuleSubs на USE ModuleSubs, ONLY: ElemOpen в нескольких модулях, но это пока не повлияло на скорость компиляции.Тем не менее, это сложно для точного определения времени, так как я каждый раз меняю разные файлы, что означает, что каждая попытка компиляции отличается от предыдущей.

В некоторых системах (например, cygwin и докер-контейнер),компилятору fortran не хватает памяти и прерывается с этой ошибкой:

f951: out of memory allocating 65536 bytes after a total of 2601426944 bytes

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

Я хочу понять, какие факторы вызывают медленное время компиляции и потреблять память на этапе компиляции.

...