私は gc と gccgo を試していて、奇妙な動作に遭遇しました。
ある定理をテストするためにかつて書いたプログラムを使用して、次の結果を得ました: (読みやすくするために不要な情報を削除しました)
$ time go build -compiler gc -o checkprog_gc checkprog.go (x 3)
go build <...> 0.13s user 0.02s system 100% cpu 0.149 total
go build <...> 0.13s user 0.01s system 99% cpu 0.148 total
go build <...> 0.14s user 0.03s system 100% cpu 0.162 total
--> average: 0.13s user 0.02s system 100% cpu 0.153 total
$ time go build -compiler gccgo -o checkprog_gccgo checkprog.go (x 3)
go build <...> 0.10s user 0.03s system 96% cpu 0.135 total
go build <...> 0.12s user 0.01s system 96% cpu 0.131 total
go build <...> 0.10s user 0.01s system 92% cpu 0.123 total
--> average: 0.11s user 0.02s system 95% cpu 0.130 total
$ strip -s -o checkprog_gc_stripped checkprog_gc
$ strip -s -o checkprog_gccgo_stripped checkprog_gccgo
$ ls -l
1834504 checkprog_gc*
1336992 checkprog_gc_stripped*
35072 checkprog_gccgo*
24192 checkprog_gccgo_stripped*
$ time ./checkprog_gc
./checkprog_gc 6.68s user 0.01s system 100% cpu 6.674 total
./checkprog_gc 6.75s user 0.01s system 100% cpu 6.741 total
./checkprog_gc 6.66s user 0.00s system 100% cpu 6.643 total
--> average: 6.70s user 0.01s system 100% cpu 6.686 total
$ time ./checkprog_gccgo
./checkprog_gccgo 10.95s user 0.02s system 100% cpu 10.949 total
./checkprog_gccgo 10.98s user 0.01s system 100% cpu 10.964 total
./checkprog_gccgo 10.94s user 0.01s system 100% cpu 10.929 total
--> average 10.96s user 0.01s system 100% cpu 10.947 total
次のパターンが見られます。
- で構築されたバイナリ
gccgo
は、サイズが大幅に小さくなります (そして、ストリッピングはこの違いを変えるのに役立ちません) - でビルドされたバイナリ
gc
は実行が高速です gccgo
で構築するよりも構築するのに少し時間がかかりますgc
他の go プログラムもいくつかテストしましたが (それほど広範囲ではありませんが)、それらはすべて同じ動作を示しました。
これは、この回答が述べていることと矛盾しているようです:
要するに: gccgo: より多くの最適化、より多くのプロセッサ。
コンパイルにより多くの時間を必要としながら、より多くの最適化はより高速なバイナリを意味すると思います...
この3パターンの理由は?