멀티 스레드 CPU를 많이 사용하는 작업으로 온도 제한 전에 CPU를 조절


21

2012 MacBook Pro 쿼드 코어에서 예상대로 작동하는 CPU 집약적 스레드 작업을 작성했습니다. 20 스레드로 느슨하게 돌리고 최소 제한으로 Intel Power Gadget으로 측정했을 때 온도가 약 100 ° C까지 올라갑니다.

듀얼 코어 머신을 사용하여 동일한 프로그램과 데이터 파일을 2016 년 13 인치 MacBook Pro로 가져와 시동하면 온도가 100 ° C에 도달 할 때까지 3.3-3.4GHz를 유지할 것으로 예상됩니다. 맨 위 명령은 작업을 350 % (각 이중 스레드 2 개 코어)로 보여 주지만 CPU 주파수는 60 ° C 정도의 온도에서 팬이 조용히 정지 된 상태에서 1.6-1-8GHz로 줄어 듭니다. 단일 스레드 CPU 작업의 경우, 머신은 100 ° C에 도달하고 팬이 크 랭킹 될 때까지 3.3-3.4 GHz를 유지하면서 예상대로 작동합니다. 문제는 왜 CPU가 조절 되는가?

두 머신 모두 최신 버전이며 동일한 버전의 gcc를 실행합니다. 작업 기계에서 바이너리를 가져 와서 2016 Mac에 넣으면 같은 문제가 있습니다.

3 ~ 4 개의 CPU 단일 스레드를 실행하여 컴퓨터가 최고 속도로 가고 스레드 프로그램을 시작하면 주파수가 느려집니다.

두 시스템 모두 16GB의 RAM이 있습니다.

편집하다

코드로 놀아 본 후 작업이 너무 많은 스레드를 만들 때 스로틀 링되는 것으로 의심됩니다. 이 프로그램에서는 읽은 각 레코드를 가져 와서 스레드를 만듭니다. 한 번에 20 개 정도의 스레드 만 허용하므로 21 개가 넘는 스레드는 없지만 30 분 동안 처리 할 14,400,000 개의 레코드가 있으므로 각 레코드는 별도의 스레드로 처리됩니다.

CPU 시간을 단축하고 그중 10 개를 실행하는 간단한 pthread 프로그램을 만들었습니다. 문제가 발생한 노트북은 문제없이 95C까지 예열했습니다.

동일한 스레드를 파괴하고 다시 시작하는 대신 동일한 스레드를 재사용하기 위해 코드를 다시 작성한다고 생각합니다.

업데이트 5/13/17

몇 시간의 작업 후에는 이제 n 개의 스레드 만 생성하고 재사용하여 도움이되지 않았습니다. CPU 온도 이외의 다른 이유로이 기계가 스로틀되는 원인은 무엇입니까?


1
나는이 질문을 좋아한다! 다른 특정 멀티 스레드 작업을 실행하는 것은 어떻습니까? ffmpeg 작업 (1080p 또는 4K 비디오에서 사용 가능한 모든 CPU 리소스를 사용하는지 확인)과 같은 것을 실행하고 스로틀 여부를 확인하는 것이 좋습니다. 이 문제는 해당 컴퓨터의 프로그램 또는 해당 컴퓨터의 모든 멀티 스레드 프로그램으로 범위를 좁힐 수 있습니다.
NoahL

1
Cinebench R15 벤치 마크를 실행하면 스레드 작업을 사용하고 예상대로 실행되고 온도가 약 100C까지 올라가고 팬이 나타납니다. Intel Power Gadget은 CPU 주파수가 여전히 3.3Ghz에 가깝다는 것을 보여줍니다. 따라서 하드웨어 문제처럼 보이지 않습니다. 모든 코드는 p_threads와 최소한의 Mutex 잠금을 사용하여 멋진 것이 아닌 C 코드입니다. 이 프로그램은 하나의 스레드가 16 기가의 데이터와 같은 것을 가져 와서 많은 수의 크 런칭을 위해 n 개의 개별 스레드로 전달하는 DNA 시퀀스 처리입니다.
markatlnk

1
다른 프로그램이 목표 한도에 도달 할 수있는 것처럼 보입니까? 문제가 특수 코드에서만 발생하는 경우 해당 코드에 대한 자세한 정보가 필요할 수 있습니다. 그럼에도 불구하고 데이터는 어디에서 처리됩니까? 외부? kernel_task는 얼마나 많은 작업을보고합니까? 다른 온도 센서?
LаngLаngС

1
CPU에는 4 개가 아닌 8 개의 논리 코어가 있으므로 4 개의 스레드가 총 CPU 사용량의 50 %로 표시됩니다. 이것이 시스템의 부하 추정에 영향을 미치는지 궁금합니다.
sudo

문제를 겪고 싶을지는 모르겠지만 대신 디버그 커널을 사용하여 커널 수준에서 디버깅을 시도 할 수 있습니다. apple dev 사이트에서 다운로드를 더 클릭하면 얻을 수 있습니다.
user3052786

답변:


1

이는 오래 걸리 겠지만 2012-2016 CPU 패키지 간의 단일 코어 성능 및 / 또는 캐시 성능 차이는 코어가 데이터가 고갈되어 다시 작동 할 수있을 때까지 제한 될 수있을 정도로 커질까요?

충분한 단일 스레드 프로세스가 모든 코어에서 최고 속도를 실행할 수 있고 간단한 다중 스레드 프로그램이 모든 코어에서 최고 속도를 실행할 수 있음을 나타 내기 때문에 추측하고 있습니다.

따라서 실제 워크로드의 프로그램 디자인에 테스트 멀티 스레드 워크로드와 CPU가 항상 작동하지 않는 무언가가 있다고 생각합니다.


0

커널 확장 /System/Library/Extensions/AppleACPIPlatform.kext는 많은 온도 및 CPU 보호 기능을 제어합니다. 이미 시스템에서 컴파일되었지만 https://opensource.apple.com에서 사용할 수 있습니다 (찾을 수는 없지만 간단히 살펴 보았습니다). Apple이 CPU 기능에 대해 매우 보수적 인 설정을했다고해도 놀라지 않을 것입니다.


3
AFAIK Apple kext는 오픈 소스가 아닙니다. (이상하게?)이 정보에 대한 최고의 리소스는 드라이버를 주입해야하기 때문에 Hackintoshing 커뮤니티입니다.
JMY1000

전혀 이상하지 않습니다! 땜장이들은 직접 알아야 할 것보다 더 많은 것을 알고 있기 때문에 최선의 조언을합니다. 보수적 인 CPU 설정과 관련하여 MBP는 ​​버스트 성능을위한 방열판은 크지 만 지속적인주기에는 그다지 좋지는 않습니다. 이 문제는 다리가 익지 않도록 선제 적으로 유지하려는 Apple의 문제 일 가능성이 높습니다. 2012MBP와 관련한 소송에 대해 들었습니다.
user1901982

0

OS가 스레드를 예측할 수없고 제어 할 수없는 것으로 인식 할 때마다 하드웨어 및 시스템 안정성을 유지하기 위해 제한됩니다. 2012 모델은 다르게 동작하며 최악의 경우에는 잠길 수 있습니다. 스레드 제어가 잘못 구현되어 내 잘못이 생겼습니다. 듀얼 코어에서 많은 스레드를 실행하지 마십시오.


-2

스레드 제어가 잘못 구현되어 내 잘못이 생겼습니다. 듀얼 코어 CPU에서 너무 많은 스레드를 실행하지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.