사이클 당 높은 명령과 높은 클럭 속도를 모두 가질 수없는 이유는 무엇입니까? 대한 지침에는 더 ​​적은주기가 필요했습니다.

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



답변

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 초에 지침은 변경하지 않음).


답변

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

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

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

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


답변

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

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

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

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

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


답변

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

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


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

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

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

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


답변

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

클럭 속도는 실제로 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에 반비례합니다.


답변

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

첫 번째 근사에서 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}”라고 주장하지만, 두 경우 모두 복잡성을 증가 시키면 달성 가능한 최대 주파수가 감소합니다.


답변