나는 모두 golang
을 아는 모두가 여기 blog post을 알고 있다고 확신합니다.그 특별한 경우에 gccgo가 gc보다 느린 이유는 무엇입니까?
다시 읽어 보면 go build
대신 gccgo
을 사용하면 속도가 조금 더 빨라질지 궁금했습니다. 일반적인 사용 예 (과학 계산)에서는 gccgo
으로 생성 된 바이너리가 항상 go build
생성 된 것보다 빠릅니다. havlak6.go을하고 컴파일 :
그래서, 그냥이 파일을 잡아
go build havlak6.go -O havlak6_go
gccgo -o havlak6_gccgo -march=native -Ofast havlak6.go
서프라이즈!
"최적화"컴파일러가 느린 코드를 생성하는 이유가 궁금하고 궁금합니다. 행운과
gccgo -pg -march=native -Ofast havlak6.go
./a.out
gprof a.out gmon.out
:
나는gccgo
생성 된 바이너리에
gprof
을 사용하려고
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
코드가 실제로 프로파일되지 않은 당신이 볼 수 있듯이. 물론
, 나는 this를 읽을 수 있지만 당신이 볼 수있는 프로그램이 실행 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
편집 :
아, 나는 완전히 나는 분명히 gccgo
-generated 진에 pprof을 시도 ... 언급하는 것을 잊었다. .. 여기 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
사람들은 여전히 [gprof를 표준 프로파일 러로 믿고 있습니다.] (http://stackoverflow.com/a/1779343/23771). 몇 가지 포인트 : 1) gprof는 반복 호출이없는 얕은 호출 스택을 가진 CPU 바운드 프로그램에만 유용합니다.이 프로그램에는 모든 기호가 있습니다. 2) 컴파일러 최적화는 코드에서 메모리 할당과 같은 함수를 호출하지 않는 많은 내부적 인 루프 또는 루틴을 변경합니다. 컴파일러 최적화만으로 모든 것이 더 빨라지지는 않습니다. –
예, gprof를 얻었습니다. 그리고 저는 여러분에게 컴파일러 최적화에 관해 동의합니다. 그러나 최적화가 가능한 컴파일러로 인해 성능이 저하 될 것으로 예상하지는 않습니다. 공연은 동등하거나 그 이상이어야합니다. 그렇지 않다면 개선의 여지가 있습니다. 이유를 이해하고 싶습니다. –
내가 수행 할 수있는 유일한 타이밍은 종단 간이며, 아마도 10^n 번 반복되어 나뉘어져 있습니다. 3 자리 이상의 정확도. 소음이 있고 나는 상관하지 않는다. 그런 다음 무작위 일시 중지를 사용하여 더 빠르게 만드는 방법을 찾습니다. 이미 스폰지처럼 짜내 지 않는 한, 나는 길을 찾을 것이고, 나는 그것을 또 다시 할 수있다. 몇 번의 사이클을 거쳐 수익이 감소하고 PC가 가장 많이 생성 된 지침에 따라 최적화되면 최적화 프로그램이 켜져 10 % 빨라집니다. 야단법석. –