컴파일러에 따라서 성능이 달라진다는 이야기...

CY71의 이미지

예전에 인텔계열 x86 CPU 들은 컴파일러 최적화에 따라서 소프트웨어 성능이 달라진다는 이야기를 들은 적이 있습니다.

이번에 gentoo 를 펜티엄3 코드로 몽땅 컴파일해서 깔아보니까, 페도라보다는 확실히 빨라진 것이 느껴지더군요. 물론 군더더기들이 빠져서 그런 탓도 있지만, 화면 전환이나 창이 열리고 닫히는 속도가 확실히 빠릅니다. 이런 것을 보면 컴파일러에 따라서 성능이 달라진다는 이야기가 맞는 것 같기도 한데...

x86 은 CISC 방식이라서 똑같은 CPU 에서도 컴파일러만 바꿔도 성능이 달라지고, i686 / 펜티엄3 / 펜티엄4 / 애슬론 등으로 CPU 별 최적화를 하게 되면 또 성능이 달라진다고 합니다. 탐스하드웨어에서는 인텔은 AMD 에 비해서 최적화된 컴파일러의 덕을 항상 본다는 기사를 본 적이 있습니다. kldp.org 유저들은 어떻게 생각하시는지 궁금하네요.

방준영의 이미지

거의 아마도 군더더기가 빠져서 그럴 겁니다. 8)

컴파일러의 성능이 중요하긴 하지만 창 열고 닫는 속도까지 체감적으로 변화시켜 주지는 못합니다. 아무리 느린 컴퓨터라도 일초에 몇백만개의 명령어를 실행하는데, 그중에 몇백, 몇천개 명령어를 절약한다고 컴퓨터가 빨라지는 걸 인간이 느끼는 것은 불가능하거든요.

envia의 이미지

제가 알기로는 컴파일러에 따라서 쓰는 최적화 기술이 다르기 때문에 성능차이가 확실히 나는 것으로 알고 있습니다. 예를 들어서, gcc가 최적화 기능이 그렇게까지 강력한 컴파일러는 아니기 때문에 성능이 중요한 일을 할 때는 icc와 같은 컴파일러를 쓰는 경우도 있다고 들었습니다.

더구나 요즘 CPU들은 처리 속도를 빠르게 하기 위해 온갖 기법들을 사용하고 있기 때문에 펜티엄 3으로 컴파일 한 것과 386에 맞춰서 컴파일 한 것은 속도가 다릅니다. (젠투 유저들이 모든 프로그램을 컴파일 하는 삽질:?을 하는 이유지요.)

물론 알고리즘 수준에서의 최적화는 하지 못하고, 컴파일은 시간이 많이 걸리는 작업이기 때문에 그냥 쓰는 것이 나을 수도 있습니다. 젠투도 예전에 비해서 컴파일의 단점을 인식하는 것 같더군요.

----

It is essential, if man is not to be compelled to have recourse, as a last resort, to rebellion against tyranny and oppression, that human rights should be protected by the rule of law.
[Universal Declaration of Human Rights]

mycluster의 이미지

Quote:
제가 알기로는 컴파일러에 따라서 쓰는 최적화 기술이 다르기 때문에 성능차이가 확실히 나는 것으로 알고 있습니다. 예를 들어서, gcc가 최적화 기능이 그렇게까지 강력한 컴파일러는 아니기 때문에 성능이 중요한 일을 할 때는 icc와 같은 컴파일러를 쓰는 경우도 있다고 들었습니다.

P4(Xeon포함) 코어를 사용하는 CPU에서는 icc를 사용해서 SSE2 옵션을 주고 컴파일하면 실수연산에 있어서 gcc에 비해서 30% 정도 속도가 향상되는 경우도 있었고 어떤 것들은 약 2배 정도의 속도향상도 나온다고 하더군요.

저는 실수연산을 주로 하기때문에 gcc나 g77보다는 icc와 ifc를 사용합니다.

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

ihavnoid의 이미지

컴파일러보다는 군더더기가 줄어들은 탓이 크리라 생각됩니다....
컴파일러를 개선하는 것은 경우에 따라 다르지만 일반적인 GUI 애플리케이션에서는 5퍼센트 이상의 개선을 보기 힘들 것입니다... 5퍼센트로는 사람이 체감하기는 너무 힘들겠고요. 주로 미디어프로세싱이나 암호화 같은 쪽에서 득을 많이 보겠죠....

예전에 OpenSSL을 icc를 써서 컴파일해서 돌려봤습니다. makefile을 좀 뜯어고치고 해서.. 암튼 했는데, Redhat 9 기본 OpenSSL에 비해서 성능개선이 5퍼센트 정도밖에 안 이루어지더군요... -_-;

컴파일러 잘 짜는 게 상당한 성능개선을 내지만, 이미 좋아질대로 좋아진 상황에서 상당한 성능향상을 내는 것은 쉽지 않을 것 같군요.. 사용하는 instruction set 차이가 있긴 하겠지만, 제 기억으로는 레드햇9에서도 computing-intensive한 부분들은 이미 i686으로 컴파일되어 나오는 것으로 알고 있습니다.

Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24

jj의 이미지

386코드나 686코드나 거의 비슷하지 않을까 싶습니다. 특정한 목적으로 추가된 명령어를 열심히 쓰는 어플리케이션이 아니라면...

어쨌든, 돈 한푼 안쓰고 1, 2%라도 빨라진다면 할만하죠. 전 귀찮아서... ^^

--
Life is short. damn short...

mycluster의 이미지

Quote:
돈 한푼 안쓰고 1, 2%라도 빨라진다면 할만하죠

인텔컴파일러는 돈이 들기도 합니다... ^^ 다운로드버전을 받으면 되기는 합니다만, 정식으로는 구매를 해야하거던요.
그런데, OpenSSL이 정수연산을 주로하는거 아닌가요? icc를 쓸때 P3에서 -tpp7 -axM -xM 등의 옵션을 주면 SSE1을 잘~~ 쓴다고 하더라고요. gcc는 잘 모르겠네요. 저런 기능의 옵션이 있는지...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

Necromancer의 이미지

CY71 wrote:
x86 은 CISC 방식이라서 똑같은 CPU 에서도 컴파일러만 바꿔도 성능이 달라지고, i686 / 펜티엄3 / 펜티엄4 / 애슬론 등으로 CPU 별 최적화를 하게 되면 또 성능이 달라진다고 합니다. 탐스하드웨어에서는 인텔은 AMD 에 비해서 최적화된 컴파일러의 덕을 항상 본다는 기사를 본 적이 있습니다. kldp.org 유저들은 어떻게 생각하시는지 궁금하네요.

오늘날 프로세서는 CISC나 RISC나 다 마찬가지입니다.

CPU구조가 파이프라인화되었기 때문에 이것이 중간에 깨지거나 엉키거나 해서
flush시켜야 할경우 소모되는 시간이 많기 때문입니다. 여기에다 슈퍼스칼라
등등으로 명령어 여러개를 한꺼번에 처리해버리면 파이프라인 flush시 드는
시간이 배로 늘어나게 됩니다.

인텔이 AMD보다 최적화의 덕을 많이 보는 이유가
파이프라인이 훨씬 깊어서입니다.
또 인텔은 실행유닛의 갯수가 AMD에 비해서도 적을 뿐만 아니라 조합도
제약이 많습니다. (FPU의 경우 AMD는 3개 유닛이 SSE까지 다 처리할 수
있지만, 인텔은 FPU유닛과 SSE 전용유닛이 따로 있습니다.) 명령어
선택에 있어서 신경을 훨씬 써야 한다는 얘기죠.

일례로 p4의 파이프라인은 실행유닛 내에서만 20단계입니다. (디코딩시 8단계추가)
하지만 애슬론의 경우 13단계 정도 되는걸로 알고 있습니다.

Written By the Black Knight of Destruction

chunsj의 이미지

차이가 납니다. :-) 저는 비교적 느리기 때문에 더 잘보이기도 하지만
컴파일러의 옵션에 따라 36초에서 10초를 왔다.갔다 할 정도입니다.
(저는 Crusoe를 씁니다.) 하나의 기계에 맞추느냐? 아니면 여러기계에
맞추느냐, 그리고 각 프로그램에 따라 다르게 맞추느냐, 아니냐의 차이는
생각보다 큽니다.

방준영 wrote:
거의 아마도 군더더기가 빠져서 그럴 겁니다. 8)

컴파일러의 성능이 중요하긴 하지만 창 열고 닫는 속도까지 체감적으로 변화시켜 주지는 못합니다. 아무리 느린 컴퓨터라도 일초에 몇백만개의 명령어를 실행하는데, 그중에 몇백, 몇천개 명령어를 절약한다고 컴퓨터가 빨라지는 걸 인간이 느끼는 것은 불가능하거든요.

방준영의 이미지

chunsj wrote:
차이가 납니다. :-) 저는 비교적 느리기 때문에 더 잘보이기도 하지만
컴파일러의 옵션에 따라 36초에서 10초를 왔다.갔다 할 정도입니다.
(저는 Crusoe를 씁니다.) 하나의 기계에 맞추느냐? 아니면 여러기계에
맞추느냐, 그리고 각 프로그램에 따라 다르게 맞추느냐, 아니냐의 차이는
생각보다 큽니다.

창 하나 열고 닫는데 36초에서 10초 사이 걸린다면, 부팅하는 데 여섯 시간 쯤 걸리나요? 그것은 컴퓨터가 아니라 계산기... 8)
mycluster의 이미지

Quote:
창 하나 열고 닫는데 36초에서 10초 사이 걸린다면, 부팅하는 데 여섯 시간 쯤 걸리나요? 그것은 컴퓨터가 아니라 계산기...

하고 싶은 말이 뭔지요?

웃자고 하는 말이라면 이모티콘이라도 하나달던지,
아니면 그냥 씹고 싶으면 좀더 노골적으로 씹던지요.
그리고 컴퓨터랑 계산기는 같은 말이지요. 혹시 모르실까봐
사전을 찾아서 달아드리면,

†compute [kəmpjúːt] v.
―vt. 『∼+목/ +목+전+명』 (컴퓨터로) 계산[측정]하다, 산정(算定)하다, 평가하다; 어림잡다(at); (┅이라고) 추정하다(that).
―vi. 계산하다; 컴퓨터를 사용하다.
┈┈•∼ the area of a field 밭의 면적을 계산하다.―vt.
┈┈•We ∼d the distance at 200 miles. 거리를 200마일로 어림잡았다.

compute라는 동사는 계산하다라는 뜻이므로 computer는 계산을 하는 계산기가 되지요. 따라서 컴퓨터랑 계산기가 다른 뜻인가요? 같은 뜻이라고 알고 있는데... 전산쪽에서는 다른 뜻으로 해석이 된다면 이기회에 좀 알려주시길...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

chunsj의 이미지

제일 크게 나는 차이는 alignment 관련입니다. Crusoe의 특성상 이거에
영향을 많이 받는 것 같더군요. 그리고 Gentoo의 홈에서 본 비교를 보면
저만큼은 아니지만 역시 100%의 차이가 납니다.(모질라 로딩 속도)
그리고 컴퓨터는 계산기 맞습니다. :-) 부팅은 아마 제가 올리는 것이 많아서
그런지(init script가 70개가 넘네요.) 1분 정도 걸립니다. 이게 6시간쯤
으로 보이신다면야 10,20초는 더 크게 보이실만 한데요?

방준영 wrote:
chunsj wrote:
차이가 납니다. :-) 저는 비교적 느리기 때문에 더 잘보이기도 하지만
컴파일러의 옵션에 따라 36초에서 10초를 왔다.갔다 할 정도입니다.
(저는 Crusoe를 씁니다.) 하나의 기계에 맞추느냐? 아니면 여러기계에
맞추느냐, 그리고 각 프로그램에 따라 다르게 맞추느냐, 아니냐의 차이는
생각보다 큽니다.

창 하나 열고 닫는데 36초에서 10초 사이 걸린다면, 부팅하는 데 여섯 시간 쯤 걸리나요? 그것은 컴퓨터가 아니라 계산기... 8)
지리즈의 이미지

저도 크루소 노트북사용자입니다.
하드디스크 노이즈를 제외하고는 소움이 하나도 없습니다.

최적화 컴파일의 최대의 효과를 얻는 CPU중에 하나인 건 많은 틀림없습니다.

방준영 wrote:
chunsj wrote:
차이가 납니다. :-) 저는 비교적 느리기 때문에 더 잘보이기도 하지만
컴파일러의 옵션에 따라 36초에서 10초를 왔다.갔다 할 정도입니다.
(저는 Crusoe를 씁니다.) 하나의 기계에 맞추느냐? 아니면 여러기계에
맞추느냐, 그리고 각 프로그램에 따라 다르게 맞추느냐, 아니냐의 차이는
생각보다 큽니다.

창 하나 열고 닫는데 36초에서 10초 사이 걸린다면, 부팅하는 데 여섯 시간 쯤 걸리나요? 그것은 컴퓨터가 아니라 계산기... 8)

There is no spoon. Neo from the Matrix 1999.

지리즈의 이미지

MyCluster wrote:
Quote:
창 하나 열고 닫는데 36초에서 10초 사이 걸린다면, 부팅하는 데 여섯 시간 쯤 걸리나요? 그것은 컴퓨터가 아니라 계산기...

하고 싶은 말이 뭔지요?

웃자고 하는 말이라면 이모티콘이라도 하나달던지,
아니면 그냥 씹고 싶으면 좀더 노골적으로 씹던지요.

이모티콘 달려있는데요 --;; -> 8)

There is no spoon. Neo from the Matrix 1999.

saxboy의 이미지

흠... 좀 의외군요. 저도 크루소만 이번이 세대째이고 웬만한 리눅스 배포본은 한번씩은 다 써보았다고 생각하는데, 사실 젠투가 특별히 빠르다는 느낌은 그냥 기분 정도라는 생각인걸요. 오히려 커널을 2.6으로 올려서 preemptive하게 해주는것이 체감속도에는 훨씬 도움이 된다고 생각하고 있습니다만...

그런데 gcc에 크루소 최적화 옵션도 있던가요? 이건 저는 정말 처음 듣는 소리라...

Quote:
하고 싶은 말이 뭔지요?

웃자고 하는 말이라면 이모티콘이라도 하나달던지,
아니면 그냥 씹고 싶으면 좀더 노골적으로 씹던지요.
그리고 컴퓨터랑 계산기는 같은 말이지요. 혹시 모르실까봐
사전을 찾아서 달아드리면,

웬지 농담을 너무 심각하게 받아들이신것 같은 느낌 :-)

지리즈의 이미지

http://www.geocities.com/robm351/lifebook/

여기에 젠투와 크루소 cpu에 관련된 내용이 언급되어 있습니다.

약간 빨라지는 느낌 외에도..
한 15%정도 향상을 얻는 프로그램도 있습니다.

saxboy wrote:
흠... 좀 의외군요. 저도 크루소만 이번이 세대째이고 웬만한 리눅스 배포본은 한번씩은 다 써보았다고 생각하는데, 사실 젠투가 특별히 빠르다는 느낌은 그냥 기분 정도라는 생각인걸요.

There is no spoon. Neo from the Matrix 1999.

죠커의 이미지

기계가 만든 코드는 어느정도 오버헤드는 있기 마련이라고 생각합니다.

x86이냐 아니냐의 문제는 아닐것 같네요.

maddie의 이미지

크루소 칩셋이라면 longrun을 이용하면 확실히 체감속도를 올릴 수가 있습니다. 열나는 건 책임 못지지만요 ^^

크루소 칩셋은 전력량에 따라 클럭수를 조정하는데 제가 쓰고 있는게 600인데 실제 돌아가는 건 400~500사이더군요. 그래서 longrun을 이용해서 쫘악 올렸더니 컴파일 속도가 확실히 향상되더군요.

프비의 경우 sysctl 로 조정가능 합니다. 리눅스는 longrun프로그램을 받아야하구... 휴대를 안하시는 경우가 많으시다면 확실히 도움이 될겁니다.(배터리를 사용하는 가운데 그렇게 쓰면 엑스위도까지 다 띄운 상황에서 배터리가 20분도 안갑니다 ㅡ.ㅡ)

힘없는자의 슬픔

방준영의 이미지

MyCluster wrote:
Quote:
창 하나 열고 닫는데 36초에서 10초 사이 걸린다면, 부팅하는 데 여섯 시간 쯤 걸리나요? 그것은 컴퓨터가 아니라 계산기...

하고 싶은 말이 뭔지요?

웃자고 하는 말이라면 이모티콘이라도 하나달던지,
아니면 그냥 씹고 싶으면 좀더 노골적으로 씹던지요.
그리고 컴퓨터랑 계산기는 같은 말이지요. 혹시 모르실까봐
사전을 찾아서 달아드리면,

†compute [k?mpju?ːt] v.
―vt. 『∼+목/ +목+전+명』 (컴퓨터로) 계산[측정]하다, 산정(算定)하다, 평가하다; 어림잡다(at); (?이라고) 추정하다(that).
―vi. 계산하다; 컴퓨터를 사용하다.
???∼ the area of a field 밭의 면적을 계산하다.―vt.
???We ∼d the distance at 200 miles. 거리를 200마일로 어림잡았다.

compute라는 동사는 계산하다라는 뜻이므로 computer는 계산을 하는 계산기가 되지요. 따라서 컴퓨터랑 계산기가 다른 뜻인가요? 같은 뜻이라고 알고 있는데... 전산쪽에서는 다른 뜻으로 해석이 된다면 이기회에 좀 알려주시길...


아주 친절한 설명 감사드립니다.