다중 코어를 사용하여 g ++로 컴파일 위해 g ++가

빠른 질문 : g ++이 큰 프로젝트를 더 빨리 컴파일하기 위해 g ++가 여러 인스턴스를 생성 할 수있게 해주는 컴파일러 플래그는 무엇입니까 (예 : 멀티 코어 CPU의 경우 한 번에 4 개의 소스 파일)?



답변

make-gnu make로 -j 플래그를 사용하여이를 수행 할 수 있습니다 (단일 프로세서 시스템에서도 도움이 됨).

예를 들어 make에서 4 개의 병렬 작업을 원할 경우 :

make -j 4

파이프를 사용하여 gcc를 실행할 수도 있습니다.

gcc -pipe

이것은 컴파일 단계를 파이프 라인으로 만들어 코어를 바쁘게 유지하는 데 도움이됩니다.

사용 가능한 추가 머신이있는 경우 distcc를 체크 아웃 할 수도 있습니다.


답변

이러한 플래그는 없으며 각 도구가 하나의 기능 만 수행하고 잘 수행한다는 유닉스 철학에 맞서 실행됩니다. 컴파일러 프로세스 생성은 개념적으로 빌드 시스템의 역할입니다. 아마도 찾고있는 것은 GNU make에 대한 -j (jobs) 플래그입니다.

-j4를 만든다

또는 pmake 또는 유사한 병렬 make 시스템을 사용할 수 있습니다.


답변

사람들은 언급 make했지만 bjam유사한 개념을 지원합니다. 를 사용하면 bjam -jxbjam에 x동시 명령 을 작성하도록 지시 합니다.

Windows 및 Linux에서 동일한 빌드 스크립트를 사용하며이 옵션을 사용하면 두 플랫폼 모두에서 빌드 시간이 절반으로 줄어 듭니다. 좋은.


답변

make당신을 위해 이것을 할 것입니다. 매뉴얼 페이지에서 -j-l스위치를 조사 하십시오. 나는 g++병렬화 할 수 없다고 생각 합니다.


답변

make를 사용하는 경우으로 문제를 해결하십시오 -j. 보낸 사람 man make:

  -j [jobs], --jobs[=jobs]
       Specifies the number of jobs (commands) to run simultaneously.
       If there is more than one -j option, the last one is effective.
       If the -j option is given without an argument, make will not limit the
       number of jobs that can run simultaneously.

가장 주목할 만하게, (사용 환경에 따라 사용 가능한 코어 수를 스크립팅하거나 식별하려면 많은 환경에서 실행하면 많이 변경 될 수 있음) 유비쿼터스 파이썬 함수를 사용할 수 있습니다 cpu_count().

https://docs.python.org/3/library/multiprocessing.html#multiprocessing.cpu_count

이처럼 :

make -j $(python3 -c 'import multiprocessing as mp; print(int(mp.cpu_count() * 1.5))')

1.5위의 주석에서 사용자 에게 무소음을 인용하는 이유를 묻는다면 :

1.5 숫자는 명시된 I / O 바운드 문제 때문입니다. 경험의 법칙입니다. 작업의 약 1/3이 I / O를 기다리고 있으므로 나머지 작업은 사용 가능한 코어를 사용합니다. 코어보다 큰 숫자가 더 좋으며 2 배까지 올라갈 수도 있습니다.


답변

distcc는 현재 머신뿐만 아니라 distcc가 설치된 팜의 다른 머신에도 컴파일을 배포하는 데 사용할 수 있습니다.


답변

g ++에 대해서는 잘 모르겠지만 GNU Make를 사용하는 경우 “make -j N”(여기서 N은 만들 수있는 스레드 수)은 여러 g ++ 작업을 동시에 실행할 수있게합니다 파일이 서로 의존하지 않기 때문에).