사이클 당 높은 명령과 높은 클럭 속도를 모두 가질 수없는 이유는 무엇입니까?


37

Megahertz Myth는 PC의 INTEL 8086 프로세서와 Apple의 Rockwell 6502 프로세서의 차이로 인해 판촉 전술이되었습니다. 8086은 4.77MHz에서, 6502는 1MHz에서 실행되었습니다. 그러나 6502에 대한 지침에는 더 ​​적은주기가 필요했습니다. 실제로 8086보다 빠르게 실행되는 횟수가 줄어 듭니다. 일부 명령어에 더 적은주기가 필요한 이유는 무엇입니까? 더 적은 사이클을 필요로하는 6502의 명령을 8086의 빠른 사이클링 프로세서와 결합 할 수없는 이유는 무엇입니까?

IPC (명령 당 명령)에 대한 Wikipedia의 기사에 따르면

IPC에 영향을 미치는 요소
높은 수준의 IPC와 낮은 클럭 속도 또는 낮은 IPC와 높은 클럭 속도로 초당 주어진 수준의 명령을 얻을 수 있습니다.

사이클 당 높은 명령과 높은 클럭 속도를 모두 가질 수없는 이유는 무엇입니까?

아마도 이것은 클럭 사이클과 관련이 있습니까? Wikipedia에 회로 동기화가 언급되어 있습니까? 그게 무슨 뜻인지 잘 모르겠습니다.

아니면 파이프 라인의 작동 방식과 관련이 있습니까? 짧은 파이프 라인의 명령어가 긴 파이프 라인의 명령어와 다른 이유를 잘 모르겠습니다.

통찰력은 좋을 것입니다! 신화의 배경을 이해하려고 노력했습니다. 감사!

참고 문헌 :

사이클 당 명령 대 사이클 수 증가

http://en.wikipedia.org/wiki/Instructions_per_cycle

http://en.wikipedia.org/wiki/Clock_cycle


1
> 일부 지침에 더 적은주기가 필요한 이유는 무엇입니까? RISC / CISC (잘, 일종의 ). 더 적은 사이클을 필요로하는 6502의 명령을 8086의 빠른 사이클링 프로세서와 결합 할 수없는 이유는 무엇입니까? 그들은 할 수 있고 가지고 있습니다. 문제는 일단베이스를 설정 한 후에는 모든 것을 버리고 다음 모델을 처음부터 시작하기가 어렵다는 것입니다.
Synetech

@Synetech, Intel kinda sorta는 프로그래머에게 CISC 명령어 세트를 제시 한 다음 칩의 RISCier 명령어로 변환함으로써 그렇게했다
soandos

두 가지가 결합되었다고 말할 때 완전히 다른 칩 제조업체를 의미했습니다. 나는 목록을 가지고 있지 않지만, 그런 일을 한 다른 사람들 (비 인텔 / AMD)이 있습니다. (대부분의 사람들은 인텔과 AMD가 데스크탑 시장을 장악하고 있기 때문에 많은 칩 제조업체가 있다는 사실을 잊고 있습니다.)
Synetech

답변:


21

tl; dr

파이프 라인이 짧을수록 클럭 속도는 빨라지지만 처리량은 줄어들 수 있습니다. 또한 하단의 답변 # 2와 3을 참조하십시오 (짧습니다, 약속합니다).

더 긴 버전 :

고려해야 할 몇 가지 사항이 있습니다.

  1. 모든 지시 사항이 동시에 수행되는 것은 아닙니다
  2. 모든 지시 사항이 즉시 (또는 10 또는 20 개의) 지시 사항에 의존하는 것은 아닙니다.

매우 단순화 된 파이프 라인 (현대 인텔 칩에서 발생하는 작업은 복잡하지 않음)에는 여러 단계가 있습니다.

가져 오기-> 디코딩-> 메모리 액세스-> 실행-> 쓰기 저장-> 프로그램 카운터 업데이트

각각-> 발생하는 시간 비용이 있습니다. 또한 모든 틱 (시계주기)마다 모든 단계가 한 단계에서 다음 단계로 이동하므로 가장 느린 단계는 모든 단계의 속도가됩니다 (최대한 비슷한 길이가되도록 지불합니다).

5 개의 명령이 있고 명령을 실행하려고한다고 가정합니다 (위키 백과에서 가져온 그림, PC 업데이트는 수행되지 않음). 다음과 같이 보일 것입니다 :

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

각 명령이 완료되는 데 5 클럭 사이클이 걸리더라도 매 사이클마다 완료된 명령이 파이프 라인에서 나옵니다. 각 단계에 걸리는 시간이 40ns이고 중간 비트의 경우 15ns (위의 6 단계 파이프 라인 사용)이면 첫 번째 명령을 얻는 데 40 * 6 + 5 * 15 = 315ns가 걸립니다.

반대로 파이프 라인을 완전히 제거해야하지만 다른 모든 것을 동일하게 유지하면 첫 번째 명령을 내리는 데 불과 240ns가 걸립니다. ( "첫 번째"명령어를 출력하는 속도의 차이를 대기 시간이라고합니다. 일반적으로 초당 명령어 수인 처리량보다 덜 중요합니다.)

그러나 실제로 다른 점은 파이프 라인 예제에서 60ns마다 (첫 번째 명령 이후) 새로운 명령을 받는다는 것입니다. 파이프 라인이없는 경우 매번 240이 걸립니다. 이는 파이프 라인이 처리량을 향상시키는 데 효과적임을 보여줍니다.

한 걸음 더 나아가면 메모리 액세스 단계에서 계산을 수행하기 위해 추가 장치가 필요할 것 같습니다. 즉, 해당 사이클에서 mem 스테이지를 사용하지 않는 명령이 있으면 다른 추가 작업을 수행 할 수 있습니다. 따라서 하나의 틱으로 하나의 프로세서에서 두 개의 실행 단계 (하나는 메모리 액세스 단계에 있음)를 수행 할 수 있습니다 (스케줄링은 악몽이지만 거기에 가지 않겠습니다. 점프의 경우 한 번에 세 가지 추가 실행 상태를 수행 할 수 있습니다). 파이프 라인을 가짐으로써 두 개 이상의 명령어가 다른 단계 (또는 도약 단계 등)를 사용하여 귀중한 시간을 절약 할 수 있도록 설계 할 수 있습니다.

이 작업을 수행하기 위해 프로세서는 많은 "마법"(비 순서 실행 , 분기 예측 등)을 수행하지만 파이프 라인이없는 것보다 여러 명령이 더 빨리 나올 수 있습니다. 오랫동안 관리하기가 어렵고 단계 간 대기만으로 더 높은 비용이 발생합니다). 반대로 파이프 라인을 너무 길게 만들면 미친 시계 속도를 얻을 수는 있지만 원래 여러 가지 이점을 잃을 수 있습니다 (여러 장소에 존재할 수있는 동일한 유형의 논리를 가지고 동시에 사용할 수 있음) ).

답변 # 2 :

SIMD (단일 명령 다중 데이터) 프로세서 (대부분의 GPU와 같은)는 많은 비트의 정보에 대해 많은 작업을 수행하지만 시간이 더 오래 걸립니다. 모든 값을 읽는 데 시간이 더 걸리지 만 (버스가 어느 정도 넓어짐으로써 오프셋이 느려지지만 클럭이 느려짐) 한 번에 더 많은 명령을 수행 할 수 있습니다 (사이클 당 더 효과적인 명령).

답변 # 3 :

인위적으로 싸이클 카운트를 "치트"할 수 있으므로 사이클마다 두 개의 명령을 수행 할 수 있습니다 (클럭 속도의 절반). 하나가 아닌 두 개의 틱마다 무언가를 수행하는 것도 가능합니다 (2x 클럭 속도를 제공하지만 1 초에 지침은 변경하지 않음).


3
파이프 라인이 짧으면 클럭 속도가 느려집니다 ! Pentium 4는 긴 파이프 라인으로 인해 클럭이 높았습니다. WP : "NetBurst는 매우 높은 클럭 속도를 달성하기 위해 매우 깊은 명령 파이프 라인을 특징으로하여 P6 (Pentium III, II 등)과 다릅니다." 요점은 당신이 고속을 달성하기 위해 스테이지 당 적은 것을한다는 것입니다. 그러나 이것은 실용적이지 못했으며 인텔은 이로 인해 AMD에게 큰 추진력을 잃었습니다. 그들은 Pentium 3 아키텍처로 돌아가서 "Core"를 생각해 냈습니다.
stolsvik

@ stolsvik, 이것을 설명 할 수 있습니까? 그것은 이해가되지 않습니다 (삽입 단계가 적다는 것은 다른 모든 것을 의미합니다. 클럭 사이클이 짧아지고 클럭 속도가 빨라집니다)
soandos

4
클럭주기마다 하나의 파이프 라인 단계가 수행됩니다 . 전체 파이프 라인은 클럭 당 한 단계 씩 진행됩니다. 맨 아래에 새 명령을 가져오고 맨 위에 완료된 명령을 "방출"합니다. 따라서 Pentium4의 아이디어는 매우 빠른 단계를 수행하여 높은 클럭을 제공하지만 긴 파이프 라인을 필요로하는 매우 작은 단계를 수행하는 것이 었습니다. 파이프 라인의 단서 (모든 프로세서는 하나를 사용함)는 언제든지 여러 개의 명령이 처리되고 있다는 것입니다. 파이프 라인이 길면 많은 명령어가 진행 중임을 의미합니다. 분기 예측에 실패하면 전체 파이프를 플러시해야합니다.
stolsvik

답 # 2의 경우 CPU는 캐시를 통해서만 데이터에 액세스합니다 (메모리 액세스는 일반적으로 명령의 관점에서 투명합니다). 클록 주파수를 늦추더라도 RAM에서 데이터를 가져 오는 데 걸리는 시간에는 영향을 미치지 않습니다 (캐시에없는 경우). 또한 버스 너비는 피연산자의 크기와 관련된 SIMD 작업의 속도에만 영향을 미칩니다 (예 : 한 번에 64 비트 버스에 8 개의 8 비트 피연산자를로드 할 수 있지만 여전히 수동으로 8 개의 64 비트 값을로드해야합니다. 64 비트 피연산자가있는 경우).
획기적인

2
또한 답변 # 1의 경우, "사이클에서 mem 스테이지를 사용하지 않는 명령이있는 경우 다른 추가 작업을 수행 할 수 있습니다"라고 말하면 이것은 거짓입니다. 고장난 실행은 마이크로 작업 수준이 아닌 명령 수준에서 적용됩니다. 명령에 파이프 라인에서 두 개의 실행이 필요한 경우 파이프 라인에 기포 가 발생합니다 . 마지막으로, x86 아키텍처에는 메모리 읽기 / 쓰기 중에 메모리 주소를 즉석에서 계산하기위한 별도의 ALU가 있습니다 ( [EBX+ECX*4+100]스타일 주소 지정을 허용 함 ).
획기적인

8

나는 이것을 지나치게 단순화하고 있지만, 기억해야 할 중요한 점은 사과와 오렌지를 비교하는 용어입니다. "사이클"은 모든 프로세서에서 동일한 단일 통합 측정 단위가 아니며 "두 번째"는 통합 된 시간 측정과 같습니다. 대신,주기는 특정 작업 단위를 나타내며, 이는 임의로 임의로 정의되지만 파이프 라인 설계의 복잡성과 물리학에 의해 제한됩니다.

대부분의 경우 한주기에 많은 작업을 수행하면 전체 파이프 라인을 지울 수 있습니다. 성공하면 파이프 라인을 다시 채워야하므로 시간이 오래 걸릴 수 있으므로 다음주기가 최적화되지 않음을 의미합니다.

매 사이클마다 하나의 RISC 명령의 한 단계를 처리하는 매우 단순한 프로세서를 설계 할 수 있으며, 이것이 CPU의 기본 인 경우 "a 주기".

세부 사항은 내가 실제로 이해하지 못하는 많은 물리 및 전기 공학에 들어 가지 만 프로세서에 입력 전압을 순전히 추가하고 최선을 바라고 클럭 속도가 달성되지 않는다는 것을 기억하십시오. 최소한 열 프로파일은 또 다른 필수 관심사입니다.


이것은 실제로 그의 질문에 답하지 않습니다 (이것은 왜 그냥 속도를 낼 수 없는지와 관련이 없습니다). 그는 더 많은 사이클을 요구하고 있습니다! = 더 많은 작업 시간
soandos

그러나이 답변은 다른 답변에서 보지 못한 문제, 즉 더 적은 클럭 사이클에서 작업을 완료하는 특정 명령 세트의 포함과 가장 느린 명령 세트를 기반으로 클럭 사이클을 측정하는 기능에 대해 이야기합니다. 효율적이지 않습니다. (아직도 틀릴 수도 있지만 ... 건축이 매력적이라고 ​​생각하지만 어떤 식 으로든 전문가라고 생각하지는 않습니다)
Stephen R

5

여기에 매우 간단한 (아마도 지나치게 단순화 된) 설명이 있습니다. 특정 작업이 있다고 가정 해보십시오. 두 개의 32 비트 숫자를 추가하십시오. 두 가지 접근 방식을 취할 수 있습니다. 매우 많은 수의 매우 작은 단계로 분할하거나 소수의 매우 큰 단계로 분할 할 수 있습니다.

예를 들어 "두 숫자 추가"라고 말할 수 있습니다. 이제 한 단계 만 있습니다. 그러나이 단계에는 여러 부분이 있으며 시간이 더 오래 걸립니다. 따라서 사이클 당 높은 지침이 있습니다 (이 경우 하나). 당신이 가지고 있기 때문에하지만 당신의 클럭 속도가 높은 수없는 많은 것을주기에서 할 수 있습니다.

또는 "첫 번째 숫자를 레지스터로 가져 오십시오. 그런 다음 두 번째 숫자를 가져 오십시오. 그런 다음 가장 중요하지 않은 비트를 추가하십시오. 그런 다음 이전에서 캐리와 함께 두 번째로 중요한 비트를 추가하십시오. 그런 다음 세 번째로 추가하십시오 ... "가장 중요한 비트를 추가하십시오. 캐리가 있으면 오버플로 플래그를 설정 한 다음 결과를 메모리에 기록하십시오." 이제 많은 단계가 있습니다. 그러나 각 단계는 터무니없이 빠릅니다. 따라서 사이클 당 지침이 낮습니다 (이 경우 1/36 정도). 그러나 각 사이클마다 매우 작은 비트 만 있기 때문에 클럭 속도가 매우 빠를 수 있습니다.

사이클 당 높은 명령어와 높은 클럭 속도를 모두 얻으려면 복잡한 명령어를 매우 간단한 몇 단계로 나눠야합니다. 그러나 명령이 복잡하기 때문에 수행 할 수 없습니다.

최신 CPU는 파이프 라인되어 있고 명령어가 겹치기 때문에 실제 특정 절충점과주기 수는 크게 다릅니다. 그러나 기본 아이디어는 맞습니다.


2

사이클 당 높은 명령과 높은 클럭 속도를 모두 가질 수 있습니다 . 한계가있는 곳은 디지털 회로의 전파 지연이 단일 클록 사이클의 펄스 폭을 초과 할 때입니다. 이것은 CPU 전압을 증가시킴으로써 극복 될 수 있지만, 이것은 전력 소비 (따라서 열 소산)를 증가시킬 것이라는 점에 유의해야한다.

따라서 더 빠른 클럭 속도를 원하면 전파 지연을 줄이기 위해 전압을 증가시켜야합니다 ( 전자 드리프트 속도 증가 ). 이 지연이 클럭주기를 초과하면 CPU가 예상대로 작동하지 않을 가능성이 높으며 해당 CPU에서 실행중인 소프트웨어가 충돌하거나 예외가 발생합니다. 그러나 프로세서를 통과 할 수있는 전압에는 분명히 제한이 있으며, 이는 CPU 자체의 설계, 주로 내부 전기 경로의 전류 전달 용량에 의해 결정됩니다.


파이프 라인은 각 명령어가 여러 개의 작은 "마이크로 연산"으로 나누어지기 때문에 경우에 따라 더 높은 클럭 속도를 허용합니다. 이러한 미세 동작은 체인으로 상호 연결된 훨씬 더 작은 회로를 사용하는 매우 간단한 작업입니다 (물리적으로 전자가 이동해야하는 거리가 짧을수록 특정 하위 장치를 통한 전파 지연이 짧아짐).

파이프 라인 CPU의 또 다른 이점은 더 복잡한 설계를 희생하면서 단위 시간당 실행되는 명령 수를 크게 늘릴 수 있다는 것입니다.

일부 명령어에 더 많거나 적은주기가 필요한 이유는 실행중인 명령어에 따라 다릅니다. 예를 들어, x86 명령어 세트에는 메모리의 전체 문자열을 한 곳에서 다른 곳으로 이동할 수 있는 MOVS명령 이 있습니다. 분명히 긴 문자열을 즉시 복사 할 수는 없지만 한 번에 하나씩 복사하여 여러 클럭 사이클을 수행 할 수 있습니다. 따라서 MOVS명령은 복사 할 문자 수에 따라 가변 시간이 걸립니다.

CISC 설계 (예 : x86) 와 달리 RISC 설계 (예 : ARM) 에서는 다중주기 작업의 영향이 눈에 띄지 않습니다 . RISC 기반 설계는 가장 일반적으로 사용되는 기본 작업 만 수행 할 수 있으며주기 당 하나의 명령 처리량을 달성하는 방식으로 파이프 라인을 만드는 것이 훨씬 쉽습니다.


1

컴퓨터가 특정 작업을 완료하는 데 걸리는 시간은 컴퓨터의 클럭 속도에 의존하지 않으며 계산 장치의 설계 및 엔지니어링 방법에 따라 다릅니다.

클럭 속도는 실제로 CPU 디자이너가 임의로 결정한 것으로, 때로는 좋은 이유 (효율), 때로는 나쁜 이유 (광고)에 의해 결정됩니다.

주어진 CPU가 완료하는 데 1에서 100 나노초 (ns) 사이의 명령이 혼합되어 있다고 가정 해 봅시다. 1 "틱"이 100ns (10MHz)가되도록 클럭 속도를 설정할 수 있습니다. 즉, 모든 명령이 정확히 1 틱으로 완료됩니다. 그러나 명령 실행 시간이 균등하게 분배되면 계산 단위가 시간의 50 %를 유휴 상태로 유지한다는 의미입니다 (평균 실행 속도는 50ns가되고 나머지 50ns의 틱은 유휴 상태로 유지함). 반면 틱을 10ns로 설정하면 명령어의 범위는 1에서 10 틱 사이이지만 다음 명령어가 시작되기 전에 장치가 9ns 이상 유휴 상태가되지 않으며 평균 유휴 상태는 5ns가됩니다.

개발 과정에서 CPU는 실제로 수행 할 수있는 작업량에 따라 특정 속도로 실행되도록 설계됩니다. 클럭 속도를 높이거나 낮추는 경우 실제로 CPU가 수행 할 수있는 작업량을 변경하지 않고 단지 효율성 비율을 망칠뿐입니다.

(그리고 오버 클로킹 CPU에 대해 울부 짖기 전에 : 이것은 실제 속도 향상을 가져 오는 두 가지 장점을 제공합니다. 빠른 실행 명령 (1 사이클 미만)은 빠른 실행 시간으로 끝나고 모든 명령은 유휴 시간이 줄어 듭니다. 이 중 실제로 컴퓨터가 수행 할 수있는 작업량을 늘릴 수 있지만 CPU를 X % 초과 오버 클로킹하는 것이 벤치 마크 할 때 수행 한 작업의 X % 증가와 항상 같지는 않습니다.)

TL; DR

CPU는 1 초 안에 X 작업을 수행 할 수 있습니다. H 클럭 속도와 I IPC를 사용하는 경우 I = X / H입니다. H를 변경해도 X는 변경되지 않지만 I에 반비례합니다.


1
클럭 속도는 임의의 결정과 거리가 멀다. 과도한 전파 지연을 피하기 위해 IC 트레이스 길이뿐만 아니라 CPU 공급 전압의 기능으로 신중하게 선택해야합니다.
획기적인

CPU가 동기식 디지털 회로 라는 사실을 놓친 것 같습니다 . 명령어는 X 나노초 (클럭주기가 전파 지연보다 작다고 가정)를 거치지 않으며 모든 것이 상승 또는 하강 클록 에지에서 발생합니다. 명령어는 X 단위가 아닌 X주기 를 사용합니다. 예,주기 길이 를 수정할 수 있지만 차이점은 언제 발생하는지입니다. 마지막으로 CPU가 1 초 안에 할 수있는 작업량은 클럭 속도의 함수이므로 공식은 여기서 실제로 확인하지 않습니다.
cp2141

CPU는 여러 비동기 장치의 동기식 통합입니다. 클럭 틱은 일을 잘 정리하는 데 사용되지만 실행 시간을 결정하지는 않습니다. 예를 들어 정수 추가는 전류가 CPU를 통과하는 거리와 트랜지스터 속도에 따라 일정 시간이 걸립니다. 상태를 전환합니다. 결과는 다음 클럭 틱에서 READ이지만 실제 계산은 틱 전체에서 비동기 적으로 수행됩니다.
Benjamin Chambers

0

요구 사항이 모순되기 때문에 사이클 당 높은 명령과 높은 클럭 속도를 모두 가질 수는 없습니다.

첫 번째 근사에서 IPC는 설계의 복잡성 (A)에 따라

IPC = sqrt (A)

설계에 의해 달성 될 수있는 최대 주파수 (F)는 [1]

F = 1 / {b + c sqrt (A)}

a, b 및 c 매개 변수로

따라서 muarch의 복잡성을 증가 시키면 작업 주파수를 낮추는 대신 IPC가 증가하는 반면, 복잡성을 줄이면 IPC를 소비하는 빈도가 증가합니다. 이것은 위키피디아 기사에서 언급 한 두 가지 극단적 인 경우에 해당하지만 위키피디아는 Brainiac과 speed-demon이라는 이름을 언급하지 않습니다.

  • Brainiac 디자인 : 높은 IPC 및 저주파
  • Speed-demon desing : 고주파 및 저 IPC.

[1] 일부 저자는 대신 주파수 표현이 "1 / {b + c A}"라고 주장하지만, 두 경우 모두 복잡성을 증가 시키면 달성 가능한 최대 주파수가 감소합니다.

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