2011-08-22 4 views
4

링크 작업이 많은 IO 작업을 수행하는 컴파일 작업이 있습니다. 우리는 약 12 ​​개의 코어가 있으므로 make -j13을 실행합니다.하지만 6 개의 타겟을 연결하는 경우 라운드 로빈 방식으로 수행해야합니다. 나는 다음에 달려 있다고 생각했지만, 이것이 개별 목표를 깨뜨릴 것이라고 생각합니다. 이 작은 문제를 해결하는 방법에 대한 아이디어가 있습니까?make : 일부 대상의 병렬 실행을 비활성화합니다.

+0

어떻게 "개별 목표를 깨뜨릴 수 있습니까?" – Beta

답변

3

make 자체는 "N 개는 아니지만 한 번에 M 개를 초과하여"요청하는 메커니즘을 제공하지 않습니다.

GNU parallel 패키지의 sem 명령을 링커 규칙의 요리법에 사용해보십시오. 문서에 example of ensuring only one instance of a tool runs at once이 있습니다. 위의 예에서 make은 한 번에 13 개까지 sem 개까지 시작할 수 있지만 한 번에 하나씩 만 링커를 실행하고 다른 하나는 차단합니다.

단점은 make의 13 개 작업 슬롯 중 5 개가 sem 인스턴스로 묶여 있고 링커 프로세스가 완료 될 때까지 기다릴 수 있다는 것입니다. 빌드 구조에 따라 CPU 시간 낭비가 될 수 있습니다. 그래도 디스크를 한꺼번에 쓰러 뜨리는 6 명의 링커를 이긴다 :-)

-1

개별 대상을 부수 지 않습니다. 대상에 대해 (:) 규칙을 여러 개 만들 수 있습니다. 단 하나의 규칙에 실제 레시피가있는 경우에만 규칙을 작성할 수 있습니다. 이것은 좋은 유스 케이스로 보인다.

+0

좀 더 구체적으로 기재 할 수 있습니까? 나는 시도했다 | 종속성 순서를 지정하지만 단일 대상을 컴파일하는 경우에도 종속성을 빌드하므로 의도 한대로 작동하지 않습니다. – piotr

+0

더 구체적 일 수 있습니까? 정확히 무엇을 시도 했습니까? – reinierpost

관련 문제