KR20080064876A - 스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장버퍼 - Google Patents

스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장버퍼 Download PDF

Info

Publication number
KR20080064876A
KR20080064876A KR1020087012079A KR20087012079A KR20080064876A KR 20080064876 A KR20080064876 A KR 20080064876A KR 1020087012079 A KR1020087012079 A KR 1020087012079A KR 20087012079 A KR20087012079 A KR 20087012079A KR 20080064876 A KR20080064876 A KR 20080064876A
Authority
KR
South Korea
Prior art keywords
registers
procedure
backing storage
storage buffer
register file
Prior art date
Application number
KR1020087012079A
Other languages
English (en)
Other versions
KR100974750B1 (ko
Inventor
보후슬라브 리치리크
Original Assignee
콸콤 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 콸콤 인코포레이티드 filed Critical 콸콤 인코포레이티드
Publication of KR20080064876A publication Critical patent/KR20080064876A/ko
Application granted granted Critical
Publication of KR100974750B1 publication Critical patent/KR100974750B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30116Shadow registers, e.g. coupled registers, not forming part of the register space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register 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

스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장 버퍼{BACKING STORE BUFFER FOR THE REGISTER SAVE ENGINE OF A STACKED REGISTER FILE}
본 발명은 일반적으로 프로세서 분야, 특히 스택형 레지스터 파일 아키텍처의 레지스터 세이브 엔진용 백킹 저장 버퍼에 관한 것이다.
RISC 프로세서는 비교적 작은 명령 세트들에 의하여 특징지워지며, 각각의 명령은 산술, 논리 또는 로드/저장 연산과 같은 단일 명령을 수행한다. 산술 및 논리 명령들은 하나 이상의 범용 레지스터들(GPR)로부터 그들의 피연산자들을 획득하고, 하나 이상의 범용 레지스터들(GPR)에 R들의 결과치들을 저장한다. 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)되며(필요한 경우에) 호출하는 프로시저는 실행을 다시 시작한다.
예컨대 인텔 j-960와 같은 일부 종래의 프로세서들에 있어서, 콘텍스트 스위치(context switch) 또는 새로운 프로시저는 물리 레지스터 파일의 전체 콘텐츠들을 메모리에 저장하도록 프로세서에 명령하여 전체 물리적 레지스터 파일이 새로운 프로시저에서 이용가능하게 한다. 호출된 프로시저가 실행을 완료하고 제어를 그의 호출 프로시저에 리턴할때, 이전에 세이브된 레지스터 값들은 물리적 레지스터 파일로 복원되며 호출 프로시저의 실행은 계속된다. 물리적 레지스터 파일 콘텐츠들은 시스템 메모리(RAM)와 같은 "백킹 저장장치"에 세이브된다. 백킹 저장장치가 오프-칩 RAM을 포함할때 모든 콘텍스트 스위치에 대한 다중 오프-칩 메모리 액세스들의 성능 저하를 완화시키기 위하여, 프로세서는 물리적 레지스터 파일의 콘텐츠들을 저장하기 위한 하나 이상의 "새도우(shadow)" 또는 "캐시" 레지스터 파일들(실제 레지스터들을 포함하거나 또는 대안적으로 온-칩 캐시 메모리를 포함할 수 있다)을 제공할 수 있다. 그러나, 전체 물리 레지스터 파일은 새도우 레지스터 저장장치의 경우에서 조차 퍼포먼스 히트(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)는 저장 엘리먼트들의 어레이로서 구성되며, 각각의 저장 엘리먼트는 물리 레지스터 파일(28)의 레지스터들의 3배의 비트폭을 가진다(도 3에 도시됨). 이러한 구성에서, 레지스터 세이브 엔진(30)은 3개의 물리 레지스터들로부터 데이터를 동시에, 즉 단일 사이클에서 판독할 수 있으며, 단일 기록 사이클에서 모든 3개의 레지스터들로부터 단일 백킹 저장 버퍼(32)로 데이터를 기록할 수 있다. 이는 레지스터들이 비활성 프로시저들로부터 역할당될때 물리 레지스터 파일(28)로부터 데이터를 세이브하기 위한 성능 비용을 최소화한다. 유사하게, 만일 물리 레지스터 파일(28)이 3개의 기록 포트들을 부가적으로 포함하면, 물리 레지스터 파일(28)로 데이터를 복원할때, 레지스터 세이브 엔진(30)은 단 일 사이클에서 단일 백킹 저장 버퍼(32) 엔트리로부터 3개의 물리 레지스터들로 복원될 데이터를 판독할 수 있다. 이들 데이터는 단일 사이클에서 물리 레지스터 파일(28)의 3개의 레지스터들에 기록될 수 있다.
백킹 저장 버퍼(32)는 다수의 기술들 및 연산 구성(operational configuration)들로 구현될 수 있다. 예컨대, 백킹 저장 버퍼(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)에 데이터를 저장하며, L1 또는 L2 캐시들 또는 주 시스템 메모리(예컨대, RAM)를 포함할 수 있다. 레지스터 세이브 엔진(30)이 백킹 저장 버퍼(32)의 용량을 늘리기 위하여(free up) 백킹 저장 버퍼(32)로부터 물리 저장 파일(28)로 충분한 데이터를 복원할때, 레지스터 세이브 엔진(30)은 이전에 세이브된 데이터를 백킹 저장장치(36)로부터 판독하여 백킹 저장 버퍼(32)의 스택의 하부에 데이터를 기록한다. 백킹 저장 버퍼(32)를 스택으로서 동작시키는 것은 백킹 저장 버퍼(32) 엔트리들의 비트폭과 무관하다는 것에 유의해야 한다.
백킹 저장 버퍼(32)가 스택으로서 동작하는 일 실시예에서, 최적의 성능을 위하여, 백킹 저장 버퍼(32)는 듀얼-포트(dual-port) 레지스터들로서 구성되며, 스택의 상부 및 하부는 물리 레지스터 파일(28)과 관련하여 앞서 기술된 것들과 유사하게 포인터들에 의하여 유지된다. 이는 예컨대 데이터가 백킹 저장 버퍼(32) 스택의 하부로부터 백킹 저장장치(36)로 세이브되는 것과 동일한 시간에 물리 레지스터 파일(28)로부터 백킹 저장 버퍼(32) 스택의 상부에 세이브된 데이터를 레지스터 세이브 엔진(30)이 푸시(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)의 레지스터들이 자유롭게(free up)되어야 하는지를 결정하며, 자유 공간(free space)의 부수량(concomitant amount)이 백킹 저장 버퍼(BSB)(32)에서 이용가능한지를 결정한다(블록 44). 만일 그렇다면, 하나 이상의 현재 비활성 프로시저들에 할당된 적어도 충분한 수의 레지스터들은 BSB(32)에 그들의 콘텐츠들을 세이브함으로서 역할당된다(블록 48). 그 다음에, RSE(30)는 실행을 진행하고 할당된 PRF(28) 레지스터들에 데이터를 저장할 수 있는 요청하는 새로운 프로시저에 PRF(28)의 기존 역할당된 레지스터들과 함께 역할당된 레지스터들을 할당한다.
만일 충분한 새로운 프로시저들이 호출되고 및/또는 만일 새로운 프로시저들이 레지스터들의 큰 할당들을 필요로하면, BSB(32)의 용량은 최대 또는 거의 최대로 채워진다. 이러한 경우에, 새로운 프로시저에 의한 요청시(블록 40), 만일 PRF(28)에 불충분한 레지스터들이 존재하고(블록 42) 및 BSB에 불충분한 자유 공간이 존재하면(블록 44), RSE(30)는 BSB(32)로부터 오프-칩 RAM과 같은 백킹 저장장치(BS)(36)에 오래된(older) 엔트리들을 세이브할 것이다(블록 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)의 비활성 프로시저와 연관된 데이터를 BSB(32)로부터 판독하고 이를 PRF(28)의 레지스터들에 기록하여 레지스터들을 비활성 프로시저에 할당한다(블록 60). 그 다음에, 비활성 프로시저는 역활성화된다.
만일 비활성 프로시저와 연관된 데이터가 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), 또는 그 자체적으로 실행을 완료할 수 있으며 이전 호출 프로시저에 제어를 리턴할 수 있다.
당업자는 앞의 프로시저들의 명백한 변형들 및 최적화를 인식할 것이다. 예컨대, 데이터가 어디서나 BS(36)에 세이브되고 프로시저를 재활성화하기 위하여 요구될때, RSE(30)는 BSB(32)를 바이패스(bypass)할 수 있으며, 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)의 크기에 대한 하부 경계(lower bound)를 설정한다. 본 발명의 백킹 저장 버퍼(32)는 백킹 저장장치(36)에 대한 오프-칩 액세스들을 방지하거나 또는 최소화하는 고성능 및 저전력 소비를 유지하면서 실리 콘 영역 및 와이어링 복잡성을 포함하는 물리 레지스터 파일(28)의 크기에 대한 상부 경계로서 동일한 수가 사용되도록 한다.
비록 본 발명이 특정 특징들, 양상들 및 실시예들과 관련하여 여기에서 설명되었을지라도, 본 발명의 가장 넓은 범위내에서 다수의 변형들, 수정들 및 다른 실시예들이 가능하다는 것이 명백하며 따라서 모든 변형들, 수정들 및 실시예들은 본 발명의 범위내에 있는 것으로 간주된다. 따라서, 본 실시예들은 제한적이 아니라 예시적인 것으로 모든 양상들에서 해석되며, 첨부된 청구범위의 균등 범위내에 있는 모든 변화들은 여기에 포함된다.

Claims (19)

  1. 전용 백킹 저장 버퍼(dedicated backing store buffer)를 가진 스택형 레지스터 파일 시스템을 관리하는 방법으로서,
    하나 이상의 레지스터들을 물리 레지스터 파일로부터 제 1 프로시저(procedure)로 할당하며, 할당된 레지스터들에 상기 제 1 프로시저와 연관된 데이터를 저장하는 단계;
    상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터를 선택적으로 세이브(save)하며, 제 2 프로시저에 할당하기 위하여 상기 제 1 프로시저에 할당된 하나 이상의 레지스터들을 해제(release)하는 단계; 및
    상기 제 1 프로시저의 연속 실행전에, 상기 전용 백킹 저장 버퍼로부터 상기 하나 이상의 레지스터들로 상기 제 1프로시저와 연관된 데이터를 복원(restore)하고 상기 레지스터들을 상기 제 1 프로시저에 재할당(re-allocate)하는 단계를 포함하는, 스택형 레지스터 파일 시스템 관리 방법.
  2. 제 1항에 있어서, 상기 전용 백킹 저장 버퍼로부터 상기 백킹 저장장치로 상기 제 1 프로시저와 연관된 데이터를 세이브하는 단계, 및 하나 이상의 레지스터들에 상기 제 1 프로시저와 연관된 데이터를 복원하기전에 상기 백킹 저장장치로부터 상기 제 1 프로시저와 연관된 데이터를 검색하는 단계를 더 포함하는, 스택형 레지스터 파일 시스템 관리 방법.
  3. 제 1항에 있어서, 상기 백킹 저장 버퍼의 각각의 어드레싱가능 저장 위치의 비트폭은 상기 레지스터들의 비트폭의 정수배(integral multiple)이며, 다수의 레지스터들에 저장된 상기 제 1 프로시저와 연관된 데이터는 상기 백킹 저장 버퍼의 단일 어드레싱가능 저장 위치에 세이브되는, 스택형 레지스터 파일 시스템 관리 방법.
  4. 제 3항에 있어서, 상기 정수배는 상기 물리 레지스터 파일의 판독 포트들의 수인, 스택형 레지스터 파일 시스템 관리 방법.
  5. 제 4항에 있어서, 상기 정수배 수의 레지스터들은 상기 물리 레지스터 파일로부터 동시에 판독되며, 단일 기록 동작으로 상기 백킹 저장 버퍼에 기록되는, 스택형 레지스터 파일 시스템 관리 방법.
  6. 제 2항에 있어서, 상기 백킹 저장 버퍼는 스택으로서 구현되며, 상기 제 1 프로시저와 연관된 데이터는 상기 데이터가 상기 레지스터들로부터 상기 백킹 저장 버퍼로 세이브될때 상기 백킹 저장 버퍼의 상부로 푸시(push)되며, 상기 제 1 프로시저와 연관된 데이터는 상기 백킹 저장 버퍼가 최대로 채워질때 상기 백킹 저장 버퍼의 하부로부터 상기 백킹 저장장치로 세이브되는, 스택형 레지스터 파일 시스템 관리 방법.
  7. 제 2항에 있어서, 상기 백킹 저장 버퍼는 상기 스택형 레지스터 파일에 전용된 온-칩(on-chip) RAM으로서 구현되는, 스택형 레지스터 파일 시스템 관리 방법.
  8. 제 1항에 있어서, 상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터를 선택적으로 세이브하는 상기 단계는 상기 제 2 프로시저에 할당하기 위하여 상기 물리 레지스터 파일에 불충분한 비할당 레지스터들이 남아있을때만 상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터를 세이브하는 단계를 포함하는, 스택형 레지스터 파일 시스템 관리 방법.
  9. 제 1항에 있어서, 상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터를 선택적으로 세이브하는 상기 단계는 상기 전용 백킹 저장 버퍼에 상기 제 1 프로시저와 연관된 데이터만을 세이브하는 단계를 포함하는, 스택형 레지스터 파일 시스템 관리 방법.
  10. 적어도 프로세서 명령 세트 아키텍처에서 한정된 범용 레지스터들의 수만큼 많은 레지스터들을 포함하는 물리 레지스터 파일 ― 상기 레지스터들은 소프트웨어 프로시저들에 동적으로 할당됨 ―;
    비활성 프로시저들에 할당된 레지스터들로부터 데이터를 선택적으로 세이브하고 상기 프로시저들이 활성화되기전에 상기 레지스터들에 데이터를 복원하도록 동작하는 레지스터 세이브 엔진; 및
    상기 레지스터 세이브 엔진에 전용되고 상기 비활성 프로시저들에 할당된 레지스터들로부터 세이브된 데이터를 저장하도록 동작하는 백킹 저장 버퍼를 포함하는, 프로세서.
  11. 제 10항에 있어서, 상기 백킹 저장 버퍼의 어드레스가능 엔트리들은 상기 물리 레지스터 파일의 레지스터들의 비트폭의 정수배인 비트폭을 가지는, 프로세서.
  12. 제 11항에 있어서, 상기 물리 레지스터 파일은 멀티-포트(multi-port)를 가지며, 상기 정수배는 상기 물리 레지스터 파일의 판독 포트들의 수인, 프로세서.
  13. 제 12항에 있어서, 상기 레지스터 세이브 엔진은 상기 물리 레지스터 파일로부터 정수배 수의 레지스터들을 동시에 판독하고, 단일 기록 동작으로 상기 정수배 수의 레지스터들로부터 상기 백킹 저장 버퍼로 데이터를 기록하도록 동작하는, 프로세서.
  14. 제 10항에 있어서, 상기 백킹 저장 버퍼가 최대로 채워질때 비활성 프로시저들에 할당된 레지스터들로부터 세이브된 데이터를 저장하도록 동작하는 백킹 저장장치를 더 포함하는, 프로세서.
  15. 제 14항에 있어서, 상기 백킹 저장 버퍼는 상기 스택의 상부로 푸시된 데이터를 하나 이상의 레지스터들로부터 저장하고 상기 스택의 상부로부터 팝(pop)된 데이터를 상기 하나 이상의 물리 레지스터들로 복원하도록 동작하는 스택으로서 구현되는, 프로세서.
  16. 제 15항에 있어서, 상기 백킹 저장 버퍼는 상기 백킹 저장 버퍼가 용량에 근접할때 상기 스택의 하부로부터 상기 백킹 저장장치에 데이터를 저장하고, 상기 백킹 저장 버퍼가 상기 물리 레지스터 파일의 레지스터들에 데이터를 복원함으로서 용량을 획득할때 상기 백킹 저장장치로부터 상기 스택의 하부까지 데이터를 검색하도록 동작하는, 프로세서.
  17. 제 14항에 있어서, 상기 백킹 저장 버퍼는 상기 레지스터 세이브 엔진에 전용된 온-칩 RAM으로서 구현되는, 프로세서.
  18. 제 14항에 있어서, 상기 백킹 저장장치는 캐시 메모리인, 프로세서.
  19. 제 14항에 있어서, 상기 백킹 저장장치는 오프-칩 RAM인, 프로세서.
KR1020087012079A 2005-10-20 2006-10-20 스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장버퍼 KR100974750B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/254,320 US7962731B2 (en) 2005-10-20 2005-10-20 Backing store buffer for the register save engine of a stacked register file
US11/254,320 2005-10-20

Publications (2)

Publication Number Publication Date
KR20080064876A true KR20080064876A (ko) 2008-07-09
KR100974750B1 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)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
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寄存器缓存的实现方法
US9971604B2 (en) 2015-02-26 2018-05-15 International Business Machines Corporation History buffer for multiple-field registers
US9996353B2 (en) 2015-02-26 2018-06-12 International Business Machines Corporation Universal history buffer to support multiple register types
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
KR101810044B1 (ko) * 2015-12-31 2017-12-18 홍익대학교 산학협력단 암호화 키 갱신 장치 및 방법
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
US10552164B2 (en) 2017-04-18 2020-02-04 International Business Machines Corporation Sharing snapshots between restoration and recovery
US10564977B2 (en) 2017-04-18 2020-02-18 International Business Machines Corporation Selective register allocation
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10489382B2 (en) 2017-04-18 2019-11-26 International Business Machines Corporation Register restoration invalidation based on a context switch
US10838733B2 (en) 2017-04-18 2020-11-17 International Business Machines Corporation Register context restoration based on rename register recovery
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10649785B2 (en) 2017-04-18 2020-05-12 International Business Machines Corporation Tracking changes to memory via check and recovery
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests
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
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
US11010192B2 (en) * 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
CN107621926B (zh) * 2017-09-19 2020-06-16 珠海市杰理科技股份有限公司 栈区数据存取方法、装置、可读存储介质和计算机设备
CN111176582A (zh) * 2019-12-31 2020-05-19 北京百度网讯科技有限公司 矩阵存储方法、矩阵访问方法、装置和电子设备
CN113377438B (zh) * 2021-08-13 2021-11-30 沐曦集成电路(上海)有限公司 一种处理器及其数据读写方法

Family Cites Families (39)

* Cited by examiner, † Cited by third party
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
AU2001257323A1 (en) 2000-04-27 2001-11-07 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
US6993603B2 (en) 2002-12-09 2006-01-31 Microsoft Corporation Managed file system filter model and architecture
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

Also Published As

Publication number Publication date
BRPI0617528A2 (pt) 2011-07-26
JP5869009B2 (ja) 2016-02-24
JP2012234556A (ja) 2012-11-29
US20070094484A1 (en) 2007-04-26
WO2007048128A3 (en) 2007-06-28
JP2009512941A (ja) 2009-03-26
CN101331448A (zh) 2008-12-24
CN101331448B (zh) 2012-01-04
IL190979A0 (en) 2008-12-29
KR100974750B1 (ko) 2010-08-06
EP1941350A2 (en) 2008-07-09
US7962731B2 (en) 2011-06-14
JP2014130606A (ja) 2014-07-10
JP5529212B2 (ja) 2014-06-25
WO2007048128A2 (en) 2007-04-26

Similar Documents

Publication Publication Date Title
KR100974750B1 (ko) 스택형 레지스터 파일의 레지스터 세이브 엔진용 백킹 저장버퍼
RU2405189C2 (ru) Расширение блока стековых регистров с помощью теневых регистров
US5564031A (en) Dynamic allocation of registers to procedures in a digital computer
US5737624A (en) Superscalar risc instruction scheduling
KR100996753B1 (ko) 시퀀서 어드레스를 관리하기 위한 방법, 맵핑 관리자 및 멀티 시퀀서 멀티스레딩 시스템
US6857047B2 (en) Memory compression for computer systems
US20070282928A1 (en) Processor core stack extension
US20040268093A1 (en) Cross-thread register sharing technique
US7203820B2 (en) Extending a register file utilizing stack and queue techniques
KR20080017292A (ko) 내장 시스템들을 위한 저장 아키텍쳐
US20020056024A1 (en) Processor with register stack engine that dynamically spills/fills physical registers to backing store
US20070055852A1 (en) Processing operation management systems and methods
US7509511B1 (en) Reducing register file leakage current within a processor
US20050228971A1 (en) Buffer virtualization
KR102443593B1 (ko) 하이브리드 메모리 시스템
US6631452B1 (en) Register stack engine having speculative load/store modes
US20030154363A1 (en) Stacked register aliasing in data hazard detection to reduce circuit
US6782470B1 (en) Operand queues for streaming data: A processor register file extension
US6895497B2 (en) Multidispatch CPU integrated circuit having virtualized and modular resources and adjustable dispatch priority
US7206923B2 (en) Method and apparatus for eliminating the need for register assignment, allocation, spilling and re-filling
JP3341662B2 (ja) 情報処理装置及び多ポートレジスタファイル
Gonnet Stack Management and Calling Conventions

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