知っている人なら誰でも、ここのブログ投稿golang
を知っていると確信しています。
gccgo
読み返してみると、代わりに使うgo build
ともう少し速度が上がるのではないかと思いました。私の典型的なユース ケース (科学計算) では、 で生成されたgccgo
バイナリは、 で生成されたバイナリよりも常に高速ですgo build
。
したがって、次のファイルを取得してください: havlak6.goしてコンパイルします。
go build havlak6.go -O havlak6_go
gccgo -o havlak6_gccgo -march=native -Ofast havlak6.go
サプライズ !
$/usr/bin/time ./havlak6_go
5.45user 0.06system 0:05.54elapsed 99%CPU
$/usr/bin/time ./havlak6_gccgo
11.38user 0.16system 0:11.74elapsed 98%CPU
私は興味があり、「最適化」コンパイラがより遅いコードを生成する理由を知りたいと思っています。
gprof
生成されたgccgo
バイナリで使用しようとしました:
gccgo -pg -march=native -Ofast havlak6.go
./a.out
gprof a.out gmon.out
運が悪い:
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
ご覧のとおり、コードは実際にはプロファイリングされていません。
もちろん、私はこれを読みましたが、ご覧のとおり、プログラムの実行には 10 秒以上かかります...サンプル数は 1000 を超える必要があります。
私も試しました:
rm a.out gmon.out
LDFLAGS='-g -pg' gccgo -g -pg -march=native -Ofast havlak6.go
./a.out
gprof
どちらも成功しません。
何が悪いかわかりますか?すべての最適化ルーチンがこの場合gccgo
よりも高速にならない理由がわかりますか?gc
go
バージョン: 1.0.2
gcc
バージョン: 4.7.2
編集:
ああ、私は言及するのを完全に忘れていました...私は明らかに-で生成されたバイナリでpprofを試しましたgccgo
...ここにtop10
:
Welcome to pprof! For help, type 'help'.
(pprof) top10
Total: 1143 samples
1143 100.0% 100.0% 1143 100.0% 0x00007fbfb04cf1f4
0 0.0% 100.0% 890 77.9% 0x00007fbfaf81101e
0 0.0% 100.0% 4 0.3% 0x00007fbfaf8deb64
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f2faf
0 0.0% 100.0% 3 0.3% 0x00007fbfaf8f2fc5
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f2fc9
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f2fd6
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f2fdf
0 0.0% 100.0% 2 0.2% 0x00007fbfaf8f4a2f
0 0.0% 100.0% 1 0.1% 0x00007fbfaf8f4a33
そしてそれが私が何か他のものを探している理由です。
EDIT2:
誰かが私の質問を閉じたいと思っているようですので、私は突然使用しようとしませんでしgprof
た: https://groups.google.com/d/msg/golang-nuts/1xESoT5Xcd0/bpMvxQeJguMJ