Опции компиляторов

Компилятор G77

Компилятор G77 (GNU Fortran )основан на стандарте ANSI Fortran 77, но он включает в себя многие особенности, определенные в стандартах Fotran 90 и Fortran 95.

Синтаксис команды:

 g77 [-c?-S?-E]
     [-g] [-pg] [-Olevel]
     [-Wwarn...] [-pedantic]
     [-Idir...] [-Ldir...]
     [-Dmacro[=defn]...] [-Umacro]
     [-foption...] [-mmachine-option...]
     [-o outfile] infile...

 Все опции поддерживаемые gcc  поддерживаются и g77. Компиляторы С и g77 интегрированы.

Обращение:

g77 [option | filename]...

Исходные файлы:

source.f, source.for, source.FOR 

Значение некоторых опций:

-c создать только объектный файл (source.o) из исходного ( source.f, .source.for, source.FOR )
-o file создать загрузочный файл с именем file (по умолчанию создается файл с именем a.out)
-llibrary использовать библиотеку liblibrary.a при редактировании связей
-Idir добавить каталог dir в список поиска каталогов, содержащих include- файлы 
-Ldir добавить директорию dir в список поиска библиотек
-O включить оптимизацию
-g создать отладочную информацию для работы с отладчиком

Для получения полного описания g77 следует смотреть документацию по GNU Fortran. Об опциях g77 можно также получить информацию с помощью команд:

info g77

man g77

 

Компилятор GCC

GСС - это свободно доступный оптимизирующий компилятор для языков C, C++.

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

Файлы с расширением .cc или .C рассматриваются, как файлы на языке C++, файлы с расширением .c как программы на языке C, а файлы c расширением .o считаются объектными.
 
Чтобы откомпилировать исходный код C++, находящийся в файле F.cc, и создать объектный файл F.o, необходимо выполнить команду:

gcc -c F.cc

Опция –c означает «только компиляция».

Чтобы скомпоновать один или несколько объектных файлов, полученных из исходного кода - F1.o, F2.o, ... - в единый исполняемый файл F, необходимо ввести команду:

gcc -o F F1.o F2.o

Опция -o задает имя исполняемого файла.

Можно совместить два этапа обработки - компиляцию и компоновку - в один общий этап с помощью команды:

gcc -o F <compile-and-link-options> F1.cc ... -lg++ <other-libraries>

<compile-and-link –options> - возможные дополнительные опции компиляции и компоновки. Опция –lg++ указывает на необходимость подключить стандартную библиотеку языка С++, <other-libraries> - возможные дополнительные библиотеки.
После компоновки будет создан исполняемый файл F, который можно запустить с помощью команды

./F <arguments>

<arguments> - список аргументов командной строки Вашей программы.
В процессе компоновки очень часто приходится использовать библиотеки. Библиотекой называют набор объектных файлов, сгруппированных в единый файл и проиндексированных. Когда команда компоновки обнаруживает некоторую библиотеку в списке объектных файлов для компоновки, она проверяет, содержат ли уже скомпонованные объектные файлы вызовы для функций, определенных в одном из файлов библиотек. Если такие функции найдены, соответствующие вызовы связываются с кодом объектного файла из библиотеки. Библиотеки могут быть подключены с помощью опции вида -lname. В этом случае в стандартных каталогах, таких как /lib , /usr/lib, /usr/local/lib будет проведен поиск библиотеки в файле с именем libname.a. Библиотеки должны быть перечислены после исходных или объектных файлов, содержащих вызовы к соответствующим функциям.

Опции компиляции

Среди множества опций компиляции и компоновки наиболее часто употребляются следующие:

  Опция   Назначение
-c Эта опция означает, что необходима только компиляция. Из исходных файлов программы создаются объектные файлы в виде name.o. Компоновка не производится.
-Dname=value Определить имя name в компилируемой программе, как значение value. Эффект такой же, как наличие строки #define name value в начале программы. Часть =value может быть опущена, в этом случае значение по умолчанию равно 1.
-o file-name Использовать file-name в качестве имени для создаваемого файла.
-lname Использовать при компоновке  библиотеку libname.so
-Llib-path
-Iinclude-path
Добавить к стандартным каталогам поиска библиотек и заголовочных файлов пути lib-path и include-path соответственно.
-g Поместить в объектный или исполняемый файл отладочную информацию для отладчика gdb. Опция должна быть указана и для компиляции, и для компоновки. В сочетании –g рекомендуется использовать опцию отключения оптимизации –O0 (см.ниже)
-MM Вывести зависимости от заголовочных файлов ,  используемых в Си или С++ программе, в формате, подходящем для утилиты   make. Объектные или исполняемые файлы не создаются.
-pg Поместить в объектный или исполняемый файл инструкции профилирования для генерации информации, используемой утилитой gprof. Опция должна быть указана и для компиляции, и для компоновки. Собранная с опцией -pg программа при запуске генерирует файл статистики. Программа gprof на основе этого файла создает расшифровку, указывающую время, потраченное на выполнение каждой функции.
-Wall Вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции программы.
-O1
-O2
-O3
Различные уровни оптимизации.
-O0 Не оптимизировать. Если вы используете многочисленные -O опции с номерами или без номеров уровня, действительной является последняя такая  опция.
-I Используется для добавления ваших собственных каталогов для поиска заголовочных файлов в процессе сборки
-L Передается компоновщику. Используется для добавления ваших собственных каталогов для поиска библиотек в процессе сборки.
-l Передается компоновщику. Используется для добавления ваших собственных библиотек для поиска в процессе сборки.

Компилятор GFortran

GFortran - это название компилятора языка программирования Фортран, входящего в коллекцию компиляторов GNU.

Сборка FORTRAN-программы:
Синтаксис

gfortran [-c?-S?-E]
             [-g] [-pg] [-Olevel]
             [-Wwarn...] [-pedantic]
             [-Idir...] [-Ldir...]
             [-Dmacro[=defn]...] [-Umacro]
             [-foption...]
[-mmachine-option...]
             [-o outfile] infile...

GFortran опирается на GCC, и, следовательно, разделяет большинство его характеристик. В частности, параметры для оптимизации и генерации отладочной информации у них совпадают.
GFortran используется для компиляции исходного файла, source.f90, в объектный файл, object.o или исполняемый файл, executable. Одновременно он генерирует модуль файлов описания встречающихся модулей, так называемый  nameofmodule.mod.

Для компиляции исходного файла source.f90, можно  запустить: gfortran source.f90

Выходной файл будет автоматически имени source.o. Это объектный файл, который не может быть исполнен. После того как вы собрали некоторые исходные файлы, вы можете соединить их вместе с необходимыми библиотеками для создания исполняемого файла. Это делается следующим образом: gfortran -o executable object1.o object2.o..., где исполняемым будет executable, objectX.o - объектные файлы, которые могут быть созданы, как указано выше, или в равной степени другими компиляторами  из источников в другом языке. Если  опущено имя  исполняемого файла, то  исполняемый файл будет с названием a.out. Исполняемый файл может быть выполнен, как и в любой другой программе. Можно также пропустить отдельный этап компиляции и ввести такую команду: gfortran o executable source1.f90 source2.f90, которая будет осуществлять сбор исходных файлов source1.f90 и source2.f90, связь и создаст исполняемый файл. Вы также можете поместить объектные  файлы в этой командной строке, они будут автоматически присоединены.

Опции компилятора GFortran

  Опция   Назначение
-c Эта опция означает, что необходима только компиляция. Из исходных файлов программы создаются объектные файлы в виде name.o. Компоновка не производится.
-Dname=value Определить имя name в компилируемой программе, как значение value. Эффект такой же, как наличие строки #define name value в начале программы. Часть =value может быть опущена, в этом случае значение по умолчанию равно 1.
-o file-name Использовать file-name в качестве имени для создаваемого файла.
-lname Использовать при компоновке  библиотеку libname.so
-Llib-path
-Iinclude-path
Добавить к стандартным каталогам поиска библиотек и заголовочных файлов пути lib-path и include-path соответственно.
-g Поместить в объектный или исполняемый файл отладочную информацию для отладчика gdb. Опция должна быть указана и для компиляции, и для компоновки. В сочетании –g рекомендуется использовать опцию отключения оптимизации –O0 (см.ниже)
-MM Вывести зависимости от заголовочных файлов ,  используемых в Си или С++ программе, в формате, подходящем для утилиты   make. Объектные или исполняемые файлы не создаются.
-pg Поместить в объектный или исполняемый файл инструкции профилирования для генерации информации, используемой утилитой gprof. Опция должна быть указана и для компиляции, и для компоновки. Собранная с опцией -pg программа при запуске генерирует файл статистики. Программа gprof на основе этого файла создает расшифровку, указывающую время, потраченное на выполнение каждой функции.
-Wall Вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции программы.
-O1
-O2
-O3
Различные уровни оптимизации.
-O0 Не оптимизировать. Если вы используете многочисленные -O опции с номерами или без номеров уровня, действительной является последняя такая  опция.
-I Использует для добавления ваших собственных каталогов  поиска заголовочных файлов в процессе сборки
-L Передает компоновщику. Использует для добавления ваших собственных каталогов  поиска библиотек в процессе сборки.
-l Передает компоновщику. Использует для добавления ваших собственных библиотек  поиска в процессе сборки.

Компилятор PGCC

Компилятор Portland Group C (PGCC).

Компилятор PGCC для процессоров AMD64 и IA32/EM64T производит компиляцию программ C и линкует согласно опциям в командной строке.

Синтаксис команды:

pgcc [ -параметры ]... sourcefile...

 

  • Параметры могут отсутствовать или содержать опции копилятора
  • Суффиксы sourcefile указывают на вид файла:
         .c   - файл на C; обрабатывается препроцессором перед компиляцией; компилируется
         .i   - файл на C после обработки препроцессора; компилируется
         .s   - ассемблерный файл; передаётся ассемблеру
         .S   - ассемблерный файл; обрабатывается препроцессором; передаётся ассемблеру
         .o   -объектный файл; передаётся компоновщику
         .a   - библиотечный файл; передаётся компоновщику

Полный список опций компилятора можно посмотреть по команде man pgcc.
Некоторые важные опции компиляции для PGCC приведены ниже:

  Опция   Назначение
Эта опция означает, что необходима только компиляция. Из исходных файлов программы создаются объектные файлы.
-C Включает  проверки выхода индекса за границы массива
-O0 Отключает оптимизацию.
-О1 Оптимизация по размеру. Не использует методов оптимизации, которые могут увеличить размер кода. Создает в большинстве случаев самый маленький размер кода.
-O2 или -O Оптимизация устанавливаемая по умолчанию.
-O3 Задействует методы оптимизации из -O2 и, дополнительно, более агрессивные методы оптимизации, которые подходят не для всех программ.
-Os Включает оптимизацию по скорости, но при этом отключает некоторые оптимизации, которые могут привести к увеличению размеров кода при незначительном выигрыше в скорости.
-fast Включает в себя -O2 и ряд других опций, таких как использование векторизации с поддержкой SSE инструкций. Использование -fast понижает точность вычислений.
-g Включает информацию об отладке.
-fastsse То же самое что и -fast -Mipa=fast - включает межпроцедурный анализ.
-I Использует для добавления ваших собственных каталогов  поиска заголовочных файлов в процессе сборки.
-L Передает компоновщику. Использует для добавления ваших собственных каталогов  поиска библиотек в процессе сборки.
-l Передает компоновщику. Использует для добавления ваших собственных библиотек  поиска в процессе сборки.

Компилятор PGFortran

Компилятор The Portland Group Inc. Fortran (PGFortran).

Компилятор PGFortran  для процессоров AMD64 и IA32/EM64T производит компиляцию программ на Фортране и линкует согласно опциям в командной строке. PGFortran является интерфейсом для компиляторов pgf90 и pgf95.

Синтаксис команды:

pgfortran [ -параметры ]... sourcefile...
  • Параметры могут отсутствовать или содержать опции копилятора
  • Суффиксы sourcefile указывают на вид файла:
         .f       - файл на Фортране  с фиксированным форматом; компилируется
         .F      - файл на Фортране с фиксированным форматом; после обработки препроцессором -  компилируется
         .f90   - файл на Фортране в свободном формате; компилируется
         .F90   - файл на Фортране в свободном формате; после обработки препроцессором - компилируется
         .f95   -  файл на  Фортране в свободном формате; компилируется
         .F95  -  файл на  Фортране в свободном формате; после обработки препроцессором - компилируется
         .for    - файл на Фортране  с фиксированным форматом; компилируется
         .FOR  - файл на Фортране с фиксированным форматом; после обработки препроцессором - компилируется
         .fpp    - файл на Фортране с фиксированным форматом; после обработки препроцессором -  компилируется
         .s        - ассемблерный файл; передаётся ассемблеру
         .S       - ассемблерный файл; обрабатывается препроцессором; передаётся ассемблеру
         .o       - объектный файл; передаётся компоновщику
         .a       - библиотечный файл; передаётся компоновщику

Полный список опций компилятора можно посмотреть по команде man pgfortran.
Некоторые важные опции компиляции для PGFortran приведены здесь.

Опции компилятора PGFortran

  Опция   Назначение
-o file

Использует file как имя выходного исполняемого файла программы, вместо имени по умолчанию - a.out. Если используется совместно с опцией или -S и с одним  входным  файлом, то file используется в качестве имени объектного или ассемблерного выходного файла.

-S

Пропускает этапы ассемблирования и линкования. Для каждого файла с именем, например, file.f создает при выходе из компиляции  файл с именем file.s . См. также .

-fastsse

Выбирает основные  оптимальные установки для  процессора, который поддерживает SSE инструкции (Pentium 3 / 4, AthlonXP / MP, Opteron) и SSE2 (Pentium 4, Opteron). Используйте в  pgf90 -fastsse  -help чтобы просмотреть установки.

-C Включает  проверки выхода индекса за границы массива также как и -Mbounds
-i2 Целые и логические переменные длиной 2 байта .
-i4 Целые и логические переменные длиной 4 байта .
-i8 Целые и логические переменные длиной 8 байт . Устанавливается по умолчанию. Для операций над целыми числами отводится 64 бита.
-O[N] Устанавливает уровень оптимизации равным N. -O0 до -O4по умолчанию устанавливается  -O2.
Если не указана опция -O и если не заказана -g, то устанавливается -O1 , но если заказана -g, то устанавливается -O0. Когда номер у -O не указан, то устанавливается -O2.
-O0 Без оптимизации.
-О1

Оптимизация  в рамках основных блоков. Выполняется некоторое распределение регистров.  Глобальная оптимизация не выполняется.

-O2 Выполняется оптимизация -O1. Кроме того, выполняются традиционные скалярные оптимизации, такие как признание индукции и инвариант цикла движения глобального оптимизатора.
-O3

Задействует методы оптимизации из -O1 и -O2 и, дополнительно, более агрессивные методы оптимизации циклов и доступа к памяти, такие как подстановка скаляров, раскрутка циклов. Эти агрессивные методы оптимизации могут, в ряде случаев, и замедлить работу приложений .

-O4  Выполняет все уровни оптимизации -O1,-O2, -O3, кроме того, выполняет  оптимизацию  выражений с плавающей точкой.
-fpic

Передаёт  компилятору  для генерации позиционно-независимого кода, который может быть использован при  создании общих объектных файлов (динамически связываемых библиотек).

-gopt

Сообщает компоновщику включение отладочной информации без отключения оптимизации

-s

Использует линковщик;  таблицы символьной  информации, оптимизации. Использование может  привести к неожиданным результатам при отладке   с оптимизацией, она предназначена для использования с другими опциями , которые используют отладочную информацию.

-pg Устанавливает  профилирование; влечёт   установку -Mframe
-r4 Переменные DOUBLE PRECISION рассматриваются как REAL.
-r8 Переменные REAL  рассматриваются как  DOUBLE PRECISION  . Это тоже самое, что и указать -Mr8 и -Mr8intrinsics.
-fast Обеспечивает ускоренный метод   нескольких оптимизаций на время выполнения программы.
Устанавливает параметры для повышения производительности в размере не менее 2, см.-O. Используйте pgf90 -fast -help для просмотра эквивалентных переключателей.
-g Создаёт отладочную информацию. Опция устанавливает уровень оптимизации до нуля, если только заказана опция -O . Процесс может привести к неожиданным результатам, если заказан уровень оптимизации отличный от нуля. Сгенерированный код будет работать медленнее при -O0, чем при других уровнях оптимизации.
-I Добавляет ваши собственные каталоги  поиска заголовочных файлов в процессе сборки
-L Передает компоновщику. Добавляет ваши собственные каталоги  поиска библиотек в процессе сборки.
-l Передает компоновщику. Добавляет ваши собственные библиотеки   поиска в процессе сборки.

Опции компилятора ICC

icc -команда для вызова компилятора Intel(R) (C или C++).

Синтаксис команды:

icc [параметры] file1 [file2] ...

  • параметры  могут отсутствовать или содержать опции компилятора
  • fileN – это файлы на языке  C или C++, сборочные файлы, объектные файлы, библиотеки объектов или другие линкуемые  файлы

Полный список опций можно посмотреть по команде man icc .

Некоторые важные опции компиляции для ICC приведены ниже:

  Опция   Назначение
Эта опция означает, что необходима только компиляция. Из исходных файлов программы создаются объектные файлы.
-C Включает  проверки выхода индекса за границы массива.
-O0 Отключает оптимизацию.
-О1 Оптимизация по размеру. Не использует методов оптимизации, которые могут увеличить размер кода. Создает в большинстве случаев самый маленький размер кода.
-O2 или -O Оптимизация устанавливаемая по умолчанию.
-O3 Задействует методы оптимизации из -O2 и, дополнительно, более агрессивные методы оптимизации, которые подходят не для всех программ.
-Os Включает оптимизацию по скорости, но при этом отключает некоторые оптимизации, которые могут привести к увеличению размеров кода при незначительном выигрыше в скорости.
-fast Обеспечивает ускоренный метод для  нескольких оптимизаций на время выполнения программы.
Устанавливает -xT -O3 -ipo -no-prec-div -static параметры для повышения производительности:
• -O3 (см. выше)
• -ipo (включает межпроцедурную оптимизацию между файлами)
• -static (предотвращает линкование с общими библиотеками). 
Параметры задаются списком и не могут быть заданы по отдельности.
-g Включает информацию об отладке.
-I Используется для добавления ваших собственных каталогов  поиска заголовочных файлов в процессе сборки.
-L Передается компоновщику. Используется для добавления ваших собственных каталогов  поиска библиотек в процессе сборки.
-l Передается компоновщику. Используется для добавления ваших собственных библиотек  в процессе сборки.

Опции компилятора Intel Fortran

ifort -команда для вызова компилятора Intel(R) Fortran.

Синтаксис команды:

ifort [параметры] file1 [file2] ...
  • параметры  могут отсутствовать или содержать опции компилятора
  • fileN – это файлы на языке  Fortran, сборочные файлы, объектные файлы, библиотеки объектов или другие линкуемые  файлы

Полный список опций можно посмотреть по команде man ifort .

Команда ifort интерпретирует входные файлы по суффиксу имени файла следующим образом:
Имена файлов с суффиксом .f90 интерпретируются как файлы в свободной форме записи  на Fortran 95/90.
Имена файлов с суффиксом .f, .for или .ftn интерпретируются как фиксированная форма записи для  Fortran  66/77  файлов.

В Fortran 90/95, наряду с фиксированным форматом исходного текста программы, разрешен свободный формат. Свободный формат допускает помещение более одного оператора в строке, при этом в качестве разделителя используется точка с запятой. Признак продолжения оператора на строку продолжения - символ & - указывается в конце той строки, которую надо продолжить. Комментарии записываются после символа восклицательный знак в начале строки или в любой позиции строки после оператора. В свободном формате пробелы являются значащими.

Некоторые важные опции компиляции для Intel Fortran приведены ниже:

  Опция   Назначение
-free Указывает, что исходные файлы находятся в свободном формате.
По умолчанию, формат исходного файла определяется суффиксом файла
-fixed Указывает, что  исходные файлы находятся в фиксированном формате. По умолчанию, формат исходного файла определяется суффиксом файла
Эта опция означает, что необходима только компиляция. Из исходных файлов программы создаются объектные файлы
-C Включает  проверки выхода индекса за границы массива
-i2 Целые и логические переменные длиной 2 байта (тоже, что и опция -integer-size 16). По умолчанию целочисленный размер равен 32 разряда.
-i4 Целые и логические переменные длиной 4 байта (тоже, что и опция -integer-size 32 ). Это значение устанавливается по умолчанию.
-i8 Целые и логические переменные 8 байт (тоже ,  что и опция -integer-size 64). По умолчанию целочисленный размер равен 32 разряда.
-O0 Отключает оптимизацию
-О1 Оптимизация по размеру. Не использует методов оптимизации, которые могут увеличить размер кода. Создает в большинстве случаев самый маленький размер кода.
-O2 или -O Максимизация скорости. Как правило, создает более быстрый код, чем -O1. Эта опция устанавливается по умолчанию для оптимизации, если не указана  -g
-O3 Задействует методы оптимизации из -O2 и, дополнительно, более агрессивные методы оптимизации циклов и доступа к памяти, такие как подстановка скаляров, раскрутка циклов, подстановка кода для избегания ветвлений, блокирование циклов для обеспечения более эффективного использования кэш-памяти и, только на системах архитектуры IA-64, дополнительная подготовка данных. Данная опция особенно рекомендуется для приложений, где есть циклы, которые активно используют вычисления с плавающей точкой или обрабатывают большие порции данных. Эти агрессивные методы оптимизации могут в ряде случаев, и замедлить работу приложений других типов по сравнению с использованием -O2.
-OpenMP Включает поддержку стандарта OpenMP 2.0
Распараллеливает программу. Позволяет параллелизацию для создания многопоточного кода на основе команд OpenMP. Этот опция  может быть выполнена в параллельном режиме  на однопроцессорных и многопроцессорных системах. OpenMP-опция работает как с-O0 (без оптимизации) и c любым уровнем оптимизации -O. Указание с-O0 помогает для отладки OpenMP приложений.
-OpenMP-stubs Включает выполнение программ OpenMP в последовательном режиме. Директивы OpenMP игнорируются, если стоят заглушки (stubs) для OpenMP
-p Порождает дополнительный код для записи профилирующей информации, подходящей  для  анализирующей  программы PROF. Вы должны использовать эту опцию при компиляции исходного файла, о котором вы хотите получить информацию, и вы также должны использовать ее при линковке.
-parallel Включает автоматическое распараллеливание   циклов, для которых это  безопасно. Чтобы использовать эту опцию, вы также должны указать-O2 и-O3.
-r8 Вещественные  и комплексные переменные длиной  8 байт. Переменные REAL рассматриваются как DOUBLE PRECISION (REAL(KIND=8)) и комплексные  рассматриваются в качестве DOUBLE COMPLEX (COMPLEX(KIND=8)). Это тоже самое, что и указать -real-size 64  или -autodouble.
-r16 Вещественные и комплексные переменные  длиной 16 байт. Переменные REAL  рассматриваются как  REAL (REAL(KIND=16), COMPLEX и DOUBLE COMPLEX  рассматривается как COMPLEX (COMPLEX(KIND=16)). Это тоже самое, что и указать -real-size 128.
-save Сохраняет  переменные, за исключением тех, которые объявлены, как AUTOMATIC, в статической памяти (тоже, что и  noauto-noautomatic). По умолчанию используется –autoscalar, однако, если Вы укажите -recursive или -OpenMP, то по умолчанию используется AUTOMATIC
-stand Заставляет компилятор выдавать   сообщения компиляции для нестандартных элементов языка.
-fast Обеспечивает ускоренный метод для  нескольких оптимизаций на время выполнения программы.
Устанавливает следующие параметры для повышения производительности:
• -O3
• -ipo (включает межпроцедурную оптимизацию между файлами)
• -static (предотвращает линкование с общими библиотеками).
-g Помещает в объектный или исполняемый файл отладочную информацию для отладчика gdb. Опция должна быть указана и для компиляции, и для компоновки. В сочетании –g рекомендуется использовать опцию отключения оптимизации –O0
-check bounds Выполняет динамическую проверку выхода индекса за границы массива. Проверка может увеличить время выполнения программы.
-I Использует для добавления ваших собственных каталогов  поиска заголовочных файлов в процессе сборки
-L Передает компоновщику. Использует для добавления ваших собственных каталогов  поиска библиотек в процессе сборки.
-l Передает компоновщику. Использует для добавления ваших собственных библиотек  поиска в процессе сборки.