-j4 또는 -j8과 함께 make 사용
4개의 프로세서를 탑재하고 있으며 프로세서를 많이 사용하는 애플리케이션을 컴파일하고 있습니다.그걸 읽었는데make
와 함께-j4
스위치가 OpenCV에 권장되었습니다.대신 스위치를 사용해야 합니까?-j8
여러 프로세서에 대응하여 얻을 수 있는 이점은 무엇입니까?
말씀하신 대로-j
flag는 제공된 양의 'displicate'를 생성할 수 있음을 나타냅니다.각 스레드는 자체 코어/CPU에서 실행되므로 멀티 코어/CPU 환경을 최대한 활용할 수 있습니다.
make
소스 파일은 컴파일되지 않습니다.이것은 컴파일러(gcc)에 의해 실행됩니다.Makefile (입력)make
)에는 일련의 타겟이 포함되어 있습니다.각 타깃은 (다른 타깃에 대한) 의존관계 세트를 가지며 타깃 구축 방법을 규정합니다. make
는 Make 파일을 읽고 모든 타깃, 의존관계 및 빌드 규칙을 관리합니다.소스 파일을 컴파일하는 것 외에 사용할 수 있습니다.make
shell 명령어로 설명할 수 있는 작업을 수행합니다.
허용된 스레드 수를 너무 많이 설정하면 각 스레드를 자체 코어로 예약할 수 없습니다.모든 스레드가 실행되도록 하려면 추가 스케줄링(콘텍스트) 스위치가 필요합니다.이러한 추가 리소스 사용으로 인해 성능이 저하될 수 있습니다.
여러 가지 기본 규칙이 있지만 총합으로 설정하면<number of cores> + 1
가장 일반적입니다.이 배경에는 모든 코어가 자체 스레드를 가지고 있으며 타깃을 처리하는 관리 스레드가 하나 더 있으며 다음으로 빌드될 스레드가 하나 더 있다는 생각이 있습니다.
위의 답변은 대부분 정답입니다.하지만, 그 세부사항들은 약간 오해를 불러일으킨다.예를 들어, "관리 스레드"에 대한 추가 작업을 추가할 필요가 없습니다(참고:make
실제로는 멀티 스레드가 아닙니다). make
목적을 위한 일로 간주하지 않는다-j
그래서, Huygens가 위에서 말했듯이, 만약 당신이 말한다면,-j5
4+make가 아닌 5개의 컴파일 작업이 실행됩니다.
대부분의 사람들이 [코어 수] + [일부 패딩]을 사용하는 이유는make
컴파일러의 성격에 따라서는 필요한 것을 찾을 수 있습니다.컴파일러는 매우 복잡한 텍스트 번역 도구일 뿐입니다.한 가지 형식으로 텍스트를 읽고 다른 형식으로 "텍스트"(이진수)로 변환합니다.이 중 많은 부분(특히 C++와 같이 언어가 복잡해짐에 따라)에는 CPU가 많이 필요합니다.그러나 디스크 I/O도 많이 필요합니다.디스크 I/O가 느리기 때문에 한 컴파일러가 디스크에서 일부 데이터를 기다리는 동안 커널은 다른 작업을 실행하도록 스케줄링합니다.따라서 동시에 실행할 수 있는 코어 컴파일 수보다 많은 수의 코어 컴파일을 유용하게 사용할 수 있습니다.
어느 를 얻을 수 ?-j
저하를 시점에서는,느려지기 합니다).-j
빌드 종류에 는 하드웨어, 빌드 종류 등에 전적으로 의존합니다.확실히 알 수 있는 유일한 방법은 실험입니다.
그러나 [코어 수]+[몇 개]는 일반적으로 적절한 근사치입니다.
스레드당 1개의 CPU와 매니저/로더 1개디스크 작업을 수행하는 스레드는 CPU 관점에서 거의 유휴 상태이므로 총 코어 수에 1을 추가합니다.
CPU가 하이퍼스레딩을 사용하는 경우 각 코어를 2개의 코어로 안전하게 카운트하여 스레드 수를 2배로 늘릴 수 있으므로 쿼드코어 인텔 Core i7은 -j9 (8개의 가상 코어 + 매니저)를 얻을 수 있습니다.쿼드코어 AMD에서는 -j5를 사용합니다.
-j
위해서만 에 의해, 「어플리케이션 빌드」의 됩니다.make
을 사용하다 하다를 할 수 있습니다.-j<nb core>
더 그 or or-j<nb-core * 1.5>
컴파일이 동시에 일어날 수 있도록 하는 것입니다.
컴파일된 코드에는 영향을 주지 않습니다.
시스템의 는, 4 코어 시스템을 시험해 .make -j6
make가 병렬 빌드를 실행할 수 있는 경우 최대 6개의 동시 컴파일 프로세스(예를 들어 gcc에 대한 6개의 호출)를 시작합니다.
언급URL : https://stackoverflow.com/questions/15289250/using-make-with-j4-or-j8
'source' 카테고리의 다른 글
불명확한 에러가 내 컴포넌트 이름이 0으로 시작된다고 한다. (0) | 2022.08.27 |
---|---|
vue.js 및 부트스트랩 4를 사용한 팝오버 (0) | 2022.08.27 |
while(1)과 while(2) 중 어느 쪽이 빠릅니까? (0) | 2022.08.27 |
메이븐 부모 폼 vs 모듈 폼 (0) | 2022.08.27 |
Vuex 모듈에서 "뒤틀림"을 방지하기 위해 어떤 이름을 사용합니까? (0) | 2022.08.27 |