이런거... -O3가 -O2보다 한단계 더 최적화를 시키는.. 흠흠. 것인데.. 좀 위험하기도 합니다. 프로그램에 따라선 그렇게 하면 동작을 제대로 안 하는 경우도 생깁니다.
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!
GCC 옵션으로 컨트롤 플로우를 바꾼다거나 함수를 인라인으로 만든다거나 프레임 포인터를 제거한다던지 여러가지 다양한 최적화 옵션이 있습니다.
하지만!!! 하드웨어의 성능을 향상시켜주지 못하며, 알고리즘적인 문제를 해결해주는 것은 아닙니다.
수십기가의 데이터를 가공하는데 시간이 많이 걸리신다면, 이건 GCC에서 컨트롤 플로우를 조정한다고 별로 효과를 기대하긴 어렵다고 생각합니다. 결국 자료 구조쪽에 신경을 쓰셔야 합니다. 단지 복잡도의 문제가 아니라 external data를 처리하는 것이므로, 디스크 액세스를 최소한으로 줄여야 할 겁니다.
프로파일링 데이터가 확보된다면 시도할만한 최적화 여지는 많아집니다.
특정 함수가 과도하게 많은 호출이 된다면 해당 함수의 코드상 최적화를 시도할 수 있겠고...
호출 횟수에 비해 프로그램 수행시간에 차지하는 비율이 높은 함수라면 함수의 동작 로직을 전체적으로 점검해볼 필요가 있겠죠.
파일 I/O 부분에서 시간이 오래 걸린다면 파일에서 데이터를 얻어오는 방식의 변화라던지, 더 빠른 I/O 장비로 교체한다던지
하는 방법도 시도할 수 있겠죠.
0이게 얼마나 효과가 있나 몰라도...
이런거... -O3가 -O2보다 한단계 더 최적화를 시키는.. 흠흠. 것인데.. 좀 위험하기도 합니다. 프로그램에 따라선 그렇게 하면 동작을 제대로 안 하는 경우도 생깁니다.
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!
사람천사
Re: 기본상태보다는 효과가 있습니다.
기본 상태보다는 효과가 있지만...
말씀하신 것 처럼 정상적인 동작을 안 하는 경우도 있으며,
-O3 보다 -O2 가 더 빠른 경우도 있습니다 -_-;;;
자료구조에 신경을 쓰셔야 합니닫.
GCC 옵션으로 컨트롤 플로우를 바꾼다거나 함수를 인라인으로 만든다거나 프레임 포인터를 제거한다던지 여러가지 다양한 최적화 옵션이 있습니다.
하지만!!! 하드웨어의 성능을 향상시켜주지 못하며, 알고리즘적인 문제를 해결해주는 것은 아닙니다.
수십기가의 데이터를 가공하는데 시간이 많이 걸리신다면, 이건 GCC에서 컨트롤 플로우를 조정한다고 별로 효과를 기대하긴 어렵다고 생각합니다. 결국 자료 구조쪽에 신경을 쓰셔야 합니다. 단지 복잡도의 문제가 아니라 external data를 처리하는 것이므로, 디스크 액세스를 최소한으로 줄여야 할 겁니다.
이제는 서명에 무엇을 써야하는지 생각해보자.
블로그: http://turtleforward.blogspot.com
프로파일링을 한번 해 보시기를...
일단은 단순하게 -O2 옵션을 줘서 시도해 볼 수도 있지만,
그래도 별다른 효과가 없는 경우에는 프로파일링을 해 보시기를 권합니다.
프로파일링 데이터가 확보된다면 시도할만한 최적화 여지는 많아집니다.
특정 함수가 과도하게 많은 호출이 된다면 해당 함수의 코드상 최적화를 시도할 수 있겠고...
호출 횟수에 비해 프로그램 수행시간에 차지하는 비율이 높은 함수라면 함수의 동작 로직을 전체적으로 점검해볼 필요가 있겠죠.
파일 I/O 부분에서 시간이 오래 걸린다면 파일에서 데이터를 얻어오는 방식의 변화라던지, 더 빠른 I/O 장비로 교체한다던지
하는 방법도 시도할 수 있겠죠.
댓글 달기