KR100974750B1 - 스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장버퍼 - Google Patents
스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장버퍼 Download PDFInfo
- Publication number
- KR100974750B1 KR100974750B1 KR1020087012079A KR20087012079A KR100974750B1 KR 100974750 B1 KR100974750 B1 KR 100974750B1 KR 1020087012079 A KR1020087012079 A KR 1020087012079A KR 20087012079 A KR20087012079 A KR 20087012079A KR 100974750 B1 KR100974750 B1 KR 100974750B1
- Authority
- KR
- South Korea
- Prior art keywords
- registers
- procedure
- backing storage
- storage buffer
- register file
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/16—Protection against loss of memory contents
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30116—Shadow registers, e.g. coupled registers, not forming part of the register space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
- Position Fixing By Use Of Radio Waves (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
백킹 저장 버퍼가 스택형 레지스터 파일 아키텍처의 백킹 저장장치 및 물리 레지스터 파일 사이에 삽입된다. 레지스터 세이브 엔진은 비활성 프로시저들에 할당된 레지스터들로부터의 데이터를 임시로 온-칩 저장하여, 새로운 프로시저들에 재할당될 레지스터들을 해제한다. 프로시저들이 완료되고 이전의 비활성 프로시저들로 제어를 리턴할 때, 레지스터 세이브 엔진은 백킹 저장 버퍼에서부터 물리 레지스터 파일의 레지스터들까지 비활성 프로시저와 관련된 데이터를 검색하며, 레지스터들은 비활성 프로시저에 재할당된다. 레지스터 세이브 엔진은 백킹 저장 버퍼로부터의 데이터를 백킹 저장장치로 세이브하며, 이는 백킹 저장 버퍼가 완전히 채워지고 물리 레지스터 파일로부터 더 많은 데이터가 세이브되어야 할 경우에만 오프-칩 RAM 액세스에 대해 요구된 과도한 전력 소비 및 현저한 성능 저하를 초래한다.
Description
본 발명은 일반적으로 프로세서 분야, 특히 스택형 레지스터 파일 아키텍처의 레지스터 세이브 엔진용 백킹 저장 버퍼에 관한 것이다.
RISC 프로세서는 비교적 작은 명령 세트들에 의하여 특성화되며, 각각의 명령은 산술, 논리 또는 로드/저장 연산과 같은 단일 명령을 수행한다. 산술 및 논리 명령들은 피연산자들을 하나 이상의 범용 레지스터들(GPR)로부터 획득하고, 결과치들을 하나 이상의 범용 레지스터들(GPR)에 저장한다. GPR들은 아키텍처 레지스터들이다. 즉, GPR들은 명령 세트 아키텍처에서 명백하게 식별된 개별 메모리 위치들을 포함하며, 명령들에 의하여 직접 어드레싱된다.
GPR들은 종종 고속 멀티-포트 레지스터들의 어레이로서 하드웨어에 구현되며, 이러한 레지스터들의 각각은 명령 세트(예컨대, 32 또는 64 비트)에 의하여 정의된 워드 폭을 가진다. 물리 레지스터들의 이러한 어레이는 물리 레지스터 파일로 지칭된다. 직접-매핑 레지스터 구현에서는 물리 레지스터 파일의 레지스터 수가 아키텍처 GPR 수와 정확하게 매칭되고 각각의 논리 GPR 식별자가 특정 하드웨어 레지스터에 매핑된다. 고성능을 위해 그리고 슈퍼스칼라 파이프라인들을 지원하기 위해, 많은 최신 프로세서들은 물리 레지스터 파일의 물리 레지스터들로부터 논리적 GPR 식별자들을 분리한다. 레지스터 재명명(renaming), 재정렬 버퍼들 등은 물리 레지스터들로부터 논리적 GPR 식별자들을 분리하기 위한 공지된 기술들이다. 직접 매핑되든 재명명되든, 다수의 소프트웨어 프로시저(procedure)들에서 물리 레지스터 파일의 관리는 설계가 어려우며 성능 장애를 유발한다.
대부분의 최신 소프트웨어는 본래 모듈러(modular)이다. 즉, 어떤 프로시저는 다른 프로시저(함수, 서브루틴, 서브-모듈 등으로서 다양하게 지칭됨)를 "호출(call)"할 수도 있고 또는 다른 프로시저로 제어를 이동시킬 수도 있다. 호출된 프로시저는 다른 프로시저를 호출할 수 있으며, 이는 종종 상당한 정도의 심도까지 프로시저 네스팅(procedure nesting)을 야기한다. 프로세서에 의한 실행 동안, (콘텍스트로도 지칭되는) 각각의 프로시저에는 다수의 GPR들을 포함하는 임의의 프로세서 자원들이 할당된다. 프로시저에 할당되는 GPR 수는 프로시저에서 명령들에 대한 컴파일러 분석에 의하여 결정될 수 있으며, 몇 개의 GPR에서부터 완전히 아키텍처화된 GPR 세트까지의 범위에 걸칠 수 있다. 제 1 프로시저가 (콘텍스트 스위치로도 알려진) 제 2 프로시저를 호출할 때, 제 1 또는 호출하는 프로시저는 비활성 상태가 되는 반면에, 제 2 또는 호출된 프로시저에는 그 자신의 GPR 세트를 포함하는 개별 자원들이 할당되며 실행을 시작한다. 제 2 프로시저가 실행을 완료하면, 제 2 프로시저의 자원들은 할당 해제(deallocate)되고 자원들은 (필요하다면) 호출하는 프로시저에 재할당(re-allocate)되며 호출하는 프로시저는 실행을 다시 시작한다.
예컨대 인텔 i-960와 같은 일부 종래의 프로세서들에 있어서, 콘텍스트 스위치(context switch) 또는 새로운 프로시저는 물리 레지스터 파일의 전체 내용을 메모리에 저장할 것을 프로세서에 촉구하여 전체 물리 레지스터 파일을 새로운 프로시저에서 이용 가능하게 한다. 호출된 프로시저가 실행을 완료하고 제어를 그의 호출 프로시저에 리턴할 때, 이전에 저장된 레지스터 값들은 물리 레지스터 파일로 복원되며 호출 프로시저의 실행이 계속된다. 물리 레지스터 파일 내용들은 시스템 메모리(RAM)와 같은 "백킹 저장장치"에 세이브된다. 백킹 저장장치가 오프-칩 RAM을 포함할 때 콘텍스트 스위치마다 다수의 오프-칩 메모리 액세스들의 성능 저하를 완화시키기 위해, 프로세서는 물리 레지스터 파일의 내용들을 저장하기 위한 ― 실제 레지스터들을 포함할 수도 있고 또는 대안으로 온-칩 캐시 메모리를 포함할 수도 있는 ― 하나 이상의 "섀도우(shadow)" 또는 "캐시" 레지스터 파일들을 제공할 수 있다. 그러나 전체 물리 레지스터 파일은 섀도우 레지스터 저장장치의 경우에도 동시에 저장/검색(retrieve)되어 퍼포먼스 히트(performance hit)를 강제해야 한다.
전체 물리 레지스터 파일을 동시에 저장 및 검색할 필요성을 제거한, 많은 최신 프로세서들에 의하여 사용된 기술은 스택형 레지스터 파일 아키텍처로서 공지되어 있다. 스택형 레지스터 파일 아키텍처에서, 고레벨 프로세서 제어기는 물리 레지스터 파일을 무한 심도(infinite depth)의 논리 스택으로 간주한다. 이러한 논리적 무한 스택은 프로시저들이 호출될 때 프로시저들에 레지스터들을 증가 할당하고 필요에 따라 이전에 할당된 레지스터들의 내용들을 저장함으로써 물리 레지스터 파일에서 구현된다.
도 1은 대표적인 스택형 레지스터 파일 아키텍처 구현을 도시한 기능 블록도이다. 물리 레지스터 파일(1)은 고속 멀티-포트 물리 레지스터들의 어레이를 포함하며, 상기 어레이는 적어도 명령 세트 아키텍처에 GPR들이 존재하는 것만큼의 레지스터들을 포함한다. 예컨대, 물리 레지스터 파일(1)은 최하부의 물리 레지스터 0(PR0)에서부터 최상부의 물리 레지스터 127(PR 127)까지의 128개의 레지스터를 포함할 수 있다. 2개의 논리 포인터들, 즉 스택 상단 포인터(Top Of Stack pointer) 및 세이브/복원 포인터는 스택 관리를 실행한다.
처음에, 두 포인터는 PR0으로 세팅된다. 프로시저들이 호출되고 이들에 레지스터들이 할당될 때, 스택 상단 포인터는 위쪽으로 이동한다. 거의 모든 이용 가능한 물리 레지스터들이 할당되고 새로이 호출된 프로시저가 물리 레지스터 파일(1)에 남아있는 미할당 레지스터들의 수보다 더 많은 레지스터를 필요로 할 때, 상단 포인터는 랩(wrap)될 것이며, PR0에서부터 시작하여 물리 레지스터 파일(1)의 하부로부터 레지스터들의 할당을 시작할 것이다. 그러나 이와 같은 상황이 발생하기 전에, 물리 레지스터 파일(1)의 최하부에 있는 충분한 수의 레지스터들은 이들의 내용을 시스템 메모리(RAM)와 같은 백킹 저장장치(3)에 세이브해야 한다.
레지스터 세이브 엔진(2)은 프로세서를 인터럽트하고, 물리 레지스터 파일(1)의 최하부에 있는 적어도 최근에 할당된 레지스터들의 내용들을 백킹 저장장치(3)에 저장하기 위해 레지스터 판독 및 메모리 저장 동작들을 수행하는데 필요한 명령들을 실행한다. 레지스터 세이브 엔진(2)은 세이브/복원 포인터를 증분시키며, 이는 포인터 아래의 레지스터들이 새로이 호출된 프로시저들에 대한 할당에 이용 가능하다는 것을 나타낸다. 레지스터 세이브 엔진(2)이 레지스터 세이브 동작을 완료하고 프로세서의 제어를 중단할 때, 프로세서 제어기는 레지스터들을 다음 프로시저에 할당하고 스택 상단 포인터를 증분시켜, 레지스터들이 재할당되어 호출된 프로시저들에 의하여 이용될 때 스택 상단 포인터를 랩하고 내용들이 백킹 저장장치(3)에 세이브되는 레지스터들을 지나 증분시킨다.
유사하게, 호출된 프로시저가 실행을 완료하고 호출 프로시저로 제어를 리턴할 때, 스택은 팝(pop)되며, 호출된 프로시저에 할당된 레지스터들은 할당 해제되거나 다른 프로시저들에 대한 할당에 이용 가능하게 된다. 호출 프로시저와 연관된 모든 데이터가 여전히 물리 레지스터 파일(1)에 존재하지 않는다면, 즉 호출 프로시저의 레지스터들 중 하나 이상이 재할당되었다면, 레지스터 세이브 엔진(2)은 다시 프로세서를 인터럽트하고, 백킹 저장장치(3)로부터 가장 최근에 세이브된 레지스터들의 내용을 검색하며, 물리 레지스터 파일(1)로 데이터를 복원하며, 호출 프로시저에 레지스터들을 할당하며, 레지스터들이 할당되고 유효 데이터를 포함한다는 것을 나타내기 위해 세이브/복원 포인터를 증분시킨다.
스택형 레지스터 파일 시스템은 큰 물리 레지스터 파일(1), 비교적 좁은 심도(depth)의 프로시저 네스팅 및/또는 각각의 프로시저에 할당된 비교적 적은 레지스터들로 최적 성능을 제공한다. 이러한 조건들 하에서, 스택 상단 포인터는 단순히 물리 레지스터 파일(1)을 통해 위아래로 이동하여, 필요에 따라 지연 없이 프로시저들에 대해 레지스터들을 할당 및 할당 해제한다. 그러나 프로시저들의 수가 증가하고 그리고/또는 하나 이상의 프로시저가 많은 수의 레지스터들을 필요로 하기 때문에, 프로세서는 레지스터들이 새로운 프로시저들에 재할당될 수 있도록 물리 레지스터 파일(1)의 레지스터로부터의 데이터를 세이브하고 이 레지스터에 데이터를 복원하기 위해 레지스터 세이브 엔진(2)에 의하여 다수의 인터럽트를 경험한다.
스택형 레지스터 파일 시스템의 성능을 증가시키기 위한 한 방법은 단순히 물리 레지스터 파일(1)의 크기를 증가시키는 것이다. 이러한 방법은 더 높은 성능을 제공하는 한편, 물리 레지스터 파일(1)의 레지스터들은 보통 고속 멀티-포트 레지스터들이다. 각각의 레지스터는 예컨대 3개 내지 5개의 판독 및 기록 포트들을 포함할 수 있다. 게다가, 연산 스케줄링 및 레지스터 할당의 융통성을 위해, 각각의 물리 레지스터의 판독 포트는 각각의 파이프라인의 각각의 실행 파이프 스테이지에 루틴되어야 하며, 각각의 파이프라인의 기록-백(write back) 파이프 스테이지는 물리 레지스터 파일의 각각의 레지스터의 기록 포트에 접속되어야 한다. 따라서 물리 레지스터 파일(1)의 크기를 증가시키는 것은 게이트 카운트 및 배선 복잡도 면에서 비용이 많이 든다. 임의의 소정 시간에, 단 하나의 프로시저만이 실행되어 물리 레지스터 파일(1)의 레지스터들의 작은 부세트에만 액세스한다. 따라서 물리 레지스터 파일(1)의 크기를 증가시키는 것은 고비용 하드웨어의 적은 이용과 함께, 상당한 영역 및 복잡도 비용을 초래한다.
하나 이상의 실시예들에 있어서, 백킹 저장 버퍼가 스택형 레지스터 파일 아키텍처의 백킹 저장장치 및 물리 레지스터 파일 사이에 삽입된다. 백킹 저장 버퍼는 비활성 프로시저들에 할당된 레지스터들로부터의 데이터가 임시로 온-칩 저장되어, 새로운 프로시저들에 재할당될 물리 레지스터 파일의 레지스터들이 해제되게 한다. 프로시저들이 완료되고 이전의 비활성 프로시저들로 제어를 리턴할 때, 비활성 프로시저들과 연관된 데이터는 이전에 세이브되었다면 백킹 저장 버퍼로부터 검색될 수 있으며, 물리 레지스터 파일의 레지스터들 및 비활성 프로시저에 재할당된 레지스터들로 복원될 수 있다. 데이터는 단지 백킹 저장 버퍼에 기록될 필요가 있으며, 따라서 백킹 저장 버퍼가 최대로 완전히 채워진 경우에 오프-칩 RAM 액세스에 필요한 상당한 전력 소비 및 성능 저하를 초래한다.
일 실시예는 전용 백킹 저장 버퍼를 가진 스택형 레지스터 파일 시스템을 관리하는 방법에 관한 것이다. 물리 레지스터 파일로부터의 하나 이상의 레지스터들은 제 1 프로시저에 할당되며, 제 1 프로시저와 연관된 데이터는 할당된 레지스터들에 저장된다. 제 1 프로시저와 연관된 데이터는 전용 백킹 저장 버퍼에 선택적으로 세이브되며, 제 1 프로시저에 할당된 하나 이상의 레지스터들은 제 2 프로시저에 할당하기 위해 해제된다. 제 1 프로시저의 계속되는 실행 전에, 제 1 프로시저와 연관된 데이터는 전용 백킹 저장 버퍼로부터 하나 이상의 레지스터들로 복원되며, 레지스터들은 제 1 프로시저에 재할당된다.
다른 실시예는 프로세서에 관한 것이다. 프로세서는 적어도 프로세서 명령 세트 아키텍처에 정의된 범용 레지스터 수만큼의 레지스터들을 포함하는 물리 레지스터 파일을 포함한다. 레지스터들은 소프트웨어 프로시저들에 동적으로 할당된다. 프로세서는 또한 비활성 프로시저들에 할당된 레지스터들로부터 데이터를 선택적으로 세이브하고 프로세서들이 활성화되기 전에 레지스터들로 데이터를 복원하도록 동작하는 레지스터 세이브 엔진을 포함한다. 프로세서는 레지스터 세이브 엔진에 전용되며 비활성 프로시저들에 할당된 레지스터들로부터 세이브된 데이터를 저장하도록 동작하는 백킹 저장 버퍼를 더 포함한다.
도 1은 종래의 스택형 레지스터 파일의 블록도이다.
도 2는 프로세서의 기능 블록도이다.
도 3은 백킹 저장 버퍼를 포함하는 스택형 레지스터 파일의 기능 블록도이다.
도 4는 스택형 레지스터 파일 아키텍처를 관리하는 방법을 기술한 흐름도이다.
도 2는 프로세서(10)의 기능 블록도를 도시한다. 프로세서(10)는 제어 로직(14)에 따라 명령 실행 파이프라인(12)의 명령들을 실행한다. 파이프라인(12)은 12a 및 12b와 같은 다수의 병렬 파이프라인들을 가진 수퍼스칼라(superscalar) 설계일 수 있다. 각각의 파이프라인(12a, 12b)은 파이프 스테이지들에 편성된 다양한 레지스터들 또는 래치들(16) 및 하나 이상의 산술 논리 연산 유닛(ALU)(18)을 포함한다. 파이프라인들(12a, 12b)은 명령 캐시(I-캐시 또는 I$)(20)로부터 명령들을 페치하며, 여기서 메모리 어드레싱 및 허가(permission)는 명령 측 변환 참조 버퍼(ITLB:Instruction-side Translation Lookaside Buffer)(22)에 의하여 관리된다.
데이터는 주 변환 참조 버퍼(TLB: Translation Lookaside Buffer)(26)에 의하여 관리되는 메모리 어드레싱 및 허가들에 의해 데이터 캐시(D-캐시 또는 DS)(24)로부터 액세스된다. 다양한 실시예들에 있어서, ITLB(22)는 TLB(26)의 일부분에 대한 복사본(copy)을 포함할 수 있다. 대안으로, ITLB(22) 및 TLB(26)는 집적될 수 있다. 유사하게, 프로세서(10)의 다양한 실시예들에 있어서, I-캐시(20) 및 D-캐시(24)는 집적될 수도 있고 단일화될 수도 있다. I-캐시(20) 및/또는 D-캐시(24)의 손실들은 메모리 인터페이스(34)의 제어하에서 주(오프-칩) 메모리(36)에 대한 액세스를 야기한다.
파이프 스테이지 레지스터들 또는 래치들(16) 및 ALU들(18)은 물리 레지스터 파일(28)의 레지스터들로부터 피연산자들을 판독하고 그리고/또는 상기 레지스터들에 결과들을 기록할 수 있다. 물리 레지스터 파일(28)은 백킹 저장 버퍼(32)를 포함하는 레지스터 세이브 엔진(30)에 의하여 관리된다. 백킹 저장 버퍼(32)는 메모리 인터페이스(34)를 통해 주 메모리(36)에 접속된다. 물리 레지스터 파일(28), 레지스터 세이브 엔진(30) 및 백킹 저장 버퍼(32)의 동작은 이하에서 더 상세히 기술된다.
프로세서(10)는 다양한 주변장치들(40, 42)에 대한 액세스를 제어하는 입력/출력(I/O) 인터페이스(38)를 포함할 수 있다. 당업자는 프로세서(10)의 여러 변형이 가능하다는 것을 인식할 것이다. 예컨대, 프로세서(10)는 I 및 D 캐시 중 하나 또는 둘 다에 대한 제 2 레벨(L2) 캐시를 포함할 수 있다. 더욱이, 프로세서(10) 내에 도시된 기능 블록들 중 하나 이상은 특정 실시예로부터 생략될 수 있다.
도 3은 프로세서(10)의 스택형 레지스터 파일 아키텍처의 기능 블록도를 도시한다. 논리적 무한 레지스터 스택(logically infinite register stack)은 적어도 프로세서의 명령 세트 아키텍처가 GPR들을 정의하는 것만큼의 물리 레지스터들을 포함하는 물리 레지스터 파일(28)로 구현된다. 레지스터들의 그룹들이 새로이 호출된 프로시저들에 할당되기 때문에, 스택 상단 포인터는 증분된다. 스택 상단 포인터 아래(그리고 세이브/복원 포인터 위)의 레지스터들은 프로시저들에 할당되며, 스택 상단 포인터 위(그리고 세이브/복원 포인터 아래)의 레지스터들은 새로운 프로시저들에 할당하기 위해 해제된다. 프로시저가 실행을 완료하고 호출 프로시저로 제어를 리턴할 때, 스택 상단 포인터는 완료된 프로시저에 할당되었던 레지스터들의 수만큼 감소한다.
프로시저가 호출되고 물리 레지스터 파일(28)에 남아있는 미할당 레지스터 수보다 더 많은 레지스터의 할당을 요청할 때, 레지스터 세이브 엔진(30)은 물리 레지스터 파일(28)로부터 비활성 프로시저들과 연관된 데이터, 즉 비활성 프로시저들에 할당된 레지스터들에 저장된 데이터를 세이브한다. 레지스터 세이브 엔진(30)은 세이브/복원 포인터를 증분하며, 이는 세이브/복원 포인터 아래(그리고 스택 상단 포인터의 위)의 물리 레지스터들이 새로운 프로시저들로의 할당을 위해 이용 가능하다는 것을 나타낸다.
비활성 프로시저가 활성화되기 전에, 레지스터 세이브 엔진(30)은 비활성 프로시저에 할당되었던 레지스터들이 전부 비활성 프로시저에 그대로 할당되어 비활성 프로시저와 연관된 데이터를 포함함을 보장하도록 물리 레지스터 파일(28)을 체크한다. 비활성 프로시저에 이전에 할당된 레지스터들 중 하나 이상이 재할당되었다면, 레지스터 세이브 엔진(30)은 세이브된 데이터를 물리 레지스터 파일(28)의 이용 가능 레지스터들로 복원한다. 데이터를 복원할 때, 레지스터 세이브 엔진(30)은 복원된 레지스터 수만큼 세이브/복원 포인터를 감소시키며, 이는 세이브/복원 포인터 위(그리고 스택 상단 포인터 아래)의 레지스터들이 프로시저에 할당된다는 것을 나타낸다. 그 다음에, 비활성 프로시저가 활성화될 수 있으며, 비활성 프로시저에 이전에 할당된 모든 레지스터들은 프로시저가 비활성화되었을 때 포함했던 것과 동일한 데이터를 포함한다. 당업자는 본 설명에서 포인터들의 "위" 및 "아래"라는 용어가 도 3을 참조로 편의상 사용된다는 점을 인지할 것이다. 실제로, 스택 상단 포인터 및 세이브/복원 중 어느 하나 또는 둘 다 "랩(wrap)"될 수 있으며, 이들의 상대 위치들은 반전된다.
오프-칩 RAM과 같은 백킹 저장장치(36)에 물리 레지스터들의 내용들을 직접 세이브 및 복원하는 종래 기술과 관련된 지연 및 전력 소비를 피하기 위해, 하나 이상의 실시예들에서는 레지스터 세이브 엔진(30)이 백킹 저장 버퍼(32)를 포함한다. 백킹 저장 버퍼(32)는 물리 레지스터 파일(28)의 레지스터들로부터 세이브되고 이 레지스터들로 복원된 데이터를 일시적으로 저장한다. 레지스터 세이브 엔진(30)은 백킹 저장 버퍼(32)가 용량을 완전히 또는 용량에 가깝게 채워질 때 백킹 저장 버퍼(32)로부터의 데이터를 세이브하기 위해 백킹 저장장치(36)에만 액세스할 필요가 있다. 백킹 저장 버퍼(32)의 저장 용량과 관련된 물리 레지스터 파일(28)의 크기가 평균 스택 심도(depth)보다 크거나 같다면, 백킹 저장장치(36)에 대한 오프-칩 액세스들은 드라마틱하게 감소한다.
훨씬 높은 성능을 위해, 일 실시예에서는 백킹 저장 버퍼(32)가 물리 레지스터 파일(28)의 레지스터들의 비트 폭보다 큰 비트 폭을 가진 저장 위치들의 어레이(예컨대, 레지스터들, 래치들 또는 SRAM 어레이들)로서 구조화된다. 특히, 백킹 저장 버퍼(32)의 엔트리들은 물리 레지스터 파일(28)의 폭의 정수배(integral multiple)인 비트 폭을 가질 수 있다. 이는 2개 이상의 물리 레지스터들로부터의 데이터가 단일 백킹 저장 버퍼(32) 엔트리에 나란히(side-by-side) 저장되게 한다.
일 실시예에 있어서, 비트 폭의 정수배는 물리 레지스터 파일(28)의 판독 포트 수와 동일하다. 예컨대, 물리 레지스터 파일(28)이 3개의 판독 포트를 포함한다면, 백킹 저장 버퍼(32)는 저장 엘리먼트들의 어레이로서 구성되며, 각각의 저장 엘리먼트는 (도 3에 나타낸 것과 같이) 물리 레지스터 파일(28)의 레지스터들의 3배의 비트 폭을 가진다. 이러한 구성에서, 레지스터 세이브 엔진(30)은 3개의 물리 레지스터들로부터 데이터를 동시에, 즉 단일 사이클에서 판독할 수 있으며, 단일 기록 사이클에서 3개의 모든 레지스터로부터 단일 백킹 저장 버퍼(32)로 데이터를 기록할 수 있다. 이는 레지스터들이 비활성 프로시저들로부터 할당 해제될 때 물리 레지스터 파일(28)로부터의 데이터를 세이브하는 성능 오버헤드를 최소화한다. 유사하게, 물리 레지스터 파일(28)이 3개의 기록 포트를 추가로 포함한다면, 물리 레지스터 파일(28)로 데이터를 복원할 때, 레지스터 세이브 엔진(30)은 단일 사이클에서 단일 백킹 저장 버퍼(32) 엔트리로부터 3개의 물리 레지스터들로 복원될 데이터를 판독할 수 있다. 이들 데이터는 단일 사이클에서 물리 레지스터 파일(28)의 3개의 레지스터에 기록될 수 있다.
백킹 저장 버퍼(32)는 다수의 기술 및 연산 구성으로 구현될 수 있다. 예컨대, 백킹 저장 버퍼(32)는 단순한 단일 포트 고속 레지스터들 또는 래치들의 어레이를 포함할 수 있다. 대안으로, 백킹 저장 버퍼(32)는 n×m 어레이로서 구성된 SRAM 어레이로서 구현될 수 있으며, 여기서 n은 각각의 백킹 저장 버퍼(32) 엔트리의 비트 폭이며, m은 이러한 엔트리들의 수이다. 하드웨어 구성과 무관하게, 백킹 저장 버퍼(32)는 스택, FIFO, 데이터와 연관된 프로시저의 콘텍스트_ID에 의하여 인덱싱된 캐시 메모리 등과 같은 다양한 연산 구성으로 구현될 수 있다.
그러나 물리 또는 연산 구성과 무관하게, 백킹 저장 버퍼(32)는 레지스터 세이브 엔진(30)에 전용된다. 즉, 백킹 저장 버퍼(32)의 메모리 저장 위치들은 명령 세트 아키텍처의 부분이 아니며, 명령들에 의하여 어드레싱되지 않을 수도 있다. 부가적으로, 백킹 저장 버퍼(32)는 레지스터들이 할당된 프로시저들이 비활성화될 때 물리 레지스터 파일(28)의 레지스터들에 포함된 데이터만을 저장한다. 즉, 백킹 저장 버퍼(32)는 온-칩이든 오프-칩이든, 스크래치 레지스터들, 캐시 메모리 또는 임의의 다른 프로세서 메모리 또는 저장 위치들과 별개이다. 여기에서 사용되는 바와 같이, "전용" 백킹 저장 버퍼라는 용어는 프로세서(10)의 나머지로부터 백킹 저장 버퍼(32)의 이러한 물리적 및 기능적 분리를 나타낸다.
일 실시예에서, 백킹 저장 버퍼(32)는 스택으로서 동작하도록 구성된다. 레지스터 세이브 엔진(30)은 물리 레지스터 파일(28)로부터 데이터를 판독하며, 스택의 상부로 데이터를 푸시(push)한다. 역으로, 레지스터 세이브 엔진(30)은 물리 레지스터 파일(28)로 복원될 데이터를 검색하기 위해 스택을 팝(pop)한다. 백킹 저장 버퍼(32)가 용량을 완전히 또는 일부 실시예들에서는 용량에 가깝게 채워질 때, 도 2에 도시된 바와 같이, 레지스터 세이브 엔진(30)은 스택의 최하부에서부터 데이터를 판독하여 백킹 저장장치(36)에 데이터를 저장하며, 백킹 저장장치(36)는 L1 또는 L2 캐시들 또는 주 시스템 메모리(예컨대, RAM)를 포함할 수 있다. 레지스터 세이브 엔진(30)이 백킹 저장 버퍼(32)로부터 물리 저장 파일(28)로 충분한 데이터를 복원하여 백킹 저장 버퍼(32)의 용량을 늘릴 때, 레지스터 세이브 엔진(30)은 백킹 저장장치(36)로부터 이전에 세이브된 데이터를 판독하여 백킹 저장 버퍼(32)의 스택의 최하부에 데이터를 기록한다. 백킹 저장 버퍼(32)를 스택으로서 동작시키는 것은 백킹 저장 버퍼(32) 엔트리들의 비트 폭과 무관하다는 것에 유의한다.
백킹 저장 버퍼(32)가 스택으로서 동작하는 일 실시예에서, 최적의 성능을 위해, 백킹 저장 버퍼(32)는 듀얼-포트(dual-port) 레지스터들의 어레이로서 구성되며, 스택의 최상부 및 최하부는 물리 레지스터 파일(28)과 관련하여 앞서 기술된 것들과 유사하게 포인터들에 의하여 유지된다. 이는 예컨대 데이터가 백킹 저장 버퍼(32) 스택의 최하부에서부터 백킹 저장장치(36)로 세이브되는 것과 동시에 레지스터 세이브 엔진(30)이 물리 레지스터 파일(28)로부터 세이브된 데이터를 백킹 저장 버퍼(32) 스택의 상부로 푸시(push)하게 한다. 유사하게, 데이터는 물리 레지스터 파일(28)로 복원하기 위해 데이터가 스택의 최상부로부터 팝(pop)되는 것과 동시에 백킹 저장장치(36)로부터 백킹 저장 버퍼(32)의 최하부로 복원될 수 있다.
대안적인 실시예에 있어서, 회로 복잡도 및 실리콘 영역을 감소시키기 위해, 백킹 저장 버퍼(32) 스택은 단일-포트(single-port) 레지스터들로 구성되며, 레지스터 세이브 엔진(30)은 물리 레지스터 파일(28)로부터의 데이터를 세이브하고 물리 레지스터 파일(28)로 데이터를 복원하는 동작들과 관련하여 백킹 저장장치로의 기록 및 백킹 저장장치로부터의 판독을 스케줄링한다.
일 실시예에 따른 스택형 레지스터 파일 아키텍처를 동작시키는 방법은 도 4에 흐름도로 기술된다. 처음에, 레지스터 세이브 엔진(RSE)(30)을 포함할 수 있는 스택형 레지스터 제어기는 산술 또는 논리 명령들에 대한 피연산자들 또는 결과들과 같은 데이터를 기록 및 판독하도록 프로시저에 의한 배타 사용을 위해 물리 레지스터 파일(PRF)(28)의 하나 이상의 레지스터들을 할당하기 위한 요청을 수신한다(블록 40). RSE(30)는 PRF(28)에 미할당 레지스터들이 충분히 남아있는지의 여부를 결정한다(블록 42). 처음에는 요청된 수의 PRF(28) 레지스터들이 새로운 프로시저에 할당된다(블록 50). 이러한 프로세스는 각각의 프로시저가 연속 프로시저를 호출할 때 여러 번 반복될 수 있다(블록 40).
어떤 시점에서, 프로시저가 호출되고 레지스터 할당이 요청되나(블록 40) 요청을 만족시키기에는 불충분한 미할당 레지스터들이 PRF(28)에 남아 있다(블록 42). 그 다음에, RSE(30)는 요청을 만족시키기 위해 PRF(28)에서 얼마나 많은 레지스터가 해제되어야 하는지를 결정하고, 백킹 저장 버퍼(BSB)(32)에서 부수적인 양의 빈 공간이 이용 가능한지 여부를 결정한다(블록 44). 만일 그러하다면, 하나 이상의 현재 비활성 프로시저들에 할당된 적어도 충분한 수의 레지스터들이 이들의 내용을 BSB(32)에 세이브함으로써 할당 해제된다(블록 48). 그 다음에, RSE(30)는 이러한 할당 해제된 레지스터들을 PRF(28)의 기존 미할당 레지스터들과 함께, 요청한 새로운 프로시저에 할당하고(블록 50), 새로운 프로시저는 실행을 진행하여 할당된 PRF(28) 레지스터들에 데이터를 저장한다.
충분한 새로운 프로시저들이 호출되고 그리고/또는 새로운 프로시저들이 레지스터들의 큰 할당들을 필요로 한다면, BSB(32)는 자신의 용량을 완전히 채우거나 용량에 가깝게 채워진다. 이러한 경우에, 새로운 프로시저에 의한 요청시(블록 40), PRF(28)에 불충분한 레지스터들이 존재하고(블록 42), BSB에 불충분한 빈 공간이 존재한다면(블록 44), RSE(30)는 BSB(32)로부터의 이전 엔트리들을 오프-칩 RAM과 같은 백킹 저장장치(BS)(36)에 세이브할 것이다(블록 46). 그 다음에, 데이터는 PRF(28)로부터 BSB(32)로 세이브될 수 있으며(블록 48), 해제된 PRF(28) 레지스터들은 새로운 프로시저에 할당된다(블록 50). 이러한 프로세스는 새로운 프로시저들이 호출될 때 반복될 수 있다(블록 40).
어떤 시점에서는, 새로운 프로시저를 호출하기보다는(블록 40), 활성 프로시저가 종료되고 호출 프로시저로 제어를 리턴하여, 재활성(reactivation)을 요청할 것이다(블록 52). RSE(30)는 비활성 프로시저에 원래 할당된 모든 레지스터들이 PRF(28)의 레지스터에 그래도 할당되어 있는지를 결정하도록 체크할 것이다(블록 54). 만일 그렇다면, 프로시저에 의해 기록된 모든 데이터는 다른 프로시저를 호출하고 비활성화되기 전에 PRF(54)에 그대로 있으며, 프로시저는 재활성화하고 실행을 다시 시작할 수 있다(블록 62).
RSE(30)가 비활성 프로시저에 원래 할당된 하나 이상의 레지스터들로부터의 데이터를 세이브하고 레지스터들을 다른 프로시저에 할당했다면, RSE(30)는 데이터가 BSB(32)에 저장되는지를 확인하기 위한 체크를 한다. 만일 그렇다면, RSE(30)는 BSB(32)로부터 적어도 비활성 프로시저와 연관된 데이터를 판독하고 이를 PRF(28)의 레지스터들에 기록하여 레지스터들을 비활성 프로시저에 할당한다(블록 60). 그 다음에, 비활성 프로시저는 다시 활성화된다(블록 62).
비활성 프로시저와 연관된 데이터가 PRF(28)로부터 세이브되었고(블록 54) BSB(32)에 저장되지 않는다면(블록 56), 데이터는 BSB(32)로부터 BS(36)로 세이브된다. 이러한 경우에, RSE(30)는 BS(36)로부터 적어도 비활성 프로시저와 연관된 데이터를 판독하며 이를 BSB(32)에 기록한다(블록 58). 그 다음에, RSE(30)는 BSB(32)로부터의 데이터를 PRF(28)로 복원하여, 프로시저를 재활성화하기 전에(블록 62) 비활성화 프로시저에 수신 레지스터들을 할당한다(블록 60). 그 다음에, 재활성화된 프로시저는 다른 프로시저를 호출할 수도 있고(블록 40), 또는 그 자체적으로 실행을 완료하고 이전 호출 프로시저로 제어를 리턴할 수도 있다(블록 52).
당업자는 본 개시의 교지의 관점에서 앞의 프로시저들의 다수의 명백한 변형들 및 최적화를 인식할 것이다. 예컨대, 데이터가 어느 쪽으로든 BS(36)에 세이브되었고, 프로시저를 재활성화할 것이 요구된 경우, RSE(30)는 BSB(32)를 바이패스하고, BS(36)로부터 PRF(28)의 레지스터들에 직접 데이터를 기록할 수 있다. 부가적으로, 특히 각각의 BSB(32) 엔트리의 폭이 PRF(28) 판독 포트들의 수 × PRF(28) 레지스터들의 폭인 기술된 실시예에서, 데이터는 프로시저 경계들을 따라 PRF(28)(또는 BSB(32))로부터 저장되지 않거나 이 PRF(28)(또는 BSB(32))로 복원되지 않을 수도 있다. 즉, 비활성 프로시저와 연관된 모든 데이터가 동시에 PRF(28)로부터 세이브될 수 있는 것은 아니다. 유사하게, 하나의 비활성 프로시저와 연관된 데이터를 PRF(28)로 복원할 때, RSE(30)는 부가적으로 다른 프로시저와 연관된 데이터를 복원할 수 있다(다른 프로시저와 연관된 부가 데이터는 BSB(32) 또는 BS(36)에 그대로 저장되어 있다).
전용 로컬 고속 저장장치를 제공함으로써, 백킹 저장 버퍼(32)는 오프-칩 백킹 저장장치에 세이브된 데이터를 기록하는 것과 관련된 현저한 성능 저하 및 전력 소비를 초래하지 않고 레지스터 세이브 엔진(30)으로 하여금 물리 레지스터 파일(28)로부터의 데이터를 세이브 및 복원하도록 한다. 백킹 저장 버퍼(32)는 백킹 저장 버퍼(32)가 멀티-포트형이거나 하나 이상의 실행 파이프라인들의 파이프 스테이지들에 접속될 필요가 없기 때문에 물리 레지스터 파일(28)의 크기를 증가시킬 수 있는 경제적인 대안이다.
사실상, 백킹 저장 버퍼(32)의 존재는 물리 레지스터 파일(28)이 명령 세트 아키텍처의 GPR들로서 정의된 수의 레지스터들만을 포함하게 한다. 즉, 프로시저에 이론적으로 정의된 모든 GPR이 할당될 수 있기 때문에, 명령 세트 아키텍처에서의 GPR 수는 물리 레지스터 파일(28)의 크기에 대한 하한을 설정한다. 본 발명의 백킹 저장 버퍼(32)는 백킹 저장장치(36)에 대한 오프-칩 액세스들을 방지하거나 또는 최소화하는 고성능 및 저전력 소비를 얻는 동시에, 실리콘 영역 및 배선 복잡도를 포함하는 물리 레지스터 파일(28)의 크기에 대한 상한으로서 동일한 수가 사용되도록 한다.
본 발명이 여기서는 특정 특징들, 양상들 및 실시예들과 관련하여 설명되었지만, 본 발명의 가장 넓은 범위 내에서 다수의 변형, 수정들 및 다른 실시예들이 가능하다는 것이 명백하며 따라서 모든 변형들, 수정들 및 실시예들은 본 발명의 범위 내에 있는 것으로 간주된다. 따라서 본 실시예들은 모든 양상들에서 제한적이 아니라 예시적인 것으로 해석되며, 첨부된 청구범위의 균등 범위 내에 있는 모든 변형이 여기에 포함된다.
Claims (19)
- 전용 백킹 저장 버퍼(dedicated backing store buffer)를 가진 스택형 레지스터 파일 시스템을 관리하는 방법으로서,물리 레지스터 파일로부터의 하나 이상의 레지스터들을 제 1 프로시저(procedure)에 할당하고, 상기 할당된 레지스터들에 상기 제 1 프로시저와 연관된 데이터를 저장하는 단계;상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터를 선택적으로 세이브(save)하고, 상기 제 1 프로시저에 할당된 하나 이상의 레지스터들을 제 2 프로시저에 할당하기 위해 해제(release)하는 단계; 및상기 제 1 프로시저의 계속되는 실행 전에, 상기 제 1 프로시저와 연관된 데이터를 상기 전용 백킹 저장 버퍼로부터 하나 이상의 레지스터들로 복원(restore)시키고 상기 레지스터들을 상기 제 1 프로시저에 재할당(re-allocate)하는 단계를 포함하는, 스택형 레지스터 파일 시스템 관리 방법.
- 제 1항에 있어서,상기 제 1 프로시저와 연관된 데이터를 상기 전용 백킹 저장 버퍼로부터 백킹 저장장치로 세이브하는 단계, 및 상기 제 1 프로시저와 연관된 데이터를 하나 이상의 레지스터들로 복원시키기 전에 상기 백킹 저장장치로부터 상기 제 1 프로시저와 연관된 데이터를 검색(retrieve)하는 단계를 더 포함하는, 스택형 레지스터 파일 시스템 관리 방법.
- 제 1항에 있어서,상기 백킹 저장 버퍼의 각각의 어드레스 가능 저장 위치의 비트 폭은 상기 레지스터들의 비트 폭의 정수배(integral multiple)이며, 다수의 레지스터들에 저장된 상기 제 1 프로시저와 연관된 데이터는 상기 백킹 저장 버퍼의 단일 어드레스 가능 저장 위치에 세이브되는, 스택형 레지스터 파일 시스템 관리 방법.
- 제 3항에 있어서,상기 정수배는 상기 물리 레지스터 파일의 판독 포트 수인, 스택형 레지스터 파일 시스템 관리 방법.
- 제 4항에 있어서,상기 정수배 개수의 레지스터들이 상기 물리 레지스터 파일로부터 동시에 판독되며, 단일 기록 동작으로 상기 백킹 저장 버퍼에 기록되는, 스택형 레지스터 파일 시스템 관리 방법.
- 제 2항에 있어서,상기 백킹 저장 버퍼는 스택으로서 구현되며, 상기 제 1 프로시저와 연관된 데이터는 상기 데이터가 상기 레지스터들로부터 상기 백킹 저장 버퍼로 세이브될 때 상기 백킹 저장 버퍼의 최상부로 푸시(push)되고, 상기 제 1 프로시저와 연관된 데이터는 상기 백킹 저장 버퍼가 완전히 채워질 때 상기 백킹 저장 버퍼의 최하부로부터 상기 백킹 저장장치로 세이브되는, 스택형 레지스터 파일 시스템 관리 방법.
- 제 2항에 있어서,상기 백킹 저장 버퍼는 스택형 레지스터 파일에 전용된 온-칩(on-chip) RAM으로서 구현되는, 스택형 레지스터 파일 시스템 관리 방법.
- 제 1항에 있어서,상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터를 선택적으로 세이브하는 단계는 상기 물리 레지스터 파일에 상기 제 2 프로시저에 할당하는데 필요한 레지스터 수보다 적은 미할당 레지스터들이 남아있을 경우에만 상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터를 세이브하는 단계를 포함하는, 스택형 레지스터 파일 시스템 관리 방법.
- 제 1항에 있어서,상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터를 선택적으로 세이브하는 단계는 상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터만을 세이브하는 단계를 포함하는, 스택형 레지스터 파일 시스템 관리 방법.
- 프로세서로서,적어도 프로세서 명령 세트 아키텍처에 정의된 범용 레지스터들의 수만큼의 레지스터들을 포함하는 물리 레지스터 파일 ― 상기 레지스터들은 소프트웨어 프로시저들에 동적으로 할당됨 ―;비활성 프로시저들에 할당된 레지스터들로부터의 데이터를 선택적으로 세이브하고 상기 프로시저들이 활성화되기 전에 상기 레지스터들로 데이터를 복원시키도록 동작하는 레지스터 세이브 엔진; 및상기 레지스터 세이브 엔진에 전용되며 상기 비활성 프로시저들에 할당된 레지스터들로부터 세이브된 데이터를 저장하도록 동작하는 백킹 저장 버퍼를 포함하는, 프로세서.
- 제 10항에 있어서,상기 백킹 저장 버퍼의 어드레스 가능 엔트리들은 상기 물리 레지스터 파일의 레지스터들의 비트 폭의 정수배인 비트 폭을 갖는, 프로세서.
- 제 11항에 있어서,상기 물리 레지스터 파일은 멀티-포트형(multi-ported)이며, 상기 정수배는 상기 물리 레지스터 파일의 판독 포트 수인, 프로세서.
- 제 12항에 있어서,상기 레지스터 세이브 엔진은 상기 물리 레지스터 파일로부터 정수배 개수의 레지스터들을 동시에 판독하고, 상기 정수배 개수의 레지스터들로부터의 데이터를 단일 기록 동작으로 상기 백킹 저장 버퍼에 기록하도록 동작하는, 프로세서.
- 제 10항에 있어서,상기 백킹 저장 버퍼가 완전히 채워질 때 상기 비활성 프로시저들에 할당된 레지스터들로부터 세이브된 데이터를 저장하도록 동작하는 백킹 저장장치를 더 포함하는, 프로세서.
- 제 14항에 있어서,상기 백킹 저장 버퍼는 스택으로서 구현되며, 상기 스택은 상기 스택의 최상부로 푸시된, 하나 이상의 레지스터들로부터의 데이터를 저장하고 상기 스택의 최상부로부터 팝(pop)된 데이터를 하나 이상의 물리 레지스터들로 복원시키도록 동작하는, 프로세서.
- 제 15항에 있어서,상기 백킹 저장 버퍼는 상기 백킹 저장 버퍼가 새로운 프로시저에 의한 요청을 수용하기에 불충분한 빈 공간을 포함하는 경우에는 데이터를 상기 스택의 최하부로부터 상기 백킹 저장장치로 저장하고, 상기 백킹 저장 버퍼가 상기 물리 레지스터 파일의 레지스터들로 데이터를 복원시킴으로써 용량을 확보할 경우에는 상기 백킹 저장장치로부터 상기 스택의 최하부까지 데이터를 검색하도록 추가 동작하는, 프로세서.
- 제 14항에 있어서,상기 백킹 저장 버퍼는 상기 레지스터 세이브 엔진에 전용된 온-칩 RAM으로서 구현되는, 프로세서.
- 제 14항에 있어서,상기 백킹 저장장치는 캐시 메모리인, 프로세서.
- 제 14항에 있어서,상기 백킹 저장장치는 오프-칩 RAM인, 프로세서.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/254,320 | 2005-10-20 | ||
US11/254,320 US7962731B2 (en) | 2005-10-20 | 2005-10-20 | Backing store buffer for the register save engine of a stacked register file |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20080064876A KR20080064876A (ko) | 2008-07-09 |
KR100974750B1 true KR100974750B1 (ko) | 2010-08-06 |
Family
ID=37770980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020087012079A KR100974750B1 (ko) | 2005-10-20 | 2006-10-20 | 스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장버퍼 |
Country Status (8)
Country | Link |
---|---|
US (1) | US7962731B2 (ko) |
EP (1) | EP1941350A2 (ko) |
JP (3) | JP2009512941A (ko) |
KR (1) | KR100974750B1 (ko) |
CN (1) | CN101331448B (ko) |
BR (1) | BRPI0617528A2 (ko) |
IL (1) | IL190979A0 (ko) |
WO (1) | WO2007048128A2 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101810044B1 (ko) * | 2015-12-31 | 2017-12-18 | 홍익대학교 산학협력단 | 암호화 키 갱신 장치 및 방법 |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7962731B2 (en) * | 2005-10-20 | 2011-06-14 | Qualcomm Incorporated | Backing store buffer for the register save engine of a stacked register file |
US7844804B2 (en) * | 2005-11-10 | 2010-11-30 | Qualcomm Incorporated | Expansion of a stacked register file using shadow registers |
JP5186802B2 (ja) * | 2007-05-08 | 2013-04-24 | 富士通セミコンダクター株式会社 | マイクロプロセッサ |
KR101927255B1 (ko) * | 2011-12-27 | 2018-12-12 | 한국전자통신연구원 | 레지스터 윈도우 오버플로우/언더플로우 처리 장치 |
US9239801B2 (en) * | 2013-06-05 | 2016-01-19 | Intel Corporation | Systems and methods for preventing unauthorized stack pivoting |
WO2015126429A1 (en) * | 2014-02-24 | 2015-08-27 | Hewlett-Packard Development Company, L.P. | Repurposable buffers for target port processing of a data transfer |
CN104182281B (zh) * | 2014-08-25 | 2017-10-31 | 浙江大学城市学院 | 一种gpgpu寄存器缓存的实现方法 |
US9996353B2 (en) | 2015-02-26 | 2018-06-12 | International Business Machines Corporation | Universal history buffer to support multiple register types |
US9971604B2 (en) | 2015-02-26 | 2018-05-15 | International Business Machines Corporation | History buffer for multiple-field registers |
US10067766B2 (en) | 2015-02-26 | 2018-09-04 | International Business Machines Corporation | History buffer with hybrid entry support for multiple-field registers |
US10049054B2 (en) * | 2015-04-01 | 2018-08-14 | Micron Technology, Inc. | Virtual register file |
MA44821A (fr) * | 2016-02-27 | 2019-01-02 | Kinzinger Automation Gmbh | Procédé d'allocation d'une pile de registres virtuels dans une machine à pile |
US20170371654A1 (en) * | 2016-06-23 | 2017-12-28 | Advanced Micro Devices, Inc. | System and method for using virtual vector register files |
US10782979B2 (en) | 2017-04-18 | 2020-09-22 | International Business Machines Corporation | Restoring saved architected registers and suppressing verification of registers to be restored |
US10963261B2 (en) | 2017-04-18 | 2021-03-30 | International Business Machines Corporation | Sharing snapshots across save requests |
US10564977B2 (en) | 2017-04-18 | 2020-02-18 | International Business Machines Corporation | Selective register allocation |
US10838733B2 (en) | 2017-04-18 | 2020-11-17 | International Business Machines Corporation | Register context restoration based on rename register recovery |
US10540184B2 (en) | 2017-04-18 | 2020-01-21 | International Business Machines Corporation | Coalescing store instructions for restoration |
US10572265B2 (en) * | 2017-04-18 | 2020-02-25 | International Business Machines Corporation | Selecting register restoration or register reloading |
US10552164B2 (en) | 2017-04-18 | 2020-02-04 | International Business Machines Corporation | Sharing snapshots between restoration and recovery |
US11010192B2 (en) * | 2017-04-18 | 2021-05-18 | International Business Machines Corporation | Register restoration using recovery buffers |
US10740108B2 (en) | 2017-04-18 | 2020-08-11 | International Business Machines Corporation | Management of store queue based on restoration operation |
US10649785B2 (en) | 2017-04-18 | 2020-05-12 | International Business Machines Corporation | Tracking changes to memory via check and recovery |
US10489382B2 (en) | 2017-04-18 | 2019-11-26 | International Business Machines Corporation | Register restoration invalidation based on a context switch |
US10545766B2 (en) | 2017-04-18 | 2020-01-28 | International Business Machines Corporation | Register restoration using transactional memory register snapshots |
CN107621926B (zh) * | 2017-09-19 | 2020-06-16 | 珠海市杰理科技股份有限公司 | 栈区数据存取方法、装置、可读存储介质和计算机设备 |
CN111176582A (zh) * | 2019-12-31 | 2020-05-19 | 北京百度网讯科技有限公司 | 矩阵存储方法、矩阵访问方法、装置和电子设备 |
CN113377438B (zh) * | 2021-08-13 | 2021-11-30 | 沐曦集成电路(上海)有限公司 | 一种处理器及其数据读写方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100868410B1 (ko) | 2002-12-09 | 2008-11-11 | 마이크로소프트 코포레이션 | 관리화된 파일 시스템 필터 모델 및 아키텍쳐 |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4429363A (en) * | 1981-10-15 | 1984-01-31 | International Business Machines Corporation | Method and apparatus for managing data movements from a backing store to a caching buffer store |
US5179734A (en) * | 1984-03-02 | 1993-01-12 | Texas Instruments Incorporated | Threaded interpretive data processor |
JPS62108333A (ja) * | 1985-11-06 | 1987-05-19 | Mitsubishi Electric Corp | 半導体装置 |
JPH02148223A (ja) * | 1988-11-30 | 1990-06-07 | Toshiba Corp | レジスタ退避復活装置 |
US6370623B1 (en) | 1988-12-28 | 2002-04-09 | Philips Electronics North America Corporation | Multiport register file to accommodate data of differing lengths |
JPH0333934A (ja) * | 1989-06-29 | 1991-02-14 | Nec Corp | レジスタ退避復帰方式 |
JP2655191B2 (ja) * | 1989-07-05 | 1997-09-17 | 三菱電機株式会社 | 演算処理装置 |
JPH03149626A (ja) * | 1989-11-07 | 1991-06-26 | Matsushita Electric Ind Co Ltd | スタック管理方法 |
US5522072A (en) * | 1990-09-04 | 1996-05-28 | At&T Corp. | Arrangement for efficiently transferring program execution between subprograms |
USH1291H (en) * | 1990-12-20 | 1994-02-01 | Hinton Glenn J | Microprocessor in which multiple instructions are executed in one clock cycle by providing separate machine bus access to a register file for different types of instructions |
US5640582A (en) * | 1992-05-21 | 1997-06-17 | Intel Corporation | Register stacking in a computer system |
JPH06309169A (ja) * | 1993-04-27 | 1994-11-04 | Toshiba Corp | 情報処理装置 |
JPH0713765A (ja) * | 1993-06-25 | 1995-01-17 | Matsushita Electric Ind Co Ltd | 高速データ転送装置 |
EP0676691A3 (en) | 1994-04-06 | 1996-12-11 | Hewlett Packard Co | Device for saving and restoring registers in a digital computer. |
US5933627A (en) * | 1996-07-01 | 1999-08-03 | Sun Microsystems | Thread switch on blocked load or store using instruction thread field |
JP3088303B2 (ja) * | 1996-09-09 | 2000-09-18 | 日本電気アイシーマイコンシステム株式会社 | キャッシュ・メモリ・バンク制御装置 |
TW343318B (en) | 1996-09-23 | 1998-10-21 | Advanced Risc Mach Ltd | Register addressing in a data processing apparatus |
DE69727465T2 (de) * | 1997-01-09 | 2004-12-23 | Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto | Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung |
US6128728A (en) * | 1997-08-01 | 2000-10-03 | Micron Technology, Inc. | Virtual shadow registers and virtual register windows |
US6314513B1 (en) | 1997-09-30 | 2001-11-06 | Intel Corporation | Method and apparatus for transferring data between a register stack and a memory resource |
US6263401B1 (en) * | 1997-09-30 | 2001-07-17 | Institute For The Development Of Emerging Architectures, L.L.C. | Method and apparatus for transferring data between a register stack and a memory resource |
US6078970A (en) * | 1997-10-15 | 2000-06-20 | International Business Machines Corporation | System for determining adapter interrupt status where interrupt is sent to host after operating status stored in register is shadowed to host memory |
US6408325B1 (en) | 1998-05-06 | 2002-06-18 | Sun Microsystems, Inc. | Context switching technique for processors with large register files |
US6243668B1 (en) * | 1998-08-07 | 2001-06-05 | Hewlett-Packard Company | Instruction set interpreter which uses a register stack to efficiently map an application register state |
US6487630B2 (en) * | 1999-02-26 | 2002-11-26 | Intel Corporation | Processor with register stack engine that dynamically spills/fills physical registers to backing store |
US6665793B1 (en) | 1999-12-28 | 2003-12-16 | Institute For The Development Of Emerging Architectures, L.L.C. | Method and apparatus for managing access to out-of-frame Registers |
WO2001082059A2 (en) | 2000-04-27 | 2001-11-01 | Sun Microsystems, Inc. | Method and apparatus to improve context switch times in a computing system |
US6631452B1 (en) * | 2000-04-28 | 2003-10-07 | Idea Corporation | Register stack engine having speculative load/store modes |
US6751749B2 (en) * | 2001-02-22 | 2004-06-15 | International Business Machines Corporation | Method and apparatus for computer system reliability |
JP3737755B2 (ja) * | 2001-12-28 | 2006-01-25 | 富士通株式会社 | レジスタウィンドウ方式によるレジスタファイル及びその制御方法 |
US6671196B2 (en) * | 2002-02-28 | 2003-12-30 | Sun Microsystems, Inc. | Register stack in cache memory |
US7127592B2 (en) * | 2003-01-08 | 2006-10-24 | Sun Microsystems, Inc. | Method and apparatus for dynamically allocating registers in a windowed architecture |
JP2005044124A (ja) * | 2003-07-22 | 2005-02-17 | Shinano Kenshi Co Ltd | Mpu |
GB2417797B (en) * | 2004-09-02 | 2009-05-13 | Hewlett Packard Development Co | A method and apparatus for managing storage used by a processor when processing instructions |
US7600101B2 (en) * | 2005-01-13 | 2009-10-06 | Hewlett-Packard Development Company, L.P. | Multithreaded hardware systems and methods |
US20060294344A1 (en) * | 2005-06-28 | 2006-12-28 | Universal Network Machines, Inc. | Computer processor pipeline with shadow registers for context switching, and method |
US7962731B2 (en) * | 2005-10-20 | 2011-06-14 | Qualcomm Incorporated | Backing store buffer for the register save engine of a stacked register file |
US7844804B2 (en) * | 2005-11-10 | 2010-11-30 | Qualcomm Incorporated | Expansion of a stacked register file using shadow registers |
-
2005
- 2005-10-20 US US11/254,320 patent/US7962731B2/en active Active
-
2006
- 2006-10-20 CN CN2006800470000A patent/CN101331448B/zh not_active Expired - Fee Related
- 2006-10-20 EP EP06846124A patent/EP1941350A2/en not_active Withdrawn
- 2006-10-20 KR KR1020087012079A patent/KR100974750B1/ko active IP Right Grant
- 2006-10-20 JP JP2008536645A patent/JP2009512941A/ja not_active Withdrawn
- 2006-10-20 BR BRPI0617528-7A patent/BRPI0617528A2/pt not_active Application Discontinuation
- 2006-10-20 WO PCT/US2006/060128 patent/WO2007048128A2/en active Application Filing
-
2008
- 2008-04-17 IL IL190979A patent/IL190979A0/en unknown
-
2012
- 2012-06-21 JP JP2012140009A patent/JP5529212B2/ja not_active Expired - Fee Related
-
2014
- 2014-01-06 JP JP2014000322A patent/JP5869009B2/ja not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100868410B1 (ko) | 2002-12-09 | 2008-11-11 | 마이크로소프트 코포레이션 | 관리화된 파일 시스템 필터 모델 및 아키텍쳐 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101810044B1 (ko) * | 2015-12-31 | 2017-12-18 | 홍익대학교 산학협력단 | 암호화 키 갱신 장치 및 방법 |
Also Published As
Publication number | Publication date |
---|---|
BRPI0617528A2 (pt) | 2011-07-26 |
EP1941350A2 (en) | 2008-07-09 |
US7962731B2 (en) | 2011-06-14 |
WO2007048128A3 (en) | 2007-06-28 |
JP5529212B2 (ja) | 2014-06-25 |
US20070094484A1 (en) | 2007-04-26 |
CN101331448A (zh) | 2008-12-24 |
IL190979A0 (en) | 2008-12-29 |
JP2009512941A (ja) | 2009-03-26 |
JP2012234556A (ja) | 2012-11-29 |
KR20080064876A (ko) | 2008-07-09 |
CN101331448B (zh) | 2012-01-04 |
WO2007048128A2 (en) | 2007-04-26 |
JP5869009B2 (ja) | 2016-02-24 |
JP2014130606A (ja) | 2014-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100974750B1 (ko) | 스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장버퍼 | |
CA2630594C (en) | Expansion of a stacked register file using shadow registers | |
US5564031A (en) | Dynamic allocation of registers to procedures in a digital computer | |
US6049867A (en) | Method and system for multi-thread switching only when a cache miss occurs at a second or higher level | |
US5867735A (en) | Method for storing prioritized memory or I/O transactions in queues having one priority level less without changing the priority when space available in the corresponding queues exceed | |
US5860138A (en) | Processor with compiler-allocated, variable length intermediate storage | |
US6665749B1 (en) | Bus protocol for efficiently transferring vector data | |
US6513107B1 (en) | Vector transfer system generating address error exception when vector to be transferred does not start and end on same memory page | |
US20070282928A1 (en) | Processor core stack extension | |
US6487630B2 (en) | Processor with register stack engine that dynamically spills/fills physical registers to backing store | |
WO2004003729A2 (en) | Apparatus for register file extension | |
US20050228971A1 (en) | Buffer virtualization | |
US20080177979A1 (en) | Hardware multi-core processor optimized for object oriented computing | |
US6631452B1 (en) | Register stack engine having speculative load/store modes | |
US20030154363A1 (en) | Stacked register aliasing in data hazard detection to reduce circuit | |
US7206923B2 (en) | Method and apparatus for eliminating the need for register assignment, allocation, spilling and re-filling | |
US6625720B1 (en) | System for posting vector synchronization instructions to vector instruction queue to separate vector instructions from different application programs | |
Quammen et al. | Register window management for a real-time multitasking RISC | |
EP0101718A1 (en) | COMPUTER WITH AUTOMATIC TOPOGRAPHY OF THE MEMORY CONTENT IN REGISTERS. | |
Russell et al. | A stack-based register set | |
WO2009156920A1 (en) | Method, register file system, and processing unit device enabling substantially direct cache memory access |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20130729 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20140730 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20160629 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20180628 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20190624 Year of fee payment: 10 |