MacPorts에서 컴파일 옵션으로 최적화 하기

유닉스 계열 OS의 장점중 하나를 꼽으라면 컴파일 옵션을 통해 성능을 극대화 시킬 수 있다는 장점이 있죠.
그리고 유닉스중 BSD계열은 프로그램 설치 시 Ports방식과, Pakage방식으로 나뉩니다.
Ports방식은 자동적으로 소스를 받아서 컴파일 해 설치하는 방식이고 Pakage방식은 미리 컴파일 되어 있는 프로그램을 받아서 설치를 합니다. 리눅스 계열에서는 젠투 리눅스가 Ports방식을 따르고 레드햇 계열과, 데비안 계열이 Pakage방식을 따르는걸로 알고 있습니다.

뭐, 서론은 여기까지...

여튼 프로그램을 컴파일 할때 필요한 기능만 넣어 컴파일을 한다던가, 컴파일러의 옵션을 변경해 퍼포먼스를 향상시킬 수 있습니다.... 만... 요즘에는 컴파일옵션에 따른 퍼포먼스 향상이 미미해서 굳이 별도로 컴파일해 설치하지 않습니다.  ㅎㄷ

그런데 Mac OS X의 경우에 FreeBSD를 기반으로 만들어진 운영체제라 유닉스를 기반으로하는 프로그램을 설치할 수 있습니다.  그러다 보니 사람들이 프로그램 설치를 용이하게끔 하기 위해 MacPorts라는것을 만들었더군요.

뭐 그래서 제가 사용하는 LightRoom의 확장 기능인 LR2/Mogrify를 사용하기 위해 ImageMagick을 설치해야 하는데 MacPorts가 있어야 설치 할 수 있더군요 ㅡㅡ; 그래서 설치해서 리눅스에서 하던대로 컴파일 옵션을 (CFLAGS) 줬는데... 이게 또 안먹히네요 ㅡㅡ;;;; 그것 때문에 괜히 열받아서 메뉴얼도 읽어보고, 구그링도 해봤는데 없더군요 ㅡㅡ;;
결국 닥치는대로 찾아봤는데... 결국 찾았습니다 ㅎㅎ

일단 설정파일(?) 위치는 /opt/local/libexec/macports/lib/port1.0/portconfigure.tcl 여기에 위치해 있습니다.
그런데 퍼미션 설정이 555로 잡혀있기 때문에 쓰기권한를 추가해야 수정할 수 있습니다.

이렇게 설명하면 못하실분 계실까봐 명령어를 같이 올립니다 ㅡㅡ;;;

sudo chmod u+w /opt/local/libexec/macports/lib/port1.0/portconfigure.tcl


그럼 텍스트 에디터로 불러와서 잘 찾아보면 다음과 같은 부분을 찾으실 수 있으실 껍니다. (참고로 MacPorts 1.8.2 기준입니다.)

# Configure special environment variables.

# We could have m32/m64/march/mtune be global configurable at some point.

options configure.m32 configure.m64 configure.march configure.mtune

default configure.march     {}

default configure.mtune     {}

# We could have debug/optimizations be global configurable at some point.

options configure.optflags \

        configure.cflags configure.cxxflags \

        configure.objcflags configure.objcxxflags \

        configure.cppflags configure.ldflags configure.libs \

        configure.fflags configure.f90flags configure.fcflags \

        configure.classpath

# compiler flags section

default configure.optflags      {-Os}


자 그럼 입맞에 맞게 바꿔야겠죠?
일단 그 전에... 자기 자신의 컴퓨터에 CPU정보를 확실히 알고 있어야합니다.
제 맥북은 Intel Core 2 Duo T7200인데 컴파일러가 지원하는 명령어셋이 MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 EM64T 이정도입니다.

# Configure special environment variables.

# We could have m32/m64/march/mtune be global configurable at some point.

options configure.m32 configure.m64 configure.march configure.mtune

default configure.march     {native}

default configure.mtune     {native}

# We could have debug/optimizations be global configurable at some point.

options configure.optflags \

        configure.cflags configure.cxxflags \

        configure.objcflags configure.objcxxflags \

        configure.cppflags configure.ldflags configure.libs \

        configure.fflags configure.f90flags configure.fcflags \

        configure.classpath

# compiler flags section

default configure.optflags      {"-Os -mfpmath=sse"}

각 옵션에 대해 간략히 설명하면

configure.march & configure.mtune : 원래 -march와, -mtune입니다만 저렇게 분리가 되어 있네요.
-march : 현재 사용하는 CPU(Architecture)의 종류를 지정합니다.
-mtune : CPU에 맞는 튜닝을 지정합니다. native는 CPU에 맞게 알아서 최적화 옵션을 줍니다. (경우에 따라서 컴파일이 안될수도 있음)

configure.optflags : 리눅스에서는 시스템 변수중 CFLAGS, CXXFLAGS에 지정하하면 적용되는 옵션입니다.
-Os : Optimize 옵션으로 기본값은 s입니다. 숫자가 높아질 수록 빠르지만 프로그램의 크기가 훨씬 더 커지고 경우에 따라 오히려 느려지고 불안정할 수 있습니다. 최적화를 하면서 크기를 최대한 줄이려면 -Os를 추천합니다.
-mfpmath : 부동소수점 연산을 어떤 연산장치로 할것인지 여부입니다.  기본값은 387이지만 최신 기술인 SSE로 변경했습니다. SSE나, SSE2를 지원하는 CPU에서만 사용하세요. (추가로 32비트에서는 부동소수점 오차가 클 가능성이 있습니다. 64비트에서 사용하는것을 권장합니다.)

* 띄어쓰기가 들어가려면 더블쿼테이션 (")에 감싸져 있어야합니다. 주의하세요 ^^


좀 더 자세히 알고 싶으시다면 GCC 문서나, GCC도움말(터미널에서 man gcc)을 확인할것을 추천합니다. ㅋ

참고로 저렇게 설정을 하고 컴파일해 설치하면 프로그램이 엄청 빨라지는건 아닙니다 ㅡㅡ;;; 단지 아주 조금 더 빨라질 가능성이 생기는것일 뿐이죠 ㅎㄷ (한마디로 거의 효과 없음)

맥용 동영상 재생기인 VLC의 공식 배포판(참고로 32비트) 같은 경우 H.264코덱의 블루레이 영상(블루레이 립이 아닙니다. 블루레이에서 추출한 파일)을 재생하면 너무 느려서 재생을 못합니다. 그런데 MacPorts로 튜닝 안한 상태로 컴파일하면 조금 심하게 끊어질 뿐이지 돌아갑니다.(옷! 64비트의 힘!!) 하지만 튜닝을 해서 컴파일을 해도 개선효과는 없습니다. - ㅅ-;;; 아마 QuickTime을 사용해서 그런것 같더군요. (Movist도 QuickTime으로 돌리면 못돌리지만, ffdshow로 돌리면 잘돌아가더군요)
대신 720p영상을 돌려봤는데 CPU점유율이 미튜닝시 최저 30%인데 반해, 튜닝시 최저 25%대까지 내려갑니다. 효과가 있긴 있습니다만, 미미합니다 ㅡㅡ;;; (참고로 유닉스 계열은 코어당 100%로 측정합니다. 윈도우로 치면 듀얼코어일시 각각 15%, 12%대 입니다.)
그리고... VLC를 컴파일해서 사용하지 마세요. 옵션을 줘도 한글이 깨져서 나옵니다 ㅡㅡ;;

마지막으로 결론은... 특별한 기능이 필요한게 아니면 괜히 컴파일해서 컴퓨터 갈구지 말고 패키지 설치 하세요 ㅋ

추가] 최신 버전(2.3.0)에 맞게 수정

Trackback 0 Comment 4
  1. Favicon of http://rukxer.net BlogIcon RUKXER 2010.04.18 10:57 address edit & del reply

    아.........이게 뭔 말 ㄷㄷㄷ

    • Favicon of https://blog.myhyuny.com BlogIcon 화현 2010.04.18 12:37 신고 address edit & del

      소프트웨어를 잘 다룰려면 하드웨어도 잘 알아야 한다는 말이죠 ㅋㅋㅋ

  2. Favicon of http://deios.kr BlogIcon Deios 2010.04.21 08:20 address edit & del reply

    "컴퓨터 갈구지 말고" ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    • Favicon of https://blog.myhyuny.com BlogIcon 화현 2010.04.21 23:57 신고 address edit & del

      컴파일 한번 할 때 마다 컴퓨터 죽어나요 ㅠㅠ