編譯器flags

PGI

fortran:

  • -Mfixed、-Mnofree、-Mnofreeform:強制對源文件按照固定格式進行語法分析,默認.f或.F文件爲固定格式

  • -i2:將INTERGER變量按照2比特處理

  • -i4:將INTERGER變量按照2比特處理

  • -i2:將INTERGER變量按照2比特處理

GCC

-Wl,option Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas. You can use this syntax to pass an argument to the option. For example, -Wl,-Map,output.map passes -Map output.map to the linker. When using the GNU linker, you can also get the same effect with -Wl,-Map=output.map.

-Wl選項告訴編譯器將後面的參數傳遞給鏈接器

-Wline-truncation
			Warn when a source code line will be truncated. This option is implied by -Wall. 			For free-form source code, the default is -Werror=line-truncation such that 						truncations are reported as error.
解決辦法:試試gfortran的-ffree-line-length-none
-Wdisabled-optimization 當某趟優化被禁用時給出警告
-fguess-branch-probability 啓用分支預測
-foptimize-register-move 進行全寄存器傳送優化
-foptimize-sibling-calls 優化同級遞歸和尾遞歸
-fthread-jumps 進行跳轉線程優化
-ffree-form
-ffixed-form
指定源文件使用的佈局。Fortran 90中引入了自由格式佈局。固定格式傳統上用於較舊的Fortran程序。如果未指定任何選項,則源表單由文件擴展名確定。

-ffixed-line-length-n
Set column after which characters are ignored in typical fixed-form lines in the source file, and, unless -fno-pad-source, through which spaces are assumed (as if padded to that length) after the ends of short fixed-form lines.

Popular values for n include 72 (the standard and the default), 80 (card image), and 132 (corresponding to “extended-source” options in some popular compilers). n may also be ‘none’, meaning that the entire line is meaningful and that continued character constants never have implicit spaces appended to them to fill out the line. -ffixed-line-length-0 means the same thing as -ffixed-line-length-none.
-ffree-form                 假定源文件是自由格式
Fixed Format(固定格式) Free Format (自由格式) Fixed Format(固定格式)是屬於舊式的寫法,它在編寫版面上有很多 限制。
如果想用調試器執行一個可執行文件, 在用gcc編譯時必須加上-g選項:

gcc -o sum sum.c -g

加上-g選項以後,gcc在編譯是會做以下額外的操作:

1. 創建符號表,符號表包含了程序中使用的變量名稱的列表。

2. 關閉所有的優化機制,以便程序執行過程中嚴格按照原來的C代碼進行。

當使用的優化級別爲-O1或更高時,編譯器會爲cpp設置宏__OPTIMIZE__。

Fortran缺省使用cpp。只有你在命令行上指定了-ftpp選項纔會使用Fortran預處理程序。

OpenMPI

CPPFLAGS
Flags added when invoking the preprocessor (C or C++)
LDFLAGS
Flags added when invoking the linker (C, C++, or Fortran)
LIBS
Libraries added when invoking the linker (C, C++, or Fortran)
CC
C compiler
CFLAGS
C compiler flags
CXX
C++ compiler
CXXFLAGS
C++ compiler flags
FC
Fortran compiler
FCFLAGS
Fortran compiler flags

優化選項

-O參數只有5個級別,並不是設置的越高越好(以前的GCC支持很高的級別,但是現在確實只有5級)

-O0:關閉所有優化選項

-O1:基本優化,編譯器會生成更快的代碼

-O2:-O1的升級版,推薦使用

-O3:這是目前最高的優化級別,它會使用更多的編譯時間,雖然它生成的代碼只會比-O2塊一點點(GCC3.x中是這樣的,但是在GCC4.x中有時候可能還沒有-O2快),但是它會增大二進制文件的體積並讓他們更消耗內存,因此在GCC4.x中-O3是不推薦的。

-Os:這個級別是用來優化代碼尺寸的,他只是給一些CPU緩存或是磁盤空間小的機器使用

-O0: 無優化。

-O和-O1: 使用能減少目標代碼尺寸以及執行時間並且不會使編譯時間明顯增加的優化。在編譯大型程序的時候會顯著增加編譯時內存的使用。

-O2: 包含-O1的優化並增加了不需要在目標文件大小和執行速度上進行折衷的優化。編譯器不執行循環展開以及函數內聯。此選項將增加編譯時間和目標文件的執行性能。

-Os: 可以看成 -O2.5,專門優化目標文件大小,執行所有的不增加目標文件大小的-O2優化選項,並且執行專門減小目標文件大小的優化選項。適用於磁盤空間緊張時使用。但有可能有未知的問題發生,況且目前硬盤容量很大,常用程序無必要使用。

-O3: 打開所有 -O2 的優化選項外增加 -finline-functions、-funswitch-loops、-fgcse-after-reload 優化選項。相對於 -O2 性能並未有較多提高,編譯時間也最長,生成的目標文件也更大更佔內存,有時性能不增反而降低,甚至產生不可預知的問題(包括錯誤),所以並不被大多數軟件安裝推薦,除非有絕對把握方可使用此優化級別。

修改GCC編譯參數,提高編譯優化級別,此方法適用於所有通過GCC編譯安裝的程序,不止Nginx。穩妥起見用 -O2,這也是大多數軟件編譯推薦的優化級別。查看Nginx源碼文件 auto/cc/gcc,搜索NGX_GCC_OPT,默認GCC編譯參數爲-O,可以直接修改內容爲NGX_GCC_OPT="-O2"或者在 ./configure配置時添加–with-cc-opt=’-O2’選項。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章