프로세서는 어떻게 주파수보다 더 많은 IPS를 실행할 수 있습니까?

프로세서는 어떻게 주파수보다 더 많은 IPS를 실행할 수 있습니까?

이것은 내 머리를 감싸는 것 같지 않은 일이었습니다. 거의 모든 최신 프로세서는 해당 빈도보다 초당 더 많은 명령을 실행할 수 있습니다.

하위 등급 프로세서가 해당 주파수보다 더 적은 수의 IPS를 실행할 수 있는 이유를 이해할 수 있습니다. 예를 들어,ATmega32816MHZ에서 약 16MIPS를 실행합니다(또는 적어도 제가 들은 바는 그렇습니다).Z804MHz에서 0.5MIPS를 실행합니다. 그러나 Pentium 4 Extreme은 단 3.2GHz에서 9개 이상의 GIPS를 실행할 수 있습니다. 이는 클럭 사이클당 약 3개의 명령입니다!

이것이 어떻게 수행되며, 다음과 같은 소형 프로세서에서 구현되지 않는 이유는 무엇입니까?AVR마이크로컨트롤러?

ATmega328을 제외한 모든 정보를 다음에서 찾았습니다.여기.

답변1

이는 최신 프로세서의 기능이 결합되었기 때문입니다.

높은 IPS에 기여하는 첫 번째 요소는 최신 프로세서에 독립적으로 작동할 수 있는 여러 실행 장치가 있다는 사실입니다. 아래 이미지(에서 빌려옴)Wikipedia: 인텔 코어 마이크로아키텍처) 하단에는 모든 명령을 동시에 실행할 수 있는 8개의 실행 단위(노란색으로 표시)가 있음을 확인할 수 있습니다. 이들 유닛 모두가 동일한 유형의 명령어를 보호할 수는 없지만, 그 중 최소 5개는 ALU 작업을 수행할 수 있고 SSE 가능 유닛은 3개가 있습니다.

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

그것을 긴 것과 결합하십시오명령 파이프라인이는 해당 장치가 명령을 실행할 수 있도록 준비된 명령을 효율적으로 스택할 수 있습니다(고장난, 필요한 경우)는 최신 프로세서가 주어진 시간에 즉시 많은 수의 명령을 가질 수 있음을 의미합니다.

각 명령을 실행하는 데 몇 개의 클록 주기가 걸릴 수 있지만 실행을 효과적으로 병렬화할 수 있다면 프로세서 복잡성과 열 출력을 희생하면서 IPS를 크게 향상시킬 수 있습니다.

이러한 대규모 파이프라인을 지침으로 가득 채우려면 지침과 데이터로 미리 채워질 수 있는 대규모 캐시도 필요합니다. 이는 다이 크기와 프로세서가 생성하는 열량에 영향을 미칩니다.

이것이 더 작은 프로세서에서는 수행되지 않는 이유는 처리 코어 주변에 필요한 제어 로직의 양과 필요한 공간 및 생성되는 열의 양이 크게 증가하기 때문입니다. 작고 저전력이며 응답성이 뛰어난 프로세서를 원한다면 실제 기능 코어를 둘러싼 "추가" 요소가 너무 많지 않은 짧은 파이프라인이 필요합니다. 따라서 일반적으로 캐시를 최소화하고 명령을 처리하는 데 필요한 각 유형의 단위 중 하나만으로 제한하며 모든 부분의 복잡성을 줄입니다.

그들~할 수 있었다작은 프로세서를 더 큰 프로세서만큼 복잡하게 만들고 유사한 성능을 달성하지만 전력 소비 및 냉각 요구 사항이 기하급수적으로 증가합니다.

답변2

상상하기 어렵지 않습니다. 수천 개의 트랜지스터를 전환하는 데는 한 사이클이면 충분합니다. 명령어가 병렬로 정렬되어 있는 한, 한 사이클이면 모든 명령어를 실행하는 데 충분할 수 있습니다.

직접 설명하려고 노력하는 것보다여기 좋은 출발점이 있습니다.

답변3

Mokubai의 답변보다 좀 더 근본적인 것을 얻으려면 다음을 수행하십시오.

수퍼스칼라 CPU는 명령어 스트림에서 명령어 간 데이터(및 기타) 종속성을 분석합니다. 서로 의존하지 않는 명령어는 병렬로 실행될 수 있습니다.

일반적인 x86 데스크탑 CPU는 매 클록 주기마다 16B 또는 32B의 명령을 가져옵니다. Intel은 Core2가 주기당 최대 4개의 명령을 발행할 수 있도록 설계했습니다. (또는 매크로 융합이 가능한 비교 및 ​​분기가 있는 경우 5).

실제로 CPU가 실행하는 코드에서 명령어 수준 병렬성을 추출하는 작업을 어떻게 수행하는지에 대한 링크와 세부 정보는 Mobukai의 멋진 답변을 참조하세요.

또한 참조하십시오http://www.realworldtech.com/sandy-bridge/내부 내용에 대한 자세한 설명은 다른 CPU 아키텍처에 대한 유사한 기사를 참조하세요.

답변4

이전 답변은 프로세서의 "명령" 정의에 따라 더 많은 명령을 실행하는 방법을 보여주고 이것이 실제로 질문자의 의도라고 상상합니다.

그러나 또 다른 원인은 각 "명령"이 실제로 프로세서에 의해 입력된 명령으로 처리되는 특정 양의 데이터라는 것일 수 있습니다. 그의 소스 계산이 프로세서가 명령으로 간주하는 것만 계산하는 경우 다음은 아무것도 추가하지 않습니다. 그러나 그의 소스가 인간이 "명령"이라고 부르는 모든 것을 계산하는 경우 모든 명령이 다른 모든 명령만큼 물리적으로 길지는 않다는 점을 추가하십시오(하나는 12바이트일 수도 있고 다른 명령은 56바이트일 수도 있음). 따라서 매 사이클마다 64바이트의 자료를 "명령"(또는 64바이트에 도달하기 전에 가능한 한 많은 전체 명령)으로 로드하고 하나가 해당 64바이트에 6개의 명령을 가지고 있다면 6개의 명령(여러분과 내가 생각할 수 있듯이) )은 해당 주기에 완료됩니다.

많은 매우 기본적인 명령어(우리의 "합리적인" 정의)는 8바이트 명령어 길이를 가진 초창기의 남은 것이며 정의에 따라 매우 기본적인 명령어가 아마도 불균형적으로 사용될 수 있기 때문에 이것이 더 많은 "명령"을 수행하는 데 큰 도움이 될 것입니다. 빈도가 허용하는 것보다.

관련 정보