프로세서가 주파수보다 많은 IPS를 어떻게 실행할 수 있습니까? [복제]


14

이것은 내 머리를 감쌀 수없는 것입니다. 거의 모든 최신 프로세서는 초당 주파수보다 더 많은 명령을 실행할 수 있습니다.

왜 저급 프로세서가 주파수보다 적은 IPS를 실행할 수 있는지 이해할 수 있습니다. 예를 들어, ATmega328 은 16MHZ에서 약 16MIPS (또는 적어도 내가 들었던 것)를 실행 하고 Z80 은 4MHz에서 0.5MIPS를 실행합니다. 그러나 Pentium 4 Extreme은 3.2GHz에서만 9 개 이상의 GIPS를 실행할 수 있습니다. 클럭 사이클 당 약 3 개의 명령입니다!

이것이 어떻게 이루어지고 왜 AVR 마이크로 컨트롤러 와 같은 더 작은 프로세서에서 구현되지 않습니까?

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


3
파이프 라인, 수퍼 스칼라 아키텍처, 고장난 실행, 동시 멀티 스레딩, 멀티 코어, 벡터 확장 (SSE, ..., AVX), 캐싱 등과 같은 버즈 단어에 대해서는 Wikipedia를 살펴보십시오. 모든 CPI 값은 모두 1.0보다 낮을 수 있습니다.
Paebbels

7
MIPS가 아닌 Pentium 4 용 9 개의 GIPS를 의미하지 않습니까?
Calimo

5
자체 승격 : CPU가 사이클 당 둘 이상의 명령을 어떻게 전달할 수 있습니까? 전기 엔지니어링 스택 교환에서 물었습니다 (제 답변이 수락되어 너무 많이 찬성되었습니다).
Paul A. Clayton

항상 궁금해했는데, 내가 생각하는 것 이상으로 이미 높은 투표를하면 안 될까요? 또는 게시물의 노력과 품질이 보상을받을 가치가 있다고 생각되면 항상 찬성합니다.
Peter Cordes

@PeterCordes 다른 투표 철학이 있습니다. 일부는 "유용하다"고 주장하는 것이 유일한 기준이고 다른 것들은 상대적인 장점을 고려한다 (답변). 나는 절대 투표 수 ( "좋은", "좋은", "큰"게시물 배지가 그러한 것으로 간주되어야 함을 암시해야 함)와 상대적 투표 수 (응답 순위에 도움이 됨)를 고려하는 경향이 있습니다. 놀랍게도 Meta.SE는 이 주제 에 대해 많이 언급하지 않은 것 같습니다. " 어떻게 투표해야합니까? "라는 대답조차 없습니다!
Paul A. Clayton

답변:


23

이것은 최신 프로세서의 기능 조합으로 인한 것입니다.

높은 IPS에 기여하는 첫 번째 것은 최신 프로세서에 독립적으로 작동 할 수있는 여러 실행 장치가 있다는 것입니다. 아래 이미지 ( Wikipedia 에서 빌린 : Intel Core Microarchitecture )에서 맨 아래에는 명령을 동시에 실행할 수있는 8 개의 실행 단위 (노란색으로 표시됨)가 있음을 알 수 있습니다. 이러한 장치 모두가 동일한 유형의 명령어를 보호 할 수있는 것은 아니지만 최소한 5 개가 ALU 작업을 수행 할 수 있으며 3 개의 SSE 가능 장치가 있습니다.

여기에 이미지 설명을 입력하십시오

명령을명령 파이프 라인 과 결합하면 해당 유닛이 명령을 실행할 수 있도록 준비된 명령을 효율적으로 쌓을 수 있습니다 ( 필요한 경우 순서가 맞지 않음). 현대 프로세서는 언제든지 많은 수의 명령을 즉시 실행할 수 있습니다.

각 명령어는 실행하는 데 몇 번의 클럭주기가 필요할 수 있지만 실행을 효과적으로 병렬화 할 수있는 경우 프로세서 복잡성과 열 출력 비용으로 IPS를 크게 향상시킬 수 있습니다.

이러한 큰 파이프 라인에 지침이 가득 차게하려면 지침과 데이터로 미리 채워질 수있는 큰 캐시가 필요합니다. 이것은 다이의 크기와 프로세서가 생산하는 열량에 기여합니다.

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

그들은 로 큰 프로세서와 같은 복잡한 작은 프로세서를하고 유사한 성능을 달성,하지만 전원이 그릴 및 냉각 요구 사항은 기하 급수적으로 증가 할 것이다.


나는 특수한 실행 단위가 있고 그 중 둘 이상이 있다는 것을 결코 알지 못했습니다. 그러나 여전히 슈퍼 스칼라 Arduino를 갖는 것이 좋을 것입니다. 더 많은 처리량을 의미한다면 전력 및 냉각 요구 사항을 신경 쓰지 않을 것입니다. 답변 해주셔서 감사합니다.
Jaca

1
수퍼 스칼라 프로세서를 원하면 하나를 사용하십시오. 그러나 Arduinos는 슈퍼 스칼라 프로세서의 전력 및 냉각 요구 사항 (및 비용 및 복잡성)을 염두에 둔 사람들을 위해 틈새 시장을 차지합니다.
David Schwartz

4

상상하기 어렵지 않습니다. 한 사이클만으로 수천 개의 트랜지스터를 전환 할 수 있습니다. 명령어가 병렬로 정렬되어 있으면 한 번의주기만으로도 명령어를 모두 실행할 수 있습니다.

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


3

Mokubai의 답변보다 조금 더 근본적으로 얻으려면 :

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

일반적인 x86 데스크톱 CPU는 클럭주기마다 16 또는 32B의 명령어를 가져옵니다. Core2 이후 인텔 설계는 사이클 당 최대 4 개의 명령을 발행 할 수 있습니다. (또는 5, 매크로 퓨즈가 가능한 비교 및 ​​분기가있는 경우).

실제로 CPU가 실행하는 코드에서 명령 수준 병렬 처리를 추출하는 작업에 대해 CPU가 어떻게 진행되는지에 대한 링크와 세부 정보는 Mobukai의 훌륭한 답변을 참조하십시오.

또한 http://www.realworldtech.com/sandy-bridge/ 및 기타 CPU 아키텍처에 대한 유사한 기사를 참조 하여 기본 사항에 대한 자세한 설명을 확인하십시오.


-2

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

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

많은 매우 기본적인 명령어 (우리의 "유의 한"정의)는 8 바이트 명령어 길이로 초기부터 남았고, 매우 기본적인 명령어는 정의에 따라 아마도 불균형 적으로 사용되기 때문에 더 많은 "명령"을 수행하는 데는 먼 길을 갈 것입니다 주파수가 허용하는 것보다.


CPU가 실제로 작동하는 방식과 약간 비슷하지만 사이클 당 여러 머신 인스 턴을 가져 오는 것은 슈퍼 스칼라 CPU 작동 방식의 일부일뿐입니다. (x86의 경우 평균 insns 길이는 4 바이트와 비슷합니다.) 딥 파이프 라인은 현재 페치되는 명령이 15주기 동안 실행을 완료하지 못하거나 캐시 미스에 의해 유지되는 경우 훨씬 더 길어질 수 있지만 비 의존적 명령은 설명은 파이프 라인 디자인을 전혀 설명하지 않습니다. 또한 8 비트 8086 add al, bl과 80386 의 차이점이 무엇이라고 생각하는지 명확하지 않습니다 add eax, ebx.
Peter Cordes

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