VS.NET vs gcc3.3.1 실행속도비교 , 컴파일 속도를 올리는 방법

lotus의 이미지

-------현재 사용환경은 다음과 같습니다.--------
windows2000
eclipse 3.0M5 + cdt2.0M5
cygwin -- gcc 3.3.1
------------------------------------------------------

--------------프로그램구조.-----------------------
A.a
B.a
hello.exe (위의 두 lib를 이용합니다.)
------------------------------------------------------

eclipse가 너무나도 매력적인 환경이더군요. 저 같이 IDE만 사용하던 사람으로서는요.

실행파일의 속도는 g++ 이 vc.net에 비해서 약 25%정도의 향상을 보였습니다.
대 만족이지요.

문제는 compile 시간이 vc.net에 비해서 약 75%정도 증가한다는데 있습니다.
현재의 compiler option은

-O3 -gstabs -Wall

요정도만 사용하고 있습니다.
참고로 vs.net은 warning level 3, maximize for speed /O2 를 이용하고 있구요.
실행속도는 만족하지만 좀 더 빠른 compile을 할 수 있는 방법이 있나요?

방법을 좀 알려주세요.

예를 들면 precompiled header와 같은 방법도 있나요?

------------------측정상황을 알려드립니다.------------------------------
측정은 CPU time check와 제가 stop watch를 이용해서 무식하게 측정한 상황 두가지가 있는데요.. 결과는 동일합니다.

측정 routine은
프로그램 시작 ftime(&start)

프로그램 끝 ftime(&end)

요런식으로 측정하였습니다.

5회의 평균 실행시간 비교
VC.NET GCC3.3.1
79.1 65.8

79.1/65.8 * 100 = 120.21

25%가 아니라 20%쯤 되는군요.
------------------------------------------------------------------------------

pynoos의 이미지

http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html

http://bbs.kldp.org/viewtopic.php?t=23640

PCH는 2.95 에도 문서화되지 않은채 실험되고 있던 기능중의하나입니다.

아직.. 완벽히 지원은 되지 않고 있으며, 3.4 가 나와야.. 가능할 것으로 보입니다.

akbar의 이미지

lotus wrote:

실행파일의 속도는 g++ 이 vc.net에 비해서 약 25%정도의 향상을 보였습니다.
대 만족이지요.

정말 그렇다면 저도 대만족 할겁니다
그런데 cygwin 환경에서 g++ 의 속도가 vc.net 에 배해 빠를 수가 있나요
cygwin 에서는 cygwin 의 dll 을 경유하는데 어떻게 측정하셨나요.

nohmad의 이미지

cygwin에서도 -mno-cygwin 옵션을 포함하면 mingw를 사용해서 컴파일합니다.
cygwin1.dll을 거치지 않고 바로 네이티브 바이너리로 생성됩니다.
그걸 감안하더라도 VC.NET보다 빠르다는 건 믿기지 않군요.
.NET의 Managed C++ 속도가 원래 느린 건가요?

VC++.NET이 평소의 MS 답지 않게 표준을 잘 지원한다는 언급을 많이 들었는데,
정작 .NET에서 C++은 찬밥 신세 아닌가요?
잘못 알고 있다면 죄송합니다만,
Managed C++이라는 게 C++의 용도를 제한하려는 시도 같아 보여서
MS의 C++에 대한 비전이 어떤지 알고 싶습니다.

lotus의 이미지

측정상황은 정리해서 원래의 질문글에 추가하였습니다.

실행속도는 20%쯤 좋아지는 군요.

Precompiled header상황은 일단은 보류하겠습니다. stable하지 않은 code는 이용하고 싶지 않아서요.

cygwin1.dll이 시간을 잡아먹지는 않는 것 같습니다.

제가 cygwin깔때 mingw를 깔지 않도록 해서 -mno-cygwin은 사용하지 않았습니다.

VC.NET에서 C++이 찬밥인지는 저는 잘 모르겠습니다.
저는 무슨 GUI 등의 프로그램을 짜는 사람이 아니라 열심히 산수만 합니다.
지금 test한 프로그램도 차분을 이용하는 수치해석 routine의 일부라서요.

단 표준을 잘 지원한다는 것 은 맞습니다. 기존의 VC6.0에서 compile않되던 library들 (autoconf, make이용한 것들)을 열심히 노가다해서 compile해 본 결과 VC.NET에서는 compile잘 됩니다.

참고로, VC++ 6.0과 VC.NET과의 속도비교는 수행해 보았습니다.
VC.NET으로 이전해 가기 전에요.
실행속도는 동일했습니다. (정확히 동일합니다.)
저와 같이 산수만 하는 사람의 경우에는, 이걸로 볼 때 windows에서 VC.NET을 C++ compiler로 이용하는 데에는 별 문제가 없을 것으로 생각됩니다.

cinsk의 이미지

Kernel compile과 같이 여러 파일을 계속 컴파일해야 할 경우는 ccache를 써보시기 바랍니다. 단순히 gcc를 wrapping하는 cache인데, 눈에 띄게 컴파일 속도가 향상된 것을 보실 수 있습니다.

특별한 컴파일러 옵션이 필요하거나 소스 또는 Makefile을 수정할 필요는 전혀 없고, 단순히 gcc와 cc를 ccache로 symbolic link하는 것으로 끝납니다.

distcc라고 여러 컴퓨터에 분산해서 컴파일하는 것도 있는데, 써보진 않았습니다.

http://ccache.samba.org/

에 가보시기 바랍니다.

galien의 이미지

닷넷은 프레임 웤이고 자바를 다분히 의식하고 나온 상품이기 때문에
JIT코드인가 하는 것이 자바의 바이트 코드 처럼 중간에 한번 컴파일 되고
그 컴파일 된 코드가 닷넷 엔진(?) 위에서 인터프리트 되는 것으로 알고
있는데요.

그렇다면 대략, 컴파일타임은 빠르고 런타임은 좀 느릴꺼라 생각했는데,

VC6.0이랑 실행 속도가 같다면, 중간 언어 단계(인터프리트) 없이
그냥 컴파일 하는 옵션을 사용한 것인가요?

voider의 이미지

VC.NET 이라고 해서 MC 와 많이 해깔려 하시는 분들이 있는데
VC.NET에는 VC7.x 이라는 컴파일러가 있습니다
이것은 .NET 환경으로 컴파일 할수 도 있지만
플랫폼 바이너리 로도 컴파일 할수있습니다.

그런데 cygwin이 더 빠르다는건 놀랍군요....

개인적으로 VC7.x은 대 만족입니다.
저야 성능은 별 관심 밖이지만 완변하게 표준을 지원합니다

boost 홈페이지에 가봐도 boost 라이브러리의 포팅상황이 100%입니다
gcc 같은 경우도 90% 대이죠

gcc 에 보면 중간 파일을 생성하지 않고 fifo를 사용해서 컴파일하는 옵션이 있던것 같던데 그걸 사용해보는게....
갈수록 VC7 이 좋아져서 죽겠어요

-- 아쉬운 하루 되세요 --

sunyzero의 이미지

nohmad wrote:
cygwin에서도 -mno-cygwin 옵션을 포함하면 mingw를 사용해서 컴파일합니다.
cygwin1.dll을 거치지 않고 바로 네이티브 바이너리로 생성됩니다.

-mno-cygwin 옵션을 주게 되면 그럼 플랫폼 종속적으로 바이너리를 만들어 준다는 말인가요? 그렇다면 cygwin이 설치되지 않은 플랫폼에서도 잘 돌아간다는 의미인지요?

그리고 실행파일 속도는 윈도우즈는 버전에 따라서도 상당히 차이가 나 보입니다. 이상하게도 같은 소스를 어디에서 컴파일했는가와 실행환경에 따라서도 매우 다른 분포를 보여줍니다.

예전에도 2000에서 컴파일하고 돌리는데 2003 에서 젤 빠르고, xp가 젤 느리고, 2000도 서버가 젤 느리더군요. adv server는 빠르고... 하여간 들쭉날쭉해서 이상하긴 했지만, 어쨌든 속도만 비교하는 것은 매우 많은 수를 해보지 않고는 꼭 g++이 VC보다 빠르다는 것은 이상하군요.

PS) MS가 그런데 왠일로 표준을 그렇게 잘 지킬까요? 약 먹었나?

========================================
* The truth will set you free.

lotus의 이미지

wrote:
-mno-cygwin 옵션을 주게 되면 그럼 플랫폼 종속적으로 바이너리를 만들어 준다는 말인가요? 그렇다면 cygwin이 설치되지 않은 플랫폼에서도 잘 돌아간다는 의미인지요?

맞습니다. -nmno-cygwin을 쓰면 내부적으로 minGW compiler를 이용하는데 이 컴파일러는 cygwin과는 하등의 관계가 없습니다. 따라서 cygwin1.dll이 필요하지 않습니다.

wrote:

그리고 실행파일 속도는 윈도우즈는 버전에 따라서도 상당히 차이가 나 보입니다. 이상하게도 같은 소스를 어디에서 컴파일했는가와 실행환경에 따라서도 매우 다른 분포를 보여줍니다.
예전에도 2000에서 컴파일하고 돌리는데 2003 에서 젤 빠르고, xp가 젤 느리고, 2000도 서버가 젤 느리더군요. adv server는 빠르고... 하여간 들쭉날쭉해서 이상하긴 했지만, 어쨌든 속도만 비교하는 것은 매우 많은 수를 해보지 않고는 꼭 g++이 VC보다 빠르다는 것은 이상하군요.

이 부분은 실험해 보려고 해도 너무 큰일인걸요. 단. xp에서는 비교해 보았지만 여전히 속도가 g++이 빠릅니다.

simpid의 이미지

galien wrote:
닷넷은 프레임 웤이고 자바를 다분히 의식하고 나온 상품이기 때문에
JIT코드인가 하는 것이 자바의 바이트 코드 처럼 중간에 한번 컴파일 되고
그 컴파일 된 코드가 닷넷 엔진(?) 위에서 인터프리트 되는 것으로 알고
있는데요.

그렇다면 대략, 컴파일타임은 빠르고 런타임은 좀 느릴꺼라 생각했는데,

VC6.0이랑 실행 속도가 같다면, 중간 언어 단계(인터프리트) 없이
그냥 컴파일 하는 옵션을 사용한 것인가요?

VC.NET으로 닷넷용으로만 컴파일 할 수 있는건 아닙니다.
Win32기반으로도 사용할 수 있습니다.
VC6과 속도가 같았다는건.. Win32로 컴파일 했다는 것입니다.

그리고 VC.NET으로 닷넷용으로 컴파일 한다면 자바처럼 바이트 코드로 컴파일되는건 맞습니다.
그리고 JIT(Just It Time) 컴파일러란건... 바이트코드를 가상머신에서 실행시킬때 바이트코드를 한줄한줄(?) 인터프리팅하는게 아니고 모든 프로그램을 미리 해당 머신의 머신코드로 바꾸는 컴파일러입니다.
결론적으로 JIT를 이용하면 실행속도가 매우 빨라지지만 미리 머신코드로 바꿀기 위해 시간이 필요합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.