2012-02-23 2 views
20

Windows 데스크톱에 쿼드 코어 i7 CPU가 있습니다. 가능한 많은 코어를 사용하여 mingw32-make를 컴파일하려고합니다. Build Settings-> Build Steps에서 "Make Arguments"필드에 -j8을 추가했습니다. mingw32-make는 속도 향상을 얻지 못했기 때문에이 옵션을 완전히 무시한 것 같습니다. 작업 관리자에서 CPU 사용량을 볼 때 13 %로 유지되고 실행중인 g ++ 인스턴스가 하나만 표시됩니다.QTCreator에서 mingw를 사용하여 여러 코어에서 컴파일하는 방법

지금은 mingw를 사용하여 전체 프로젝트를 재구성하는 데 3 분이 걸립니다. MSVC를 사용하여 재 구축하는 데는 불과 15 초 밖에 걸리지 않습니다.

자세한 내용은 프로젝트 설정에서 미리 컴파일 된 헤더 옵션을 활성화했습니다. VC를 사용하면 작업이 훨씬 빨라집니다. 그러나 나는 아직도 mingw와 함께 미리 컴파일 된 헤더의 이점을 보지 못하고있다.

QTCreator에서 여러 소스 파일을 동시에 컴파일 할 수 있다면 의견을 보내주십시오. 감사!

답변

22

다음은 내가 한 일입니다.

Qt Creator의 도구 -> 옵션 메뉴에서 "빌드 및 실행"섹션 아래에 "nmake 대신 jom 사용"이라는 옵션이 있습니다. 나는 상자를 체크했으나 아무것도 바뀌지 않았다.대신 프로젝트의 빌드 설정으로 이동하여 빌드 단계 범주 아래에 "만들기"항목이 있습니다. 세부 사항을 펼치면 "Override mingw32-make.exe :"항목을 찾을 수 있습니다. 나는 거기에 "C : \ QtSDK \ QtCreator \ bin \ jom.exe"를 붙여 넣었고, 갑자기 여러 개의 코어로 빌드하고있었습니다.

나를 위해 Qt Creator 2.4.1에서 일했습니다. 시도 해봐.

+0

mingw32-make 대신 JOM을 사용하면 효과적입니다! VC 컴파일보다 여전히 느리지 만 이전보다 훨씬 빠릅니다. –

+0

이것은 Microsoft 컴파일러가 한 번의 호출로 많은 C++ 파일을 먹고 싶어하기 때문입니다. make와 같은 전통적인 1970 기술은 이것을 지원하지 않습니다. 컴파일러는 호출 당 하나의 파일로 컴파일러를 호출합니다.이 파일은 미리 컴파일 된 헤더에 좋지 않습니다. 더 나은 빌드 시스템으로 전환하십시오. – Lothar

10

-j8은 Win32에서 GNU Make의 제한 때문에 아마도 작동하지 않습니다.

을 make arguments 필드에 넣으십시오. 이는 Make가 가능한 한 많은 컴파일 프로세스를 생성하도록합니다.이를 처리 할 수있는 충분한 RAM과 CPU가 있으면 단일 컴파일보다 더 빠릅니다.

은 불행하게도 이러한합니다 (메이크 파일을 수정하지 않고) 유일한 두 가지 옵션이 있습니다 : -j1, 또는 무제한 -j

전체 세부 사항 중 하나 GNU는 작업 서버를 지원하지 않습니다는 Win32에서 확인, 그래서 부모 프로세스를 만들 수 있습니다 ' 모든 하위 Make에 의해 생성 된 컴파일 프로세스의 수를 추적합니다. 안전을 위해 하위 Make는 -j1으로 만 실행됩니다. 나는 qmake/Qt Creator의 생성 된 Makefiles가 Makefiles의 여러 레이어를 사용한다고 생각합니다. 내가 먼저 마이크로 칩의 MPLAB의 X의 IDE와이 문제를 파악,

이 인용 README.W32에서 GNU와 함께 배포되는

이 (병렬에 대한

지원

가 병렬 빌드 빌드 확인 대한 추가 정보를 원하시면 this thread 체크 아웃 -jN) 2 제한적으로,이 포트에서 지원된다

  • 동시 프로세스의 수는 (64)의 하드 제한을 가지며, 012 이 포트가 하위 프로세스를 기다리는 것을 구현하는 방식 때문에;

  • 작업 서버 방법 (사용할 수 있도록에서 POSIX에 플랫폼을 실행하는 경우) 재귀 메이크에서 하위 확인의에 명시 적 -jN 스위치를 통과해야 의미가 지원되지 않습니다. 하위 Make가 명시적인 -jN 스위치를받지 못하면 은 -j1로 기본 설정됩니다. 즉 하위 Make의 병렬 처리가 없습니다.

+1

-j는 컴퓨터에서 많은 수의 컴파일 프로세스를 생성하지만 훌륭하게 작동합니다. 의견을 보내 주셔서 감사합니다! –

+1

큰 프로젝트를 만드는 경우가 아니라면이 방법을 사용하는 것이 좋습니다. 당신은 12 개 이상의 소스를 가지고 컴파일하는 경우 주요 CPU 문제에 부딪치게됩니다. 3 ~ 4 개 이상의 소스를 컴파일하는 경우 거의 메모리 문제에 부딪치게됩니다. – inetknght

3

사용 MAKE_COMMAND 환경 변수 :

set MAKE_COMMAND=mingw32-make -j%NUMBER_OF_PROCESSORS% 
+1

아니요. mingw32-make에서는 작동하지 않습니다. -jN 옵션은 무시됩니다. –

+1

당신에게 무엇을 말해야할지 모르지만 그것은 나와 다른 사람들을 위해 일합니다 : http://stackoverflow.com/questions/1247162/gnu-make-jobs-option-in-qmake –

0

-j 프로젝트가 내 사용 가능한 메모리와 컴퓨터가 정지 모두를 사용하므로 큰 불행하게도 나를 위해, 길을 가야하는 것입니다, 그래서 그 인식 . 브렌든은 실제로 코어의 절반 만 사용하는 방법이 없다고 말했습니다. 예를 들어 사실이라면 동정입니다.

4

(NUMBER_OF_PROCESSORS의 값 (윈도우)/$(nproc) (리눅스)을 더한로 대체 9 -이 최적) -j9 추가 qmake를의 \ 발전기의 모든

QString makefilein = " -f " + subtarget->makefile; 

라인에 \ makefile.cpp (찾기 너 자신).

QString makefilein = " -j9 -f " + subtarget->makefile; 

다음 적절한 parametres와 configure.exe 실행으로

그것은 결과 (!와 메이크의 세대의 풍요 로움을 피하기 위해 -qmake -dont-process 추가를!).

문제는 "디버그 및 릴리스"빌드 중에 두 세트의 프로세스를 얻는 것입니다. 따라서, 스폰 된 프로세스의 총 개수는 18+ 개입니다.

0

-> & 실행 빌드 -> 특정는 MinGW가 설치를 구축 -> 다음 환경 (일반// 청소 단계를 단계를 빌드 아래에이 화면에 ..) 및 빌드 변수 MAKEFLAGS을 추가하고 -j8으로 설정하십시오. 나는 -j4과 QtCreator 4.4.1 및 MinGW 5.3.0을 사용하여 두 대의 코어 머신에서 이것을 테스트했습니다. 내 프로세서를 컴파일 할 때 작업 관리자에서 볼 수 있듯이 100 % 성능으로 실행됩니다. 이 옵션이 없으면 약 25 % 였으므로 정확히 예상대로 작동한다고 가정합니다. 빌드가 훨씬 빨라졌습니다.

관련 문제