이 방법은 얼마전 GCC 컴파일러의 옵션으로 병렬 컴파일 하는 것과 같은 방법으로 하는 듯 하다.
2008 버전의 cl.exe 컴파일러가 멀티프로세스 빌드 옵션을 지원한다.
그 옵션은 /MP 혹은 /MPn 이며, n 은 숫자이다. n 은 CPU 코어 숫자를 기입하면 되지만,
좀 더 크게 해도, 아주 약간의 성능 향상이 있을 수도 있겠다. GCC 와 마찬가지로.
Visual Studio IDE 환경에서 사용하려면
[Project] - [Properties] - [Configuration Properties] - [C/C++] - [Command Line] 에
/MP 을 기입하면 되지만, /Gm 옵션과 충돌한다 ! warning 메시지가 뜬다.
그럴 경우에는,
[Project] - [Properties] - [Configuration Properties] - [C/C++] - [Code Generation] 에서
Enable Minimal Rebuild 옵션을 꺼주면 된다.
병렬 컴파일과 최소 리빌드 옵션이 왜 충돌나는지는 잘 모르겠으나, 하라는 대로 한다.
예전에 테스트로 작성한 10만 바이트 C++ 프로젝트(약 4000라인)를 리빌드 하는데,
기존 방법으로는 17 초 정도 걸렸는데, /MP 옵션을 적용하자 6초 내외 걸린다.
아마 파일 수가 여러개야만 효과가 있을 것이다. output 에도 한꺼번에 여러개씩
컴파일 완료되는 메시지를 보게 될 것이다.
(다만, 파일수가 소수라도, CLR 프로젝트의 경우 ASSEMBLER? 로 분리하는 개념이 있다고 하니..
효과적이라고 한다. 그렇다면, .NET 류 언어들은 /MP 가 지원되는지는 모르겠으나,
역시 더 빨리 컴파일 할 수 있을 것이다)
거의 3배 가까이 빨라진 것이다. 여튼, C/C++ 컴파일 속도가 너무 느려서 좌절할 때가 있었는데,
다행히 VC++ 에도 이런 기능이 넣어지는구나.
물론, 더 빠른 컴파일 성능을 위해서라면 거대한 프로젝트에는 이 방법으로는 한계가 있으니,
대형 개발 업계에서는 분산 컴파일이라는 기법을 이용한다.
유닉스는 distcc 라는 것이 존재하며, VC 에는 아마 2008에서 팀에디션에서 지원한다고 했던가..
정확히는 모르겠으나, 별도의 서드파트 패키지도 있다. 이 것을 쓰게 되면,
별도의 빌드 서버를 (1개이상) 마련해 놓고, 그 서버의 힘을 빌려 더 빠른 속도로 컴파일하게 된다.
댓글 없음:
댓글 쓰기