2010-03-18 2 views
3

현재 듀얼 코어 CPU 인 Opteron 275 (2.2Ghz) 및 매우 빠른 하드 드라이브와 함께 4GB의 RAM을 갖춘 컴퓨터가 있습니다. C++ 템플릿을 사용하는 다소 단순한 프로젝트를 컴파일 할 때 (부스트를 생각하는 등), 컴파일 시간이 길어질 수 있습니다. (작은 프로젝트의 경우 몇 분, 큰 프로젝트의 경우 훨씬 더 오래 걸릴 수 있습니다.) 불행히도 코어 중 하나만이 100 % 고정되어 있으므로 I/O가 아니라는 것을 알고 있으므로 C++ 컴파일을 위해 다른 코어를 활용할 방법이 없다고 생각합니까?집중적 인 C++/템플릿 컴파일 속도를 높이기 위해 좋은 CPU/PC 설정이란 무엇입니까?

+0

를 호출하는 것입니다, 그리고 매우 쉬운 일이 아닙니다 특히 연결 단계에서 평행하게 만듭니다. 나는 왜 컴파일이 느려질 수 있는지에 대한 좋은 목록을 작성한 jalf라고 생각한다. 컴파일에 당신은 무엇을 사용하고 있습니까? 그리고 부스트의 어떤 부분? – GManNickG

+1

그게 쉽지, 그것은 그의 최대 투표 대답 : http://stackoverflow.com/questions/318398/why-does-c-compilation-take-so-long/318440#318440 – GManNickG

+0

일부 컴파일러는 IDE/컴파일 시스템을 읽습니다 , 병렬로 파일을 컴파일 할 수 있습니다. 그것은 듀얼 코어 시스템을 더 활용할 수 있습니다. linux/unix에서 GNU make를 예로 들자면, 파일을 병렬로 컴파일 할 수 있습니다. – jpyllman

답변

4

템플릿의 컴파일 시간 문제는 종종 컴파일 문제가 아닌 링크 문제입니다.

.cpp 파일에서 템플릿을 내부적으로 사용하지만 헤더에 템플릿이 실제로 포함되어 있지 않은지 확인하여이를 수정하는 것이 좋습니다. 이것은 클래스를 선언하거나 public 멤버 (Pimpl Idiom, 기본적으로)를 선언하는 추상 기본 클래스에서 구현 클래스를 래핑하여 수행 할 수 있습니다. 메이크 기반 시스템에서 컴파일 멀티 스레드의 활용을 위해

+0

이것은 좋은 지적이고 나는 더 잘 알아야한다. 그러나 나는 Pimpl 관용어로 게으르다. 그것은 여분의 일이다. – ApplePieIsGood

7

미리 컴파일 된 헤더를 사용하고 있습니까? 일반적으로 내 C++ 프로젝트에서 얻을 수있는 가장 큰 컴파일 속도 향상을 제공합니다.

또한 컴파일러에 따라 멀티 스레드 컴파일을 활성화 할 수 있습니다. 예를 들어 Visual C++에서는/MP 스위치 (see here for details)를 사용하지만 다른 명령 줄 옵션에 따라/MP가 항상 가능하지는 않습니다.

1

의 -j 스위치를 살펴보고, 일반적인 권장 사항은 코드가 어렵다 C++를 컴파일

make -j<number of cores + 1> 
+1

왜 '코어 수 +1'이되어야합니까? – bitek

+0

다른 질문을 참조 할 수 있습니다. http://stackoverflow.com/questions/3025587/whats-best-value-for-make-j –

관련 문제