[Go to BBS]
All articles in a thread
SubjectGCC link-time optimization
Article No821
Date: 2010/06/08(Tue) 19:46:54
ContributorAkio Morita
GCC 4.5.0以降では、link-time optimizationが実装されていますが、
試して見たところベンチマーク(bench2.sad)の範囲では、一部のスコアがかなり上がるようです

環境は、以下の通り
Quad-Core AMD Opteron(tm) Processor 2376 (2300.11-MHz K8-class CPU)
FreeBSD/amd64 8.1-PRERELEASE #1: Mon May 31 14:08:35 JST 201
gcc46 (GCC) 4.6.0 20100605 (experimental)
SAD amorita branch Rev.3081

with LTO(-g -O3 -fwhopr -march=native -msse3 -mfpmath=sse)
                  Average          Sigma
 Function         1.8810231        .006087917714   
 Optics           1.02328445       .001274970979   
 Tracking         3.0991447        .007066664866   
 Matching         .4202354         9.83683378671E-4
 Overall          .092105686682    1.64455657784E-4

without LTO(-g -O3 -march=native -msse3 -mfpmath=sse)
                  Average          Sigma
 Function         1.90751815       .009364446848   
 Optics           2.7036258        .006689210217   
 Tracking         3.00537145       .006988694385   
 Matching         .18070175        5.42954381626E-4
 Overall          .10676813006     3.17633835754E-4

Matching Testのスコアが悪化しているのに、Optics Testのスコアが上がっているのは
かなり謎ですが、正しく動いているとすればチューニング次第ではかなり有望そうです。

SubjectRe: GCC link-time optimization
Article No822
Date: 2010/06/08(Tue) 20:00:23
ContributorAkio Morita
出来上がった実行バイナリは、strip状態で 27%ほど肥大化しています

with LTO(-g -O3 -fwhopr -march=native -msse3 -mfpmath=sse)
-rwxr-xr-x 1 amorita user 3617432 6月 8 19:57 sad1-LTO-s.exe*

without LTO(-g -O3 -march=native -msse3 -mfpmath=sse)
-rwxr-xr-x 1 amorita user 2848440 6月 8 19:57 sad1-NoLTO-s.exe*

SubjectRe: GCC link-time optimization
Article No823
Date: 2010/06/25(Fri) 12:46:00
ContributorAkio Morita
> GCC 4.5.0以降では、link-time optimizationが実装されていますが、
> 試して見たところベンチマーク(bench2.sad)の範囲では、一部のスコアがかなり上がるようです
>
> 環境は、以下の通り
> Quad-Core AMD Opteron(tm) Processor 2376 (2300.11-MHz K8-class CPU)
> FreeBSD/amd64 8.1-PRERELEASE #1: Mon May 31 14:08:35 JST 201
> gcc46 (GCC) 4.6.0 20100605 (experimental)
> SAD amorita branch Rev.3081
>
> with LTO(-g -O3 -fwhopr -march=native -msse3 -mfpmath=sse)
> Average Sigma
> Function 1.8810231 .006087917714
> Optics 1.02328445 .001274970979
> Tracking 3.0991447 .007066664866
> Matching .4202354 9.83683378671E-4
> Overall .092105686682 1.64455657784E-4
>
> without LTO(-g -O3 -march=native -msse3 -mfpmath=sse)
> Average Sigma
> Function 1.90751815 .009364446848
> Optics 2.7036258 .006689210217
> Tracking 3.00537145 .006988694385
> Matching .18070175 5.42954381626E-4
> Overall .10676813006 3.17633835754E-4
>
> Matching Testのスコアが悪化しているのに、Optics Testのスコアが上がっているのは
> かなり謎ですが、正しく動いているとすればチューニング次第ではかなり有望そうです。
>
3081のLTOバイナリですが、正しく動いていないようです。
どうやら、LTO時に block data構文で初期化される common blockが正しく初期化されないために、
各種フラグの状態(RFSW等々)が異なる状態で benchmarkが走っているようです。

SubjectRe^2: GCC link-time optimization
Article No824
Date: 2010/06/25(Fri) 13:13:24
ContributorAkio Morita
> 3081のLTOバイナリですが、正しく動いていないようです。
> どうやら、LTO時に block data構文で初期化される common blockが正しく初期化されないために、
> 各種フラグの状態(RFSW等々)が異なる状態で benchmarkが走っているようです。
>
まともに動いているように見える作業途中のRevision 3097での benchmark結果

環境は、以下の通り
Quad-Core AMD Opteron(tm) Processor 2376 (2300.11-MHz K8-class CPU)
FreeBSD/amd64 8.1-PRERELEASE FreeBSD 8.1-PRERELEASE #0: Thu Jun 17 19:30:52 JST 2010
gcc46 (GCC) 4.6.0 20100619 (experimental)
SAD amorita branch Rev.3097

with LTO(-g -O3 -fwhopr -fno-omit-frame-pointer -march=native -msse3 -mfpmath=sse -fcheck=do)
 Function         1.9295834        .005164105368   
 Optics           2.66001665       .005230880496   
 Tracking         3.27642535       .006721012802   
 Matching         .17785065        5.22699095787E-4
 Overall          .109633010342    1.66550089337E-4

without LTO(-g -O3 -fno-omit-frame-pointer -march=native -msse3 -mfpmath=sse -fcheck=do)
 Function         1.99698705       .008423391088   
 Optics           2.7984155        .006557250736   
 Tracking         2.98214475       .004432890323   
 Matching         .18719715        5.71515738606E-4
 Overall          .109711450298    2.85608472421E-4

Function/Optics/Matchingは高速化しているが、Trackingが劣化している
インライン展開等でコードのフットプリンとが肥大化しキャッシュから溢れた可能性がある。