스레드를 몇 개나 사용할 수 있습니까?


11

데스크탑 / 노트북 컴퓨터에서 큰 시스템을 재 구축 할 때 make다음과 같이 하나 이상의 스레드를 사용하여 컴파일 속도를 높이라고합니다.

$ make -j$[ $K * $C ]

경우 $C의 수를 표시하도록되어 코어 동안 기계가있다 (우리는 하나의 숫자와 숫자로 가정 할 수있다) $K나는 다를 무언가 24, 내 기분에 따라 달라집니다.

예를 들어 make -j12코어가 4 개인 make경우 최대 12 개의 스레드를 사용하도록 표시 할 수 있습니다.


이론적으로는 $C스레드 만 사용하면 프로세스가 드라이브에서 데이터를 가져 오는 동안 코어가 유휴 상태가됩니다. 그러나 스레드 수를 제한하지 않으면 make -j시간 전환 컨텍스트를 낭비 하거나 메모리가 부족 하거나 더 악화 될 위험이 있습니다. 머신 $M에 메모리 기가 있다고 가정합니다 ( $M10의 순서).

그래서 가장 효율적인 스레드 수를 선택하는 전략이 수립되어 있는지 궁금합니다.


많은 경우 스레드 수에 대한 정답은 코어 수입니다. 그러나 확실하게 알 수있는 유일한 방법은 달콤한 테스트를 찾을 때까지 스레드 수를 변경하여 일부 테스트를 실행하는 것입니다.
Robert Harvey

@RobertHarvey : 예, 아마도 밤새 모든 종류의 설정으로 쉘 스크립트를 컴파일 할 것입니다. 그러나 이것에 대해 약간의 지식이 있는지 물어볼 것이라고 생각했습니다.
비트 마스크

4
많은 사람들이 $ cores + 1을 제안하므로 4 개의 컴파일 동안 1 개의 컴파일러 프로세스가 디스크에서 읽습니다. 일반적인 제안은 어렵습니다. 코드베이스 (C ++ 템플릿 남용 대 C 함수가있는 작은 컴파일 단위), 컴파일러 체인 (사전 컴파일 된 헤더 등) 및 빌드 구조 ( 끝 사이 또는 여러 개의 작은 것들)
Johannes

1
성능을 진지하게 찾고 있다면 RAM 디스크 또는 다른 I / O 완화 방법을 설정하는 것이 좋습니다. CPU 사용률이 가장 큰 문제라고 생각하지 않습니다.
TMN

@TMN : RAM 디스크는 어떻게 도움이됩니까? 리눅스는 (당신이 물건을 캐싱 꽤 잘 드라이브 캐시를 언급하지 않기 위하여, 오른쪽, 헤더 파일을 의미?). 수동으로 또는 빌드 스크립트를 변경하여 모든 것을 shm에 먼저로드해야합니다 (완전히 과잉 일 것입니다).
비트 마스크

답변:


15

두 개의 코어와 8GB의 RAM이있는 머신에서 llvm (디버그 + 어설 션 모드)을 빌드하는 일련의 테스트를 실행했습니다.

작업 수에 따라 llvm 시간 컴파일

이상하게도 10까지 올랐다가 갑자기 두 개의 일자리를 만드는 데 걸리는 시간 아래로 떨어집니다 (한 작업은 그래프에 포함되지 않은 두 배의 시간이 걸립니다).

7*$cores이 경우 최소값 인 것 같습니다 .


1
실제 테스트 및 추측이 아닌 경우 +1
Martin Wickman

3

Gentoo Linux (소스 기반 배포판)를 실행 중이며 경험상 (최신 하드웨어 n*2 + x를 사용하여) 최고의 가치 라고 말할 수 있습니다 . 이것을 설명하겠습니다 :

  • n*2: 더 느린 CPU는 한 번에 2 개의 작업을 실행하기에 충분한 전력을 가지고 있습니다. 대부분의 컴파일 작업은 매우 빠르게 완료됩니다.
  • +x이 숫자는 시스템 (주로 메모리 및 디스크)에 따라 다릅니다. 충분한 RAM과 빠른 디스크가 있으면를 설정하십시오 x=n. 그러나 이것은 소스 코드 (Open Office, 당신을보고 있습니다!)와 사용 된 언어 (C / C ++ 컴파일은 메모리를 많이 사용합니다)에 따라 다릅니다.

그러나 -j최상의 숫자를 얻으려면 일부 값으로 일부 테스트를 실행해야합니다 . 또한 빌드 프로세스의 다른 단계 인 포장 풀기, 실행 configure등 을 병렬화하십시오 .


나는 현재 대부분 C ++에 관심이 있으며 내 디스크는 가장 빠르지 않습니다.
비트 마스크

그런 다음 n * 1.5로 시작하여 컴파일 시간이 줄어들지 않을 때까지 늘리십시오 (매번 디스크 캐시 / 컴파일 캐시를 정리하십시오). 또한 ccache ( ccache.samba.org )를 사용 하여 컴파일 속도를 높이는 것을 고려하십시오.
ercpe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.