KR20190107691A - 레지스터 리네이밍, 콜-리턴 예측 및 프리페치의 구현 - Google Patents
레지스터 리네이밍, 콜-리턴 예측 및 프리페치의 구현 Download PDFInfo
- Publication number
- KR20190107691A KR20190107691A KR1020197023272A KR20197023272A KR20190107691A KR 20190107691 A KR20190107691 A KR 20190107691A KR 1020197023272 A KR1020197023272 A KR 1020197023272A KR 20197023272 A KR20197023272 A KR 20197023272A KR 20190107691 A KR20190107691 A KR 20190107691A
- Authority
- KR
- South Korea
- Prior art keywords
- pointer
- processor
- physical
- register
- call
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 49
- 230000004044 response Effects 0.000 claims abstract description 28
- 230000008569 process Effects 0.000 claims abstract description 24
- 230000003287 optical effect Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000013507 mapping Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 239000011324 bead Substances 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 210000004027 cell Anatomy 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 210000000352 storage cell Anatomy 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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/30101—Special purpose registers
-
- 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
-
- 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/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- 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
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
프로세서는 복수의 물리적 레지스터들 및 복수의 물리적 레지스터들에 통신 가능하게 커플링된 프로세서 코어를 포함하고, 프로세서 코어는 프로세스를 실행하고, 프로세스는, 비순차 실행을 위한 콜 명령의 발행에 대한 응답으로, 복수의 물리적 레지스터들의 헤드 포인터에 기반하여, 복수의 물리적 레지스터들 중 제1 물리적 레지스터를 식별하고, 리턴 어드레스를 제1 물리적 레지스터에 저장하고 ― 제1 물리적 레지스터는 제1 식별자와 연관됨 ― , 프로세스와 연관된 콜 스택의 비순차 포인터에 기반하여, 콜 스택의 제1 엔트리에 제1 식별자를 저장하고, 그리고 콜 스택의 제2 엔트리를 가리키기 위해, 콜 스택의 길이만큼 변조되어, 콜 스택의 비순차 포인터를 증분하기 위한 복수의 명령들을 포함한다.
Description
[0001]
본 출원은 2017년 1월 13일에 출원된 미국 가출원 제62/446,130호를 우선권으로 주장하고, 상기 출원의 내용은 인용에 의해 본원에 포함된다.
[0002]
본 개시내용은 프로세서들에 관한 것이며, 더 상세하게는, 프로세서와 연관된 콜 스택 및 레지스터들의 리네이밍을 관리하기 위한 시스템들 및 방법들에 관한 것이다.
[0003]
프로세서들(예를 들어, 중앙 처리 장치(CPU)들)은 시스템 소프트웨어(예를 들어, 운영 시스템)를 포함하는 소프트웨어 애플리케이션들 및 사용자 소프트웨어 애플리케이션들을 실행할 수 있다. 프로세서에 의해 실행되는 소프트웨어 애플리케이션은 운영 시스템에 대한 프로세스로 지칭된다. 소프트웨어 애플리케이션의 소스 코드는 기계 명령들로 컴파일링될 수 있다. 프로세서 아키텍처와 관련하여 특정된 명령 세트(또한 ISA(instruction set architecture)로 지칭됨)는 프로세서 동작들을 지시하는 커맨드들을 포함할 수 있다.
[0004]
본 개시내용은 아래에서 주어진 상세한 설명 및 본 개시내용의 다양한 실시예들의 첨부된 도면들로부터 더욱 완전하게 이해될 것이다. 그러나, 도면들은 본 개시내용을 특정 실시예들로 제한하는 것으로 취급되지 않아야 하며, 단지 설명 및 이해를 위한 것일 뿐이다.
[0005] 도 1은 본 개시내용의 실시예에 따른 프로세서를 포함하는 SoC(system-on-a-chip)를 예시한다.
[0006] 도 2는 레지스터 리네이밍에 사용되는 물리적 레지스터들의 큐에 대한 비드 포인터(bead pointer) 및 테일 포인터(tail pointer)의 사용을 예시한다.
[0007] 도 3은 추측 명령 실행의 콜 명령들 및 리턴 명령들을 관리하기 위해 콜 스택을 사용하는 것의 예를 예시한다.
[0008] 도 4는 본 개시내용의 실시예에 따른 컴퓨팅 디바이스를 예시한다.
[0009] 도 5는 본 개시내용의 실시예에 따른 콜 스택 및 물리적 레지스터들의 구현을 예시한다.
[0010] 도 6은 본 개시내용의 실시예에 따른, 콜/리턴 명령들을 추측 실행하기 위한 방법을 예시하는 블록도이다.
[0005] 도 1은 본 개시내용의 실시예에 따른 프로세서를 포함하는 SoC(system-on-a-chip)를 예시한다.
[0006] 도 2는 레지스터 리네이밍에 사용되는 물리적 레지스터들의 큐에 대한 비드 포인터(bead pointer) 및 테일 포인터(tail pointer)의 사용을 예시한다.
[0007] 도 3은 추측 명령 실행의 콜 명령들 및 리턴 명령들을 관리하기 위해 콜 스택을 사용하는 것의 예를 예시한다.
[0008] 도 4는 본 개시내용의 실시예에 따른 컴퓨팅 디바이스를 예시한다.
[0009] 도 5는 본 개시내용의 실시예에 따른 콜 스택 및 물리적 레지스터들의 구현을 예시한다.
[0010] 도 6은 본 개시내용의 실시예에 따른, 콜/리턴 명령들을 추측 실행하기 위한 방법을 예시하는 블록도이다.
[0011]
명령은 입력 및 출력 파라미터들에 대해 레지스터들을 참조할 수 있다. 예컨대, 명령은 입력 및 출력 레지스터들의 식별자들을 저장하기 위한 하나 이상의 피연산자 필드들을 포함할 수 있다. 레지스터들은 데이터 값들을 저장하여, 계산을 위한 값들의 소스들로서 그리고/또는 명령에 의해 수행된 계산의 결과들에 대한 목적지들로서 역할을 할 수 있다. 예컨대, 명령()은 레지스터(r5)에 저장된 값을 판독하고 값을 일("1")만큼 증분하고, 증분된 값을 레지스터(r3)에 저장할 수 있다. 명령 세트 아키텍처는, 명령 세트 아키텍처에 특정된 명령들에 의해 참조될 수 있는 레지스터들(아키텍처 레지스터들로 지칭됨)의 세트를 정의할 수 있다.
[0012]
프로세서들은 명령 세트 아키텍처의 규격에 따라 구현될 수 있다. 프로세서들은 프로세서의 명령 세트 아키텍처에 정의된 아키텍처 레지스터를 지원하는 데 사용될 수 있는 물리적 레지스터들을 포함할 수 있다. 일부 구현에서, 각각의 아키텍처 레지스터는 대응하는 물리적 레지스터와 연관된다. 예로서 다음의 코드 시퀀스가 사용되고,
여기서 프로세서가 나눗셈(div) 명령을 실행함으로써 아키텍처 레지스터(r3)를 먼저 기록하고, 이어서 덧셈 명령을 실행함으로써 레지스터(r3)를 판독하고, 마지막으로 곱셈(mui) 명령을 실행함으로써 레지스터(r3)를 덮어쓴다. 각각의 아키텍처 레지스터가 고유한 물리적 레지스터와 연관될 때, 파이프라인 아키텍처를 구현하는 프로세서에 의한 명령들의 시퀀스의 실행은 판독-후-기록 위험, 즉, 이전의 명령이 완료되기 전에, 나중의 명령에 의해 r3을 덮어쓰는 것을 발생시킬 수 있다. 따라서, 구현은, 덧셈 명령이 시작되기(그리고 나눗셈 명령에 의해 생성된 T3의 값을 판독하기) 전에 곱셈 명령이 완료(그리고 r3을 기록)할 수 없도록 보장할 필요가 있다.
[0013]
고성능 프로세서 구현들은 명령 아키텍처 세트에 정의된 아키텍처 레지스터들보다 더 많은 물리적 레지스터들을 사용할 수 있다. 아키텍처 레지스터는 시간 경과에 따라 상이한 물리적 레지스터들에 맵핑될 수 있다. 현재 할당되지 않은 물리적 레지스터들의 리스트(사용가능한(free) 리스트로 지칭됨)는 사용을 위해 이용 가능한 물리적 레지스터들을 제공할 수 있다. 새로운 값이 아키텍처 레지스터에 기록될 때마다, 그 값은 새로운 물리적 레지스터에 저장되고, 아키텍처 레지스터들과 물리적 레지스터 간의 맵핑은 새롭게 생성된 맵핑을 반영하도록 업데이트된다. 맵핑의 업데이트는 레지스터 리네이밍이라 불린다. 표 1은 위의 명령들의 시퀀스의 실행에 적용된 레지스터 리네이밍을 예시한다.
[0014]
표 1에 도시된 예에서, 아키텍처 레지스터들은 소문자(r#)로 표기되고, 물리적 레지스터들은 대문자(R#)로 표기된다. 아키텍처 레지스터(r3)는 사용가능한 리스트의 물리적 레지스터(R8)에 할당된다. 나눗셈 명령의 결과는 R8에 기록된다. 덧셈 명령은 물리적 레지스터(R8)로부터 판독된다. 곱셈 명령은 레지스터의 리네이밍 후에 물리적 레지스터(R9)에 기록된다. 결과적으로, 나눗셈 명령의 결과를 덮어쓰는 것을 피할 필요없이, 곱셈 명령이 실행될 수 있는데, 왜냐하면 아키텍처 레지스터(r3)가 레지스터 리네이밍을 통해 상이한 물리적 레지스터들로 맵핑되기 때문이다.
[0015]
레지스터 리네이밍은 또한, 더 이상 필요하지 않고 사용가능한 리스트에 리턴될 수 있는 레지스터들을 결정할 수 있다. 예컨대, 덧셈 명령이 R8에 저장된 값을 판독한 후에, R8은 더 이상 필요하지 않은 것으로 결정되고, 사용가능한 리스트로 리턴될 수 있다.
[0016]
레지스터 리네이밍은 전형적으로, 고성능을 달성하기 위해 명령들의 파이프라인 실행에서 비순차 실행과 결합된다. 이러한 경우에, 레지스터를 다시 사용가능한 리스트에 릴리스할지 여부의 결정은 순차 상태를 유지할 필요성을 고려할 필요가 있다(즉, 이를테면, 예컨대, 다른 명령들의 실패한 추측성(speculative) 실행을 포함하는 특정 조건들 하에서 명령 실행의 시작에서는 프로세서 상태를 오리지널 상태로 롤백하는 능력을 보존함). 예컨대, 곱셈 명령이 폐기(retire)될 때까지, R8이 릴리스될 수 없는 것이 가능하다.
[0017]
사용가능한 리스트에서 어떠한 레지스터들도 이용 가능하지 않다면, 프로세서는, 일부 이미 발행된 명령들이 자신들의 실행을 완료할 때까지 더 많은 명령을 발행하는 것을 지연(hold up)시키고, 물리적 레지스터를 사용가능한 리스트로 릴리스할 수 있다. 이 지점에서, 프로세서는 새로운 명령을 발행하는 것을 재개할 수 있다.
[0018]
아키텍처 레지스터들은 상이한 타입들(예컨대, 부동 소수점 값들을 저장하기 위한 부동 소수점, 정수 값들을 저장하기 위한 범용 정수 등)으로 분류될 수 있다. 일부 구현들에서, 아키텍처 레지스터들의 각각의 타입은 레지스터 리네이밍을 위해 대응하는 물리적 레지스터들의 단일 풀과 연관된다. 예컨대, 아키텍처 부동 소수점 레지스터들을 리네이밍하는 데 사용되는 부동 소수점 물리적 레지스터들의 풀 및 아키텍처 범용 레지스터들을 리네이밍하는 데 사용되는 범용 물리적 레지스터들의 풀이 존재할 수 있다.
[0019]
특정 타입의 아키텍처 레지스터의 총수가 적거나 상이한 아키텍처 레지스터들이 상이한 거동들을 나타내는 구현들에서, 각각의 아키텍처 레지스터들은 물리적 레지스터들의 풀과 연관될 수 있다. 예컨대, 특정 타입 t의 2개의 아키텍처 레지스터들(예컨대, $t0 및 $tl)만이 명령 아키텍처 세트에 정의되면, 8개의 물리적 레지스터들은, $t0의 리네이밍에 전용되는 4개의 물리적 레지스터들의 제1 풀, 및 $tl의 리네이밍에 전용된 4개의 물리적 레지스터들의 또 다른 풀을 포함하여, 2개의 풀들로 분할될 수 있다. 이러한 접근법은 더 큰 아키텍처 레지스터들의 세트들에 대해 비효율적이다. 예컨대, 16개의 범용 레지스터들 각각은 적어도 6번 리네이밍될 필요가 있고, 16개의 풀들을 구성하기 위해 총 96개의 물리적 레지스터들이 필요로 된다.
[0020]
물리적 레지스터들의 단일 풀이 아키텍처 레지스터와 연관되면, 풀은 물리적 레지스터의 순환 버퍼(rotating buffer), 즉, 큐를 사용하여 구현될 수 있다. 이 구현은 다음의 컴포넌트들을 포함할 수 있다.
· 수(N)개의 물리적 레지스터들을 포함하는 물리적 레지스터들의 어레이,
· 어레이에 인덱싱되는 헤드 포인터(HD),
· 어레이에 또한 인덱싱되는 테일 포인터(TL), 및
· 물리적 레지스터들의 풀이 아키텍처 레지스터들에 완전히 맵핑되는지 여부를 검출하기 위한 컴포넌트. 물리적 레지스터들의 풀이 아키텍처 레지스터들에 완전히 맵핑되는지 여부를 검출하기 위해, 프로세서는 다음을 수행할 수 있다.
1. 사용중인 물리적 레지스터의 수를 기록(keep a count)하거나, 또는
2. HD 및 TL의 포지션들을 비교한다.
[0021]
헤드 포인터 및 테일 포인터는 도 2에 도시된 바와 같이 사용될 수 있으며, 여기서 리네이밍 레지스터들은 LIFO(last-in-first-out) 또는 FIFO(first-in-first-out)로 액세스될 수 있는 원형 스택으로서 구현된다. 리네이밍 레지스터들의 다른 구현들과 비교하여, 리네이밍 레지스터들의 원형 스택은 2개의 포인터들(HL 및 TL)을 사용하여 사용가능한 물리적 레지스터 및 점유된 물리적 레지스터를 추적한다. 따라서, 원형 스택은, 더 작은 회로 영역을 차지하고 더 적은 전력을 소비하는 리네이밍 레지스터들의 더 간단한 구현이다. 물리적 레지스터들의 완전히 맵핑된 풀이 헤드 포인터와 테일 포인터 간의 비교에 기반하여 결정된다고 가정하면, 프로세서는 다음을 수행할 수 있다.
· 초기에, 동일한 값(예컨대, 0)을 가리키도록 헤드 포인터 및 테일 포인터 둘 모두를 설정하고,
· 판독 명령을 실행하는 프로세서가 아키텍처 레지스터를 참조함으로써 새로운 아키텍처 레지스터가 리네이밍될 때, 프로세서는 내용이 판독되는 물리적 레지스터를 가리키도록 헤드 포인터를 이동시킬 수 있고,
· 기록 명령을 실행하는 프로세서가 아키텍처 레지스터를 참조함으로써 새로운 아키텍처 레지스터가 리네이밍될 때, 프로세서는 헤드 포인터를 모듈로 물리적 레지스터의 총수(N)로 증분할 수 있고, 여기서 증분된 헤드 포인터는 기록되어야 하는 새로운 물리적 레지스터를 가리킨다. 헤드 포인터를 증분하는 것은 더 높은 인덱스 값에 의해 식별되는 다른 물리적 레지스터를 가리키도록 헤드 포인터를 이동시키는 것을 포함할 수 있고,
· 헤드 포인터가 테일 포인터보다 작은 경우(모듈로 N), 프로세서는 물리적 레지스터들의 풀이 완전히 소모된(또는 모든 레지스터들이 아키텍처 레지스터들에 맵핑된) 것으로 결정할 수 있고, 기록 동작을 인보크하는 명령들을 아키텍처 레지스터에 발행하는 것을 정지시킬 수 있고,
· 물리적 레지스터들이 LIFO(Last In First Out) 순서에서 해제되면, 프로세서는 테일 포인터(모듈로 N)를 증분하고, 따라서 결과적으로 테일 포인터에 의해 지시되는 이전 포지션을 해제시킬 수 있다. 물리적 레지스터들이 FIFO(First In First Out) 순서에서 해제될 때, 프로세서는 헤드 포인터(모듈로 N)를 감분할 수 있다.
· 명령들의 잘못된 추측성(비순차) 실행으로 인해 프로세서의 실행 상태들의 롤백에 대한 응답으로, 프로세서는 아키텍처 레지스터를, 롤백에 의해 해제되지 않은 큐의 마지막 물리적 레지스터로 맵핑할 수 있다. 일부 구현들에서, 이는 헤드 포인터를 테일 포인터의 값으로 설정하는 것과 동등할 수 있다.
[0022]
도 1은 본 개시내용의 실시예에 따른 프로세서(102)를 포함하는 SoC(system-on-a-chip)(100)을 예시한다. 프로세서(102)는 SoC(100)와 같은 반도체 칩셋 상에 제조된 논리 회로를 포함할 수 있다. 프로세서(100)는 CPU(central processing unit), GPU(graphics processing unit), 또는 멀티-코어 프로세서의 프로세싱 코어일 수 있다. 도 1에 도시된 바와 같이, 프로세서(102)는 명령 실행 파이프라인(104) 및 레지스터 공간(106)을 포함할 수 있다. 파이프라인(104)은 다수의 파이프라인 스테이지들을 포함할 수 있고, 각각의 스테이지는 프로세서(102)의 ISA(instruction set architecture)에서 특정된 명령을 완전히 실행하는 데 필요한 멀티-스테이지 프로세스에서 특정 스테이지의 동작들을 수행하도록 제조된 논리 회로를 포함한다. 하나의 예시적인 구현에서, 파이프라인(104)은 명령 페치/디코드 스테이지(110), 데이터 페치 스테이지(112), 실행 스테이지(114) 및 라이트 백 스테이지(116)를 포함할 수 있다.
[0023]
레지스터 공간(106)은 프로세서(102)와 연관된 상이한 타입들의 물리적 레지스터들을 포함하는 논리 회로 영역이다. 일 실시예에서, 레지스터 공간(106)은, 특정 수의 물리적 레지스터들을 각각 포함할 수 있는 레지스터 풀들(108, 109)을 포함할 수 있다. 풀들(108, 109) 내의 각각의 레지스터는 파이프라인(104)에서 실행되는 명령들에 의해 프로세싱되는 데이터 아이템을 저장하기 위한 비트 수(레지스터의 "길이"로 지칭됨)를 포함할 수 있다. 예컨대, 구현들에 의존하여, 레지스터 풀들(108, 109) 내의 레지스터들은 32-비트, 64-비트, 128-비트, 256-비트 또는 512-비트일 수 있다.
[0024]
프로그램의 소스 코드는 프로세서(102)와 연관된 ISA(instruction set architecture)에 정의된 일련의 기계-실행 가능한 명령들로 컴파일링될 수 있다. 프로세서(102)가 실행 가능한 명령들을 실행하기 시작할 때, 이들 기계-실행 가능한 명령들은, 순차적으로(순차) 또는 분기들(비순차)로 실행되도록 파이프라인(104) 상에 배치될 수 있다. 명령 페치/디코드 스테이지(110)는 파이프라인(104) 상에 배치된 명령을 리트리브(retrieve)하고, 그 명령과 연관된 식별자를 식별할 수 있다. 명령 식별자는 수신된 명령과 프로세서(102)의 ISA에 특정된 명령과 연관시킬 수 있다.
[0025]
ISA에 특정된 명령들은 GPR(general purpose register)들에 저장된 데이터 아이템들을 프로세싱하도록 설계될 수 있다. 데이터 페치 스테이지(112)는 GPR들로부터 프로세싱될 데이터 아이템들(예컨대, 바이트들 또는 니블들(nibbles))을 리트리브할 수 있다. 실행 스테이지(114)는 프로세서(102)의 ISA에 특정된 명령들을 실행하기 위한 논리 회로를 포함할 수 있다.
[0026]
일 구현에서, 실행 스테이지(114)와 연관된 논리 회로는 다수의 "실행 유닛들"(또는 기능 유닛들)을 포함할 수 있으며, 이들 각각은 특정 명령들의 세트를 수행하도록 전용된다. 이들 실행 유닛들에 의해 수행되는 모든 명령들의 수집은 프로세서(102)와 연관된 명령 세트를 구성할 수 있다. 데이터 페치 스테이지(112)에 의해 리트리브된 데이터 아이템들을 프로세싱하기 위한 명령의 실행 후에, 라이트 백 스테이지(116)는 결과들을 출력하여 레지스터 풀들(108, 109) 내의 물리적 레지스터들에 저장할 수 있다.
[0027]
프로세서(102)의 ISA는 명령을 정의할 수 있고, 프로세서(102)의 실행 스테이지(114)는 ISA에 정의된 명령의 하드웨어 구현을 포함하는 실행 유닛(118)을 포함할 수 있다. 하이-레벨 프로그래밍 언어로 코딩된 프로그램은 기능의 콜을 포함할 수 있다. 기능의 실행은 명령들의 시퀀스의 실행을 포함할 수 있다. 기능의 실행의 시작에서, 파이프라인(104)의 실행 스테이지(114)는 리턴 어드레스를 지정된 저장 위치(예컨대, 리턴 레지스터)에 저장함으로써 리턴 어드레스를 보존할 수 있다. 리턴 어드레스는 명령 포인터를 저장하는 저장 위치를 가리킬 수 있다. 기능 실행의 종결 시에, 리턴 명령은 리턴 어드레스로서 저장된 명령 포인터로 리턴할 수 있다. 일 구현에서, 프로세서(102)는 실행되는 기능들의 리턴 어드레스들에 대한 포인터들(122)을 저장하기 위한 스택 데이터 구조인 콜 스택(120)을 포함할 수 있다. 콜 스택(120)은 콜 후에 다음의 명령의 위치 ― 즉, 그 콜에 대한 타겟 매칭 리턴이 될 어드레스 ― 를 (예컨대, 어드레스 포인터를 통해) 추적할 수 있다. 표 2에 도시된 바와 같은 콜들의 시퀀스가 고려된다.
[0028]
표 2의 콜들의 시퀀스에서, 콜 스택(120)은 콜들 및 리턴들(콜 포인터+4)을 추적하는 데 사용되고, 여기서 A, B, C는 콜들이고, X, Y, Z는 리턴들이다. 이 포인터들은 콜들 시에 콜 스택(120)에 푸시되고, 리턴들 후에 팝(pop)된다. 다수의 쌍들의 콜/리턴들이 파이프라인(104)에서 실행될 때, 리턴 명령의 어드레스가 콜 스택(120)의 최상부로 분기될 가능성이 매우 높다. 표 3은 표 2에 도시된 콜들에 대한 콜 스택을 도시하고, 여기서 어드레스가 32 비트라고 가정된다.
[0029]
일부 구현들에서, 리턴 어드레스를 레지스터(콜 B를 수행한 후, 예컨대, [B+4])에 기록하는 동안, 새로운 어드레스로 분기되는 콜 명령에 의해 콜이 수행된다. 대응하는 리턴 명령은 레지스터로부터 판독되고, 그 어드레스로 분기된다. 이러한 콜 및 리턴 명령들은 전용 명령들일 수 있거나, 점프/분기 명령들의 변형들일 수 있다.
[0030]
일부 구현들에서, 콜/리턴 명령의 정의, 또는 사용된 소프트웨어 콜링 규칙(convention) 중 어느 하나로 인해, 리턴 어드레스를 저장하는 레지스터는 상이한 콜들에 대해 동일한 아키텍처 레지스터일 수 있다. 어떠한 개재 리턴도 없이 연속적으로 수행되는 2개 콜들이 존재하면, 제2 콜은 리턴 레지스터를 덮어쓸 수 있다. 그래서, 리턴 레지스터를 백업하여, 나중에 리턴 레지스터에 값을 다시 복사하기 위해 리턴 어드레스를 보존할 필요가 있다.
[0031]
명령들을 추측성으로 비순차적으로 발행하는 고성능 구현에서, 리턴 명령이 발행될 때, 파이프라인(104)(예컨대, 라이트 백 회로(116))은 리턴 타겟에서 명령들을 페칭할 필요가 있을 수 있다. 그러나, 콜들의 시퀀스가 추측성으로 수행되기 때문에, 리턴 어드레스가 사용 불가할 수 있다. 이 경우, 파이프라인(104)은 콜 스택에 기반하여 다음의 어드레스를 예측하기 위한 예측기 회로(124)를 포함할 수 있다. 예측기 회로(124)는, 리턴의 타겟을 결정하는 라이트 백 회로(116)의 부분일 수 있다. 일 구현에서, 예측기 회로(124)는, 다음의 리턴 어드레스를 예측하기 위해 콜-스택의 헤드에서의 값을 사용할 수 있다.
[0032]
실행의 일부 나중 지점에서, 예측된 리턴 어드레스는 실제 리턴 어드레스와 비교된다. 이러한 2개의 리턴 어드레스들이 상이하면, 리턴 예측은 부정확한 것으로 결정된다. 프로세서 상태는 리턴 명령에 대해 순차 상태로 롤백되고, 명령 페치는 정확한 어드레스에서 재개된다.
[0033]
프로세서(102)가 명령들의 추측성 실행을 허용하는 파이프라인(104)으로 구현될 때, 콜 스택은 순차 컴포넌트(IO) 및 비순차 컴포넌트(OoO)를 포함할 수 있다. 순차 컴포넌트(IO)는 폐기된 모든 콜/리턴 명령들을 기록하고, 비순차 컴포넌트는 추측성으로 발행된 명령들을 포함하여 발행된 모든 콜/리턴 명령들을 기록한다.
[0034]
콜 스택의 일부 구현들은 명령들의 추측성 실행을 지원하기 위한 다음의 컴포넌트들을 포함할 수 있다.
· 결정된 크기(M, 여기서 M은 정수 값)의 어드레스 어레이, 여기서 어드레스 어레이는 어드레스 공간 크기의 결정된 크기로 특정된 메모리 영역일 수 있음,
· IO ToS(in-order top-of-stack), 및
· OoO ToS(out-of-order top-of-stack).
[0035]
이러한 컴포넌트들은 다음과 같이 사용할 수 있다.
· 콜 명령이 발행될 때, 리턴 어드레스는 현재 OoO ToS에 의해 지시되는 위치에서의 스택에 추가되고, OoO ToS 포인터는 모듈로 M(M은 콜 스택의 길이임)으로 증분된다.
· 리턴 명령이 발행될 때, OoO ToS에 저장된 값은 예측된 다음의 어드레스로서 사용되고, OoO ToS 포인터는 모듈로 M으로 감분된다.
· 콜(또는 리턴) 명령이 폐기될 때, IO ToS는 그에 대응하여 모듈로 M으로 증분(또는 감분)된다.
· 어떤 이유로든 프로세서 상태가 롤백되면, OoO ToS는 IO ToS로 설정된다.
[0036]
도 3은 추측성 명령 실행의 콜/리턴을 관리하기 위해 콜 스택을 사용하는 예를 예시한다. 도 3에 도시된 바와 같이, 프로세서(102)는 콜 스택을 유지할 수 있다. 302에서, 콜 스택은 초기에 콜 스택의 동일한 엔트리를 가리키는 IO 포인터 및 OoO 포인터 둘 모두를 가질 수 있다. 엔트리는 A+4의 리턴 어드레스를 저장할 수 있다. 304에서, 프로세서(102)는 제2 명령(B)을 추측성으로 실행하고 모듈로 M을 OoO 포인터로 증가시킬 수 있다. OoO 포인터는 제2 콜(B에) 대한 예측 리턴 어드레스(B+4)를 저장하는 엔트리를 가리킬 수 있다. 306에서, 프로세서(102)는 제2 콜(B)을 완료하고, OoO 포인터를 예측된 리턴 어드레스(예측된 B+4)로 설정할 수 있다. 308에서, 프로세서(102)는 제1 콜(A)을 추측성으로 완료하고, OoO를 예측된 리턴 어드레스(A+4)로 설정할 수 있다. 310에서, 프로세서는 실제로 제2 콜(B)을 폐기하고, IO 포인터를 제2 콜(B)의 리턴 어드레스로 설정할 수 있다. 312에서, 프로세서는 실제로 제2 콜(B)을 폐기하고 이로부터 리턴하고, IO 포인터를 제1 콜(A)의 리턴 어드레스로 설정할 수 있다. 단계(314)는 상태(312) 후의 예외의 효과를 보여준다. IO 포인터 및 OoO 포인터가 매칭하지 않기 때문에, 314에서, 프로세서(102)는 OoO ToS를 IO ToS로 현재 순차적으로 설정하는 것으로 롤백하여, A로부터의 리턴이 아직 폐기되지 않았음을 나타낼 필요가 있을 수 있다.
[0037]
일부 구현들에서, 언더-플로우 조건을 검출하기 위한 특수 논리 회로가 존재할 수 있고, 여기서 연속적인 리턴들의 수는 콜 스택의 크기(M)를 초과한다. 이 경우에, 프로세서는 예측을 디스에이블하고, 실제 리턴 어드레스가 폐칭되기를 대기하는 로직을 포함할 수 있다.
[0038]
일부 구현들에서, 리턴 레지스터 ― 콜들 및 리턴들에 사용되는 레지스터 ― 는 특정 아키텍처 레지스터에 고정된다. 리네이밍의 부분으로서, 이 아키텍처 레지스터는, 덮어쓰여질 때마다 새로운 물리적 레지스터로 리네이밍된다. 예컨대, 콜 명령이 실행될 때마다, 그 리턴 레지스터가 리네이밍되고 새로운 물리적 레지스터로 할당된다. 리턴 레지스터에 저장된 값은, 콜 명령을 실행한 후 명령의 어드레스이다. 리턴 레지스터 리네이밍의 다른 이유들은, 기능 콜링 시퀀스 동안에 리턴 어드레스 값들을 저장하고 복원하는 데 사용된 어떠한 수단에 의해 덮어쓰여지는 리턴 어드레스 레지스터를 포함할 수 있다.
[0039]
레지스터 리네이밍이 위에 설명된 바와 같이 큐를 사용하여 구현될 때, 콜 스택은, 콜들에 의해 기록된 리네이밍 엔트리들의 서브세트(즉, 리네이밍 레지스터 풀의 물리적 레지스터들)를 사용하여 구현될 수 있다. 본 개시내용의 구현들은 레지스터 리네이밍 엔트리들을 사용하여 콜 스택을 구현하기 위한 시스템들 및 방법들을 제공할 수 있다. 별개의 인덱스 시스템들을 사용하여 콜 스택 및 리네이밍 레지스터들을 구현하는 것과 비교하여, 본 개시내용의 구현들은 콜 및 리턴 명령들을 관리하는데 필요한 회로 영역 및 전력 소비를 감소시킨다. 예컨대, 콜 스택 및 리네이밍 레지스터 풀이 개별적으로 구현되면, 콜 백의 엔트리들은 전체 어드레스를 저장하기 위해 64 비트-폭일 수 있다. 콜 스택이 리네이밍 레지스터 인덱스를 저장하도록 구현되면, 콜 스택의 엔트리들은 더 적은 비트들을 요구할 수 있다. 예컨대, 8 리네이밍 레지스터들의 풀은 3 비트를 사용하여 인덱싱되고, 따라서 프로세서의 회로 영역과 전력 소비를 감소시킬 수 있다.
[0040]
본 개시내용의 일 실시예에서, 콜 스택의 엔트리들은, 리턴 어드레스들을 저장하기 위해 고정된 아키텍처 레지스터를 사용하는 것보다는 리턴 어드레스들을 저장하는 리네이밍 레지스터들의 어레이에 인덱싱된다. 도 4는 본 개시내용의 실시예에 따른 컴퓨팅 디바이스(400)를 예시한다. 도 4에 도시된 바와 같이, 프로세서(402)는, 레지스터들(406A-406C)에 직접적으로 인덱싱되는 엔트리들(404A-404C)을 포함하는 콜 스택(408)을 포함할 수 있다. 예컨대, 8 레지스터 풀의 레지스터들은 3 비트들만을 사용하여 인덱싱될 수 있다. 레지스터 풀(108) 내의 레지스터들(406A-406C)은 리네이밍 레지스터들로서 사용된다. 따라서, 콜 스택(408)은 리네이밍 레지스터들(406A-406C)을 사용하여 직접적으로 인덱싱한다. 다음의 예는 이러한 실시예가 어떻게 작동하는지를 예시할 수 있다. 다음을 포함하는 2개의 콜들의 시퀀스가 고려된다.
여기서 콜 명령들은 리턴 아키텍처 레지스터($btr)에 기록된다. 이 시퀀스에 대한 콜 스택은 다음과 같다.
명령 어드레스가 8 바이트를 포함한다고 가정되고, 이는 각각의 엔트리에 대해 64-비트 어드레스를 의미한다. 제1 콜(콜 X)에 대한 리턴 아키텍처 레지스터($btr)는 $BTR0으로 리네이밍되고, 제2 콜(콜 Y)에 대해 $BTR2로 리네이밍된다고 추가로 가정된다. 이러한 2개의 물리적 레지스터들에 저장된 값들은 다음과 같다.
[0041]
콜 스택은, 리턴 어드레스를 포함하는 물리적 레지스터의 인덱스 번호를 리턴 레지스터에 저장함으로써 구현될 수 있다. 이러한 특정 시퀀스에서, 콜 스택은 다음에 저장함으로써 구현될 수 있다.
8개의 물리적 리턴 레지스터들이 존재하면, 콜 스택에서 인덱싱하기 위해 엔트리 당 3 비트가 필요로 된다. 콜 Y로부터의 리턴 어드레스에서 리턴 어드레스를 예측하기 위해, 실행 스테이지는 콜 스택을 판독하고, 판독치에 기반하여, (B+4)인 $BTR2를 확인한다.
[0042]
도 5는 본 개시내용의 실시예에 따른 콜 스택(502) 및 물리적 레지스터(504)의 구현(500)을 예시한다. 콜 스택(502)은 위에 논의된 바와 같이 IO 포인터 및 OoO 포인터와 연관될 수 있다. 물리적 레지스터들(504)은 위에 논의된 바와 같이 헤드 포인터(HD) 및 테일 포인터(TL)와 연관된 큐로서 구현될 수 있다. 물리적 레지스터들(504)은 리턴 어드레스들을 저장하는 데 사용된다. 콜 스택(502) 및 물리적 레지스터(504)는 다음과 같이 협력하여 작동할 수 있다.
· 콜 명령은 비순차 실행을 위해 명령 실행 파이프라인(예컨대, 파이프라인(104))으로 발행되고,
· 명령 실행 회로(예컨대, 실행 유닛(114))는 콜 명령에 대응하는 리턴 어드레스를, 리네이밍 물리적 레지스터들의 큐의 헤드(HD) 포인터에 의해 지시된 물리적 레지스터에 저장할 수 있으며, 여기서 HD 포인터는 인덱스 값에 의해 식별되고,
· 이어서, 명령 실행 회로는, 콜 스택의 OoO 포인터에 의해 지시되는 콜 스택의 엔트리에, 현재 리턴 어드레스 레지스터를 나타내는 HD 포인터의 인덱스 값을 저장하고, OoO 포인터를 콜 스택의 모듈로 길이(M)로 증분하게 할 수 있다. 모듈로 M(정수)을 증분하는 것은 HD =(HD+1)%M이라는 것을 의미한다. 예컨대, M이 8이고 HD가 7이면, HD의 새로운 값은 0이고,
· 비순차 실행을 위해 콜 명령과 연관된 리턴 명령이 발행될 때, 명령 실행 회로는 OoO 포인터에 의해 지시된 엔트리에 저장된 인덱스 값을 먼저 결정하고, 리네이밍 물리적 레지스터들의 큐의 리턴 어드레스 레지스터를 결정할 수 있다. OoO에 의해 지시된 리턴 어드레스 레지스터는 예측된 다음의 명령 어드레스를 포함할 수 있다. OoO 포인터는 모듈로 M으로 감분되고,
· 콜(또는 리턴) 명령이 폐기될 때, IO 포인터는 모듈로 M으로 증분(또는 감분)된다.
· 어떤 이유로든 프로세서 상태가 롤백되면, OoO 포인터는 IO 포인터로 설정된다.
[0043]
본 개시내용의 구현은 회로 영역 사용량의 측면에서 전통적인 콜-스택 구현물보다 더 효율적인데, 왜냐하면 엔트리들이 전체 메모리 어드레스(32 또는 64 비트)보다는 적은 수의 물리적 레지스터들(어드레싱하기 위해 2-4 비트를 필요로 함)로 인덱싱되기 때문이다.
[0044]
이러한 기술이 물론 표준 풀 기반 레지스터 리네이밍과 결합하여 사용할 수 있고, 콜 스택이 풀의 엔트리들을 가리킨다는 것이 유의되어야 한다. 리턴 값이 콜 스택으로부터 여전히 지시되는 동안 해제되고 재할당될 위험을 피하기 위해, 콜 스택에 의해 지시되는 물리적 레지스터들이 가능한 한 드물게 재할당되도록, 할당 메커니즘이 수정될 수 있다. 즉, 사용가능한 리스트에 레지스터들이 존재하면 ― 여기서 그 중 일부는 콜 스택으로부터 지시되고, 그 중 일부는 지시되지 않음 ― , 프로세서는 콜 스택에 의해 지시되지 않는 그러한 레지스터들로부터 선택하는 레지스터 할당기 회로를 포함할 수 있다. 모든 사용가능한 레지스터들이 콜 스택에 의해 지시된다고 결정하는 것에 대한 응답으로, 레지스터 할당기 회로는 콜 스택에 의해 지시된 레지스터를 재할당한다. 이들 레지스터들 중에서, 레지스터 할당기 회로는 콜 스택에서 가장 깊은 엔트리를 사용하여 지시된 레지스터를 선택한다. 이러한 경우, 레지스터 할당기 회로는 또한 엔트리와 연관된 유효 플래그를 설정함으로써 엔트리를 무효로 마킹할 수 있다.
[0045]
본 개시내용의 또 다른 실시예에서, 물리적 레지스터들(504) 각각은 (예컨대, 2개의 플래그 비트들을 사용하여) 2개의 플래그들을 포함할 수 있다. 제1 플래그 비트는 콜로 인해 물리적 레지스터가 기록되었는지 여부를 나타낼 수 있고, 제2 플래그 비트는 물리적 레지스터가 콜 스택 예측을 위해 이미 사용되었는지 여부를 나타낼 수 있다. IO 포인터 및 OoO 포인터는, 콜 스택(502)을 필요로 하지 않고서, 이들 물리적 레지스터들(504)에 직접적으로 인덱싱할 수 있다. 이러한 실시예에서, 예측기(124)는 OoO 포인터를 담당하고, 레지스터 리네이밍 유닛은 헤드(HD) 포인터를 담당한다. 부가적으로, 테일(TL) 포인터는 정상 리네이밍 프로세스의 부분으로서 진행될 것이다.
· 콜 명령이 발행될 때,
○ 프로세서는 풀(108)로부터 아키텍처 리턴 레지스터에 대한 새로운 물리적 레지스터를 할당하고, 할당된 물리적 레지스터에 리턴 어드레스를 저장할 수 있다. 프로세서는 추가로, 다음의 리턴 레지스터를 가리키기 위해, 헤드 포인터 포지션을 모듈로 레지스터 풀 크기로 증분할 수 있고,
○ 프로세서는, 물리적 레지스터가 콜 명령에 의해 기록된다는 것을 나타내기 위해 물리적 레지스터와 연관된 제1 플래그 비트를 제1 값(예컨대, "1")으로 설정하고, 물리적 레지스터가 리턴 어드레스 예측을 위해 사용되지 않았다고 마킹되는 것을 나타내기 위해 물리적 레지스터와 연관된 제2 플래그 비트를 제2 값(예컨대, "0")으로 설정할 수 있고,
○ OoO 포인터는 이 HD 포인터와 동일하게 설정된다.
· 아키텍처 리턴 레지스터에 기록된 다른 명령이 발행될 때,
○ 새로운 리턴 어드레스를 저장하기 위해 새로운 물리적 레지스터가 풀(108)로부터의 아키텍처 리턴 레지스터에 할당되고, 결과적으로 HD 포인터가 모듈로 레지스터 풀 크기로 증분되고,
○ 이 새로운 물리적 레지스터는 콜 명령에 의해 기록되지 않은 것으로 마킹되고,
○ OoO 포인터는 수정되지 않은 채로 남겨진다.
· 리턴 명령이 발행될 때,
○ OoO 포인터에 의해 지시된 리턴 레지스터 풀의 물리적 레지스터의 값은 예측된 다음의 어드레스로서 사용되고,
○ 물리적 레지스터는 예측으로서 사용된 것으로 마킹되고,
○ OoO 포인터가 콜 명령에 의해 기록된 것으로 마킹되고(예컨대, 제1 플래그 비트가 설정됨), 예측을 위해 사용되지 않은 것으로 마킹되는(예컨대, 제2 플래그 비트가 설정되지 않음) 물리적 레지스터를 가리키도록 OoO 포인터가 이동될 때까지, OoO 포인터는 한 번 이상 모듈로 레지스터 풀 크기로 감분된다.
· 콜/리턴 명령이 폐기될 때, IO 포인터가 콜에 의해 기록된 것으로 마킹된 물리적 레지스터를 가리킬 때까지, IO 포인터는 한 번 이상 모듈로 레지스터 풀 크기로 증분/감분된다. 부가적으로, 테일(TL) 포인터는 정상 리네이밍 프로세스의 부분으로서 진행될 것이다. 리턴 명령이 폐기될 때, 대응하여 IO 포인터는 콜 명령에 의해 기록된 것으로 마킹된 물리적 레지스터로 감분할 수 있다.
· 어떤 이유로든 프로세서 상태가 롤백되면, HD 포인터는 정상 리네이밍 프로세스의 부분으로서 TL 포인터로 설정된다. 게다가
○ OoO 포인터가 IO 포인터로 설정된다.
○ 모든 물리적 레지스터 엔트리들은 예측을 위해 사용되지 않는 것으로 마킹된다.
[0046]
따라서, IO 포인터 및 OoO 포인터의 증분(또는 감분)은, 콜에 의해 기록되고 잠재적으로 예측을 위해 사용되지 않은 다음(또는 이전) 엔트리를 검색할 필요가 있을 수 있다.
[0047]
본 개시내용의 실시예들은, 분기 명령의 타겟이 컴퓨팅되기 전에 취해진 조건부 분기 또는 무조건 분기 명령의 타겟을 예측하는 분기 타겟 예측기 회로를 포함하는 프로세서를 제공할 수 있다. 예측된 분기 타겟들은 프로세서와 연관된 분기 타겟 레지스터들에 저장될 수 있다. 전형적으로, 분기 타겟 레지스터들 및 타겟 리턴 레지스터가 존재한다. 분기 타겟 레지스터들은 리턴 명령 이외의 간접적인 분기 명령들에 대한 분기 어드레스들을 제공한다. 타겟 리턴 레지스터는 리턴 명령에 대한 분기 어드레스를 제공하고, 콜 리턴 어드레스 값과 콜 명령(예컨대, 콜 명령의 어드레스+4)에 의해 기록된다. 또한, 본 개시내용의 실시예들은 중간 베이스 어드레스를 저장하기 위해 사용되는 하나 이상의 타겟 베이스 레지스터들을 제공한다. 어드레스는 베이스 어드레스와 변위의 플러스로부터 계산될 수 있다. 타겟 베이스 레지스터는 분기 명령 또는 리턴 명령에 대한 값들을 제공하지 않는다.
[0048]
아키텍처 레지스터들의 수가 적을 때, 분기 타겟 레지스터들 및 타겟 리턴 레지스터는 위에 설명된 바와 같이 레지스터별(per-register) 큐로서 구현될 수 있다. 물리적 레지스터 풀의 크기는 각각의 분기 타겟 레지스터에 대해 상이할 수 있다. 특히, 리턴 타겟 레지스터가 콜 스택 메커니즘의 부분으로서 사용되기 때문에, 리턴 레지스터 풀이 다른 레지스터들보다 상당히 더 많은 물리적 레지스터들을 갖는 것이 이해가 된다. 더 큰 리턴 레지스터 풀은 더 큰 콜 스택을 허용할 수 있다.
[0049]
일부 구현들에서, 분기 타겟 레지스터 값들은 명령 프리페치 힌트들로서 작동한다. 레지스터별 큐 구현은 다음과 같이 어드레스들 간의 선택의 미세 튜닝을 허용하는 정보를 제공한다.
· 분기 타겟 레지스터들에 대해, 큐의 헤드에서의 물리적 레지스터는, 롤백이 없다면, 장래의 분기 명령을 예측하기 위한 힌트로서 사용된다. 롤백이 있다면, 큐의 테일에서의 물리적 레지스터가 사용된다. 결과적으로, 그들은 프리-페칭을 위해 고려될 필요가 있는 어드레스들이다.
· 타겟 베이스 레지스터들이 분기의 타겟이 아니기 때문에, 그들의 물리적 레지스터들의 어드레스들이 프리페칭될 필요가 없다.
· 타겟 리턴 레지스터는 콜-리턴 예측기로서 사용되고 있다. 콜의 타겟으로 마킹된 물리적 레지스터들은 예측을 위해 사용된다. 결과적으로, 그들은 이러한 물리적 레지스터들 중에서 가장 높은 우선순위를 가질 것이다. 추가로, 그들이 헤드에 더 가까울수록, 그들은 곧 사용될 가능성이 더 높다.
[0050]
프리페칭 규칙들은 다음 설명과 같이 생성될 수 있다. 이러한 규칙들은 명령들을 프리페칭할 순서를 결정할 수 있다. 휴리스틱(heuristics)은 다음과 같을 수 있다.
· 정상 분기 타겟 레지스터들에 대해 HD 또는 TL 중 하나를 선택하거나,
· 리턴 레지스터에 대한 콜에 의해 기록된 것으로 마킹된 포인터들을 선호하거나,
· OoO 포인터에 가장 가까운 것들을 선택하거나, 또는
· 타겟 베이스 레지스터들을 프리로딩하지 않는다.
[0051]
도 6은 본 개시내용의 실시예에 따른 콜/리턴 명령들을 추측성으로 실행하기 위한 방법(600)을 예시하는 블록도이다. 도 6을 참조하면, 602에서, 비순차 실행을 위한 콜 명령의 발행에 대한 응답으로, 프로세서 코어는, 복수의 물리적 레지스터들의 헤드 포인터에 기반하여, 프로세서 코어에 통신 가능하게 커플링된 복수의 물리적 레지스터들 중 제1 물리적 레지스터를 식별할 수 있다.
[0052]
604에서, 프로세서 코어는 리턴 어드레스를 제1 물리적 레지스터에 저장할 수 있으며, 제1 물리적 레지스터는 제1 식별자와 연관된다.
[0053]
606에서, 프로세서 코어는, 프로세스와 연관된 콜 스택의 비순차 포인터에 기반하여, 콜 스택의 제1 엔트리에 제1 식별자를 저장할 수 있다.
[0054]
608에서, 프로세서 코어는, 콜 스택의 제2 엔트리를 가리키기 위해, 콜 스택의 길이만큼 변조되어, 콜 스택의 비순차 포인터를 증분할 수 있다.
[0055]
본 개시내용의 예 1은, 비순차 실행을 위한 콜 명령의 발행에 대한 응답으로, 복수의 물리적 레지스터들의 헤드 포인터에 기반하여, 프로세서 코어에 통신 가능하게 커플링된 복수의 물리적 레지스터들 중 제1 물리적 레지스터를 식별하는 단계, 리턴 어드레스를 제1 물리적 레지스터에 저장하는 단계 ― 제1 물리적 레지스터는 제1 식별자와 연관됨 ― ; 프로세스와 연관된 콜 스택의 비순차 포인터에 기반하여, 제1 식별자를 콜 스택의 제1 엔트리에 저장하는 단계, 및 콜 스택의 제2 엔트리를 가리키기 위해, 콜 스택의 길이만큼 변조되어, 콜 스택의 비순차 포인터를 증분하는 단계를 포함하는 방법이다.
[0056]
본 개시내용의 예 2는 복수의 물리적 레지스터들 및 복수의 물리적 레지스터들에 통신 가능하게 커플링된 프로세서 코어를 포함하는 프로세서이고, 프로세서 코어는 프로세스를 실행하고, 프로세스는, 비순차 실행을 위한 콜 명령의 발행에 대한 응답으로, 복수의 물리적 레지스터들의 헤드 포인터에 기반하여, 복수의 물리적 레지스터들 중 제1 물리적 레지스터를 식별하고, 리턴 어드레스를 제1 물리적 레지스터에 저장하고 ― 제1 물리적 레지스터는 제1 식별자와 연관됨 ― , 프로세스와 연관된 콜 스택의 비순차 포인터에 기반하여, 콜 스택의 제1 엔트리에 제1 식별자를 저장하고, 그리고 콜 스택의 제2 엔트리를 가리키기 위해, 콜 스택의 길이만큼 변조되어, 콜 스택의 비순차 포인터를 증분하기 위한 복수의 명령들을 포함한다.
[0057]
본 개시내용이 발명이 제한된 개수의 실시예들과 관련하여 설명되었지만, 관련 기술분야에서 통상의 기술자는 그로부터 다수의 수정들 및 변형들을 인식할 것이다. 첨부된 청구 범위는 그러한 모든 수정들 및 변형들을 본 개시내용의 진정한 사상 및 범위 내에 있는 것으로서 포함하는 것으로 의도된다.
[0058]
설계는 제조에서부터 시뮬레이션, 제조에 이르기까지 다양한 스테이지들을 거칠 수 있다. 설계를 나타내는 데이터는 다수의 방식들로 설계를 나타낼 수 있다. 첫째, 시뮬레이션들에서 유용한 것처럼, 하드웨어는 하드웨어 서술 언어 또는 다른 기능 서술 언어를 사용하여 표현될 수 있다. 또한, 로직 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 설계 프로세스의 일부 스테이지들에서 생성될 수 있다. 뿐만 아니라, 대부분의 설계들은, 일부 스테이지에서, 하드웨어 모델 내 다양한 디바이스들의 물리적 배치를 나타내는 데이터의 레벨에 이른다. 통상의 반도체 제조 기술들이 사용되는 경우, 하드웨어 모델을 나타내는 데이터는 집적 회로를 생성하는데 사용되는 마스크들마다 상이한 마스크 층들 상의 다양한 특징들의 존재 또는 부재를 명시하는 데이터일 수 있다. 설계의 임의의 표현에서, 데이터는 임의의 형태의 머신 판독 가능 매체에 저장될 수 있다. 메모리 또는 디스크와 같은 자기 또는 광학 저장소는 광학적 또는 전파 변조를 통해 전송된 정보 또는 다른 방식으로 이러한 정보를 전송하기 위해 생성된 정보를 저장하는 머신 판독 가능 매체일 수 있다. 코드 또는 디자인을 표시하거나 지니고 있는 전기적 반송파가 전송될 때, 전기 신호의 복사, 버퍼링 또는 재전송이 수행되는 범위까지 새로운 사본이 만들어진다. 따라서, 통신 제공자 또는 네트워크 제공자는 본 개시내용의 실시예들의 기술들을 구현하는 반송파로 인코딩된 정보와 같은 물품을 적어도 일시적으로 유형의 머신 판독 가능 매체 상에 저장할 수 있다.
[0059]
본 명세서에서 사용되는 모듈은 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합을 지칭한다. 예로서, 모듈은 마이크로 제어기에 의해 실행되도록 적응된 코드를 저장하는 비 일시적 매체와 연관된 마이크로 제어기와 같은 하드웨어를 포함한다. 그러므로, 모듈에 대한 언급은, 일 실시예에서, 비 일시적 매체 상에 보유될 코드를 인식 및/또는 실행하도록 특별하게 구성된 하드웨어를 지칭한다. 또한, 다른 실시예에서, 모듈의 사용은 미리 결정된 동작들을 수행하기 위해 마이크로제어기에 의해 실행되도록 특별히 적응된 코드를 포함하는 비 일시적 매체를 지칭한다. 추론될 수 있는 바와 같이, 또 다른 실시예에서, (이 예에서) 모듈이라는 용어는 마이크로제어기와 비 일시적 매체의 조합을 지칭할 수 있다. 종종 별개로 예시되는 모듈 경계들은 일반적으로 다양하며 잠재적으로 겹친다. 예컨대, 제1 및 제2 모듈은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 공유할 수 있으면서, 일부 독립적인 하드웨어, 소프트웨어 또는 펌웨어를 잠재적으로 유지할 수 있다. 일 실시예에서, 로직이라는 용어의 사용은 트랜지스터들, 레지스터들과 같은 하드웨어 또는 프로그래머블 로직 디바이스들과 같은 다른 하드웨어를 포함한다.
[0060]
일 실시예에서 "하도록 구성된"이라는 어구의 사용은 지정된 또는 결정된 작업을 수행할 장치, 하드웨어, 로직 또는 엘리먼트를 배열, 조립, 제조, 판매 제안, 수입 및/또는 설계하는 것을 지칭한다. 이 예에서, 동작하지 않는 장치 또는 장치의 엘리먼트는 이것이 지정된 작업을 수행하도록 설계, 결합 및/또는 상호 연결되면 상기 지정된 작업을 여전히 수행'하도록 구성'된다. 순전히 예시적인 예로서, 로직 게이트는 동작 중에 0 또는 1을 제공할 수 있다. 그러나 클록에 인에이블 신호를 제공'하도록 구성된' 로직 게이트는 1 또는 0을 제공할 수 있는 모든 가능성 있는 로직 게이트를 포함하지는 않는다. 대신에, 로직 게이트는 동작 중에 1 또는 0 출력이 클록을 인에이블시키는 것인 일부 방식으로 결합된 로직 게이트이다. '하도록 구성된'이라는 용어의 사용은 동작을 요하는 것이 아니고, 그 대신에 장치, 하드웨어 및/또는 엘리먼트의 잠재적 상태에 초점을 맞추는 것이라는 것을 다시 한번 유의하여야 하며, 이 경우 잠복 상태에서 장치, 하드웨어 및/또는 엘리먼트는 장치, 하드웨어 및/또는 엘리먼트가 동작 중일 때 특정 작업을 수행하도록 설계된다.
[0061] 또한, 일 실시예에서, '하는', '하도록 할 수 있는/을 할 수 있는' 및/또는 '하도록 동작 가능한"이라는 어구의 사용은 장치, 로직, 하드웨어 및/또는 엘리먼트를 특정 방식으로 사용할 수 있게 하는 그러한 방식으로 설계된 어떤 장치, 로직, 하드웨어, 및/또는 엘리먼트를 지칭한다. 일 실시예에서, 하는, 하도록 할 수 있는, 또는 하도록 동작 가능한이라는 것의 사용은 장치, 로직, 하드웨어, 및/또는 엘리먼트가 동작하지 않지만, 장치를 명시된 방식으로 사용할 수 있게 하는 그러한 방식으로 설계된, 장치, 로직, 하드웨어, 및/또는 엘리먼트의 잠재적 상태를 지칭한다는 것을 위에서와 같이 유의하여야 한다.
[0062]
본 명세서에서 사용되는 것으로서, 값은 개수, 상태, 논리 상태 또는 이진 논리 상태의 임의의 알려진 표현을 포함한다. 종종, 로직 레벨들, 로직 값들 또는 논리 값들의 사용은 또한 단순히 이진 로직 상태들을 나타내는 1 및 0의 값으로 지칭된다. 예컨대, 1은 하이 로직 레벨을 나타내고 0은 로우 로직 레벨을 지칭한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 저장 셀은 단일 논리 값 또는 다중 논리 값들을 유지할 수 있다. 그러나, 컴퓨터 시스템들에서 값들의 다른 표현들이 사용되어 왔다. 예컨대, 십진수 10은 910이라는 이진 값 및 16진수 문자 A로서도 표현될 수 있다. 그러므로 값은 컴퓨터 시스템에서 유지될 수 있는 정보의 모든 표현을 포함한다.
[0063]
더욱이, 상태들은 값들 또는 값들의 부분들에 의해 표현될 수 있다. 예로서, 논리 1과 같은 제 1 값은 디폴트 또는 초기 상태를 나타낼 수 있고, 반면에 논리 0과 같은 제2 값은 비 디폴트 상태(non-default state)를 나타낼 수 있다. 또한, 리셋 및 셋이라는 용어들은, 일 실시예에서, 각각 디폴트 및 업데이트된 값 또는 상태를 지칭한다. 예컨대, 디폴트 값은 잠재적으로 하이 논리 값, 즉, 리셋을 포함하고, 반면에 업데이트된 값은 잠재적으로 로우 논리 값, 즉, 셋을 포함한다. 값들의 임의의 조합은 상태들의 임의의 개수를 나타내기 위해 이용할 수 있다는 것에 주의한다.
[0064]
위에서 언급된 방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예들은 프로세싱 엘리먼트에 의해 실행 가능한 머신 액세스 가능, 머신 판독 가능, 컴퓨터 액세스 가능, 또는 컴퓨터 판독 가능 매체 상에 저장된 명령들 또는 코드를 통해 구현될 수 있다. 비 일시적 머신 액세스 가능/판독 가능 매체는 컴퓨터 또는 전자 시스템과 같은 머신에 의해 판독 가능한 형태로 정보를 제공(즉, 저장 및/또는 전송)하는 임의의 메커니즘을 포함한다. 예컨대, 비 일시적 머신 액세스 가능 매체는 스태틱 RAM(static RAM)(SRAM) 또는 다이나믹 RAM(dynamic RAM)(DRAM)과 같은 랜덤 액세스 메모리(random-access memory)(RAM); ROM; 자기 또는 광학 저장 매체; 플래시 메모리 디바이스들; 전기 저장 디바이스들; 광학 저장 디바이스들; 음향 저장 디바이스들; 일시적(전파된) 신호들(예컨대, 반송파들, 적외선 신호들, 디지털 신호들)로부터 수신된 정보를 보유하기 위한 다른 형태의 저장 디바이스들; 비 일시적인 매체와는 구별되는 그로부터 정보를 수신할 수 있는 기타 등등을 포함한다.
[0065]
본 개시내용의 실시예들을 수행하는 로직을 프로그램하는 데 사용되는 명령들은 DRAM, 캐시, 플래시 메모리 또는 다른 저장소와 같은 시스템의 메모리 내에 저장될 수 있다. 또한, 명령들은 네트워크를 통해 또는 다른 컴퓨터 판독 가능 매체를 통해 분배될 수 있다. 따라서, 머신 판독 가능 매체는 머신(예컨대, 컴퓨터)에 의해 판독 가능한 형태의 정보를 저장 또는 전송하기 위한 임의의 메커니즘, 이것으로 제한되는 것은 아니지만, 플로피 디스켓들, 광학 디스크들, 콤팩트 디스크, 판독 전용 메모리(Compact Disc, Read-Only Memory)(CD-ROM들), 및 광자기 디스크들, 판독 전용 메모리(Read-Only Memory)(ROM들), 랜덤 액세스 메모리(RAM), 소거 가능 프로그래머블 판독 전용 메모리(Programmable Read-Only Memory)(EPROM), 전기적으로 소거 가능 프로그래머블 판독 전용 메모리(Electrically Erasable Programmable Read-Only Memory)(EEPROM), 자기 또는 광학 카드들, 플래시 메모리 또는 전기적, 광학적, 음향적 또는 다른 형태들의 전파된 신호들(예컨대, 반송파들, 적외선 신호들, 디지털 신호들 등)을 통해 인터넷을 통한 정보의 전송에 사용되는 유형의 머신 판독 가능 저장소를 포함할 수 있다. 따라서, 컴퓨터 판독 가능 매체는 머신(예컨대, 컴퓨터)에 의해 판독 가능한 형태의 전자 명령들 또는 정보를 저장 또는 전송하기에 적합한 임의의 타입의 유형의(tangible) 머신 판독 가능 매체를 포함한다.
[0066]
본 명세서 전체에서 "일 실시예" 또는 "실시예"라고 언급하는 것은 실시예와 관련하여 설명된 특정 특징, 구조 또는 특성이 본 개시내용의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 본 명세서 전체의 다양한 곳들에서 "일 실시예에서" 또는 "실시예에서"라는 어구들이 출현한다고 하여 반드시 동일한 실시예를 지칭하는 것은 아니다. 또한, 특정 특징들, 구조들 또는 특성들은 하나 이상의 실시예들에서 임의의 적합한 방식으로 결합될 수 있다.
[0067]
전술한 명세서에서, 특정한 예시적인 실시예들을 참조하여 상세한 설명이 제공되었다. 그러나, 첨부된 청구 범위에 제시되는 바와 같이 본 개시내용의 더 넓은 사상 및 범위를 벗어나지 않으면서 다양한 수정들 및 변경들이 이루어질 수 있다는 것이 명백할 것이다. 따라서, 명세서 및 도면들은 제한적인 의미라기보다는 예시적인 의미로 간주되어야 한다. 또한, 실시예 및 다른 예시적인 언어의 전술한 사용은 반드시 동일한 실시예 또는 동일한 예를 지칭하는 것이 아니고, 상이하고 구별되는 실시예들뿐만 아니라, 잠재적으로 동일한 실시예를 지칭할 수 있다.
Claims (25)
- 프로세서로서,
복수의 물리적 레지스터들(physical registers); 및
상기 복수의 물리적 레지스터들에 통신 가능하게 커플링된 프로세서 코어를 포함하고,
상기 프로세서 코어는 프로세스를 실행하고,
상기 프로세스는:
비순차 실행(out-of-order execution)을 위한 콜 명령(call instruction)의 발행에 대한 응답으로, 상기 복수의 물리적 레지스터들의 헤드 포인터(head pointer)에 기반하여, 상기 복수의 물리적 레지스터들 중 제1 물리적 레지스터를 식별하고;
리턴 어드레스(return address)를 상기 제1 물리적 레지스터에 저장하고 ― 상기 제1 물리적 레지스터는 제1 식별자와 연관됨 ― ;
상기 프로세스와 연관된 콜 스택(call stack)의 비순차 포인터에 기반하여, 상기 콜 스택의 제1 엔트리에 상기 제1 식별자를 저장하고; 그리고
상기 콜 스택의 제2 엔트리를 가리키기 위해, 상기 콜 스택의 길이만큼 변조되어, 상기 콜 스택의 상기 비순차 포인터를 증분하기 위한
복수의 명령들을 포함하는,
프로세서. - 제1 항에 있어서,
상기 프로세서 코어는 추가로:
상기 콜 명령에 대응하는 리턴 명령의 발행에 대한 응답으로, 상기 비순차 포인터에 의해 지시된 상기 콜 스택의 제2 엔트리를 결정하고;
상기 콜 스택의 상기 제2 엔트리에 저장된 제2 식별자에 기반하여, 상기 복수의 물리적 레지스터들 중 제2 물리적 레지스터를 결정하고;
상기 제2 물리적 레지스터에 저장된 예측된 리턴 어드레스를 결정하고; 그리고
상기 예측된 리턴 어드레스로부터 명령 실행을 계속하는,
프로세서. - 제2 항에 있어서,
상기 제2 물리적 레지스터는 상기 제1 물리적 레지스터와 동일하거나 상기 제1 물리적 레지스터와 상이하고, 상기 제2 식별자는 상기 제1 물리적 식별자와 동일하거나 상기 제1 물리적 식별자와 상이한,
프로세서. - 제2 항에 있어서,
상기 프로세서 코어는 추가로,
상기 콜 명령을 폐기(retire)하는 것에 대한 응답으로, 상기 콜 스택의 길이만큼 변조되어, 상기 콜 스택의 순차 포인터를 증분하고, 그리고
상기 리턴 명령을 폐기하는 것에 대한 응답으로, 상기 콜 스택의 길이만큼 변조되어, 상기 콜 스택의 상기 순차 포인터를 감분하는,
프로세서. - 제4 항에 있어서,
상기 비순차 실행의 롤백(rollback)에 대한 응답으로, 상기 프로세서 코어는 상기 순차 포인터에 의해 지시된 엔트리를 가리키도록 상기 비순차 포인터를 설정하는,
프로세서. - 제5 항에 있어서,
상기 프로세서 코어는 추가로,
상기 리턴 어드레스를 상기 제1 물리적 레지스터에 저장하는 것에 대한 응답으로, 상기 복수의 물리적 레지스터들 중 제3 물리적 레지스터를 가리키기 위해, 순서화된 리스트의 길이만큼 변조되어, 상기 헤드 포인터를 증분하는,
프로세서. - 제1 항에 있어서,
상기 복수의 물리적 레지스터들은 순서화된 리스트를 형성하고, 상기 복수의 물리적 레지스터들 각각은, 상기 순서화된 리스트의 대응하는 물리적 레지스터의 인덱스 값인 식별자와 고유하게 연관되는,
프로세서. - 제1 항에 있어서,
상기 콜 명령의 실행은 상기 프로세스의 실행을 명령들의 제1 분기(branch)로부터 명령들의 제2 분기로 스위칭하고, 상기 콜 명령에 대응하는 상기 리턴 명령의 실행은 상기 명령들의 제2 분기로부터 상기 명령들의 제1 분기로 스위칭하는,
프로세서. - 제1 항에 있어서,
상기 복수의 물리적 레지스터들은 상기 프로세서의 ISA(instruction set architecture)에 정의된 아키텍처 레지스터(architected register)에 대한 리네이밍 레지스터들(renaming registers)의 풀(pool)을 제공하는,
프로세서. - 비순차 실행을 위한 콜 명령의 발행에 대한 응답으로, 복수의 물리적 레지스터들의 헤드 포인터에 기반하여, 프로세서 코어에 통신 가능하게 커플링된 상기 복수의 물리적 레지스터들 중 제1 물리적 레지스터를 식별하는 단계;
리턴 어드레스를 상기 제1 물리적 레지스터에 저장하는 단계 ― 상기 제1 물리적 레지스터는 제1 식별자와 연관됨 ― ;
프로세스와 연관된 콜 스택의 비순차 포인터에 기반하여, 제1 식별자를 상기 콜 스택의 제1 엔트리에 저장하는 단계; 및
상기 콜 스택의 제2 엔트리를 가리키기 위해, 상기 콜 스택의 길이만큼 변조되어, 상기 콜 스택의 상기 비순차 포인터를 증분하는 단계를 포함하는,
방법. - 제10 항에 있어서,
상기 콜 명령에 대응하는 리턴 명령의 발행에 대한 응답으로, 상기 비순차 포인터에 의해 지시된 상기 콜 스택의 제2 엔트리를 결정하는 단계;
상기 콜 스택의 상기 제2 엔트리에 저장된 제2 식별자에 기반하여, 상기 복수의 물리적 레지스터들 중 제2 물리적 레지스터를 결정하는 단계;
상기 제2 물리적 레지스터에 저장된 예측된 리턴 어드레스를 결정하는 단계; 및
상기 예측된 리턴 어드레스로부터 명령 실행을 계속하는 단계를 더 포함하는,
방법. - 제11 항에 있어서,
상기 콜 명령을 폐기하는 것에 대한 응답으로, 상기 콜 스택의 길이만큼 변조되어, 상기 콜 스택의 순차 포인터를 증분하는 단계, 및
상기 리턴 명령을 폐기하는 것에 대한 응답으로, 상기 콜 스택의 길이만큼 변조되어, 상기 콜 스택의 상기 순차 포인터를 감분하는 단계를 더 포함하는,
방법. - 제12 항에 있어서,
상기 리턴 어드레스를 상기 제1 물리적 레지스터에 저장하는 것에 대한 응답으로, 상기 복수의 물리적 레지스터들 중 제3 물리적 레지스터를 가리키기 위해, 순서화된 리스트의 길이만큼 변조되어, 상기 헤드 포인터를 증분하는 단계를 더 포함하는,
방법. - 제10 항에 있어서,
상기 복수의 물리적 레지스터들은 순서화된 리스트를 형성하고, 상기 복수의 물리적 레지스터들 각각은, 상기 순서화된 리스트의 대응하는 물리적 레지스터의 인덱스 값인 식별자와 고유하게 연관되는,
방법. - 프로세서로서,
물리적 레지스터들의 순서화된 리스트; 및
복수의 물리적 레지스터들에 통신 가능하게 커플링된 프로세서 코어를 포함하고,
상기 프로세서 코어는 프로세스를 실행하고, 상기 프로세스는:
비순차 실행을 위한 제1 콜 명령의 발행에 대한 응답으로, 상기 복수의 물리적 레지스터들의 헤드 포인터에 기반하여, 상기 복수의 물리적 레지스터들 중 제1 물리적 레지스터를 식별하고;
리턴 어드레스를 상기 제1 물리적 레지스터에 저장하고;
상기 제1 물리적 레지스터가 콜 명령에 의해 기록된다는 것을 나타내는, 상기 제1 물리적 레지스터와 연관된 제1 표시자를 제1 값으로 설정하고; 그리고
제2 물리적 레지스터를 가리키기 위해, 상기 순서화된 리스트의 크기만큼 변조되어, 상기 헤드 포인터를 증분하기 위한
복수의 명령들을 포함하는,
프로세서. - 제15 항에 있어서,
상기 프로세서 코어는 추가로 상기 제2 물리적 레지스터를 가리키도록 비순차 포인터를 설정하는,
프로세서. - 제15 항에 있어서,
상기 프로세서 코어는 추가로:
상기 제2 물리적 레지스터에 기록되는 제2 명령의 발행에 대한 응답으로, 제3 물리적 레지스터를 가리키기 위해, 상기 순서화된 리스트의 크기만큼 변조되어, 상기 헤드 포인터를 증분하고;
상기 제3 물리적 레지스터가 콜 명령에 의해 기록되지 않는다는 것을 나타내는, 상기 제3 물리적 레지스터와 연관된 제1 표시자를 제2 값으로 설정하고; 그리고
상기 제2 물리적 레지스터를 가리키기 위해 상기 비순차 포인터의 위치를 유지하는,
프로세서. - 제15 항에 있어서,
상기 프로세서 코어는 추가로:
상기 콜 명령에 대응하는 리턴 명령의 발행에 대한 응답으로, 상기 비순차 포인터에 의해 지시된 상기 제2 물리적 레지스터에 저장된 리턴 어드레스를 결정하고;
상기 제2 물리적 레지스터에 저장된 상기 리턴 어드레스에 기반하여, 예측된 리턴 어드레스를 계산하고;
상기 제2 물리적 레지스터가 리턴 어드레스 예측을 위해 사용된다는 것을 나타내는, 상기 제2 물리적 레지스터와 연관된 제2 표시자를 제1 값으로 설정하고; 그리고
상기 제1 값으로 설정된 상기 제1 표시자 및 상기 제2 값으로 설정된 상기 제2 표시자와 연관된 제4 물리적 레지스터에 상기 비순차 포인터가 도달할 때까지, 상기 순서화된 리스트의 크기만큼 변조되어, 상기 비순차 포인터를 감분하는,
프로세서. - 제15 항에 있어서,
상기 프로세서 코어는 추가로:
상기 콜 명령을 폐기한 것에 대한 응답으로, 상기 제1 값으로 설정된 상기 제1 표시자와 연관된 제5 물리적 레지스터에 상기 순차 포인터가 도달할 때까지, 상기 순서화된 리스트의 크기만큼 변조되어, 상기 물리적 포인터들의 순서화된 리스트의 순차 포인터를 증분하고; 그리고
상기 리턴 명령을 폐기한 것에 대한 응답으로, 상기 제1 값으로 설정된 상기 제1 표시자와 연관된 제5 물리적 레지스터에 상기 순차 포인터가 도달할 때까지, 상기 순서화된 리스트의 크기만큼 변조되어, 상기 물리적 포인터들의 순서화된 리스트의 순차 포인터를 감분하는,
프로세서. - 제19 항에 있어서,
롤백에 대한 응답으로, 상기 프로세서 코어는 추가로 상기 순차 포인터에 의해 지시된 포지션으로 상기 비순차 포인터를 설정하는,
프로세서. - 프로세서로서,
복수의 물리적 레지스터들의 원형 스택 구현물(circular stack implementation) ― 상기 원형 스택 구현물은 헤드 포인터, 테일 포인터(tail pointer), 및 물리적 레지스터들의 총수(N)를 포함함 ― ; 및
상기 복수의 물리적 레지스터들에 통신 가능하게 커플링된 프로세서 코어를 포함하고,
상기 프로세서 코어는 프로세스를 실행하고, 상기 프로세스는:
리네이밍될 제1 아키텍처 레지스터를 참조하는 기록 명령을 실행하는 것에 대한 응답으로, 제1 물리적 레지스터를 가리키기 위해, N만큼 변조되어, 상기 헤드 포인터를 증분하고; 그리고
상기 제1 아키텍처 레지스터를 참조하는 판독 명령을 실행하는 것에 대한 응답으로, 상기 제1 물리적 레지스터를 판독하기 위한
복수의 명령들을 포함하는,
프로세서. - 제21 항에 있어서,
상기 테일 포인터는 상기 헤드 포인터와 동일한 물리적 리네이밍 레지스터를 가리키도록 개시되는,
프로세서. - 제21 항에 있어서,
상기 프로세서 코어는 추가로, 상기 제1 아키텍처 레지스터를 해제(free)하는 것에 대한 응답으로, N만큼 변조되어, 상기 테일 포인터를 증분하는,
프로세서. - 제21 항에 있어서,
상기 프로세서 코어는 추가로, 상기 제1 아키텍처 레지스터를 해제하는 것에 대한 응답으로, N만큼 변조되어, 상기 헤드 포인터를 감분하는,
프로세서. - 제21 항에 있어서,
롤백 이벤트에 대한 응답으로, 상기 프로세서 코어는 추가로 상기 테일 포인터에 의해 지시된 것과 동일한 물리적 레지스터를 가리키도록 상기 헤드 포인터를 이동시키는,
프로세서.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762446130P | 2017-01-13 | 2017-01-13 | |
US62/446,130 | 2017-01-13 | ||
US15/868,497 US20180203703A1 (en) | 2017-01-13 | 2018-01-11 | Implementation of register renaming, call-return prediction and prefetch |
US15/868,497 | 2018-01-11 | ||
PCT/US2018/013480 WO2018132652A1 (en) | 2017-01-13 | 2018-01-12 | Implementation of register renaming, call-return prediction and prefetch |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190107691A true KR20190107691A (ko) | 2019-09-20 |
KR102521929B1 KR102521929B1 (ko) | 2023-04-13 |
Family
ID=62839709
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197023272A KR102521929B1 (ko) | 2017-01-13 | 2018-01-12 | 레지스터 리네이밍, 콜-리턴 예측 및 프리페치의 구현 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20180203703A1 (ko) |
EP (1) | EP3568755A4 (ko) |
KR (1) | KR102521929B1 (ko) |
CN (1) | CN110268384A (ko) |
WO (1) | WO2018132652A1 (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11119772B2 (en) | 2019-12-06 | 2021-09-14 | International Business Machines Corporation | Check pointing of accumulator register results in a microprocessor |
US12039031B2 (en) * | 2020-09-16 | 2024-07-16 | Cisco Technology, Inc. | Security policies for software call stacks |
CN116339830B (zh) * | 2023-05-26 | 2023-08-15 | 北京开源芯片研究院 | 一种寄存器管理方法、装置、电子设备及可读存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5675759A (en) * | 1995-03-03 | 1997-10-07 | Shebanow; Michael C. | Method and apparatus for register management using issue sequence prior physical register and register association validity information |
US5764970A (en) * | 1995-11-20 | 1998-06-09 | International Business Machines Corporation | Method and apparatus for supporting speculative branch and link/branch on count instructions |
KR20060022973A (ko) * | 2004-09-08 | 2006-03-13 | 삼성전자주식회사 | 조건부실행명령어의 비순차적 수행이 가능한 하드웨어장치 및 그 수행방법 |
US20070061555A1 (en) * | 2005-09-15 | 2007-03-15 | St Clair Michael | Call return tracking technique |
US20090070561A1 (en) * | 2007-09-10 | 2009-03-12 | Alexander Gregory W | Link stack misprediction resolution |
US20160259645A1 (en) * | 2015-03-04 | 2016-09-08 | Qualcomm Incorporated | Register renaming in block-based instruction set architecture |
US20160314075A1 (en) * | 2015-04-24 | 2016-10-27 | Optimum Semiconductor Technologies, Inc. | Computer processor that implements pre-translation of virtual addresses with target registers |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6009509A (en) * | 1997-10-08 | 1999-12-28 | International Business Machines Corporation | Method and system for the temporary designation and utilization of a plurality of physical registers as a stack |
US6094716A (en) * | 1998-07-14 | 2000-07-25 | Advanced Micro Devices, Inc. | Register renaming in which moves are accomplished by swapping rename tags |
US8078854B2 (en) * | 2008-12-12 | 2011-12-13 | Oracle America, Inc. | Using register rename maps to facilitate precise exception semantics |
US8423751B2 (en) * | 2009-03-04 | 2013-04-16 | Via Technologies, Inc. | Microprocessor with fast execution of call and return instructions |
US10338928B2 (en) * | 2011-05-20 | 2019-07-02 | Oracle International Corporation | Utilizing a stack head register with a call return stack for each instruction fetch |
US9354886B2 (en) * | 2011-11-28 | 2016-05-31 | Apple Inc. | Maintaining the integrity of an execution return address stack |
US9411590B2 (en) * | 2013-03-15 | 2016-08-09 | Qualcomm Incorporated | Method to improve speed of executing return branch instructions in a processor |
GB2518912B (en) * | 2014-01-17 | 2015-08-26 | Imagination Tech Ltd | Stack pointer value prediction |
GB2518022B (en) * | 2014-01-17 | 2015-09-23 | Imagination Tech Ltd | Stack saved variable value prediction |
CN106406814B (zh) * | 2016-09-30 | 2019-06-14 | 上海兆芯集成电路有限公司 | 处理器和将架构指令转译成微指令的方法 |
-
2018
- 2018-01-11 US US15/868,497 patent/US20180203703A1/en not_active Abandoned
- 2018-01-12 WO PCT/US2018/013480 patent/WO2018132652A1/en unknown
- 2018-01-12 KR KR1020197023272A patent/KR102521929B1/ko active IP Right Grant
- 2018-01-12 EP EP18738868.1A patent/EP3568755A4/en not_active Withdrawn
- 2018-01-12 CN CN201880006336.5A patent/CN110268384A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5675759A (en) * | 1995-03-03 | 1997-10-07 | Shebanow; Michael C. | Method and apparatus for register management using issue sequence prior physical register and register association validity information |
US5764970A (en) * | 1995-11-20 | 1998-06-09 | International Business Machines Corporation | Method and apparatus for supporting speculative branch and link/branch on count instructions |
KR20060022973A (ko) * | 2004-09-08 | 2006-03-13 | 삼성전자주식회사 | 조건부실행명령어의 비순차적 수행이 가능한 하드웨어장치 및 그 수행방법 |
US20070061555A1 (en) * | 2005-09-15 | 2007-03-15 | St Clair Michael | Call return tracking technique |
US20090070561A1 (en) * | 2007-09-10 | 2009-03-12 | Alexander Gregory W | Link stack misprediction resolution |
US20160259645A1 (en) * | 2015-03-04 | 2016-09-08 | Qualcomm Incorporated | Register renaming in block-based instruction set architecture |
US20160314075A1 (en) * | 2015-04-24 | 2016-10-27 | Optimum Semiconductor Technologies, Inc. | Computer processor that implements pre-translation of virtual addresses with target registers |
Also Published As
Publication number | Publication date |
---|---|
WO2018132652A1 (en) | 2018-07-19 |
EP3568755A1 (en) | 2019-11-20 |
KR102521929B1 (ko) | 2023-04-13 |
EP3568755A4 (en) | 2020-08-26 |
US20180203703A1 (en) | 2018-07-19 |
CN110268384A (zh) | 2019-09-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10073698B2 (en) | Pipelined processor with multi-issue microcode unit having local branch decoder | |
TWI507980B (zh) | 最佳化暫存器初始化操作 | |
JP6143872B2 (ja) | 装置、方法、およびシステム | |
US9424203B2 (en) | Storing look-up table indexes in a return stack buffer | |
TWI644208B (zh) | 藉由對硬體資源之限制實現的向後相容性 | |
JP3919802B2 (ja) | プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 | |
KR102478874B1 (ko) | 비순차적 하드웨어 소프트웨어 공동 설계된 프로세서에서 스택 동기화 명령어를 갖는 술어 값의 스택을 구현하고 유지하기 위한 방법 및 장치 | |
US10417001B2 (en) | Physical register table for eliminating move instructions | |
US6625723B1 (en) | Unified renaming scheme for load and store instructions | |
US20160055004A1 (en) | Method and apparatus for non-speculative fetch and execution of control-dependent blocks | |
KR20180038456A (ko) | 명령 피연산자들에 대한 좁은 산출 값들을 비순차적 프로세서의 레지스터 맵에 직접 저장하는 것 | |
TW201704991A (zh) | 藉由演算法匹配、停用特徵或限制效能之回溯相容性 | |
US10318172B2 (en) | Cache operation in a multi-threaded processor | |
US9367455B2 (en) | Using predictions for store-to-load forwarding | |
KR102521929B1 (ko) | 레지스터 리네이밍, 콜-리턴 예측 및 프리페치의 구현 | |
US20050228977A1 (en) | Branch prediction mechanism using multiple hash functions | |
JP6253706B2 (ja) | ハードウェア装置 | |
US9614544B2 (en) | Systems, methods, and apparatuses for decompression using hardware and software | |
JP2022548864A (ja) | シャドウラッチ構成のレジスタファイルを用いたビット幅再構成 | |
US7783692B1 (en) | Fast flag generation | |
US20200233673A1 (en) | Power-saving mechanism for memory sub-system in pipelined processor | |
KR20220113410A (ko) | 페치 그룹들의 시퀀스들에 대한 분기 예측 유닛에의 액세스 제어 |
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 |