파일 등록

Register file

레지스터 파일은 중앙처리장치(CPU) 내의 프로세서 레지스터 배열이다.레지스터 뱅킹은 하나의 이름을 사용하여 동작 모드에 따라 여러 개의 다른 물리적 레지스터에 액세스하는 방법입니다.최신의 집적회로 베이스의 레지스터 파일은, 통상, 복수의 포토를 가지는 고속의 스태틱 RAM 에 의해서 실장됩니다.이러한 RAM은 전용 읽기 및 쓰기 포트가 있는 것으로 구별되지만, 일반적인 멀티포트 SRAM은 보통 같은 포트를 통해 읽고 씁니다.

CPU의 명령 집합 아키텍처는 거의 항상 메모리와 칩 상의 기능 유닛 사이에 데이터를 스테이징하기 위해 사용되는 레지스터 세트를 정의합니다.단순한 CPU에서는 이들 아키텍처 레지스터는 CPU 내의 물리 레지스터 파일(PRF)의 엔트리에 1대 1로 대응합니다.복잡한 CPU에서는 레지스터 이름을 변경하기 때문에 실행 중에 특정 아키텍처 레지스터를 저장하는 물리 엔트리의 매핑이 동적으로 변경됩니다.레지스터 파일은 아키텍처의 일부이며 투명 캐시의 개념과는 달리 프로그래머가 볼 수 있습니다.

레지스터 뱅크 스위칭

등록 파일은 등록 [1]은행으로 함께 묶일 수 있습니다.프로세서는 복수의 레지스터 뱅크를 가질 수 있습니다.

ARM 프로세서에는 뱅크 레지스터와 뱅크되지 않은 레지스터가 모두 있습니다.모든 모드는 처음 8개의 범용 레지스터(R0~R7)에 대해 항상 동일한 물리 레지스터를 공유하지만 뱅크 레지스터(R8~R14)가 가리키는 물리 레지스터는 프로세서의 [2]동작 모드에 따라 달라집니다.특히 Fast Interrupt Request(FIQ; 고속 인터럽트 요구) 모드에는 R8에서 R12에 대한 자체 레지스터 뱅크가 있으며 아키텍처는 모든 인터럽트 모드에 프라이빗스택 포인터(R13)도 제공합니다.

x86 프로세서는 명령어가 발행되기 전에 명령어, 디코더, GPR 및 레지스터 파일(복수인 경우)을 전환하기 위해 컨텍스트 스위칭과 고속 인터럽트를 사용하지만 이는 슈퍼스칼라를 지원하는 프로세서에만 존재합니다.그러나 컨텍스트 스위칭은 레지스터 내의 ARM 레지스터 뱅크와는 전혀 다른 메커니즘입니다.

MODCOMP 및 최신 8051 호환 프로세서는 프로그램 상태 워드의 비트를 사용하여 현재 활성 레지스터 뱅크를 선택합니다.

실행

Regfile array.png

일반적인 레이아웃 규칙은 단순 배열을 세로로 읽는 것입니다.즉, 단일 워드 라인이 수평으로 실행되면 비트 셀의 행이 데이터를 수직 방향으로 실행되는 비트 라인에 놓이게 됩니다.로우스윙 읽기 비트라인을 풀스윙 로직레벨로 변환하는 센스암페어는 일반적으로 (규칙에 따라) 맨 아래에 있습니다.더 큰 레지스터 파일은 미러 및 회전된 단순 배열을 타일링하여 구성될 수 있습니다.

레지스터 파일에는 포트당 엔트리당 워드라인 1개, 읽기 포트당 비트폭당 비트라인 1개, 쓰기 포트당 비트폭당 비트라인 2개가 있습니다.각 비트 셀에는 Vdd와 Vss도 있습니다.따라서 와이어피치 면적이 포트 수의 제곱에 따라 증가하고 트랜지스터 [3]면적이 선형적으로 증가합니다.읽기 포트를 모두 갖춘 단일 레지스터 파일보다 읽기 포트 수가 적은 다중 레지스터 파일을 여러 개 갖는 것이 더 작거나 더 빠를 수 있습니다.예를 들어 MIPS R8000정수 유닛에는 9read 4 write port 32 entry 64비트레지스터 파일이 0.7µm 프로세스로 실장되어 있습니다.이는 칩을 멀리서 보면 알 수 있습니다.

레지스터를 여러 레지스터 파일로 분할하는 두 가지 일반적인 방법은 분산 레지스터 파일 구성과 분할 레지스터 파일 [3]구성입니다.

원칙적으로 다수의 읽기 및 쓰기 포트가 있는 64비트 폭의 레지스터 파일로 수행할 수 있는 모든 작업은 단일 읽기 포트와 단일 쓰기 포트를 갖춘 단일 8비트 폭의 레지스터 파일로 수행할 수 있습니다.다만, 포토가 많은 와이드 레지스터 파일의 비트 레벨의 병렬화에 의해서, 보다 고속으로 동작할 수 있기 때문에, 포토수가 적거나, 비트폭이 좁거나, 또는 그 양쪽에서 많은 사이클이 걸리는 작업을 1 사이클로 실행할 수 있습니다.

레지스터 파일의 비트 단위의 폭은 보통 프로세서 워드 크기의 비트 수입니다.경우에 따라서는 포이즌 비트와 같은 "추가" 비트를 각 레지스터에 부가하기 위해 약간 더 넓어질 수 있습니다.데이터 워드의 너비가 주소의 너비와 다른 경우(또는 68000과 같은 너비라도) 주소 레지스터는 데이터 레지스터와는 다른 레지스터 파일에 있습니다.

디코더

  • 디코더는 프리 디코더와 디코더가 적절히 분할되는 경우가 많습니다.
  • 디코더는 워드선을 구동하는 일련의 AND 게이트입니다.
  • 읽기 또는 쓰기 포트당 1개의 디코더가 있습니다.예를 들어 어레이에 4개의 읽기 포트와 2개의 쓰기 포트가 있는 경우 어레이에는 비트셀당 6개의 워드선이 있고 디코더에는 행당 6개의 AND 게이트가 있습니다.디코더는 어레이와 피치가 일치해야 합니다.그러면 AND 게이트가 넓어지거나 짧아집니다.

어레이

일반적인 레지스터 파일인 "트리플 포트"는 2개의 레지스터에서 읽고 1개의 레지스터에 동시에 쓸 수 있으며 이와 같은 비트 셀로 구성됩니다.

비트 셀의 기본 스킴:

  • 상태는 인버터 쌍에 저장됩니다.
  • 데이터는 NMOS 트랜지스터에 의해 비트선으로 읽힌다.
  • 데이터는 2개의 NMOS 스택을 통해 한쪽 또는 다른 한쪽을 접지하는 것으로 작성됩니다.
  • 즉, 읽기 포트는 비트 셀당 1개의 트랜지스터를 사용하고 쓰기 포트는 4개를 사용합니다.

다음과 같은 많은 최적화가 가능합니다.

  • 셀 간의 회선 공유(예: Vdd 및 Vss).
  • 읽기 비트선은 많은 경우 Vdd와 Vss 사이에 프리차지됩니다.
  • 읽기 비트선은 Vdd 또는 Vss까지 극히 일부만 흔들립니다.센스 앰프는 이 작은 스윙 신호를 완전한 로직 레벨로 변환합니다.비트 라인은 드라이브는 거의 없지만 기생 캐패시턴스가 크기 때문에 작은 스윙 신호가 더 빠릅니다.
  • 쓰기 비트선은 인근의 읽기 비트선과 동일하게 결합되도록 편조할 수 있습니다.쓰기 비트선은 풀스윙이기 때문에 읽기 비트선에 큰 장애를 일으킬 수 있습니다.
  • Vdd가 수평선일 경우, 그 사이클 중에 쓰기 포트 중 하나가 해당 라인을 쓰고 있으면 다른 디코더에 의해 Vdd를 끌 수 있습니다.이 최적화를 통해 쓰기 속도가 향상됩니다.
  • 레지스터 파일에서 사용되는 에너지를 줄이는 기술은 저전력[4] 전자제품에서 유용합니다.

마이크로아키텍처

대부분의 레지스터 파일에는 여러 쓰기 포트가 동시에 동일한 엔트리에 쓰는 것을 방지하기 위한 특별한 규정이 없습니다.대신 명령 스케줄링 하드웨어는 특정 사이클에서 하나의 명령만 특정 엔트리를 쓰도록 보장합니다.같은 레지스터를 대상으로 하는 복수의 명령이 발행되면, 1개를 제외한 모든 명령은 기입이 무효가 됩니다.

교차된 인버터는 쓰기 작업 후 안착하는 데 일정 시간이 걸립니다. 이 시간 동안 읽기 작업은 더 오래 걸리거나 가비지를 반환합니다.동일한 엔트리에 대한 동시 읽기 및 쓰기가 명령될 경우 읽기 포트에 쓰기 데이터를 바이패스하는 바이패스 멀티플렉서가 있는 것이 일반적입니다.이러한 바이패스 멀티플렉서는 기능 유닛 간에 아직 커밋되지 않은 결과를 전송하는 대규모 바이패스네트워크의 일부인 경우가 많습니다.

레지스터 파일은 일반적으로 해당 파일이 서비스하는 데이터 패스와 피치 매칭됩니다.피치 매칭은 많은 버스가 데이터 패스 턴 코너를 통과하는 것을 방지하고 많은 영역을 사용합니다.단, 모든 유닛은 같은 비트피치를 가져야 하므로 데이터 패스 내의 모든 유닛은 가장 넓은 유닛에 의해 강제되는 비트피치로 끝나기 때문에 다른 유닛의 영역을 낭비할 수 있습니다.레지스터 파일은 쓰기 포트당 비트당 와이어가 2개 있고 모든 비트선이 모든 비트 셀에서 실리콘에 접촉해야 하므로 데이터 패스의 피치를 설정하는 경우가 많습니다.

데이터 패스에 여러 유닛이 있는 머신에서는 2개의 데이터 패스를 나란히 배치하여 영역을 절약할 수 있습니다.각 데이터 패스의 비트피치는 1개의 데이터 패스보다 작습니다.이 경우 보통 각 데이터 경로마다 하나씩 여러 개의 레지스터 파일을 강제로 복사합니다.

예를 들어 Alpha 21264(EV6)는 "섀도 레지스터 파일 아키텍처"를 구현한 최초의 대형 마이크로 아키텍처입니다.프론트 엔드에 정수 레지스터 파일의 복사본 2개와 부동소수점 레지스터의 복사본 2개(미래 및 스케일링된 파일, 각각 2개의 읽기 포트와 2개의 쓰기 포트를 포함)가 있으며 컨텍스트 전환 중에 두 개 간에 데이터를 전파하는 데 추가 사이클이 소요되었습니다.발행 로직은 둘 사이의 연산 포워딩 데이터의 수를 줄이고 정수 성능을 크게 개선하려고 시도했으며, 투기적 실행으로 슈퍼스케일러 아키텍처에서 제한된 수의 범용 레지스터의 영향을 줄이는 데 도움이 되었다.이 설계는 나중에 SPARC, MIPS 및 이후의 x86 구현에 의해 채택되었습니다.

MIPS는 여러 레지스터 파일도 사용합니다.R8000 부동소수점 유닛에는 각각4개의 쓰기 포트와4개의 읽기 포트가 있는 부동소수점 레지스터 파일의 복사본이 2개 있으며 컨텍스트스위치를 사용하여 두 복사본을 동시에 씁니다.그러나 정수 연산은 지원되지 않았으며 정수 레지스터 파일은 그대로 유지되었습니다.나중에 섀도 레지스터 파일은 임베디드 시장을 위해 새로운 디자인에서 폐기되었습니다.

SPARC는 하이엔드 라인에도 "섀도 레지스터 파일 아키텍처"를 사용합니다.최대 4개의 정수 레지스터 파일(미래, 폐기, 스케일링 및 스크래치 포함, 각각 7개의 읽기 4개의 쓰기 포트 포함)과 2개의 부동소수점 레지스터 파일 복사본이 있습니다.그러나 Alpha 및 x86과는 달리 이들은 순서가 맞지 않는 유닛과 레지스터 파일 이름 변경 직후에 폐기 유닛으로 백엔드에 배치됩니다.섀도 레지스터는 명령 가져오기 및 디코딩 단계에서 명령을 로드하지 않으므로 이 설계에서는 컨텍스트 스위치가 필요하지 않습니다.

IBM은 많은 주요 마이크로프로세서와 동일한 메커니즘을 사용하여 레지스터 파일을 디코더와 깊이 병합하지만 레지스터 파일은 디코더 측과 독립적으로 작동하며 Alpha 및 x86과는 다른 컨텍스트 스위칭을 포함하지 않습니다.대부분의 레지스터 파일은 전용 디코더뿐만 아니라 스레드 수준까지 제공됩니다.예를 들어 POWER8에는 최대 8개의 명령 디코더가 있지만 컨텍스트 스위치가 없기 때문에 병렬 명령어를 다른 레지스터 파일 간에 사용할 수 없기 때문에 각각 32개의 범용 레지스터 파일(읽기 포트 4개 및 쓰기 포트 4개)을 사용하여 동시에 멀티스레딩을 수행할 수 있습니다.

x86 프로세서 라인에서는 일반적인 486 이전 CPU에는 개별 레지스터 파일이 없습니다.이는 모든 범용 레지스터가 디코더와 직접 동작하며 x87 푸시 스택은 부동소수점 유닛 자체에 배치되어 있기 때문입니다.Pentium에서 일반적인 Pentium 호환 x86 프로세서는 6개의 범용 레지스터, 4개의 컨트롤 레지스터, 8개의 디버깅 레지스터 (2개의 예약), 1개의 스택 포인터 레지스터, 1개의 명령 포인터, 1개의 플래그 레지스터 및 6개의 세그먼트 레지스터를 포함하는 싱글 포트 아키텍처 레지스터 파일의 복사본과 통합됩니다.를 클릭합니다.

디폴트로는 8 x87 FP 푸시다운스택의 1 카피로, MMX 레지스터는 x87 스택에서 가상으로 시뮬레이트되어 스택을 존재시키려면 x86 레지스터가 필요합니다.P6에서는 명령어를 개별적으로 저장하여 초기 파이프라인 단계에서 병렬로 실행한 후 마이크로 오퍼레이션으로 디코딩하여 순서가 맞지 않는 실행으로 이름을 변경할 수 있다.P6부터 모든 레지스터 파일은 데이터를 전파하기 위해 추가 사이클이 필요하지 않습니다.아키텍처나 부동소수점 등의 레지스터 파일은 코드 버퍼와 디코더 사이에 배치되어 "retire buffer", "Reorder buffer" 및 OoOE"라고 불리며 링 버스(16바이트) 내에서 연결됩니다.레지스터 파일 자체는 여전히 하나의 x86 레지스터 파일과 하나의 x87 스택으로 유지되며 둘 다 폐기 저장으로 사용됩니다.x86 레지스터 파일을 듀얼 포트로 확장하여 결과 스토리지를 위한 대역폭을 늘렸습니다.debug/condition code/control/unnamed/flag와 같은 레지스터는 메인 레지스터 파일에서 제거되어 마이크로 op ROM과 명령 시퀀서 사이의 개별 파일에 배치되었습니다.세그먼트 레지스터와 같은 액세스 불가능한 레지스터만 범용 레지스터 파일(명령 포인터 제외)에서 분리되며 레지스터 이름 변경 및 순서 위반 실행을 용이하게 하기 위해 스케줄러와 명령 할당자 사이에 배치됩니다.x87 스택은 128비트 XMM 레지스터가 Pentium III에서 첫선을 보인 후 부동소수점 레지스터 파일과 병합되었지만 XMM 레지스터 파일은 여전히 x86 정수 레지스터 파일과 별도로 배치되어 있습니다.

이후 P6 구현(Pentium M, Yonah)에서는 듀얼 포트 정수 아키텍처 레지스터 파일의 복사본이 2개까지 확장되고 컨텍스트 스위치(향후 정수와 부동 소수점 간에 사용되는 트릭을 사용하여 폐기된 파일 및 스케일링된 파일)로 구성된 "섀도 레지스터 파일 아키텍처"가 도입되었습니다.이는 마이크로 오퍼레이션 퓨전 도입 후 x86 아키텍처에 존재했던 레지스터 병목 현상을 해결하기 위해 이루어졌지만, 여전히 파일당 총 32바이트 용량의 엔트리 32비트 아키텍처 레지스터가 8개 있습니다(세그먼트 레지스터와 명령 포인터는 프로그램으로 액세스할 수 없지만 파일 내에 남아 있습니다).추측 파일두 번째 파일은 확장 섀도 레지스터 파일로 제공되며 컨텍스트 스위치가 없으면 확장 파일이 일부 명령을 독립적으로 저장할 수 없습니다.SSE2/SSE3/SSE3의 일부 명령에서는 정수 동작에 이 기능이 필요합니다.예를 들어 PSHUFB, PMADDUBSW, PHSUBW, PHSUBD, PHSUBSW, PHADD, PHADD의 로딩이 필요합니다.대부분의 경우 두 번째 파일은 스케일 폐기 파일로 제공됩니다.Pentium M 아키텍처에는 3개의 디코더와 공유되는 듀얼 포트 부동소수점 레지스터 파일(8엔트리 MM/XM)이 아직1개 있고 섀도우 레지스터 파일 아키텍처에는 부동소수점 함수가 포함되어 있지 않기 때문에 FP 레지스터 파일에는 섀도우 레지스터 파일이 포함되어 있지 않습니다.P6 이후의 프로세서에서 아키텍처 레지스터 파일은 외부이며 레지스터 이름 변경/순서 변경 버퍼를 위해 내부 코어에 위치한 내부 레지스터 파일과 달리 폐기된 파일 다음에 프로세서의 백엔드에 위치한다.단, Core 2에서는 현재 "레지스터 에일리어스 테이블"(RAT)이라고 불리는 유닛에 격납되어 명령어 어로케이터와 함께 배치되어 있지만 레지스터 사이즈는 폐기와 동일합니다.Core 2는 내부 링 버스를 24바이트(3개 이상의 명령을 디코딩할 수 있음)로 늘리고 레지스터 파일을 듀얼 포트(1개의 읽기/1개의 쓰기)에서 쿼드 포트(2개의 읽기/2개의 쓰기)로 확장했습니다.레지스터는 액세스 할 수 없기 때문에 32비트 및 32바이트에 8개의 엔트리가 남아 있습니다(6개의 세그먼트 레지스터와 1개의 명령 포인터를 포함하지 않음).파일 사이즈의 합계를 나타내는 코드/지침에 관계없이 파일 사이즈의 합계를 나타내는16개의 엔트리로 확장되어 파일당 총 128바이트 크기입니다.Pentium M에서 파이프라인 포트와 디코더가 증가했지만 코드 버퍼가 아닌 할당자 테이블로 배치되어 있습니다.FP XMM 레지스터 파일도 쿼드 포트(2 읽기/2 쓰기)로 증가합니다.또한 섀도우 레지스터 파일 아키텍처에 부동소수점/SSE 기능이 포함되어 있지 않기 때문에 레지스터는 32비트에서 8엔트리로, 레지스터는 x64 모드에서 16엔트리로 확장되고 숫자는 1로 유지됩니다.

Nehalem 및 그 이후의 프로세서와 같은 이후의 x86 구현에서는 정수 및 부동소수점 레지스터는 이제 통합 옥타포트(6개의 읽기 및 2개의 쓰기) 범용 레지스터 파일(32비트에서는 8+8 및 x64에서는 16+16)에 통합되며 레지스터 파일은 확장되어 "섀도 레지스터 파일 아키텍처"를 통해 2로 확장됩니다.vorite는 하이퍼스레딩을 실행하며 각 스레드는 디코더에 독립된 레지스터 파일을 사용합니다.이후 Sandy Bridge 이후는 리오더 버퍼로 디코딩하기 전에 섀도 레지스터 테이블과 아키텍처 레지스터를 훨씬 더 크고 더 진보된 물리 레지스터 파일로 대체했습니다.Sandy Bridge 이후로는 더 이상 건축 등록부를 가지고 다니지 않게 되었습니다.

Atom 라인은 P5의 현대적 단순 리비전입니다.여기에는 스레드 및 디코더가 포함된 레지스터 파일 공유의 단일 복사본이 포함됩니다.레지스터 파일은 듀얼 포트 설계로 8/16 엔트리 GPRS, 8/16 엔트리 디버깅레지스터 및 8/16 엔트리 조건 코드가 같은 파일에 통합되어 있습니다.단, 8엔트리 64비트 섀도우 베이스 레지스터와 8엔트리 64비트 네임드 레지스터는 원래 P5 설계와는 달리 현재 메인 GPR에서 분리되어 실행 유닛 뒤에 배치되어 있으며 이들 레지스터의 파일은 싱글 포트이며 Core/Core2(섀도)에 있는 스케일 섀도우 레지스터 파일과 같은 명령에 노출되지 않는다.ow 레지스터 파일은 아키텍처 레지스터로 작성되며, Bonnell은 "섀도 레지스터 파일 아키텍처"가 없기 때문에 이름을 변경할 수 없습니다.다만, Bonnell 아키텍처에서는 순서가 어긋나는 실행이 없기 때문에, 이 파일을 사용할 수 있습니다.또한 스레드당 XMM 부동소수점 레지스터 파일의 복사본이 하나씩 있었습니다.Nehalem과의 차이점은 Bonnell에는 통합 레지스터 파일이 없고 하이퍼스레딩 전용 레지스터 파일이 없다는 것입니다.대신 Bonnell은 스레드가 고장나지 않았음에도 불구하고 별도의 이름 변경 레지스터를 사용합니다.Bonnell과 마찬가지로 LarrabeeXeon Phi도 각각 1개의 범용 정수 레지스터 파일만 가지고 있지만 Larrabee에는 최대 16개의 XMM 레지스터 파일(파일당8엔트리), Xeon Phi에는 최대 128개의 AVX-512 레지스터 파일이 있으며 각각 벡터 명령용 32개의 512비트 ZM 레지스터가 포함되어 있습니다.

인텔의 x86 라인 중에는 Geode GXVortex86 내부 설계에 레지스터 파일이 없는 것도 있습니다.또, 펜티엄 호환 프로세서나 80x86 초기의 리버스 엔지니어링 프로세서가 아닌 임베디드 프로세서가 많이 있습니다.따라서 대부분의 디코더에는 레지스터 파일이 없지만 GPR은 개별적으로 사용됩니다.반면 펜티엄4는 x86 GPR이 구조 내에 존재하지 않았기 때문에 디코더용 레지스터 파일이 없습니다.이는 펜티엄4가 아치를 대체하기 위해 물리적으로 통합된 이름 변경 레지스터 파일을 도입했기 때문입니다(Sandy Bridge와 유사하지만 이름 지정하기 전에 레지스터를 사용할 수 없기 때문에 약간 다릅니다).x86 디코딩 방식을 건너뜁니다.대신 ALU 이전 및 결과 이후 SSE2/SSE3/SSE3는 정수 동작에도 동일한 메커니즘을 사용합니다.

K6와 같은 AMD의 초기 설계에는 Intel과 같은 레지스터 파일이 없으며 레지스터 파일이 올바르게 기능하기 위해 필요한 컨텍스트 스위치와 바이패스 인버터가 없기 때문에 "섀도 레지스터 파일 아키텍처"를 지원하지 않습니다.대신 전용 정수 디코더와 플로팅 디코더를 사용하여 OoOE CPU의 이름 변경 레지스터 테이블에 직접 링크하는 별도의 GPR을 사용합니다.이 메커니즘은 인텔의 Pentium 이전 프로세서 라인과 유사합니다.예를 들어 K6 프로세서는 x86에 직접 링크하는4개의 int(8 엔트리 임시 스크래치 레지스터 파일1개 + 미래의 8 엔트리 페치 레지스터 파일1개 + 8 엔트리 이름 없는 레지스터 파일8개)와 2개의 FP 이름 변경 레지스터 파일2개(8 엔트리 x87 ST 파일1개는 fadd, 1개는 fmov)를 가진다.정수 이름 변경을 위한 EAX와 부동소수점 이름을 바꾸기 위한 XMM0 레지스터는 나중에 Athlon은 프런트 엔드에 "섀도 레지스터"를 포함하였고, 디코딩하기 전에 정수 순서로 최대 40개의 엔트리의 통합 레지스터 파일을 확장하였습니다. 레지스터 파일에는 8개의 엔트리 스크래치 레지스터 파일 + 16개의 미래 GPR 레지스터 파일 + 16개의 이름 없는 GPR 레지스터 파일이 포함되어 있습니다.이후 AMD 설계에서는 섀도 레지스터 설계를 포기하고 개별 GPR 다이렉트 링크 설계를 사용하는 K6 아키텍처를 선호합니다.Phenom과 마찬가지로 GPR에 직접 링크된 물리 레지스터 파일에 3개의 int 레지스터 파일과 2개의 SSE 레지스터 파일이 있습니다., Puldozer에서는 1개의 정수 + 1개의 부동소수로 축소됩니다.초기 AMD 설계와 마찬가지로 Cyrix, VIA, DM&P 및 SIS와 같은 x86 제조업체도 대부분 동일한 메커니즘을 사용했기 때문에 CPU의 레지스터 이름을 바꾸지 않으면 정수 성능이 떨어졌습니다.Cyrix나 AMD와 같은 기업은 병목 현상을 줄이기 위해 캐시 크기를 늘려야 했습니다.AMD의 SSE 정수 연산은 Core 2 및 Pentium 4와는 다른 방식으로 작동합니다. 즉, 별도의 이름 변경 정수 레지스터를 사용하여 디코드 단계 바로 전에 값을 로드합니다.이론적으로는 인텔의 SSE 구현보다 짧은 파이프라인이 필요하지만 일반적으로 브랜치 예측 비용은 인텔보다 훨씬 높고 손실률이 높아 명령 전체에 관계없이 SSE 명령이 실행되려면 적어도2 사이클이 필요합니다.AMD의 초기 구현에서는 실행할 수 없었습니다.인텔의 실장처럼 SSE 명령어 세트로 FP와 Int를 모두 사용할 수 있습니다.

Alpha, SPARCMIPS와는 달리 한 번에 하나의 피연산자를 로드/페치할 수 있는 레지스터 파일은 여러 개 필요합니다.한편, ARM 프로세서는 명령 로드/가져오기 위해 여러 레지스터 파일을 통합하지 않습니다.ARM GPR에는 명령어세트에 특별한 목적이 없습니다(ARM ISA에는 어큐뮬레이터, 인덱스 및 스택/베이스 포인트가 필요하지 않습니다).레지스터에는 어큐뮬레이터가 없으며 베이스/스택 포인트는 엄지 모드에서만 사용할 수 있습니다).GPR은 하나의 레지스터에 들어갈 수 있을 만큼 작은 코드 크기로 독립적으로 여러 명령을 전파하고 저장할 수 있으며 아키텍처 레지스터는 테이블로 작용하며 디코더 간의 간단한 뱅크 전환으로 모든 디코더/명령과 공유됩니다.ARM과 다른 설계의 주요 차이점은 ARM은 슈퍼스칼라에서 추가 레지스터 파일을 필요로 하지 않고 퀵뱅크 스위칭으로 동일한 범용 레지스터 상에서 실행할 수 있다는 것입니다.x86은 ARM과 동일한 메커니즘을 공유하여 GPR이 데이터를 개별적으로 저장할 수 있지만 파일당 GPR이 너무 작기 때문에 (32비트 모드에서는 8개, 64비트에서는 16개), 데이터에서는 32비트에서는 ARM의 13개, 64비트에서는 31개)3개 이상의 관련되지 않은 명령어가 저장되면 데이터 의존성에 직면하게 됩니다.x86의 프런트 엔드는 ARM에 비해 훨씬 크고 전력 소비가 많기 때문에 디코더에 공급하는 복수의 레지스터 파일이 없습니다(예를 들어 Pentium M & Core 2 Duo, Bay Trail).일부 서드파티제 x86 등가 프로세서는 전용 레지스터 파일 아키텍처가 없기 때문에 ARM과 경쟁할 수 없게 되었습니다.특히 AMD, Cyrix 및 VIA에서는 레지스터 이름 변경 및 잘못된 실행이 없으면 합리적인 퍼포먼스를 얻을 수 없습니다.이 때문에 모바일 경쟁 제품에서는 인텔 Atom만이 순서대로 배치된 x86 프로세서 코어가 됩니다.이는 x86 Nehalem 프로세서가 정수 레지스터와 부동소수점 레지스터를 모두 하나의 파일로 병합할 때까지의 것으로, 내부 코어의 이름이 바뀌기 전에 프런트 엔드에 대규모 물리 레지스터 테이블과 확장 할당기 테이블을 도입할 때까지의 것입니다.

등록명 변경

레지스터 이름을 변경하는 프로세서는 각 기능 유닛이 물리 레지스터 파일의 서브셋에 쓰도록 설정할 수 있습니다.이렇게 하면 비트 셀당 여러 개의 쓰기 포트가 필요하지 않으므로 영역을 크게 절약할 수 있습니다.결과적으로 생성되는 레지스터 파일, 즉 단일 쓰기 포트가 있는 레지스터 파일 스택은 복제 및 읽기 포트 서브셋을 통해 이점을 얻을 수 있습니다.제한 시, 이 기술은 각 기능 장치에 대한 입력에 1-쓰기, 2-읽기 regfile 스택을 배치합니다.포트 수가 적은 regfile은 트랜지스터 영역이 대부분을 차지하기 때문에 이 기술을 이 한계까지 밀어붙이지 않는 것이 좋습니다.단, 마찬가지로 유용합니다.

창 등록

SPARC ISA는 레지스터 창을 정의합니다.이 창에서는 레지스터의 5비트 아키텍처 이름이 실제로는 수백 개의 엔트리가 있는 훨씬 큰 레지스터 파일의 창을 가리킵니다.수백 개의 엔트리가 있는 다중 정렬 레지스터 파일을 구현하려면 넓은 영역이 필요합니다.레지스터 창은 이동할 때 16개의 레지스터로 슬라이드하기 때문에 아키텍처 레지스터 이름이 더 큰 어레이 내의 소수의 레지스터만 참조할 수 있습니다.예를 들어 아키텍처 레지스터 r20은 물리 파일에 7개의 창이 있는 경우 물리 레지스터 #20, #36, #52, #68, #84, #100, #116만 참조할 수 있습니다.

영역을 절약하기 위해 일부 SPARC 구현에서는 32개의 엔트리 레지스터 파일을 구현하고 있으며, 각 셀에는 7개의 "비트"가 있습니다.외부 포트를 통해 읽고 쓸 수 있는 것은 1개뿐이지만 비트의 내용은 회전할 수 있습니다.회전은 레지스터 창의 이동을 단일 사이클로 수행합니다.스테이트 무브먼트를 실현하는 와이어의 대부분은 로컬이기 때문에 적은 전력으로 엄청난 대역폭이 가능합니다.

기술은 R10000 레지스터 이름 변경 맵핑파일에서도 사용됩니다.이 맵핑파일에는 각 물리 레지스터의 6비트의 가상 레지스터 번호가 저장됩니다.이름 변경 파일에서는 브랜치를 취득할 때마다 이름 변경 상태가 체크 포인트 되어 있기 때문에 브랜치가 잘못 예측된 것을 검출했을 때는 이전 이름 변경 상태를 1 사이클로 회복할 수 있습니다.(등록 이름 변경 참조).

「 」를 참조해 주세요.

레퍼런스

  1. ^ Wikibooks: 마이크로프로세서 설계/등록 파일 #등록 뱅크.
  2. ^ "ARM Architecture Reference Manual" (PDF). ARM Limited. July 2005. Retrieved 13 October 2021.
  3. ^ a b 요한 얀센."트랜스포트 트리거 아키텍처를 위한 컴파일러 전략"2001년 페이지 169 페이지 171-173
  4. ^ Aneesh Aggarwal과 M의 "에너지 효율이 뛰어난 비대칭 포트 레지스터 파일"프랭클린.2003.

외부 링크