비순차적 실행이란 무엇입니까?

컴퓨터는 CPU보다 복잡한 부분이 없는 복잡한 기계입니다. 기본적인 개요 수준에서는 CPU가 상대적으로 단순해야 하는 것처럼 보입니다. 일련의 명령을 받아 처리한 다음 데이터를 출력합니다. 그러나 이것은 최신 CPU의 실제 작동과 거의 유사하지 않습니다.

하위 스칼라에서 수퍼 스칼라로

초기 CPU는 예상했던 그대로였습니다. 그들은 주어진 순서대로 개별적으로 지시를 받고 완료할 때까지 처리한 다음 다음 지시로 넘어갔습니다. 이 유형의 CPU는 하위 스칼라(sub-scalar)였으며 클록 주기당 하나 미만의 명령을 완료할 수 있었습니다. CPU 설계자는 명령을 완료하는 데 여러 단계가 있음을 확인했습니다. 이러한 각 단계에는 서로 다른 하드웨어가 필요했습니다. 이는 한 번에 전체 시퀀스를 통해 단일 명령을 실행할 때 하드웨어의 일부가 유휴 상태임을 의미했습니다. 모든 종류의 프로세서에서 유휴 하드웨어는 쓸모없는 하드웨어입니다.

이 유휴 하드웨어를 활용하기 위해 파이프라인 방식을 사용하도록 CPU 설계를 업데이트했습니다. 이렇게 하면 각 단계의 하드웨어가 더 분리되지만 일련의 명령에 의해 모두 동시에 활용될 수 있습니다. 각 명령어가 파이프라인을 통과하는 데 여전히 몇 사이클이 걸리지만 전체 처리량은 사이클당 하나의 명령어였습니다. 이것은 CPU를 스칼라로 만들었습니다.

더 많은 작업을 수행하려면 프로세서를 수퍼 스칼라로 만들어야 했습니다. 이를 달성하기 위해 여러 병렬 파이프라인이 구현되었습니다.

파이프라인에 데이터 공급 유지

컴퓨터의 주요 성능 문제는 일반적으로 메모리 대기 시간입니다. 많은 명령이 데이터에 대해 작동하므로 명령을 실행하려면 데이터를 사용할 수 있어야 합니다. 문제는 해당 데이터를 즉시 사용할 수 없기 때문에 기다려야 하는 경우 어떻게 하느냐입니다. 전통적으로 답은 그냥 멈추고 사용할 수 있게 될 때까지 기다리는 것이었습니다. 이렇게 하면 잠재적으로 수백 개의 CPU 주기 동안 전체 파이프라인이 비어 있게 됩니다. 병렬 파이프라인의 두 명령어가 메모리를 기다려야 하는 경우 상황은 더욱 악화됩니다. 첫 번째 명령이 두 번째 데이터에 대한 요청도 보류하기 때문입니다. CPU 캐시 메모리가 이 문제를 해결하는 데 도움이 될 수 있지만 여전히 해결할 수는 없습니다. 이를 해결하기 위해서는 새로운 패러다임이 필요했습니다. 그 패러다임 전환은 Out Of Order Execution 또는 OOO였습니다.

파이프라인의 첫 번째 단계는 명령어를 디코딩하는 것입니다. 이것은 수행해야 할 작업을 수행하고 작업에 필요한 데이터를 사용할 수 있는지 확인하는 것을 의미합니다. OOO CPU에서는 디코딩된 명령어가 대기열에 추가됩니다. 대기열에서 제거되고 필요한 데이터를 사용할 수 있을 때만 실제로 처리됩니다. 결정적으로 명령이 대기열에 추가된 순서는 중요하지 않습니다. 초기 명령이 데이터를 기다리고 있는 경우 준비가 된 경우 최신 명령을 건너뛸 수 있습니다. OOO 프로세서는 다가오는 명령의 대기열과 실행할 준비가 된 명령을 기반으로 처리해야 하는 명령을 재정렬할 수 있습니다.

중요한 종속성

이 프로세스는 두 가지를 가정합니다. 우선 진정한 종속성을 안정적으로 식별하고 처리할 수 있습니다. 둘째, 잘못된 종속성을 안정적으로 처리하고 식별할 수 있습니다. 차이점은 무엇입니까? 음, 진정한 종속성은 OOO 시스템에서 전혀 완화될 수 없는 종속성입니다. 가장 쉬운 예는 쓰기 후 읽기입니다. 일부 데이터를 작성해야 하는 명령과 해당 데이터를 읽어야 하는 다른 명령이 있는 경우 해당 명령을 재정렬할 수 있는 방법이 없습니다. 제공된 순서대로 완료해야 합니다. 그렇지 않으면 넌센스 데이터를 얻게 됩니다.

거짓 종속성은 또 다른 영리한 속임수로 숨길 수 있는 것입니다. 읽기 후 쓰기의 예를 들어 보겠습니다. 언뜻 보기에 데이터를 읽기 전에 덮어쓸 수 없다고 생각할 수 있습니다. 하지만 일이 그렇게 간단하지 않습니다. 새 데이터를 쓸 수 있는 다른 장소가 있고 이전 데이터를 읽은 후 새 데이터와 이전 데이터를 교환할 수 있다면 어떨까요? 이것은 레지스터 이름 변경 프로세스이며 OOO 처리에 중요합니다.

일반적으로 명령어 세트는 시스템에서 사용되는 아키텍처 레지스터 세트 수를 정의합니다. 말 그대로 다른 사람에게 주소를 지정할 수 없습니다. 하지만 레지스터를 오버프로비저닝하면 어떻게 될까요? 대부분 숨기고 아직 처리하지 않아야 할 데이터를 저장하는 데 사용한 다음 타임라인이 다시 정확할 때 숨겨진 및 아키텍처 레지스터의 레이블을 간단히 교체할 수 있습니다. 어느 때든 정확한 양의 건축 기록부가 있지만 반드시 항상 같은 위치에 있는 것은 아닙니다. 현실 세계의 비유는 핫데스킹이 될 것입니다.

결론

Out Of Order 실행은 명령이 실행 시간에 CPU에 의해 동적으로 재정렬될 수 있는 처리 패러다임입니다. 이는 사용 가능한 데이터가 있는 가장 먼저 발행된 지침을 기반으로 수행됩니다. 즉, 파이프라인에 로드되는 명령어는 항상 실행할 준비가 되어 있으며 데이터를 기다리는 동안 지연이 없습니다. 물론 데이터를 기다리는 명령으로 채워지지 않도록 충분히 긴 대기열이 필요하지만 이는 구현 문제입니다. OOO 실행은 잘못된 종속성을 숨기기 위해 레지스터 이름 변경에 의존합니다. 이러한 명령이 실제로 잘못된 순서로 실행되더라도 나머지 컴퓨터에서 이 사실을 숨기는 방식으로 레지스터의 이름이 변경됩니다.



하드 드라이브를 복제하는 방법

하드 드라이브를 복제하는 방법

데이터가 귀중한 자산인 현대 디지털 시대에 Windows에서 하드 드라이브를 복제하는 것은 많은 사람들에게 중요한 프로세스가 될 수 있습니다. 이 종합 가이드

Windows 10에서 드라이버 WUDFRd를 로드하지 못한 문제를 해결하는 방법은 무엇입니까?

Windows 10에서 드라이버 WUDFRd를 로드하지 못한 문제를 해결하는 방법은 무엇입니까?

컴퓨터를 부팅하는 동안 WUDFRd 드라이버를 컴퓨터에 로드하지 못했다는 오류 메시지가 나타납니까?

NVIDIA GeForce Experience 오류 코드 0x0003 수정 방법

NVIDIA GeForce Experience 오류 코드 0x0003 수정 방법

데스크탑에서 NVIDIA GeForce 경험 오류 코드 0x0003을 경험하고 계십니까? 그렇다면 블로그를 읽고 이 오류를 빠르고 쉽게 해결하는 방법을 알아보세요.

Chromebook이 켜지지 않는 이유

Chromebook이 켜지지 않는 이유

내 크롬북이 켜지지 않는 이유는 무엇입니까? 질문에 대한 답을 얻으십시오. Chromebook 사용자를 위한 유용한 가이드입니다.

Fitbit Versa 4에서 시계 페이스를 변경하는 방법

Fitbit Versa 4에서 시계 페이스를 변경하는 방법

Fitbit Versa 4의 시계 페이스를 변경하여 시계를 매일 무료로 다르게 꾸며보세요. 얼마나 빠르고 쉬운지 확인하십시오.

Roomba가 중지, 고정 및 회전 – 수정

Roomba가 중지, 고정 및 회전 – 수정

Roomba 로봇 청소기가 멈추고, 달라붙고, 계속 회전하는 문제를 해결합니다.

Steam Deck에서 그래픽 설정을 변경하는 방법

Steam Deck에서 그래픽 설정을 변경하는 방법

Steam Deck은 손끝에서 바로 강력하고 다양한 게임 경험을 제공합니다. 그러나 게임을 최적화하고 최상의 성능을 보장하려면

격리 기반 보안이란 무엇입니까?

격리 기반 보안이란 무엇입니까?

우리는 사이버 보안 세계에서 점점 더 중요해지고 있는 주제인 격리 기반 보안에 대해 탐구할 것입니다. 이 접근법은

Chromebook에서 Auto Clicker를 사용하는 방법

Chromebook에서 Auto Clicker를 사용하는 방법

오늘은 Chromebook에서 반복적인 클릭 작업을 자동화할 수 있는 도구인 Auto Clicker에 대해 자세히 살펴보겠습니다. 이 도구를 사용하면 시간과

SMPS란?

SMPS란?

컴퓨터에 SMPS를 선택하기 전에 SMPS란 무엇이며 다양한 효율 등급의 의미에 대해 알아보십시오.