컴파일러 최적화 시 profiling 데이터 이용하기(gcc -fprofile-generate 옵션)

gcc 에 -fprofile-generate 라는 옵션이 있습니다.
이 옵션을 주고 실제 업무와 유사한 테스트를 돌리면 profile 된 output 파일(filename.gcda)이 생성되는데, 이 파일을 이용해서 -fprofile-use 옵션을 주고 다시 컴파일하면 이 때 컴파일러가 최적화할 때 이 프로파일 데이터를 참고하여 binary 를 만듭니다.
프로그래머가 빠른 분기예측을 위해 likely, unlikely 를 사용하는 것처럼, 컴파일러 최적화 시에도 이와 유사하게 profiling 데이터를 보고 판단할 수 있도록 하는 기능입니다.

요거 bmt 같은거 할 때 정해진 시나리오로 시험할테니 그에 맞게 binary 만들어두면 최적의 성능을 내는데 좋겠네요. 꽁수라고나 할까 ? ㅎㅎ
만약 유사한 패턴의 로직이 수행되는 실제 운영될 시스템에서도 유용하게 사용될 수 있는 최적화 방법일 것 같습니다. 물론 테스트 후 binary 를 다시 만들어야한다는 것이 귀찮기는 하지만요.
다만, 서비스가 복잡하고 random 한 시스템에서는 잘못 사용하면 분기예측 실패가 많이 발생하여 오히려 성능저하가 발생할 수 있다는 것을 염두에 두어야 합니다.
실제 운용 전에 비교 검증 테스트를 많이 하는게 좋겠네요.

$ gcc -fprofile-generate filename.c
$ gcc -fprofile-use filename.c

stackoverflow profile-generate
What Every Programmer Should Know About Memory

You may also like...

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x