2011-02-01 5 views
5

10 개 이상의 오픈 소스 라이브러리가 포함 된 프로젝트를 새로 편집 할 때. 약 40 분이 소요됩니다. (정상적인 하드웨어에서)성능 병 목을 컴파일하는 C++은 무엇입니까?

질문 : 내 병목은 어디에 정말로 있습니까? 하드 드라이브 추구 또는 CPU Ghz? 나는 멀티 코어가 많은 도움을 줄 것이라고 생각하지 않습니까?

--edit 1--
을 4.0GHz로 내 정상 하드웨어 = I3의 OC, 8기가바이트 인 1600MHz DDR3와 2TB 웨스턴 디지털

--edit 2--
내 코드 = 10 %, libs와 = 90 %는 매번 모든 것을 구축하지 않아도된다는 것을 알고 있지만, 컴파일 성능을 개선하는 방법을 알고 싶습니다. 개발자 용 새 PC를 구입할 때 더 똑똑한 선택을 할 것입니다.

--edit 3--
CC = 비주얼 스튜디오 (빌어 먹을) 당신은 멀티 코어 순간까지 바로 엄청난 속도 향상을 잘못 제공하고

+0

"정규 하드웨어." –

+2

그 모든 libs를 다시 컴파일한다는 뜻입니까? 자신의 사업 규모는 얼마나됩니까? –

+2

또한 멀티 코어가 도움이 될 수 있습니다. - VS는 여러 파일을 동시에 (각 파일마다 다른 스레드를 사용하여) 컴파일 할 수 있으며 잘못이 아니라면 코어 수가 달라집니다. –

답변

2

VS 2010부터 VS는 단일 프로젝트를 컴파일 할 때 선택적으로 여러 코어를 사용할 수 있습니다. 또한 여러 프로젝트를 동시에 컴파일 할 수도 있습니다. 그러나 평행 속도 향상은 내 경험에 중요한 것으로 보이지 않습니다. Xcode는 병렬 빌드를 할 때 훨씬 좋습니다.

다행히도 매번 오픈 소스 라이브러리를 다시 빌드 할 필요가 없습니다. 맞습니까? 한 번 빌드하고 버전 관리에 .lib 파일을 저장 한 다음 후속 빌드에 사용할 수 있습니다.

자신의 코드에 맞게 미리 컴파일 된 헤더 파일을 사용해 보셨습니까? 이것은 엄청난 속도 향상을 가져올 수 있습니다.

+0

예. 나는 CS 수업 1에서 모든 것을 만들 필요가 없다는 것을 알고 있습니다.하지만 단지 편집증 멍청 아. 신제품 출시를 위해 신선한 것을 만들고 싶습니다. – c2h2

+0

@ c2h2 : 그렇다면 하드웨어에 돈을 낭비하는 편집증의 멍청이가되어 지루해지며 코드 컴파일을 기다리는 데 많은 시간을 할애해야합니다. 진지하게, 컴파일러의 미리 컴파일 된 헤더 지원을 활용하십시오 : 이유가 있습니다. 정상적으로 작동합니다. 해당 라이브러리 코드는 변경되지 않습니다 *. –

+0

@ c2h2 : 얼마나 자주 새로운 릴리스를 구축합니까? 하루에 한 번만해도 40 분의 빌드 시간이 엄청난 거래입니까? (새로운 릴리스가 아닌 다른 것을 의미합니까?) –

4

하드 드라이브는 실제로 포기 :)

예제로 증명 : distcc, 분산 빌드 (약 20 코어를 병렬로 사용합니다. 실제로는 로컬 전처리 단계가 필요합니다).

실질적인 병목 현상은 #include 메커니즘과 관련이 있습니다. 모듈이있는 언어는 훨씬 빠르게 컴파일됩니다.

1

처음부터 컴파일 할 때 예, 시간이 오래 걸립니다. VS가 프로젝트 관리로 포함하는 make의 40 년 된 기술을 사용하여 첫 번째 실행 후에 컴파일해야하는 것을 컴파일합니다.

즉, C++의 번역 단위 모델과 광범위한 템플릿 사용은 중요한 실용적인 문제가 될 수 있습니다.

2

멀티 코어 편집 대부분의 경우 대단히 도움이됩니다.

병목 현상이 어디에 있는지 판단하기 위해 프로젝트를 분석하고 각 단계에서 소요 한 시간을 분석해야합니다.

일반적으로 큰 C++ 프로젝트에서 프로세스는 일반적으로 CPU 바운드이고 디스크 바운드입니다. 만약 다른 방향이라면 아마 당신은 헤더 의존성 지옥에있을 것입니다.

실제로 프로젝트에서 컴파일 시간과 종속성을 줄이는 데는 많은 방법이 있습니다.내가 아는 최고의 단수 참조 Lakos입니다 :

http://www.amazon.com/Large-Scale-Software-Design-John-Lakos/dp/0201633620/ref=sr_1_1?ie=UTF8&qid=1296569079&sr=8-1

는 내가 읽은 가장 중요한/실제 C++ 책 중 하나입니다.

일반적으로 컴파일 시간을 크게 단축 할 수 있지만 (예 : 매우 심각하게 생각하면 40 배 이상 빠름) 기존 코드베이스를 수정하는 데 많은 시간과 노력이 필요할 수 있습니다.

4

빌드하는 데 40 분이 걸릴 수 있습니다. 실제로 # 빈약 한 #include 사용으로 인해 40 분이 지나면 확실히 말할 수 있습니다. 포함 할 필요가없는 것들을 포함하고 있습니다. 오직 앞의 선언 만하면됩니다.

코드를 정리하면 큰 차이가 있습니다. 나는 그 많은 일을 알고 있지만 놀랄 것입니다. 30 분 이상 걸리는 라이브러리에서 일한 한 회사에서 모든 #include가 필요하다는 것을 확인하고 #includeing 대신 forward 선언을 추가하여 3 주짜리 build에 최적화되었습니다. 이 라이브러리는 당신에게 아이디어를주기 위해 백만 줄의 코드를 훨씬 넘었습니다 ...

+0

감사합니다. 팀과 함께 조사하겠습니다. – c2h2

+0

좋은 아이디어! 나는 앞으로 적용 선언문을 사용할 것입니다 (해당 될 때마다). :) – Donotalo

관련 문제