답변:
뱅킹이라는 단어는 레지스터에 적용될 때 두 가지 의미로 사용됩니다.
StackOverflow 질문과 관련된 의미는 기능에서 (메모리) 뱅크 스위칭 (일부 8 비트 및 16 비트 프로세서 에서 사용)에서의 사용과 유사 합니다 . 레지스터 모음의 이름은 다른 물리적 레지스터 모음에 매핑됩니다. ARMv7은 16 개의 GPR 중 7 개에 스택 뱅크 1 개와 스택 레지스터 레지스터 및 링크 레지스터에 5 개의 뱅크를 추가로 제공합니다 (ARM은 링크 레지스터를 사용하여 인터럽트에서 복귀하는 데 사용할 PC를 저장합니다). Itanium은 31 개의 정적 GPR 중 16 개에 하나의 추가 뱅크를 제공합니다. (MIPS는 31 개의 GPR 전체 세트를 "섀도우 레지스터 세트"라고합니다.)
메모리 뱅크 스위칭과 달리,이 유형의 레지스터 뱅킹의 주요 목적은 (일반적으로) 주소 지정 가능 스토리지를 확장하지 않고 레지스터 값을 저장하고 인터럽트 핸들러가 사용하는 값을로드하고 원본을 복원 할 필요가 없어보다 빠른 인터럽트 처리를 제공하는 것입니다. 값을 등록하고 인터럽트 처리를 단순화합니다.
(응용 프로그램의 스택을 사용하여 레지스터 상태를 저장하면이 스택에 할당 된 메모리가 오버플로 될 수 있으므로 예외가 발생하여 상태 저장을 처리해야하는 예외가 발생합니다. 스택의 한계를 지나서 즉시 메모리 페이지를 쓸 수있는 경우 응용 프로그램이 아닌 인터럽트 처리기의 권한 상승으로 인해 응용 프로그램이 쓰기 권한이없는 페이지에 효과적으로 기록하는 경우 일부 ABI는 인터럽트에서 휘발성으로 하나 이상의 레지스터를 정의하여이 문제를 피했습니다. 애플리케이션 상태를 클로버 링하지 않고 상태를 저장하기위한 포인터를로드하는 핸들러이지만 뱅크 레지스터와 달리 이러한 소프트웨어 정의 인터럽트 휘발성 레지스터는 애플리케이션 소프트웨어에 의해 변경되지 않은 것으로 신뢰할 수 없습니다.)
Rajiv A. Ravindran et al. (예 : "윈도우 레지스터 파일을 사용하여 저전력 프로세서에서 유효 레지스터 수 늘리기"와 같이 사용 가능한 레지스터 수를 확장하기 위해 이러한 레지스터 뱅크를 고정 창으로 사용하는 것이 제안되었습니다. 2003. Itanium 및 SPARC에서와 같이 함수 호출에 대한 레지스터 저장 및 복원 오버 헤드를 피하기 위해 사용되는 레지스터 스택과 유사한 점에 주목할 수도 있습니다 ( "레지스터 창"이라는 용어를 사용함). 이러한 메커니즘은 일반적으로 레지스터 이름을 바꾸지 않고 레지스터 이름을 변경합니다. 밖.)
하드웨어 측면에서, 뱅크 디코드는 명령어 디코드에서 레지스터의 이름을 바꾸어 구현할 수 있습니다. ARM의 비교적 복잡한 뱅킹 시스템의 경우 이것이 선호되는 메커니즘 일 것입니다. Itanium에서 두 개의 레지스터로 구성된 단일 추가 뱅크로 사용되는 것과 같은보다 간단한 뱅킹 시스템의 경우, 이름 바꾸기를 레지스터 파일 자체의 색인화에 통합하는 것이 실용적 일 수 있습니다. (물론 이것은 비 순차적 실행을 지원하는 데 사용되는 특정 형태의 이름 변경과 호환되지 않습니다.)
서로 다른 뱅크에 동시에 액세스 할 수 없음을 인식함으로써이 메커니즘을 사용하는 영리한 최적화는 "3D 레지스터"를 사용하여 포트가 높은 레지스터 파일의 (와이어 제한) 영역 오버 헤드를 줄일 수 있습니다. (이 기술은 SPARC의 레지스터 창 ( "Superscalar 프로세서의 3 차원 레지스터 파일", Tremblay et al., 1995)의 맥락에서 제안되었으며 SoEMT를 위해 인텔에서 변형을 사용했습니다. ""멀티 스레드, 패리티로 보호됨) 듀얼 코어 Itanium 제품군 프로세서의 128 워드 레지스터 파일 ", Fetzer et al., 2005.)
뱅킹이라는 용어가 레지스터에 사용되는 두 번째 의미는 레지스터 세트를 그룹 (뱅크)으로 분할하여 각각 병렬로 액세스 할 수 있음을 의미합니다. 4 개의 뱅크를 사용하면 4 배로 지원되는 최대 액세스 수가 증가하여 각 뱅크는 주어진 유효 액세스 수에 대해 더 적은 액세스 포트 (영역 및 에너지 사용 감소)를 지원할 수 있습니다. 그러나 특정주기의 액세스가 여러 은행에 균등하게 분배되지 않는 한 최대 액세스 수는 달성되지 않습니다. 원하는 액세스 수에 비해 많은 수의 뱅크가 있더라도 뱅크 충돌은 최악의 경우 실제 액세스 수를 단일 뱅크가 제공하는 포트 수로 제한 할 수 있습니다.
은행 등록 파일에 대한 많은 학술 논문이 있습니다 ( Google 학술 검색 검색은행 충돌의 영향을 줄이기 위해 몇 가지 일반적인 기술이 제안되었습니다. 가장 명백한 기술은 명령을 버퍼링하여 (비 순차적 실행에 대해 수행됨) 뱅크 충돌의 통계적 평균을 제공하는 것입니다. 명령을 실행할 준비가되기 전에 레지스터 피연산자를 읽을 수도 있습니다 (예 : 다른 피연산자가 아직 준비되지 않았거나 구조적 위험으로 인해 실행이 지연되는 경우). 은행에 레지스터를 할당하면 충돌 가능성을 줄이기 위해 예상되는 사용에 대한 정보를 활용할 수 있습니다. (소프트웨어는 원하는 방식으로 레지스터를 우선적으로 사용함으로써 도움을 줄 수 있습니다.) 가상 물리 레지스터 이름을 사용하면 값이 레지스터에 저장 될 때까지 물리 레지스터 이름 (및 뱅크)의 할당을 지연시킬 수 있습니다.
이러한 유형의 뱅킹은 많은 수의 액세스 포트의 환영을 제공하기 때문에 의사 멀티 포팅이라고도합니다. 물리적 구조는 다른 이유로 별도의 메모리 배열로 분할되기 때문에이 기술은 일반적으로 캐시에 사용됩니다.
(이러한 뱅킹의 대안은 레지스터 파일 복제입니다. 두 개의 레지스터 파일 사본을 사용하면 동일한 수의 쓰기 포트가 필요하지만 각 사본에 절반의 읽기 포트가 필요합니다.이 기술은 POWER2 및 Alpha 21264에서 사용되었습니다. 고성능 프로세서에서 일반적으로 사용됩니다.)
이러한 두 가지 유형의 뱅킹을 은행 선택이 시간이 지남에 따라 확산되는 시간적 뱅킹 (고속 인터럽트에 대한 ARM의 뱅크 레지스터와 같은)과 뱅크 액세스가 시간에 동시에 가능하지만 공간적으로 분산되는 공간 뱅킹으로 구분하는 것이 도움이 될 수 있습니다.
임시 뱅킹은 일반적으로 소프트웨어에 노출되며 인터럽트의 오버 헤드 (및 복잡성)를 줄이는 데 사용됩니다. 결론적으로 Switch-on-Event-MultiThreaded 프로세서의 스레드 전환은 인터럽트 처리와 매우 유사하며 유사한 메커니즘을 사용하여 오버 헤드를 줄일 수 있습니다.
공간 뱅킹은 ISA의 일부가 아닙니다 (Itanium은 짝수 및 홀수 레지스터 번호를 사용하기 위해로드 및 저장 부동 소수점 레지스터 쌍이 필요했지만 레지스터 회전을 사용하는 경우 보장되지 않음). 레지스터 파일 액세스 요구 사항) 및 사이클 당 더 많은 레지스터 액세스를 제공하는 비용을 줄이는 데 사용됩니다.