[C_prg] 컴파일러 최적화
이 글은 LFS 2.4.3-version 6장 에서 시작되었고, 그것을 조금 가다듬어 만든것이다. 컴파일러는 대부분의 프로그램과 라이브러리를 컴파일 레벨2단계 (gcc options -g and -O2)를 기본값으로 하며 특정한 CPU 에 최적화 하여 만들수도 있다. 보통 인텔 기반의 프로그램은 기본적으로 i386프로세서에 맞추어 Compile된다. 혼자쓸 프로그램이라면, 그 프로그램이 더 빠른속도로 돌아가길 원할수도 있을것이다.그리고 빠른 COMPUTING을위해 나은 Compiler 옵션을 사용하고 싶을수도 있을것이다.
Compiler의 기본값(Default)을 바꾸는 몇가지 방법이 있다. 첫번째 방법으로 프로그램 패키지속의 Makefile의 설정값을 하나하나 찾아서 수정해주는 일이다. CFLAGS와 CXXFLAGS 변수(잘 만들어진프로그램은 CFLAGS과 CXXFLAGS변수를 Compiler 옵션을 변경하기 위해 제공한다.)는 그들의 성능을 현신적으로 변화시켜준다. binutils, gcc, glibc 와 같이 많은 프로그램들은 하위 디렉토리에 많은 Makefile파일을 가지고 있다. 그래서 이것을 수정하려면 아무 많은시간이 걸릴것이다. 그 대신에 일을 하는 더 쉬운 방법이 있다: CFLAGS와 CXXFLAGS 환경 변수를 만들어라. 대부분의 프로그램은 CFLAGS와 CXXFLAGS 변수를 이용하는 설정을 이용한다.
하지만 이러한 설정이 안먹히는 몇몇 프로그램은 어쩔수 없이 Makefile을 수정해줘야 될것이다.
bash 쉘에서는 다음과 같이 설정해줄수 있다(.bashrc에 이 설정을 넣어준다면 항상 이 옵션을 사용할수 있을것이다)
export CFLAGS=”-O3 -march=<cpu 설정값>” &&
CXXFLAGS=$CFLAGS
이 짧은 설정은 거의 모든 platform에서 이용될 만한 최소한의 설정이다. 이러한 옵션은 당신의 cpu의 특징을 감안하여 compile하게 도와줄것이다. 그런데 설정한 옵션 보다 성능이 떨어지는 cpu 사용시 프로그램이 제대로 동작되지 않을것이다.(이때 “Illegal Instruction, core dumped” 같은 에러메시지를 보여줄것이다.) 이제 가장 최적화된 설정을 찾기위해 Gcc의 설명 페이지를 읽을 필요가 있을것이다. 그곳에서 찾은 설정값을 <cpu 설정값>에 넣어라^^아마도 이 값은 i586,i686,powerpc 와 같은값일 것이다. gcc 메뉴얼인 http://gcc.gnu.org/onlinedocs/gcc_toc.html “Hardware Models and Configurations” 에서 그 내용을 찾을수 있으라 생각든다. (역자주:링크가 깨져있어 여기에서 찾기 바란다. http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_2.html#SEC31)
/*
* Ed. note
* “Reboant” 이 작은 메모 -Os(최적화된 컴파일)로 인해 믿어지지 않을정도로
* 좋은결과를 보여줬다. 당신이 원하는 만일이 작은 용량 보다는 빠른수행
* 속도 때문에.. 이것을 해보고 싶을지 모른다.
*/
컴파일되지 않고 “segmentation fault, core dumped” 라는 에러메시지를 보게 된다면, 이것은 아마 컴파일 설정문제 때문일것이다 . -03에서 -02로 좀더 낮은 단계의 설정을 하고 컴파일을 시도해봐라. -0인 상황에서도 컴파일 되지않으면, 특별한 설정없이 수행해봐라.
또한 -march의 값도 수정해 봐라 Compiler는 어떤 하드웨어에는 매우 민감하기 때문에 매우 정확한 설정이 필요하다. 또한 높은 단계의 최적화설정에서(예를 들면 -03과 같은 세팅에서) 메모리의 성능이 떨어진다면, 에러가 날것이다. 실제로 -03 옵션을 주고 컴파일할때 아무런문제없었어도, 아주 문제가 없는것은 아니다. 다른 문제는 Glibc를이용하는Binutils의 버젼 차이로 인해 발생될수도 있다.
(most noticable in RedHat because RedHat often uses beta software which aren’t always very stable. “RedHat likes living on the bleeding edge, but leaves the bleeding up to you”( lfs-discuss mailinglist에서 인용한 글이다).
※This document is distributed under the terms of the GNU Free Documentation License.
You should have received a copy along with it. If not, it is available from
http://www.fsf.org/licenses/fdl.html.
※원문 : http://hints.linuxfromscratch.org/hints/optimization.txt
※번역문:http://pulix.org/~zenky77/optimize.txt