문제

질문하기에는 질문이 너무 간단 해 보이지만 둘 다에 대해 몇 가지 PPT를 겪은 후 물었습니다.

두 방법 모두 명령 처리량을 증가시킵니다. 그리고 SuperScaling은 거의 항상 파이프 라인을 사용합니다. SuperScaling은 하나 이상의 실행 장치를 가지고 있으며 파이프 라인도 있거나 여기에 잘못 되었습니까?

도움이 되었습니까?

해결책

슈퍼 스칼라 디자인 프로세서는 단일 시계에서 여러 지침을 발행 할 수 있으며, 중복 시설을 통해 지침을 실행할 수 있습니다. 우리는 단일 핵심 내에서 이야기하고 있습니다.

파이프 라인 명령을 단계로 나누고 각 단계가 프로세서의 다른 부분에서 실행되므로 여러 명령어가 각 클럭 각각의 "위상"에있을 수 있습니다.

그들은 거의 항상 함께 사용됩니다. Wikipedia 의이 이미지는 이러한 개념이 그래픽으로 가장 잘 설명되므로 사용중인 두 개념을 보여줍니다.

Superscalar/pipelining in use

여기서는 5 단계 파이프 라인에서 한 번에 두 가지 지침이 실행됩니다.


최근 편집을 감안할 때 더 자세히 설명하려면 다음과 같습니다.

위의 예에서, 명령은 5 단계를 거쳐 "수행"됩니다. IF (명령 페치), ID (명령 디코드), EX (Execute), MEM (업데이트 메모리), WB (캐시에 대한 쓰기 백)입니다.

매우 간단한 프로세서 디자인에서는 모든 시계가 다른 단계를 완료하므로 다음과 같습니다.

  1. 만약에
  2. ID
  3. WB

다섯 시계로 하나의 지시를 할 것입니다. 그런 다음 중복 실행 장치를 추가하고 SuperScalar 디자인을 소개하면 두 가지 지침 A와 B에 대해 다음과 같습니다.

  1. if (a) if (b)
  2. ID (a) ID (b)
  3. 예 (a) Ex (b)
  4. mem (a) mem (b)
  5. WB (A) WB (B)

5 개의 시계의 두 가지 지침 - 이론적 최대 이익 100%.

파이프 라인 링은 부품을 동시에 실행할 수 있으므로 (10 개의 지침 A부터 J에서 J에서 J까지)와 같은 것으로 끝납니다.

  1. if (a) if (b)
  2. ID (a) ID (b) if (c) if (d)
  3. 예 (a) 예 (b) ID (c) ID (d) if (e) if (f)
  4. mem (a) mem (b) ex (c) ex (d) id (e) id (f) if (g) if (h)
  5. WB (A) WB (B) MEM (C) MEM (D) EX (E) EX (F) ID (G) ID (H) IF (I) IF (J)
  6. WB (C) WB (D) MEM (E) MEM (F) EX (G) EX (H) ID (I) ID (J)
  7. WB (E) WB (F) MEM (G) MEM (H) EX (I) EX (J)
  8. WB (G) WB (H) MEM (I) MEM (J)
  9. WB (I) WB (J)

9 개의 시계에서는 10 개의 지침을 실행했습니다. 파이프 링이 실제로 물건을 움직이는 위치를 알 수 있습니다. 그리고 그것은 필드에서 실제로 구현되는 방식이 아니라 예제 그래픽에 대한 설명입니다 (이것은 마법).

위키 백과 기사 SUPERSCALAR 그리고 지침 파이프 라인 꽤 좋습니다.

다른 팁

오랜만에 전 CPU가 실행되었습니다 한 번에 하나의 기계 명령어 만. 완전히 완료되었을 때만 CPU는 메모리에서 다음 명령을 가져 왔습니다 (또는 나중에 명령 캐시).

결국, 누군가는 이것이 대부분의 CPU가 대부분의 시간을하지 않았다는 것을 알았습니다. 몇 가지 실행 서브 유닛 (예 : 명령 디코더, 정수 산술 장치 및 FP 산술 장치 등)이 있었기 때문에 지침을 실행하는 지침을 실행했습니다. 그들 중 하나만 한 번에 바쁘다.

따라서, "단순한" 파이프 라인 태어났습니다 : 한 번의 지시가 디코딩되고 다음 실행 서브 유닛을 향해 나아가면 다음 명령을 아직 가져오고 디코딩하지 않겠습니까? 당신이 10 명을 가지고 있다면 "단계", 그럼 각 단계가 다른 지시를 처리하도록합니다 CPU 시계를 전혀 늘리지 않고 이론적으로 명령 처리량 10 배를 늘릴 수 있습니다! 물론, 이것은 코드에 조건부 점프가 없을 때만 완벽하게 작동합니다 (조건부 점프를 특별히 처리하기 위해 많은 노력이 이루어졌습니다).

나중에 무어의 법칙이 예상보다 오래 지속되면서 CPU 제작자들은 "각각의 실행 서브 유닛 중 하나만있는 이유"를 사용하고 생각할 수있는 트랜지스터를 발견했습니다. 따라서, SUPERSCALAR CPU 다중 실행 서브 유닛을 수행 할 수 있습니다 같은 동시에 태어 났고 CPU 디자인은 이러한 완전 병렬 장치에 지침을 배포하는 데 훨씬 더 복잡해졌으며, 결과가 순차적으로 실행 된 것과 동일하게 확인했습니다.

비유 : 옷을 씻습니다

더러워 지거나 깨끗한 옷을 걸 수있는 랙, 세탁기 및 건조기 (각각 한 번에 하나의 의복을 한 번에 씻을 수 있음), 접는 테이블 및 다리미판이있는 드라이 클리닝 상점을 상상해보십시오.

실제 세척 및 건조를 모두 수행하는 승무원은 다소 희미 해져서 드라이 클리닝 주문을받는 상점 소유자는 각 명령을 매우 신중하고 명시 적으로 작성하기 위해 특별한주의를 기울입니다.

전형적인 날 에이 지침은 다음의 선을 따라 무언가 일 수 있습니다.

  1. 선반에서 셔츠를 가져 오십시오
  2. 셔츠를 씻으십시오
  3. 셔츠를 말리십시오
  4. 셔츠를 다림질하십시오
  5. 셔츠를 접으십시오
  6. 셔츠를 선반에 다시 넣으십시오
  7. 선반에서 바지를 가져 가십시오
  8. 바지를 씻으십시오
  9. 바지를 말리십시오
  10. 바지를 접으십시오
  11. 바지를 선반에 다시 넣으십시오
  12. 랙에서 코트를 가져옵니다
  13. 코트를 씻으십시오
  14. 코트를 말리십시오
  15. 코트를 다림질하십시오
  16. 코트를 랙에 다시 넣으십시오

승무원은이 지침을 티에 따른다. 당신이 상상할 수 있듯이, 하루의 세탁소를 완전히 씻고 건조하고 접는 데 시간이 오래 걸리기 때문에 하루의 세탁소를 완성하는 데 시간이 오래 걸리며 한 번에 하나씩 수행해야합니다.

그러나 어느 날, 승무원이 종료하고 새롭고 똑똑한 승무원이 고용되어 대부분의 장비가 낮 동안 언제든지 유휴 상태가된다는 것을 알게됩니다. 바지가 다리미판이나 세탁기가 사용되지 않은 동안. 그래서 그는 시간을 더 잘 활용하기로 결정했습니다. 따라서 위의 일련의 단계 대신 다음을 수행 할 것입니다.

  1. 선반에서 셔츠를 가져 오십시오
  2. 셔츠를 씻고 선반에서 바지를 가져 가십시오
  3. 셔츠를 말리십시오. 바지를 씻으십시오
  4. 셔츠를 다림질하고 바지를 말리십시오
  5. 셔츠를 접으십시오. (랙에서 코트를 가져 가십시오)
  6. 셔츠를 랙에 다시 넣고 바지를 접으십시오, (코트 세척)
  7. 바지를 선반에 다시 넣으십시오, (코트 건조)
  8. (코트를 다리기)
  9. (코트를 랙에 다시 넣습니다)

이것은 파이프 라인입니다. 다른 구성 요소를 동시에 사용하도록 관련없는 활동을 시퀀싱합니다. 한 번에 많은 다른 구성 요소를 활성화하여 효율성을 최대화하고 실행 시간을 속도를 높이면 16 "사이클"을 9로 줄입니다.

이제 작은 드라이 클리닝 가게는 훨씬 더 빨리 일할 수 있기 때문에 더 많은 돈을 벌기 시작했기 때문에 주인은 여분의 세탁기, 건조기, 다리미판, 접는 스테이션을 구입했으며 심지어 다른 승무원을 고용했습니다. 이제 위의 대신 상황이 더 빠릅니다.

  1. 선반에서 셔츠를 가져 가서 선반에서 바지를 가져 가십시오
  2. 셔츠를 씻고 바지를 씻으십시오, (랙에서 코트를 가져 가십시오)
  3. 셔츠를 말리십시오. 바지를 말리십시오, (코트 세척)
  4. 셔츠를 다림질하고 바지를 접으십시오, (코트 건조)
  5. 셔츠를 접으십시오. 바지를 선반에 다시 넣으십시오, (코트를 다리기)
  6. 셔츠를 랙에 다시 넣고 (코트를 랙에 다시 넣습니다)

이것은 슈퍼 스칼라 디자인입니다. 동일한 작업을 동시에 수행 할 수있는 여러 하위 구성 요소이지만 프로세서가 수행하는 방법을 결정합니다. 이 경우 거의 50%의 속도 부스트가 발생했습니다 (18 "사이클"에서 새로운 아키텍처는이 "프로그램"의 3 회 반복을 통해 실행될 수 있지만 이전 아키텍처는 2를 통해 만 실행할 수 있습니다).

386 또는 486과 같은 오래된 프로세서는 간단한 스칼라 프로세서이며, 수신 된 순서로 한 번에 하나의 명령을 실행합니다. PowerPC/Pentium 이후 현대 소비자 프로세서는 파이프 라인 및 슈퍼 스콜러입니다. Core2 CPU는 기계 코드를 분석하고 재주문 및 실행 방법 (병렬로 실행할 수있는 방법을 결정하는 자체 내부 논리가 포함되어 있기 때문에 486을 위해 컴파일 된 동일한 코드를 실행할 수 있습니다. ,, 할 수없는 것 등) 이것은 슈퍼 스칼라 디자인의 본질이며 왜 그렇게 실용적인가입니다.

대조적으로 벡터 병렬 프로세서는 한 번에 여러 데이터에 대한 작업을 수행합니다 (벡터). 따라서, x 및 Ya 벡터 프로세서를 추가하는 대신 x0, x1, x2 ~ y0, y1, y2 (Z0, Z1, Z2)를 추가 할 수있다. 이 설계의 문제점은 프로세서의 특정 평행 정도와 밀접하게 결합된다는 것입니다. 벡터 프로세서에서 스칼라 코드를 실행하는 경우 (가능하다고 가정하면) 벡터 병렬화의 이점은 명시 적으로 사용해야하기 때문에 더 유사하게 사용해야하므로 더 병렬 처리 장치를 사용하여 새로운 벡터 프로세서를 활용하려는 경우 (예 : 단지 3 대신 12 숫자의 벡터를 추가 할 수 있습니다.) 코드를 다시 컴파일해야합니다. 벡터 프로세서 디자인은 설계하기 쉽고 과학 및 공학에 많은 자연 평행을 가진 많은 문제가 있기 때문에 가장 오래된 세대의 슈퍼 컴퓨터에서 인기가있었습니다.

SuperScalar 프로세서는 또한 투기 실행을 수행 할 수 있습니다. 프로세서를 분기하기 전에 처리 장치를 유휴 상태로두고 코드 경로가 실행되는 것을 기다리는 대신 사전 코드가 처리를 마치기 전에 최상의 추측을하고 지점을지나 코드를 실행하기 시작할 수 있습니다. 이전 코드의 실행이 지점을 따라 잡을 때 프로세서는 실제 분기를 분기 추측과 비교할 수 있으며 추측이 정확한 경우 (이미 대기했을 때의 위치보다 훨씬 앞서) 계속 진행할 수 있습니다. 투기 실행 결과를 무효화하고 올바른 분기에 대한 코드를 실행하십시오.

파이프 링은 자동차 회사가 자동차 제조에서하는 일입니다. 그들은 자동차를 무대로 만들고 다른 사람들이 수행 한 조립 라인을 따라 다른 지점에서 다른 단계를 수행하는 과정을 분해합니다. 순 결과는 자동차가 가장 느린 스테이지의 속도로 정확히 제조된다는 것입니다.

CPU에서 파이프 라인 프로세스는 정확히 동일합니다. "명령어"는 일반적으로 1. 페치 명령, 2. 페치 오페란드 (읽는 레지스터 또는 메모리 값), 2. 계산 수행, 3. 결과 (메모리 또는 레지스터에)로 분류됩니다. . 이것 중 가장 느린 것은 계산 부분 일 수 있으며,이 경우이 파이프 라인을 통한 지침의 전체 처리 속도는 계산 부분의 속도 일뿐입니다 (다른 부분이 "무료"인 경우).

마이크로 프로세서의 슈퍼 스칼라는 단일 실행 스트림에서 한 번에 병렬로 몇 가지 지침을 실행하는 기능을 나타냅니다. 따라서 자동차 회사가 두 개의 어셈블리 라인을 운영한다면 분명히 두 배의 자동차를 생산할 수 있습니다. 그러나 자동차에 일련 번호를 넣는 과정이 마지막 단계에 있고 한 사람이 한 사람이 수행해야한다면 두 파이프 라인 사이를 번갈아 가며 각각의 반 시간에 각각을 수행 할 수 있음을 보장해야합니다. 가장 느린 단계 자체가되는 것을 피하기 위해 가장 느린 단계.

마이크로 프로세서의 슈퍼 스칼라는 비슷하지만 일반적으로 훨씬 더 많은 제한이 있습니다. 따라서 명령 페치 스테이지는 일반적으로 무대에서 하나 이상의 명령어를 생성합니다. 이것이 마이크로 프로세서의 슈퍼 스칼라를 가능하게합니다. 그런 다음 두 개의 페치 스테이지, 2 개의 실행 단계 및 2 개의 쓰기 단계가 있습니다. 이것은 분명히 단지 두 파이프 라인 이상으로 일반화됩니다.

이것은 모두 훌륭하고 멋지지만 사운드 실행의 관점에서 두 기술 모두 맹목적으로 수행하면 문제가 발생할 수 있습니다. 프로그램의 올바른 실행을 위해서는 지침이 순서대로 완전히 실행된다고 가정합니다. 두 개의 순차 지침에 상호 의존적 인 계산이 있거나 동일한 레지스터를 사용하는 경우 문제가 발생할 수 있습니다. 이후의 명령어는 오페라 페치 스테이지를 수행하기 전에 이전 명령의 후퇴가 완료 될 때까지 기다려야합니다. 따라서 두 번째 명령을 실행하기 전에 두 단계마다 정지해야하며,이 기술은 처음부터 이러한 기술에 의해 얻은 것의 목적을 물리칩니다.

설명하기가 약간 복잡한 마구간 문제를 줄이는 데 사용되는 많은 기술이 있습니다. 그러나 나는 그것들을 나열 할 것입니다. . 외부 실행. 5. 롤백 (및 퇴직)을 통한 투기 실행 모든 현대 CPU는 이러한 모든 기술을 사용하여 슈퍼 스칼라 및 파이프 라인을 구현합니다. 그러나 이러한 기술은 마구간이 피할 수 없기 전에 프로세서의 파이프 라인 수와 관련하여 수익이 감소하는 경향이 있습니다. 실제로 CPU 제조업체는 단일 코어로 4 개 이상의 파이프 라인을 만들지 않습니다.

멀티 코어는 이러한 기술과 관련이 없습니다. 이는 기본적으로 단일 칩에서 대칭 멀티 프로세싱을 구현하고 공유하는 것이 합리적 인 구성 요소 (일반적으로 L3 캐시 및 I/O) 만 공유하기 위해 기본적으로 두 마이크로 프로세서를 함께 비롯합니다. 그러나 인텔이 "하이퍼 스레딩"이라고 부르는 기술은 단일 코어의 슈퍼 스칼라 프레임 워크 내에서 멀티 코어의 의미를 사실상 구현하려는 방법입니다. 따라서 단일 마이크로 아키텍처에는 두 가지 (또는 그 이상의) 가상 코어 레지스터가 포함되어 있으며 두 개의 다른 실행 스트림에서 지침을 가져 오지만 일반적인 슈퍼 스칼라 시스템에서 실행됩니다. 아이디어는 레지스터가 서로를 방해 할 수 없기 때문에 마구간이 줄어든다는 것입니다. 따라서 단순히 두 개의 가상 코어 실행 스트림을 절반의 속도로 실행하는 대신 스톨의 전반적인 감소로 인해 더 좋습니다. 이것은 인텔이 파이프 라인 수를 늘릴 수 있음을 시사하는 것 같습니다. 그러나이 기술은 실제 구현이 다소 부족한 것으로 밝혀졌습니다. 그러나 슈퍼 스칼라 기술에 필수적이기 때문에 어쨌든 언급했습니다.

파이프 라인은 같은주기에서 여러 지시 사항의 다른 단계를 동시에 실행합니다. 명령 처리를 단계로 분할하고 각 단계마다 전문화 된 장치와 중간 결과를 저장하기위한 레지스터를 기반으로합니다.

SuperScaling은 여러 지시 사항 (또는 미세 비계)을 CPU에 존재하는 다중 실행 장치로 발송합니다. 따라서 CPU의 중복 장치를 기반으로합니다.

물론,이 접근법은 서로를 보완 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top