Section Next
|Prev|Up|Index|凡例
% cat -n a.c 1 #include <stdio.h> 2 #include <math.h> 3 4 double pai( int n ) 5 { 6 return 6.23 * ((n%100)/100); 7 } 8 9 double mySin( double r ) 10 { 11 return sin(r * cos(r) ); 12 } 13 14 main() 15 { 16 int i,j; 17 for(i=0;i<1000;i++) { 18 for(j=0;j<10000;j++) mySin( pai(j) ); 19 } 20 } % cc -p a.c -lm % a.out % prof a.out Profile listing generated Sat Apr 25 14:46:40 1998 with: prof a.out ---------------------------------------------------------------------------- * -p[rocedures] using pc-sampling; * * sorted in descending order by total time spent in each procedure; * * unexecuted procedures excluded * ---------------------------------------------------------------------------- Each sample covers 8.00 byte(s) for 0.014% of 6.9609 seconds %time seconds cum % cum sec procedure (file) 54.5 3.7910 54.5 3.79 pai () 23.4 1.6270 77.8 5.42 12.7 0.8828 90.5 6.30 mySin ( ) 9.5 0.6602 100.0 6.96 main ( )
また cc(1) の feedback 機能と合わせれば、統計情報を元に最適化が可能です。
例:プロファイリングによる最適化
先のソースをコンパイルし実行してみると、次の結果が得られました。
この結果では最適化レベル3が最もよい成績を出しています。
% cc -lm a.c % repeat 3 time a.out 6.90u 0.02s 0:07 98% 0+1k 0+2io 0pf+0w 6.90u 0.04s 0:07 98% 0+1k 0+0io 0pf+0w 6.90u 0.02s 0:07 98% 0+1k 0+0io 0pf+0w % cc -lm -O2 a.c % repeat 3 time a.out 6.90u 0.02s 0:07 98% 0+1k 0+0io 0pf+0w 6.91u 0.02s 0:06 99% 0+1k 0+3io 0pf+0w 6.91u 0.02s 0:06 99% 0+1k 0+0io 0pf+0w % cc -lm -O3 a.c % repeat 5 time a.out 6.42u 0.03s 0:06 98% 0+1k 0+0io 0pf+0w 6.42u 0.03s 0:06 99% 0+1k 0+3io 0pf+0w 6.42u 0.02s 0:06 99% 0+1k 0+0io 0pf+0w % cc -lm -O4 a.c % repeat 3 time a.out 6.45u 0.04s 0:06 98% 0+1k 0+0io 0pf+0w 6.47u 0.03s 0:06 94% 0+1k 0+0io 0pf+0w 6.46u 0.02s 0:06 99% 0+1k 0+3io 0pf+0wつぎに feedback を用いてコンパイラに最適化させてみます。
% cc -lm -gen_feedback a.c
% pixie a.out pixie: executing: "atom -tool pixie a.out" % ls -lt a.out* -rw-r----- 1 yakoshi system 628 04月25日 14:36 a.out.Addrs -rwxr-x--- 1 yakoshi system 246336 04月25日 14:36 a.out.pixie -rwxr-x--- 1 yakoshi system 24576 04月25日 14:36 a.out
% time a.out.pixie 48.20u 0.16s 0:48 98% 0+1k 2+15io 0pf+0w % ls -lt a.out* -rw-r----- 1 yakoshi system 1016 04月25日 14:37 a.out.Counts -rw-r----- 1 yakoshi system 628 04月25日 14:36 a.out.Addrs -rwxr-x--- 1 yakoshi system 246336 04月25日 14:36 a.out.pixie -rwxr-x--- 1 yakoshi system 24576 04月25日 14:36 a.out
% prof -pixie -feedback a.out.feedback a.outこの時の実行ファイル名が *.pixie でない点に注意してください。
% cc -lm -feedback a.out.feedback -O2 a.c % repeat 3 time a.out 6.91u 0.05s 0:07 94% 0+1k 0+0io 0pf+0w 6.90u 0.02s 0:07 97% 0+1k 0+3io 0pf+0w 6.90u 0.03s 0:06 99% 0+1k 0+0io 0pf+0w % cc -lm -feedback a.out.feedback -O3 a.c % repeat 3 time a.out 6.19u 0.04s 0:06 98% 0+1k 0+0io 0pf+0w 6.19u 0.02s 0:06 98% 0+1k 0+3io 0pf+0w 6.19u 0.03s 0:06 99% 0+1k 0+0io 0pf+0w