계산에 몇 개의 코어를 사용해야합니까? #cores 또는 # cores-1?


12

할 큰 계산이 있습니다. 모든 코어를 활용할 수는 있지만 코어 1 개를 사용하지 말아야 할 이유가 있습니까? (계산 CPU 만 IO 없음). 아니면 모든 코어를 사용하더라도 적절한 컨텍스트 전환을 처리하고 수행 할 수없는 OS를 과소 평가합니까?


8
모든 코어를 사용하는 것이 좋은 시작이며 "-1 코어"로 더 잘 동작하는 OS에 대한 미신은 아마도 미신 일 것입니다. 그러나 실제로는 프로파일 링, 계산, 하드웨어, 운영 체제에 대한 동작 방식을 프로파일 링해야합니다.
Doc Brown

대부분의 경우 # cores + 1을 사용하는 것이 좋습니다. #cores 만 사용하면 예상치 못한 차단 (예 : 페이지 오류)이 불필요하게 코어를 유휴 상태로 만듭니다.
David Schwartz

답변:


28

주요 운영 체제는 사용 가능한 모든 코어를 사용하는 프로세스를 처리하는 방법을 알기에 충분히 성숙합니다. 다른 프로세스도 영향을받을 수 있으며 종종 사용 가능한 모든 코어를 사용했기 때문에 계산 속도가 느려지지 않습니다.

코어 수의 선택은 계산을 수행하는 동안 다른 작업을 수행하려는 의도에 따라 다릅니다.

데스크톱 컴퓨터에서 계산을 수행하는 동안 웹 브라우저를 사용하거나 비디오를 볼 수있게하려면 하나의 코어를 무료로 유지하는 것이 좋습니다. 마찬가지로, 서버가 계산을 수행하고 동시에 메트릭을 처리 및보고하는 등 두 가지 작업을 수행하는 경우 부수적 작업에 핵심을 유지하는 것이 좋습니다.

반면에 계산을 최대한 빨리하는 것이 우선이라면 모든 코어를 사용해야합니다.


7
한 대화 형 프로그램도 (부여, 현대 비 대한 웹 응용 프로그램에 문제가 될 수 있습니다) CPU를 많이 사용하지 않는 한, CPU 사용량있을 때 현대 OS 스케줄러는 대화 형 대화 형 프로그램을 지키는 꽤 좋다
James_pic

참고 : 서버에서도 ssh를 사용하여 신속하게 답변을 얻으려면 코어 0 만 남겨 두는 것이 좋습니다.
Matthieu M.

11

때에 따라 다르지.

머신이이 계산 전용이라면 모든 코어를 사용해야합니다. 사용 하지 않는 컴퓨팅 리소스는 속도를 높이 지 않습니다 .

실시간 스케줄러, 비 선점 스케줄러 또는 프로세서 선호도를 사용하는 경우 실수로 모든 컴퓨팅 리소스에서 다른 프로세스를 고갈시키기 쉽기 때문에 좀 더주의해야합니다. 그러나 문제가 발생하기 위해 이러한 설정을 수동으로 변경해야하므로 기본적으로 대부분의 OS에서 아무런 문제가 없습니다.

기계가 계산 전용이 아닌 경우 계산에 100 %를 제공하는 것이 이상적이지 않을 수 있습니다. 예를 들어 계산이 실행되는 동안 웹 브라우저를 사용하는 경우 기계의 하중이 때때로 100 %를 초과하기 때문에 부진하게 느껴질 것입니다. 계산과 같은 처리량 지향 작업은 실제로 느려지지 않지만 GUI와 같은 대기 시간에 민감한 작업은 빠르게 반응하지 않습니다. 그런 다음 계산을 위해 NPROC-1 스레드 / 프로세스 만 시작하는 것이 합리적입니다. 또는 일반 작업보다 계산에 우선 순위가 낮은 것을 명시 적으로 사용하면이 문제를 해결할 수 있습니다.이 경우 계산시 NPROC 프로세스를 사용하여 리소스를 낭비하지 않아야합니다.


3
"계산이 실행되는 동안 웹 브라우저를 사용하는 경우 […] 느리게 느껴질 것입니다. 계산과 같은 처리 지향적 인 작업은 실제로 느려지지 않지만 GUI와 같은 대기 시간에 민감한 작업은 빠르게 반응하지 않습니다. …] 일반 작업보다 계산에 우선 순위가 낮은 것을 명시 적으로 사용하면이 문제를 해결할 수 있습니다. "– 이것이 Unix의 프로세스 우선 순위 값을"niceness "라고하며라는 유틸리티를 사용하여 구성됩니다 nice.
Jörg W Mittag

2
"사용하지 않은 컴퓨팅 리소스는 기술 속도를 향상시키지 않습니다"라고 기술적으로 가능합니다. 코어를 적게 사용하면 클럭 속도가 높아지고 동기화 속도가 저하되어 속도가 빨라지거나 그렇지 않을 수 있습니다.
Davidmh

2
일반적으로 CPU 쪽의 @Davidmh 메모 외에도 L1 $ 및 L2 $는 스레드간에 어느 정도 공유되며 L3 $는 모든 소켓에서 공유되므로 더 많은 스레드를 사용하면 $ miss가 증가하여 프로세스 속도가 느려질 수 있습니다. 특히 프로세스가 프로세서 바운드 대신 메모리 바운드 인 경우.
Maciej Piechotka

스레드 / 프로세스 우선 순위 레벨을 적절하게 설정하면 대화식 프로세스에 대한 백그라운드 작업의 영향을 완화 할 수 있습니다. 개인 컴퓨터에서 10 년 이상 분산 컴퓨팅 앱을 실행했습니다. CPU 컴퓨팅 작업의 우선 순위가 낮 으면 브라우저 및 기타 일반 데스크톱 앱을 사용할 수있는 기능이 손상되지 않습니다. GPU의 리소스 공유는 고급 기능이 아니며 GPU 컴퓨팅을 백그라운드에서 실행하는 동안 GPU 가속 HTML5 비디오 (게임에 신경 쓰지 않음)에 가끔 문제가 발생했습니다. 멀티 스레드 게임은 가벼운 GFX에서도 문제가 될 수 있습니다. 승리 starves 스레드 2+
Dan Is Fiddling 작성자 Firelight

1

그의 부정적인 투표로 인해 아래의 @motoDrizzt에 동의하는 것에 대해 다소 신중한 생각입니다. 예를 들어 http://www.forkosh.com/images/avoronoi.gif 에서 3D-voronoi_diagram의 각 2D 평면을 독립적으로 생성 할 수 있습니다. 그리고 프로그램은 nfork = n query_string 속성을 사용하여 n 개의 평면에 대한 계산을 "동시에" 분기합니다 .

4 코어 프로세서를 사용하면 다이어그램을 완성하는 (사용자) 시간이 nfork와 거의 선형 적으로 줄어 듭니다. 약 nfork = 8 (4 코어 하이퍼 스레딩). 그러나 8을 넘어 서면 시간은 여전히 ​​느리지 만 줄어 듭니다. 그리고 16 이상 정도면 더 이상 눈에 띄는 개선이 없습니다. 나는이 동작을 전혀 분석하지 않았지만 전체 유휴 시간을 더욱 줄이기 위해 프로세스를 저글링하는 os (이 경우 Linux slackware 14.2x64)에 순진하게 귀속됩니다.


0

최선의 선택은 시스템에 따라 다릅니다. 따라서 실제 시스템에서 두 버전을 모두 실행 한 다음 시스템이 어떻게 반응하는지 확인해야합니다. 여전히 시스템에서 브라우저, 텍스트 편집기 등을 사용할 수 있습니까? 그리고 n-1이 아닌 n 스레드를 사용할 때 성능이 더 좋습니까? 모든 CPU를 사용하려고하는 다른 앱과 함께 앱을 실행하면 어떻게됩니까?

그런 다음 하이퍼 스레딩을 고려해야합니다. 4 개의 코어와 하이퍼 스레딩을 사용하면 8 개의 코어 또는 7 개의 코어를 사용할 수 있습니다. 다시 한 번 시스템의 응답 성과 완료 시간을 시험해보십시오.

마지막으로 작업을 스레드보다 더 많은 블록으로 나누는 것을 고려하십시오. 그 이유는 다른 스레드가 다른 시간에 작업을 완료 한 다음 일부 작업을 더 빠른 스레드로 처리하기를 원하기 때문입니다. 그렇지 않으면 마지막 스레드가 끝날 때까지 기다려야합니다.

추신. "하이퍼 스레딩은 FPU가 하나뿐이므로 FPU 집약적 코드에는 도움이되지 않습니다." 절대적으로 틀렸다. 지연 시간으로 인해 FPU를 많이 사용하는 코드를 사용하더라도 FPU를 최대한 활용하는 것은 매우 어렵습니다. 하이퍼 스레딩은 예약에 사용할 수있는 독립적 인 작업이 두 배나 많기 때문에 도움이됩니다.


-4

나는 "나쁜"소리를 내지 않는 방식으로 이것을 작성하는 방법을 모른다, 그래서 그냥 친근한 말로 받아 들여라.

평균 PC에 보통 수천 개 이상의 스레드가 있다고 가정하면 8 대 7을 사용하면 차이가 있다고 생각하는 이유는 무엇입니까? :-)

가능한 많은 스레드를 사용하십시오. 또한 OS 응답에 신경 쓸 필요가없고 스레드가 1 초 이상 상당히 오랜 시간 동안 실행되면 코어 수의 두 배를 사용하여 실험 할 수도 있습니다.


3
그러나 이러한 수천 개의 스레드 중 대부분은 100 % CPU를 사용하지 않습니까?
Andreas Rejbrand

1
코어 수의 두 배를 사용하더라도 일반적으로 계산 시간이 향상되지는 않습니다. 실제로 실제 코어 수보다 많은 수를 사용하는 것은 논리적 코어가 더 많더라도 (하이퍼 스레딩 등을 통해) 수행하는 정확한 작업에 따라 다를 수 있지만 일반적으로 유리하지 않습니다. 출처 : MATLAB Parallel Processing을 사용한 과거 경험.
Sanchises

1
@Sanchises 하이퍼 스레딩은 유사 병렬 명령어 인터리빙을 활용하기 때문에 분기 및 메모리가 많은 코드에 효과적입니다. 매트릭스 계산은 FPU가 매우 강하며 물리적 코어 당 하나의 FPU 만 있으므로 하이퍼 스레딩이 도움이되지 않습니다.
J ...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.