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

컴퓨터는 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 실행은 잘못된 종속성을 숨기기 위해 레지스터 이름 변경에 의존합니다. 이러한 명령이 실제로 잘못된 순서로 실행되더라도 나머지 컴퓨터에서 이 사실을 숨기는 방식으로 레지스터의 이름이 변경됩니다.



Leave a Comment

Powerbeats Pro가 케이스에서 충전되지 않을 때 해야 할 일

Powerbeats Pro가 케이스에서 충전되지 않을 때 해야 할 일

Powerbeats Pro가 충전되지 않으면 다른 전원 소스를 사용하고 귀마개를 청소하세요. 귀마개를 충전하는 동안 케이스를 열어 두세요.

3D 프린팅 기본: 필수 유지보수 체크리스트

3D 프린팅 기본: 필수 유지보수 체크리스트

장비를 좋은 상태로 유지하는 것은 필수입니다. 다음은 3D 프린터를 최상의 상태로 유지하기 위한 유용한 팁입니다.

Canon Pixma MG5220: 잉크 없이 스캔하기

Canon Pixma MG5220: 잉크 없이 스캔하기

Canon Pixma MG5220에서 잉크가 없을 때 스캔을 활성화하는 방법입니다.

노트북 과열의 5가지 이유

노트북 과열의 5가지 이유

노트북이 과열되는 몇 가지 가능한 이유와 이 문제를 피하고 장치를 시원하게 유지하는 팁과 요령을 알아보세요.

데스크탑 및 노트북 PC에 SSD 설치하는 방법

데스크탑 및 노트북 PC에 SSD 설치하는 방법

PC의 내부 저장 공간을 업그레이드하기 위해 SSD를 구입했지만 설치 방법을 모르겠습니까? 지금 이 기사를 읽어보세요!

GeForce Now 오류 코드 0xC272008F 수정 방법

GeForce Now 오류 코드 0xC272008F 수정 방법

게임의 밤을 준비하고 있으며, "Star Wars Outlaws"를 GeForce Now 스트리밍 서비스에서 플레이하려고 합니다. Ubisoft 게임을 다시 시작할 수 있도록 GeForce Now 오류 코드 0xC272008F를 수정하는 방법을 알아보세요.

3D 프린팅 기초: 3D 프린터 유지보수 팁

3D 프린팅 기초: 3D 프린터 유지보수 팁

3D 프린터를 효과적으로 유지하는 것은 최상의 결과를 얻는 데 매우 중요합니다. 기억해야 할 중요한 팁을 소개합니다.

프린터의 IP 주소 찾는 방법

프린터의 IP 주소 찾는 방법

프린터의 IP 주소를 찾는 데 어려움이 있습니까? 우리는 그것을 찾는 방법을 보여줄 것입니다.

Samsung 휴대폰에서 AirPods 사용하기

Samsung 휴대폰에서 AirPods 사용하기

Samsung 휴대폰에 AirPods 구입 여부를 고민하고 있다면, 이 가이드가 도움이 될 것입니다. 가장 간단한 질문은 호환성 여부입니다.

Apple Watch를 하드 리셋하는 방법

Apple Watch를 하드 리셋하는 방법

Apple Watch 하드 리셋 및 공장 초기화 방법을 단계별로 설명합니다. 소프트 리셋부터 하드 리셋까지, 모든 모델에 대한 가이드를 제공합니다.