100% CPU 로드가 다르면 CPU 온도가 달라지는 이유는 무엇입니까?

100% CPU 로드가 다르면 CPU 온도가 달라지는 이유는 무엇입니까?

CPUz와 OCCT를 사용하는 사이에 테스트를 실행해 왔습니다. 여러 스레드로 CPU에 스트레스를 주도록 CPUz를 설정하면 절대 70c를 넘지 않는다는 것을 알았습니다. 반면에 CPU에 로드하기 위해 OCCT를 실행하면 즉시 75c 이상으로 올라가고 때로는 85c에서 테스트가 중지되기도 합니다.

여기서 무슨 일이 일어나고 있나요? 나는 비디오 카드에는 별도로 스트레스를 받아야 하는 코어가 많지만 CPU는 단순하다는 것을 항상 이해했습니다. 기본 for 루프는 CPU에 100% 부하를 줄 수 있습니다. 여러 스레드에서 실행되는 여러 for 루프는 모든 코어를 로드할 수 있습니다. OCCT가 내 CPU를 훨씬 더 많이 가열하는 것은 무엇입니까? CPUz가 할 수 없는 일을 하는 것은 무엇입니까?

일부 배경 정보: CPU는 Intel Core i7-4790k입니다. 터보 부스트가 활성화되어 있지만 두 프로세스 중 하나가 실행 중일 때 5%에서 멈추는 것 같습니다.

답변1

CPU 사용량은 CPU가 사용할 수 있는 리소스의 양을 측정한 것이지만 처리할 수 있는 명령 유형은 다양하며 처리 및 메모리 요구 사항도 모두 다릅니다.

메모리를 많이 사용하는 작업은 메모리에서 데이터를 가져오는 동안 CPU를 정지시켜 효과적인 작업 시간을 감소시킬 수 있습니다.지침CPU가 여전히 "사용 중"인 동안의 처리량.

또한 CPU에는 다르게 포화될 수 있는 여러 부분이 있습니다.

위키칩에서샌디브릿지 uArch:

여기에 이미지 설명을 입력하세요

복잡하고 다양한 명령어 스트림의 경우 파이프라인의 나머지 부분을 가득 채우는 데 어려움을 겪을 수 있는 초기 명령어 디코더 프런트엔드가 있음을 알 수 있습니다.

만약 너라면오직정수 추가가 있으면 CPU에 3개의 INT ALU 장치가 있으므로 핵심 실행 장치 중 3개를 사용할 수 있습니다. 부동 소수점 곱셈만 사용하는 경우 단일 FPU MUL(곱하기) 단위만 사용할 수 있습니다.

CPU도 파이프라인으로 작동하며, 하나의 유닛이 실행 유닛에서 사용되는 동안 작업을 예약할 수 있습니다.다음 주기에. 이는 사용되지 않는 단위가 동일한 EU에서 다른 명령 유형으로 예약될 수 있으므로 다양한 명령 스트림이 리소스를 더 잘 활용할 수 있음을 의미합니다. 명령어마다 실행 시간도 다르며 실행할 관련 회로 세트가 더 크거나 작습니다. 간단한 추가에는 1~2개의 클록 사이클이 소요될 수 있지만 부동 소수점 명령어는 더 오래 걸리고 더 많은 양의 회로가 포함될 수 있습니다. 시간이 더 오래 걸리면 회로 영역이 더 커질수록 더 많은 전력을 사용할 수 있습니다. 또는 명령이 더 오래 걸린다는 것은 프런트 엔드 스케줄링 회로가 사용 가능한 실행 단위를 기다리는 동안 일시 중지되고 전력을 덜 사용한다는 것을 의미할 수 있으며, CPU의 다른 부분을 포함하는 경우 더 작고 빠른 명령은 더 많은 전체 회로를 사용합니다.

만들어본 결과가득한CPU를 사용하려면 다양한 명령 스트림이 필요하며, 한 CPU를 실행하는 것이 다른 배열과 실행 장치 수 및 기능으로 인해 다른 CPU를 완전히 실행하지 못할 수도 있습니다.

실행 장치는 최신 전력 게이팅 방법을 사용하여 "저전력" 상태가 될 수 있으며 결과적으로 장치의 열 출력에 기여하지 않거나 훨씬 적게 기여합니다.

캐시는 전력 소비에도 영향을 미칩니다. 캐시를 사용하면 명령과 데이터를 가져올 수 있으며 결과적으로 캐시에 비해 너무 큰 메모리에 데이터 세트가 있는 루틴보다 더 빠르게 실행될 수 있습니다.

결과적으로 서로 다른 프로그램이나 명령 스트림은 서로 다른 최대 전력 사용량과 온도를 유발할 수 있습니다.

프로세서 세대 간의 아키텍처 차이는 물론, 캐시 크기, 프로세서 옵션 및 다양한 명령 가용성이 영향을 미칠 수 있는 동일한 세대에서도 마찬가지입니다.

답변2

멀티 스레드 크런치 테스트를 실행해도 모노 스레드 테스트만큼 CPU 온도가 올라가지 않는 이유를 알고 싶다는 점을 이해합니다.

간단한 설명은 터보 부스트가 원인이라는 것입니다. CPU가 여러 코어에서 동일하게 작동할 때 터보 부스트가 비활성화되기 때문입니다. 하나의 코어가 많이 사용되는 경우(그리고 하나의 코어만)에만 활성화됩니다.

터보 부스트가 활성화되면 부스트된 코어에 더 많은 전력이 공급되어 다른 코어에 대한 전력이 줄어들어 속도가 느려집니다.

그러면 부스트된 코어는 더 빠른 속도로 실행되고 부스트되지 않은 코어보다 더 많이 가열됩니다. 이는 센서에 의해 캡처되어 한 코어의 온도를 전체 CPU의 온도로 보고합니다.

답변3

CPU "로드"(또는 사용량)는 "유용한" 활동과 "유휴" 시간에 소비된 CPU 시간의 비율을 나타내는 활동 모니터입니다. 운영 체제는 "유용한" 활동과 "유휴" 시간을 결정합니다.

CPU 로드가 0%인 경우 OS는 해당 시간 간격 동안 사용자 프로세스를 예약하지 않습니다.
50% CPU 로드에서 OS는 사용자 프로세스에 대한 시간 간격의 약 절반을 예약하고 해당 시간 간격의 나머지 절반은 유휴 루프에서 소비했습니다. 사용자 프로세스가 하나만 있는 경우에도 해당 프로세스는 CPU를 많이 사용하지 않고 I/O 작업이 완료되기를 기다리는 동안 다시 예약해야 하기 때문에 CPU 로드를 100% 소비하지 못할 수 있습니다.
100% CPU 로드에서 OS는 사용자 프로세스에 대한 모든 시간 간격을 예약했습니다.

CPU는 실제로 항상 사용 중입니다(전원을 켤 때). 즉, 항상 명령을 실행합니다. 실행할 준비가 된 (사용자) 프로세스가 없으면 OS 스케줄러는 유휴 루프를 수행해야 합니다.

CPU 온도는 CPU 회로에서 소비되는 전력의 결과입니다. 더 많은 트랜지스터 스위치가 발생할수록 더 많은 전력이 필요하고 소비되며 CPU 온도가 상승합니다.
이 전력 소비는 단지 시간 기반 활동 모니터인 CPU "부하"로 표시되지 않습니다.
프로세스는 단순히 메모리 내에서 데이터(예: 로드 및 저장 명령)를 복사하거나 이동하여 CPU를 "사용 중"(시간 기준)으로 유지할 수 있습니다(유휴 상태를 초과하는 상당한 추가 전력 부하가 아님).
반면에 계산 집약적인 또 다른 프로세스는 ALU(산술/논리 장치) 및 FPU(부동 소수점 장치)와 같은 CPU의 다른 많은 회로를 활용하는 계산(예: 곱셈 및 나눗셈 명령)을 수행할 수 있습니다.

IOW 소비되는 전력과 후속 온도 수준을 결정하는 것은 프로세스가 실행하는 명령 혼합(즉, 명령 유형)입니다.
OS는 이러한 전력 소비를 측정할 수 없으며 CPU 로드 및 온도 센서를 사용하여 시간 기반 활동 측정만 보고합니다.

답변4

예를 들어 보겠습니다. 두 개의 루프를 실행합니다.

for (i = 0; i < 1000000000; ++i) {
    x += a [i];
}

그리고

for (i = 0; i < 1000000000; ++i) {
    x += a [i];
    y += a [i];
    z += a [i];
}

첫 번째 루프에서 프로세서는 다음 추가를 시작하기 전에 이전 추가가 완료될 때까지 기다려야 합니다. 추가에 3주기의 대기 시간이 있는 경우 프로세서는 3주기마다 한 번의 추가를 수행합니다. CPU 부하가 100%인데 CPU가 실제로 그렇게 많은 작업을 수행하지는 않습니다.

두 번째 루프에서도 3주기마다 1번의 반복이 있지만 추가가 독립적이므로 프로세서는 3주기마다 3번의 추가를 수행하여 3배 더 많은 작업을 수행합니다. CPU 로드는 여전히 100%이지만, 3배 더 많은 작업을 수행하면 훨씬 더 많은 열이 발생합니다.

따라서 모든 주기에서 사용 가능한 컴퓨팅 리소스를 더 많이 사용하는 코드를 사용하면 더 많은 열을 받게 됩니다.

관련 정보