KR20130141394A - 루프 버퍼 학습 - Google Patents

루프 버퍼 학습 Download PDF

Info

Publication number
KR20130141394A
KR20130141394A KR1020130068355A KR20130068355A KR20130141394A KR 20130141394 A KR20130141394 A KR 20130141394A KR 1020130068355 A KR1020130068355 A KR 1020130068355A KR 20130068355 A KR20130068355 A KR 20130068355A KR 20130141394 A KR20130141394 A KR 20130141394A
Authority
KR
South Korea
Prior art keywords
loop
branch
candidate
buffer
instruction
Prior art date
Application number
KR1020130068355A
Other languages
English (en)
Other versions
KR101497214B1 (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 KR20130141394A publication Critical patent/KR20130141394A/ko
Application granted granted Critical
Publication of KR101497214B1 publication Critical patent/KR101497214B1/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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • 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
    • 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
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)

Abstract

명령어 스트림에서 루프 후보를 추적하기 위한 방법, 장치, 및 프로세서가 제공된다. 로드 버퍼 제어 유닛(load buffer control unit)은 후방 취득 브랜치(backwards taken branch)를 검출하고 루프 후보를 추적하기 시작한다. 제어 유닛은 루프 후보의 취득 브랜치를 추적하고, 루프의 시작에서 각 취득 브랜치까지의 거리를 파악한다. 각 취득 브랜치까지의 거리가 루프의 다수의 반복에 걸쳐 동일하게 유지된다면, 루프는 루프 버퍼에 저장된다. 그 다음, 루프가 루프 버퍼로부터 디스패치되고, 루프가 종료될 때까지 프로세서의 전단의 전력이 감소된다.

Description

루프 버퍼 학습{LOOP BUFFER LEARNING}
본 발명은 일반적으로 프로세서에 관한 것으로, 특히, 명령어 스트림 내의 루프의 특성을 식별 및 학습하기 위한 방법 및 메커니즘에 관한 것이다.
현대의 프로세서들은 일반적으로 파이프라인 방식의 다수의 스테이지들로 구성되어 있다. 일반적인 파이프라인들은 종종 명령어들을 페치(fetch)하고, 명령어들을 디코드하고, 명령어들을 매핑하고, 명령어들을 실행한 다음, 결과들을 레지스터와 같은 또 다른 유닛에 기록하기 위한 별도의 유닛들을 포함한다. 마이크로프로세서의 명령어 페치 유닛(instruction fetch unit)은 명령어들의 끊임없는 스트림을 프로세서 파이프라인의 다음 스테이지에 제공하는 것을 담당한다. 일반적으로, 파이프라인의 나머지에 지속적으로 명령어들이 제공되도록 유지하기 위해, 페치 유닛은 명령어 캐시를 사용한다. 페치 유닛과 명령어 캐시는, 그들에게 요구되는 기능들을 수행하는 동안 상당한 양의 전력을 소비하는 경향이 있다. 현대의 마이크로프로세서, 특히, 배터리로 전력이 공급되는 디바이스에서 이용되는 마이크로프로세서의 목표는 최대한 전력 소비를 줄이는 것이다.
많은 소프트웨어 애플리케이션에서, 동일한 소프트웨어 단계들은 특정 기능 또는 작업을 수행하기 위해 여러 번 반복될 수 있다. 이러한 상황에서, 명령어들의 동일한 루프가 지속적으로 실행되더라도, 페치 유닛은 계속해서 명령어들을 페치하고 전력을 소비할 것이다. 루프가 검출되어 루프 버퍼에 캐시될 수 있는 경우, 루프가 실행하는 동안 전력 소비를 줄이기 위해 페치 유닛은 셧다운될 수 있다. 그러나, 루프가 다수의 브랜치를 포함할 때 프로그램 코드 내의 명령어들의 루프를 검출 및 학습하기가 어렵다. 루프 버퍼에 루프를 캐시하기 전에 루프가 불변인지를 정확히 결정하는 것 또한 어려운 것이다.
명령어 스트림 내의 루프를 검출 및 추적하기 위한 장치, 프로세서 및 방법이 개시되어 있다. 프로세서 파이프라인은 루프 버퍼 및 루프 버퍼 제어 유닛을 포함할 수 있다. 루프 버퍼 제어 유닛은 명령어 스트림에서 루프 종료 브랜치들(loop termination branches)을 검출할 수 있다. 하나의 실시예에서, 루프 버퍼 제어 유닛이 루프 종료 브랜치를 검출할 때, 제어 유닛은 루프 종료 브랜치의 명령어 주소를 래치(latch)할 수 있고, 루프 검출 플래그가 설정될 수 있으며, 루프 반복 카운터(loop iteration counter) 및 uop 카운터(uop counter)가 시작될 수 있다.
다음 번에 동일한 루프 종료 브랜치가 검출되면, 제어 유닛은 루프 버퍼의 크기와 uop 카운터의 값을 비교할 수 있다. uop 카운터의 값이 루프 버퍼의 크기보다 큰 경우, 이 루프 후보는 루프 버퍼에 저장될 수 없으므로, 루프 추적은 종료될 것이다. uop 카운터가 루프 버퍼의 크기보다 작은 경우, 루프의 콘텐츠는 다수의 루프 반복 동안 추적될 수 있다. 루프의 각각의 반복에 대해, 루프의 콘텐츠가 반복 동안 동일하게 유지되는 경우, 루프 반복 카운터는 증가할 수 있고, 루프 추적은 계속될 수 있다.
하나의 실시예에서, 루프의 취득 브랜치들(taken branches)은 각각의 루프 반복 동안 추적될 수 있다. 루프의 시작부터 각각의 취득 브랜치까지의 거리는 루프의 제1 반복 동안 브랜치 추적 테이블(branch tracking table)에 저장될 수 있으며, 루프의 후속 반복들 동안, 브랜치가 검출될 때 uop 카운터의 값이 브랜치 추적 테이블에 저장된 대응 값과 비교될 수 있다. 루프의 시작부터 루프의 브랜치들까지의 거리가 불변인 경우, 루프 추적은 계속될 수 있다. 루프 반복 카운터의 값이 미리 결정된 임계값을 초과할 때, 루프는 루프 버퍼에 캐시될 수 있다. 루프는 루프 버퍼로부터 판독될 수 있고, 루프가 종료할 때까지 페치 유닛은 셧다운될 수 있다.
이들 및 다른 특징들 및 장점들은 여기에 제시된 접근법들에 대한 다음의 상세한 설명의 견지에서 당업자에게 명백해질 것이다.
방법 및 메커니즘의 상기 및 추가 장점들은 첨부 도면과 함께 다음의 설명을 참조하여 더 잘 이해될 수 있다.
도 1은 집적 회로의 일부에 대한 하나의 실시예를 도시한다.
도 2는 프로세서 코어에 대한 하나의 실시예를 도시하는 블록도이다.
도 3은 프로세서 파이프라인의 전단(front end)에 대한 하나의 실시예를 도시하는 블록도이다.
도 4는 페치 및 디코드 유닛(fetch and decode unit) 내의 루프 버퍼에 대한 또 다른 실시예의 블록도를 도시한다.
도 5는 샘플 루프에 대한 하나의 실시예이다.
도 6은 루프 버퍼 제어 유닛에 대한 하나의 실시예를 도시한다.
도 7은 루프 후보를 추적하기 위한 방법에 대한 하나의 실시예를 도시하는 일반화된 흐름도이다.
도 8은 시스템에 대한 하나의 실시예의 블록도이다.
도 9는 컴퓨터 판독가능한 매체에 대한 하나의 실시예의 블록도이다.
다음 설명에서, 여기에 제시된 방법 및 메커니즘에 대한 철저한 이해를 제공하기 위해 수많은 특정 상세가 명시되어 있다. 그러나, 당업자는, 이러한 특정 상세 없이 다양한 실시예가 실행될 수 있음을 인식해야 한다. 여기에 설명된 접근법이 애매해지는 것을 피하기 위해, 어떤 경우에는, 잘 알려진 구조, 컴포넌트, 신호, 컴퓨터 프로그램 명령어, 및 기법은 자세히 표시되지 않는다. 설명을 간략하고 명확하게 하기 위해, 도면에 도시된 요소들이 반드시 크기에 맞게 그려질 필요는 없다는 것이 인정될 것이다. 예를 들어, 일부 요소의 치수가 다른 요소에 비해 과장될 수 있다.
본 명세서는 "하나의 실시예(one embodiment)"라는 지칭을 포함한다. 다른 문맥에서, "하나의 실시예에서(in one embodiment)"라는 문구의 등장이 반드시 동일한 실시예를 지칭하는 것일 필요는 없다. 특정한 특징, 구조 또는 특성이 본 개시에 부합하는 임의의 적절한 방식으로 조합될 수 있다. 또한, 본 출원의 전체에 걸쳐 사용된, "할 수 있다(may)"라는 단어는 필수의 의미(즉, 해야만 한다(must)는 것을 의미함)보다는 관대한 의미(즉, 할 수 있는 가능성을 가지고 있다(have the potential to)는 것을 의미함)로 사용된다. 마찬가지로, "포함한다(include, includes)" 및 "포함하는(including)"이라는 단어는 포함하고 있다(including)는 것을 의미하지만 이로 제한되는 것은 아니다.
용어(Terminology). 다음 단락은 (첨부된 청구항들을 포함하는) 본 개시에서 발견된 용어들에 대한 정의 및/또는 문맥을 제공한다:
"포함하는(Comprising)". 이 용어는 개방형이다. 첨부된 청구항에 사용된, 이 용어는 추가적인 구조나 단계들을 배제하지 않는다. "... 루프 버퍼 제어 유닛을 포함하는 프로세서"를 인용하는 청구항을 고려하자. 이러한 청구항은 프로세서가 추가적인 컴포넌트(예컨대, 캐시, 페치 유닛, 실행 유닛)를 포함하는 것을 배제하지 않는다.
"하도록 구성된(Configured to)". 다양한 유닛, 회로, 또는 다른 컴포넌트는 작업 또는 작업들을 수행"하도록 구성되는" 것으로 설명되거나 청구될 수 있다. 이러한 문맥에서, "하도록 구성된"은, 유닛들/회로들/컴포넌트들이 동작하는 동안 작업 또는 작업들을 수행하는 구조(예컨대, 회로)를 포함한다는 것을 나타냄으로써 구조를 암시하는데 사용된다. 보통, 유닛/회로/컴포넌트는, 지정된 유닛/회로/컴포넌트가 현재 동작중이지 않을(예컨대, 온 상태가 아닐) 때조차 작업을 수행하도록 구성될 수 있다고 할 수 있다. "하도록 구성된"이라는 언어로 사용되는 유닛/회로/컴포넌트는 하드웨어 - 예를 들어, 회로, 동작을 구현하도록 실행가능한 프로그램 명령어들을 저장하는 메모리 등을 포함한다. 유닛/회로/컴포넌트가 하나 이상의 작업을 수행"하도록 구성"된다는 인용은, 유닛/회로/컴포넌트에 대해, 35 U.S.C. §112, 제6항을 적용하지 않도록 분명히 의도된다. 추가로, "하도록 구성된"은 이슈 중인 작업(들)을 수행할 수 있는 방식으로 동작하기 위해 소프트웨어 및/또는 펌웨어(예컨대, 소프트웨어를 실행하는 범용 프로세서 또는 FPGA)에 의해 조작되는 일반적인 구조(예컨대, 일반적인 회로)를 포함할 수 있다. "하도록 구성된"은 또한 하나 이상의 작업을 구현하거나 수행하도록 적응되는 디바이스(예컨대, 집적 회로)를 제작하기 위해 제조 프로세스(예컨대, 반도체 제작 시설)를 적응시키는 것을 포함할 수 있다.
"에 기초하여(Based on)". 여기에 사용된, 이 용어는 결정에 영향을 미치는 하나 이상의 요인을 설명하는데 사용된다. 이 용어는 결정에 영향을 미칠 수 있는 추가 요인을 배제하지 않는다. 즉, 결정은 전적으로 이러한 요인들에 기초하거나, 이러한 요인들에 적어도 부분적으로 기초한 것일 수 있다. "B에 기초하여 A를 결정(determine A based on B)"이라는 구문을 고려하자. B는 A의 결정에 영향을 미치는 요인이 될 수 있지만, 그러한 구문은 A의 결정이 또한 C에 기초한 것임을 배제하지 않는다. 다른 경우에, A는 전적으로 B에 기초하여 결정될 수 있다.
이제, 도 1을 참조하면, 집적 회로(IC)의 일부에 대한 하나의 실시예를 도시하는 블록도가 도시된다. 도시된 실시예에서, IC(10)는 프로세서 콤플렉스(processor complex; 12), 메모리 제어기(22), 및 메모리 물리적 인터페이스 회로(PHY)(24 및 26)를 포함한다. IC(10)는 또한 도 1에 도시되지 않은 많은 다른 컴포넌트를 포함할 수 있다는 것에 유의한다. 다양한 실시예에서, IC(10)는 또한 SoC(system on chip), ASIC(application specific integrated circuit), 또는 장치로 지칭될 수 있다.
프로세서 콤플렉스(12)는 CPU(central processing units)(14 및 16), L2(level two) 캐시(18), 및 BIU(bus interface unit)(20)를 포함할 수 있다. 다른 실시예에서, 프로세서 콤플렉스(12)는 다른 수의 CPU를 포함할 수 있다. CPU(14 및 16)는 또한 프로세서 또는 코어로 지칭될 수 있다. 프로세서 콤플렉스(12)는 도 1에 도시되지 않은 다른 컴포넌트들을 포함할 수 있다는 것에 유의한다.
CPU(14 및 16)는 명령어 세트 아키텍처에서 정의된 명령어들을 실행하는 회로를 포함할 수 있다. 특히, 명령어들을 포함하는 하나 이상의 프로그램은 CPU(14 및 16)에 의해 실행될 수 있다. 임의의 명령어 세트 아키텍처는 다양한 실시예에서 구현될 수 있다. 예를 들어, 하나의 실시예에서, ARM™ 명령어 세트 아키텍처(instruction set architecture; ISA)가 구현될 수 있다. ARM 명령어 세트는 16-비트(또는 Thumb) 및 32-비트 명령어를 포함할 수 있다. 다른 예시적인 ISA는, PowerPC™ 명령어 세트, MIPS™ 명령어 세트, SPARC™ 명령어 세트, x86 명령어 세트(또한 IA-32로도 지칭됨), IA-64 명령어 세트 등을 포함할 수 있다.
하나의 실시예에서, CPU(14 및 16)에 의해 실행된 각각의 명령어는 PC 값과 연관될 수 있다. 또한, 하나 이상의 구조적 레지스터(architectural register)는 판독 및 기록을 위한 일부 명령어들 내에서 지정될 수 있다. 이러한 구조적 레지스터는 레지스터 재명명 유닛(register rename unit)에 의해 실제 물리적 레지스터로 매핑될 수 있다. 또한, 일부 명령어들(예컨대, ARM Thumb 명령어)은 명령어 동작들(instruction operations)(또는 마이크로-op들)의 시퀀스로 분산(break up)될 수 있고, 시퀀스의 각 명령어 동작은 고유의 마이크로-op(또는 uop) 수와 관련 있을 수 있다.
CPU(14 및 16) 각각은 또한 L1(level one) 캐시(도시되지 않음)를 포함할 수 있고, 각각의 L1 캐시는 L2 캐시(18)에 결합될 수 있다. 다른 실시예들은 추가 레벨의 캐시(예컨대, L3(level three) 캐시)를 포함할 수 있다. 하나의 실시예에서, L2 캐시(18)는 CPU(14 및 16)에 의한 저 지연 액세스(low latency access)를 위한 명령어들 및 데이터를 캐시하도록 구성될 수 있다. L2 캐시(18)는 임의의 용량 및 구성(예컨대, 직접 매핑(direct mapped), 세트 연관(set associative))을 포함할 수 있다. L2 캐시(18)는 BIU(20)를 통해 메모리 제어기(22)에 결합될 수 있다. BIU(20)는 또한 CPU(14 및 16) 및 L2 캐시(18)를 다양한 다른 디바이스 및 블록에 결합하는 다양한 다른 논리 구조를 포함할 수 있다.
메모리 제어기(22)는 임의의 수의 메모리 포트를 포함할 수 있고, 메모리에 인터페이스하도록 구성된 회로를 포함할 수 있다. 예를 들어, 메모리 제어기(22)는 SDRAM(synchronous DRAM), DDR(double data rate) SDRAM, DDR2 SDRAM, RDRAM(Rambus DRAM) 등과 같은 DRAM(dynamic random access memory)에 인터페이스하도록 구성될 수 있다. 메모리 제어기(22)는 또한 메모리 물리적 인터페이스 회로(PHY)(24 및 26)에 결합될 수 있다. 메모리 PHY(24 및 26)는 메모리 제어기(22)에 결합될 수 있는 임의의 수의 메모리 PHY를 나타낸다. 메모리 PHY(24 및 26)는 메모리 디바이스들(도시되지 않음)에 인터페이스하도록 구성될 수 있다.
다른 실시예들은, 도 1에 도시된 컴포넌트들 및/또는 다른 컴포넌트들의 서브셋(subsets) 또는 수퍼셋(supersets)을 포함하는, 컴포넌트들의 다른 조합을 포함할 수 있다는 것에 유의한다. 소정의 컴포넌트의 하나의 인스턴스가 도 1에 도시될 수 있지만, 다른 실시예들은 소정의 컴포넌트의 둘 이상의 인스턴스를 포함할 수 있다. 마찬가지로, 상세한 설명 전체에 걸쳐, 단지 하나의 인스턴스가 도시되는 경우에도 소정의 컴포넌트의 둘 이상의 인스턴스가 포함될 수 있고 및/또는 다수의 인스턴스가 도시되는 경우에도 단지 하나의 인스턴스를 포함하는 실시예들이 사용될 수 있다.
이제, 도 2를 다시 참조하면, 프로세서 코어에 대한 하나의 실시예가 도시된다. 코어(30)는 프로세서 코어의 하나의 예이며, 코어(30)는 도 1의 프로세서 콤플렉스(12)와 같은 프로세서로 콤플렉스 내에서 사용될 수 있다. 하나의 실시예에서, 도 1의 CPU(14 및 16) 각각은 코어(30)의 컴포넌트들 및 기능성을 포함할 수 있다. 코어(30)는 FED(fetch and decode) 유닛(32), 맵 및 디스패치 유닛(36), MMU(memory management unit)(40), CIF(core interface unit)(42), 실행 유닛(44), 및 LSU(load-store uint)(46)을 포함할 수 있다. 코어(30)는 도 2에 도시되지 않은 다른 컴포넌트들 및 인터페이스들을 포함할 수 있다는 것에 유의한다.
FED 유닛(32)은 메모리로부터 명령어들을 판독하고 그들을 L1(level one) 명령어 캐시(34)에 배치하도록 구성된 회로를 포함할 수 있다. L1 명령어 캐시(34)는 코어(30)에 의해 실행될 명령어들을 저장하기 위한 캐시 메모리일 수 있다. L1 명령어 캐시(34)는 임의의 용량과 구조(예컨대, 직접 매핑, 세트 연관, 완전 연관 등)를 가질 수 있다. 또한, L1 명령어 캐시(34)는 임의의 캐시 라인 크기를 가질 수 있다. FED 유닛(32)은 또한 브랜치 명령어를 예측하고 예측된 경로를 페치 다운하도록 구성된 브랜치 예측 하드웨어를 포함할 수 있다. FED 유닛(32)은 또한 리디렉트될 수 있다(예컨대, 예측 실패, 예외, 인터럽트, 플러시 등을 통해).
FED 유닛(32)은 명령어들을 명령어 동작들로 디코드하도록 구성될 수 있다. 또한, FED 유닛(32)은 또한 다수의 명령어를 병렬로 디코드하도록 구성될 수 있다. 일반적으로, 명령어 동작은 실행 유닛(44) 및 LSU(46)에 포함된 하드웨어가 실행할 수 있는 동작일 수 있다. 각각의 명령어는, 실행될 때, 명령어 세트 아키텍처에 따라 그 명령어에 대해 정의된 동작들의 성능을 야기하는 하나 이상의 명령어 동작들로 변환할 수 있다. "명령어 동작(instruction operation)" 및 "uop"라는 용어는 본 개시물 전체에 걸쳐 교체 사용될 수 있다는 것에 유의한다. 다른 실시예에서, FED 유닛(32) 내에 포함된 기능성은, 페치 유닛, 디코드 유닛 및/또는 다른 유닛과 같은 둘 이상의 별도의 유닛으로 분할될 수 있다.
다양한 ISA에서, 일부 명령어는 단일 uop로 디코드할 수 있다. FED 유닛(32)은 명령어, 소스 피연산자 등의 유형을 식별하도록 구성될 수 있으며, 각각의 디코드된 명령어 동작은 디코드 정보의 일부와 함께 명령어를 포함할 수 있다. 각 명령어가 단일 uop로 변환하는 다른 실시예에서, 각 uop는 단순히 대응 명령어 또는 그 일부(예컨대, 명령어의 연산 코드 필드 또는 필드들)일 수 있다. 일부 실시예에서, FED 유닛(32)은 명령어들에 대한 uop들을 생성하기 위한 회로 및/또는 마이크로코드의 임의의 조합을 포함할 수 있다. 예를 들어, 더 광범위한 uop 생성(예컨대, 명령어에 대해 3보다 많은 uop들)은 마이크로코드로 처리될 수 있는 한편, 비교적 간단한 uop 생성(예컨대, 명령어당 하나 또는 두 개의 uop)은 하드웨어로 처리될 수 있다.
디코드된 uop가 맵/디스패치 유닛(map/dispatch unit; 36)에 제공될 수 있다. 맵/디스패치 유닛(36)은 코어(30)의 물리적 레지스터들에 uop들 및 구조적 레지스터들을 매핑하도록 구성될 수 있다. 맵/디스패치 유닛(36)은, uop들로부터의 소스 레지스터 주소들을, 재명명된 소스 레지스터들을 식별하는 소스 피연산자 넘버들로 매핑하기 위해 레지스터 재명명을 구현할 수 있다. 맵/디스패치 유닛(36)은 또한 실행 유닛(44)과 LSU(46) 내의 예약 스테이션들(도시되지 않음)에 uop들을 디스패치하도록 구성될 수 있다.
하나의 실시예에서, 맵/디스패치 유닛(36)은 ROB(reorder buffer)(38)를 포함할 수 있다. 다른 실시예들에서, ROB(38)는 다른 곳에 위치할 수 있다. 디스패치되기 전에, uop는 ROB(38)에 기록될 수 있다. ROB(38)는 uop들이 순서대로 커밋될 수 있을 때까지 그들을 보유하도록 구성될 수 있다. 각 uop에는 ROB(38)에서의 특정 엔트리에 대응하는 ROB 인덱스(RNUM)가 할당될 수 있다. RNUM은 코어(30)에서 인플라이트(in flight) 동작들을 계속 추적하는데 사용될 수 있다. 맵/디스패치 유닛(36)은 또한 도 2에 도시되지 않은 다른 컴포넌트들(예컨대, 매퍼 어레이, 디스패치 유닛, 디스패치 버퍼)을 포함할 수 있다. 또한, 다른 실시예에서, 맵/디스패치 유닛(36)에 포함된 기능성은, 맵 유닛, 디스패치 유닛, 및/또는 다른 유닛들과 같은 2 이상의 별도의 유닛들로 분할될 수 있다.
실행 유닛(44)은 임의의 수 및 임의의 유형의 실행 유닛들(예컨대, 정수, 부동 소수점, 벡터)을 포함할 수 있다. 실행 유닛(44) 각각은 또한 하나 이상의 예약 스테이션(도시되지 않음)을 포함할 수 있다. CIF(42)는 LSU(46), FED 유닛(32), MMU(40), 및 L2 캐시(도시되지 않음)에 결합될 수 있다. CIF(42)는 코어(30)와 L2 캐시 사이의 인터페이스를 관리하도록 구성될 수 있다. MMU(40)는 주소 변환 및 메모리 관리 기능을 수행하도록 구성될 수 있다.
LSU(46)은 L1 데이터 캐시(48), 저장 큐(store queue; 50), 및 로드 큐(load queue; 52)를 포함할 수 있다. 로드 및 저장 동작들은 맵/디스패치 유닛(36)으로부터 LSU(46) 내의 예약 스테이션으로 디스패치될 수 있다. 저장 큐(50)는 저장 동작들에 대응하는 데이터를 저장할 수 있고, 로드 큐(52)는 로드 동작들과 관련된 데이터를 저장할 수 있다. LSU(46)는 또한 CIF(42)를 통해 L2 캐시에 결합될 수 있다. LSU(46)는 또한 도 2에 도시되지 않은 다른 컴포넌트들(예컨대, 예약 스테이션, 레지스터 파일, 프리페치 유닛, 변환 색인 버퍼)을 포함할 수 있다는 것에 유의한다.
도 2에 도시된 기능성의 분포가 프로세서 코어에 이용될 수 있는 단지 하나의 가능한 마이크로아키텍처가 아니라는 것이 이해되어야 한다. 다른 프로세서 코어들은 다른 컴포넌트들을 포함할 수 있고, 도시된 컴포넌트들 중 하나 이상을 생략할 수 있고, 및/또는 컴포넌트들 간의 상이한 기능성 배열을 포함할 수 있다.
이제, 도 3을 참조하면, 프로세서 파이프라인의 전단(front end)에 대한 하나의 실시예에 대한 블록도가 도시된다. 하나의 실시예에서, 도 3에 도시된 전단 논리(front end logic)는, (도 2의) FED 유닛(32)과 같은, 페치 및 디코드 유닛 내에 위치할 수 있다. 도 3에 도시된 기능성의 분포는 프로세서 파이프라인 내에서 루프 버퍼를 구현하는 단지 하나의 가능한 구조라는 것이 이해되어야 한다. 루프 버퍼를 구현하기 위한 다른 적절한 분포의 논리가 가능하고 고려된다.
페치 전단(fetch front end; 60)은 명령어들을 페치 및 프리-디코드한 다음, 프리-디코드된 uop들을 (멀티플렉서(68)를 통해) 루프 버퍼(62) 및 디코더들(70A-F)로 전달할 수 있다. 하나의 실시예에서, 페치 전단(60)은 사이클 당 6개의 프리-디코드된 uop를 출력하도록 구성될 수 있다. 다른 실시예에서, 페치 전단(60)은 사이클 당 다른 수의 프리-디코드된 uop를 출력하도록 구성될 수 있다.
루프 버퍼(62), 멀티플렉서(68), 및 디코더(70A-F)는 사이클 당 6개의 uop를 처리 및/또는 저장하기 위한 6개의 레인들(lanes)을 가질 수 있다. 각 레인은 레인이 유효 uop를 포함하는지를 나타내기 위해 유효 비트를 포함할 수 있다. 루프 버퍼(62), 멀티플렉서(68), 및 디코더(70A-F)의 "레인들"은 또한 "슬롯들" 또는 "엔트리들"로 지칭될 수 있다는 것에 유의한다. 다른 실시예에서, 루프 버퍼(62), 멀티플렉서(68), 및 디코더(70A-F)는 6개보다 많거나 적은 레인을 포함할 수 있고, 페치 전단(60)은, 사이클당, 파이프라인의 다음 스테이지에 의해 수용될 수 있는 만큼 많은 uop를 출력하도록 구성될 수 있다.
페치 전단(60)은 명령어들을 uop들로 확장할 수 있고 이러한 uop들을 루프 버퍼(62) 및 멀티플렉서(68)로 피드(feed)할 수 있다. 하나의 실시예에서, 페치 전단(60)에 의해 페치되고 프리-디코드된 uop들로 디코드된 명령어들은 ARM ISA에 기초하는 것일 수 있다. 각 프리-디코드된 uop는 명령어 연산코드 비트, 명령어 프리디코드 비트, 및 uop 수를 포함할 수 있다. 명령어 연산코드 비트는 수행될 동작을 지정한다. 프리디코드 비트는 명령어가 매핑하는 uop들의 수를 나타낸다. uop 수는 멀티-uop 명령어 시퀀스에서 어떤 uop가 생성되어야 하는지를 나타낸다. 다른 실시예에서, 다른 ISA이 이용될 수 있으며, 명령어들을 다양한 방식으로 디코드 및 포맷될 수 있다.
프로세서가 루프 버퍼 모드에 있지 않은 경우, 페치 전단(60)으로부터 출력된 uop들은 멀티플렉서(68)를 통해 디코더(70A-F)에 전달될 수 있다. 루프 버퍼 제어 유닛(64)으로부터의 선택 신호가 멀티플렉서(68)에 결합되어, 디코더(70A-F)의 입력에 멀티플렉서(68)를 통해 결합되는 경로를 결정할 수 있다. 프로세서가 루프 버퍼 모드에 있을 때, uop들은 루프 버퍼(62)로부터 판독되어 디코더(70A-F)로 전달될 수 있다. uop들은 디코더(70A-F)의 출력으로부터 프로세서 파이프라인의 다음 스테이지로 전달될 수 있다. 하나의 실시예에서, 프로세서 파이프라인의 다음 스테이지는 도 2의 맵/디스패치 유닛(36)과 같은 맵/디스패치 유닛일 수 있다.
루프 버퍼 제어 유닛(64)은 페치되고 프리-디코드된 명령어들 내에서 루프를 식별하도록 구성될 수 있다. 루프가 어느 정도의 확실성으로 식별되면, 루프는 루프 버퍼(62)에 캐시될 수 있고, 페치 전단(60)은 셧다운될 수 있고, 그 다음, 프로세서 파이프라인의 나머지가 루프 버퍼(62)로부터 피드될 수 있다. 하나의 실시예에서, 루프의 하나의 반복이 루프 버퍼(62)에 캐시될 수 있고, 이렇게 캐시된 반복은 파이프라인 아래로 반복적으로 디스패치될 수 있다. 또 다른 실시예에서, 다수의 루프 반복이 루프 버퍼(62)에 캐시될 수 있다.
캐시하기 위한 루프를 식별하기 위해, 먼저 페치된 명령어들 중에서 후방 취득 브랜치(backwards taken branch)가 검출될 수 있다. "후방 취득 브랜치"는 명령어 시퀀스에서 이전 명령어로 분기하는 취득 브랜치로서 정의될 수 있다. 후방 취득 브랜치가 가는(go to) 명령어는 루프의 시작으로 간주될 수 있다. 하나의 실시예에서, 단지 특정한 유형의 루프들만 버퍼링하기 위한 후보로서 간주될 수 있다. 예를 들어, 하나의 실시예에서, 버퍼링을 위해 고려될 루프 후보에 대해, 루프 반복들 모두는 불변이어야 한다. 즉, 루프 후보는 각각의 반복에서 동일한 명령어 시퀀스를 실행한다. 또한, 루프의 명령어 스퀀스에서 간접 취득 브랜치들(예컨대, BX - 브랜치 교환, BLX - 링크 교환을 갖는 브랜치)을 갖는 루프는 버퍼링을 위한 고려에서 제외될 수 있다. 또한, 루프당 단지 하나의 후방 취득 브랜치가 허용될 수 있다. 루프에서 브랜치들의 나머지는 전방 브랜치들이라야 한다. 다른 실시예에서, 루프의 모든 유형이 고려될 수 있어, 루프의 모든 유형이 루프 후보일 수 있지만, 강요될 수 있는 유일한 기준은 루프의 불변성일 수 있다. 예를 들어, 네스트된 루프(nested loop)와 같은, 루프 후보에서 하나보다 많은 후방 취득 브랜치가 허용될 수 있다.
루프 버퍼 제어 유닛(64)은 루프 버퍼링을 위한 기준을 충족하는 루프를 형성하는 명령어들에 대한 명령어 스트림을 모니터링할 수 있다. 루프 버퍼 제어 유닛(64)은 소정의 루프 후보가 어떻게 생겼는지에 대한 모든 정보를 캡처할 수 있다. 특정 시간 기간 동안, 루프 후보가 동일하게 유지되도록 보장하기 위해 다수의 반복에 걸쳐 루프 후보가 추적될 수 있다. 예를 들어, 루프의 시작부터 루프 내의 하나 이상의 명령어까지의 거리는 제1 반복에서 기록될 수 있으며, 이러한 거리가 동일하게 유지되는지를 결정하기 위해 후속 반복들에서 모니터링될 수 있다.
일부 실시예에서, 루프 후보가 불변이며, 위에 나열된 다른 기준을 충족하는 경우에도, 루프 후보의 다른 특성들은 루프가 루프 버퍼(62)에 캐시되지 못하게 실격되게 할 수 있다. 예를 들어, 루프 후보의 크기가 너무 커서 루프 버퍼(62)에 맞지 않는 경우, 루프 후보는 실격될 수 있다. 또한, 루프 내의 취득 브랜치들의 최대 허용가능한 수는 브랜치 추적 테이블(66)의 크기와 같을 수 있다. 취득 브랜치들의 수가 이 수를 초과하면, 그 루프는 루프 버퍼(62)에 캐시하기 위한 후보로서의 고려대상에서 제외될 수 있다. 하나의 실시예에서, 브랜치 추적 테이블(66)은 루프 내의 취득 브랜치들을 위한 8개의 엔트리를 포함할 수 있다. 다른 실시예에서, 브랜치 추적 테이블(66)은 루프 내의 취득 브랜치들을 위한 8개의 엔트리보다 많거나 적은 엔트리를 가질 수 있다. 루프 후보가 루프 버퍼(62)에 캐시되는 것으로부터 실격되면, 이러한 실격된 루프 후보에 대한 후방 취득 브랜치의 명령어 주소가 기록될 수 있다. 따라서, 이러한 후방 취득 브랜치가 다시 검출되는 경우, 루프 추적 논리는 이러한 브랜치를 무시하고 새로운 후방 취득 브랜치가 검출될 때에만 재시작할 수 있다.
하나의 실시예에서, 동일한 후방 취득 브랜치가 한 번보다 많이 검출되면, 그 루프에 대한 정보를 캡처하는 상태 머신이 루프 버퍼 제어 유닛(64)에 의해 시작될 수 있다. 예를 들어, 루프 버퍼 제어 유닛(64)은 루프 후보의 취득 브랜치들을 추적하기 위해 브랜치 추적 테이블(66)을 사용할 수 있다. 브랜치 추적 테이블(66)은 루프의 시작부터 각 취득 브랜치까지의 거리를 계속 추적할 수 있다. 하나의 실시예에서, 거리는 uop들에서 측정될 수 있다. 또 다른 실시예에서, 거리는 명령어들에서 측정될 수 있다. 다른 실시예에서, 거리는 다른 메트릭 및/또는 2 이상의 메트릭의 조합을 사용하여 측정될 수 있다. 루프의 시작부터 각 취득 브랜치까지의 거리를 측정하는 것은 기본 코드(underlying code)를 통한 경로가 변경되지 않았다는 것을 결정하는 방식이다.
루프의 시작부터 각 브랜치까지 동일한 수의 uop가 존재하도록 루프의 각각의 반복이 실행되는 경우, 루프 후보는 불변으로 간주될 수 있다. 테이블(66)에 있는 각 브랜치까지의 거리는, 루프 후보가 불변이며, 캐시되어야 한다는 것을 결정하기 전에 특정 수의 반복에 대해 추적될 수 있다. 루프 후보의 불변성을 추적하기 위해 할당된 시간량은 루프 반복의 수 및/또는 직면한 브랜치의 수에 기초한 것일 수 있다.
하나의 실시예에서, 루프 후보 내에서 허용가능한 유일한 취득 브랜치들은 동일한 타겟을 갖는 조건부 브랜치일 수 있다. 본 실시예에서, 간접 브랜치들은 루프의 상이한 반복들에서 상이한 타겟을 가질 수 있기 때문에, 간접 브랜치들은 지원되지 않을 수 있다. 간접 브랜치는 두 개의 별도의 반복에서 코드를 통한 두 개의 상이한 경로를 취할 수 있지만, 루프는 루프 버퍼 제어 유닛(64)에 의해 여전히 불변인 것으로 간주될 수 있을 가능성이 있다. 이는, 루프가 두 개의 별도의 반복에서 두 개의 상이한 경로를 취하더라도 거리가 동일한 것이 가능하기 때문에 발생할 수 있다. 이는 루프가 불변이라는 잘못된 결정으로 이어질 것이다. 이러한 잘못된 판단을 방지하기 위해, 간접 브랜치는 지원되지 않을 수 있다. 따라서, 본 실시예에서, 루프 버퍼 제어 유닛(64)은 각 루프 반복에서 동일한 타겟을 갖는 루프 후보 내의 브랜치들만 단지 허용할 수 있다.
또 다른 실시예에서, 간접 브랜치가 지원될 수 있으며, 루프 후보 내에서 허용가능할 수 있다. 본 실시예에서, 브랜치 추적 테이블(66)은 또한 루프가 불변임을 보장하기 위해, 각 취득 브랜치의 타겟을 나타내는 정보를 포함할 수 있다. 루프 후보의 각각의 반복 동안, 타겟이 변경되지 않음을 보장하기 위해, 루프의 각 브랜치의 타겟은 테이블(66)에 저장된 값과 비교될 수 있다. 또 다른 실시예에서, 루프 콘텐츠가 불변임을 보장하기 위해, 브랜치 추적 테이블(66)에 추가적인 정보가 포함될 수 있다.
하나의 실시예에서, 디코더(70A-F)는 브랜치를 검출하고 이것을 루프 버퍼 제어 유닛(64)으로 시그널링할 수 있다. 또 다른 실시예에서, 페치 전단(60)은 브랜치를 검출하고 검출의 표시를 유닛(64)으로 전달할 수 있다. 대안적으로, 또 다른 실시예에서, 유닛(64)은 브랜치들에 대한 명령어 스트림을 모니터링하고 디코더(70A-F) 또는 페치 전단(60)에 독립적으로 브랜치들을 검출할 수 있다. 유닛(64)은 루프의 시작부터 uop들의 수를 카운트하는 uop 카운터(도시되지 않음)를 포함할 수 있다. 루프의 첫 번째 반복에서, 유닛(64)은 브랜치가 루프에서 검출될 때마다 uop 카운터의 값을 브랜치 추적 테이블(66)에 기록할 수 있다. 테이블(66)에 대한 포인터는 또한 브랜치가 검출될 때마다 증가될 수 있어, 테이블(66)에서 다음 엔트리로 이동한다. 루프의 후속 반복에서, 브랜치가 검출될 때마다, uop 카운터의 값은 테이블(66)에서 대응 엔트리의 값과 비교될 수 있다. 테이블(66)의 각 엔트리는 각각의 브랜치에 대한 루프의 시작부터 uop들의 수를 나타내는 값을 포함할 수 있다. 각 엔트리는 또한 그 엔트리가 루프에서 취득 브랜치에 대응한다는 것을 나타내기 위해 유효 비트를 포함할 수 있다. 다른 실시예에서, 테이블(66)의 각 엔트리는 다른 정보, 이를테면, 브랜치 식별자 또는 태그, 브랜치의 타겟 및/또는 다른 정보를 포함할 수 있다.
하나의 실시예에서, 예측 실패 브랜치가 검출될 때마다, 리셋 신호가 루프 버퍼 제어 유닛(64)으로 전달될 수 있다. 또한, 페치 전단(60)을 리디렉트하는 후단(backend)으로부터 시그널링된 이벤트가 존재할 때마다, 루프 버퍼 제어 유닛(64)은 후보 검출 논리를 플러시 및 재시작할 수 있다. 이러한 시나리오는 일반적으로 코드의 스트림이 유닛(64)에 의해 추적되는 것에서 벗어나는 프로그램을 야기할 것이다.
특정한 미리 결정된 시간 기간 후에, 유닛(64)은 루프 후보가 루프 버퍼(62)에 캐시되어야 한다고 결정할 수 있다. 미리 결정된 시간 기간의 길이는 여러 가지 요인들 중 하나 이상에 기초한 것일 수 있다. 예를 들어, 하나의 실시예에서, 미리 결정된 시간 기간은 특정한 루프 반복 수에 의해 측정될 수 있다. 루프가 불변인 동안 반복 수가 임계값보다 높으면, 루프는 루프 버퍼(62)에 캐시될 수 있다. 대안적으로, 시간 기간은 검출된 취득 브랜치의 수에 기초한 것일 수 있다. 예를 들어, 루프 후보가 8개의 취득 브랜치를 포함하는 경우, 특정한 수(이 예에서는 5)의 반복이 발생한다는 것을 나타내기 위해 사용될 수 있는 브랜치의 카운트는 40이다. 하나의 실시예에서, 미리 결정된 시간 기간은 루프의 끝을 예측하기에 충분한 시간을 브랜치 예측기에 제공하는 것에 기초한 것일 수 있다. 이러한 반복을 추적하는 여러 가지 방식이 가능하고 고려된다.
이제 도 4를 참조하면, 페치 및 디코드 유닛 내에 있는 루프 버퍼에 대한 또 다른 실시예가 도시된다. 하나의 실시예에서, 루프 버퍼(84)는, 도 4에 도시된 바와 같이, 프로세서 파이프라인에서 디코더(82A-F)의 하류에 위치할 수 있다. 이는 디코더(70A-F) 이전의 프로세서 파이프라인에 위치하는 (도 3의) 루프 버퍼(62)와는 대조적이다. 페치 전단(80)은 명령어들을 페치하고, 페치된 명령어들을 프리-디코드된 uop들로 프리-디코드할 수 있다. 그 다음, 프리-디코드된 uop들은 디코더(82A-F)로 전달될 수 있다. 하나의 실시예에서, 페치 전단(80)은 사이클당 6개의 프리-디코드된 uop들을 생성하여 디코더(82A-F)의 6개의 레인들로 전달하도록 구성될 수 있다.
디코더(82A-F)는 프리-디코드된 uop들을 디코드된 uop들로 디코드할 수 있다. 그 다음, 디코더(82A-F)는 멀티플렉서(90)를 통해 디코드된 uop들을 프로세서 파이프라인의 다음 스테이지로 전달할 수 있다. 또한, 디코더(82A-F)는, 루프 후보가 식별되고 루프 버퍼(84)에 캐시되기 위한 기준을 충족할 때, 루프 버퍼(84)에 uop들을 전달할 수 있다. 멀티플렉서(90)의 출력은 프로세서 파이프라인의 다음 스테이지에 결합될 수 있다. 하나의 실시예에서, 프로세서 파이프라인의 다음 스테이지는 맵/디스패치 유닛일 수 있다.
루프 버퍼(84), 루프 버퍼 제어 유닛(86), 및 브랜치 추적 테이블(88)은 도 3에 도시된 프로세서 전단과 관련하여 설명된 것과 유사한 기능을 수행하도록 구성될 수 있다. 하나의 중요한 차이점은, 도 3에서는 루프 버퍼(62)가 프리-디코드된 uop들을 저장하는 것과는 대조적으로, 도 4에서는 루프 버퍼(84)가 디코드된 uop들을 저장할 수 있다는 것이다. 따라서, 루프 버퍼(84)는 더 많은 양의 데이터를 수용하기 위해 루프 버퍼(62)보다 더 큰 크기일 수 있는데, 그 이유는, 디코드된 uop들이 일반적으로 프리-디코드된 uop들보다 더 많은 정보를 갖기 때문이다. 루프 버퍼(84)는 또한 도 3 및 4에 도시된 2개의 위치에 더해 프로세서 파이프라인 내에서 다른 위치들에 위치할 수 있다는 것에 유의한다. 예를 들어, 루프 버퍼(84)는 페치 전단 내에 위치할 수 있고, 또는 대안적으로, 루프 버퍼(84)는 맵/디스패치 유닛 내에 위치할 수도 있다. 루프 버퍼가 파이프라인에서 어디에 위치하는지에 따라, 루프 버퍼에 저장되는 루프의 콘텐츠는 파이프라인 내의 그 포인트에서 수행된 명령어 처리량에 기초하여 변경될 수 있다.
하나의 실시예에서, 루프 후보의 초기 반복에서, 루프 버퍼 제어 유닛(86)은 루프의 시작부터 루프의 각 취득 브랜치까지의 거리로 브랜치 추적 테이블(88)을 채울 수 있다. 루프의 후속하는 반복들에서, 제어 유닛(86)은, 루프의 시작부터 각 브랜치까지의 거리가 테이블(88)에 저장된 대응 거리와 동일한지를 결정할 수 있다. 루프 후보가 특정 수의 반복 동안 불변인 이후에, 루프 후보는 루프 버퍼(84)에 캐시되고, 루프 버퍼(84)로부터 파이프라인의 나머지로 피드될 수 있다. 루프가 루프 버퍼(84)에서 프로세서 파이프라인의 나머지로 디스패치되는 동안 페치 전단(80) 및 디코더(82A-F)는 전원이 차단될 수 있다.
이제, 도 5를 참조하면, 샘플 루프에 대한 하나의 실시예가 도시된다. 도 5에 도시된 루프(100)의 프로그램 코드는 설명을 목적으로 사용된다는 것에 유의한다. 다른 수의 명령어들과 브랜치들에 의해 다른 루프들이 달리 구성될 수 있다.
루프(100)는 명령어(102)를 갖는 명령어 주소 0001에서 시작할 수 있다. 명령어(102)에 이어 명령어(104)가 오고, 이러한 명령어들은 ISA에 정의되어 있는 임의의 유형의 비-분기 명령어들(non-branching instructions)일 수 있다. 명령어(104)에 이어 브랜치(106)가 올 수 있고, 브랜치(106)는 명령어 주소 0025로 분기하는 전방 브랜치일 수 있다.
테이블(120)에 도시된 바와 같이, 명령어들(102 및 104) 및 브랜치(106)는 각각 단일 uop로 침투(crack into)될 수 있다. 이것은 순수하게 설명을 목적으로 한 것으로, 프로그램 또는 루프 내의 명령어들은 임의의 수의 uop에 대응할 수 있고, 테이블(120)에 표시된 예들은 단지 설명을 목적으로 한 것이다. 명령어당 uop들을 보여주는 테이블(120)은 프로세서 파이프라인에 의해 이용되거나 저장된 테이블은 아니지만 이러한 논의를 목적으로 도 5에 도시되는 것임에 유의한다.
브랜치(106)는 루프(100)에서 직면하는 제1 전방 브랜치이고, 루프(100)의 시작부터 uop의 수가 브랜치 추적 테이블(130)에 입력될 수 있다. 따라서, 각각 단지 하나의 uop를 갖는, 2개의 명령어에 기초할 때, 브랜치 추적 테이블(130)에 저장된 제1 값은 2일 수 있다. 브랜치(106)는 명령어(108)에 대응하는 명령어 주소 0025로 점프할 수 있다. 명령어(108)는 임의의 유형의 비-분기 명령어일 수 있다. 그 다음, 명령어(108) 이후에, 또 다른 전방 브랜치, 이 경우에는, 브랜치 명령어(110)가 실행될 수 있다. 테이블(120)에서 볼 수 있듯이, 명령어(108)는 3개의 uop로 침투된다. 따라서, 브랜치 추적 테이블(130)의 제2 엔트리에 기록된 값은 루프의 시작부터 브랜치(110)까지 uop의 수가 6일 수 있다.
브랜치(110)는 명령어 주소 0077에서 명령어(112)로 점프할 수 있다. 명령어(112) 다음에 명령어(114)가 오고 그 다음 브랜치(116)가 올 수 있다. 브랜치(116)는 후방 취득 브랜치이므로, 명령어 시퀀스에서 이전 주소로 다시 분기한다. 테이블(120)에서 도시되는 바와 같이, 명령어(112)는 2개의 uop로 침투하고, 명령어(114)는 4개의 uop로 침투한다. 따라서, 루프의 시작부터 브랜치(116)까지의 uop들에 있어서의 거리는 13이고, 이러한 값은 브랜치 추적 테이블(130)의 제3 엔트리에 저장될 수 있다.
브랜치(116)가 제1 시간 동안 검출될 때, 이는 루프 버퍼 제어 유닛 내의 상태 머신을 트리거하여 루프 버퍼 후보로서 루프(100)를 추적하기 시작할 수 있다. 루프 버퍼 제어 유닛은 루프(100)에서 uop의 수 및 루프(100)에서 브랜치의 수를 결정할 수 있다. 이러한 값 둘 다 루프 하드웨어에서 지원하는 임계값보다 작은 경우, 브랜치 추적 테이블(130)은 루프(100)의 다음 반복에서 채워질 수 있다. 대안적으로, 브랜치 추적 테이블(130)은 브랜치(116)를 검출한 이후에 루프(100)의 제1 반복에서 채워질 수 있다. 루프(100)가 루프 후보들을 위한 루프 하드웨어에 의해 요구된 모든 기준을 충족하지 않는 경우, 루프 추적은 중단될 수 있다. 루프(100)가 기준을 모두 충족하는 경우, 루프(100)의 후속 반복들에서, 브랜치에 직면할 때마다, 테이블(130)에서 대응 값이 판독되어, 루프의 시작부터 uop에 있어서의 거리와 비교될 수 있다.
다른 루프들에 대해, 테이블(130)은 루프에서 브랜치의 수에 따라 다른 수의 유효 엔트리를 포함할 수 있다는 것에 유의한다. 또한, 다른 실시예에서, 브랜치 추적 테이블(130)에 저장된 거리는 uop 이외의 다른 값들에서 측정될 수 있다는 것에 유의한다. 예를 들어, 또 다른 실시예에서, 테이블(130)에 저장된 거리는 명령어들에서 측정될 수 있다. 또한, 다른 실시예에서, 브랜치 추적 테이블(130)은 각 엔트리에 정보의 다른 필드들을 포함할 수 있다. 예를 들어, 엔트리가 루프 후보의 브랜치에 대응하고 유효 거리를 포함하는지를 나타내기 위해 각 엔트리에 대한 유효 비트가 존재할 수 있다. 테이블(130) 및 루프(100)에 대해 도 5에 도시된 예에서, 단지 처음 3개의 엔트리는 '1'로 설정된 유효 비트를 갖고, 다른 엔트리에서 유효 비트의 나머지는 '0'으로 설정될 수 있다. 또한, 다른 실시예에서, 브랜치 타겟 주소(branch target address)가 각 엔트리에 저장될 수 있다.
이제, 도 6을 참조하면, 루프 버퍼 제어 유닛(140)에 대한 하나의 실시예의 블록도가 도시된다. 유닛(140)은, 래치(144)로부터의 명령어 주소와 현재 BTB 명령어의 후방 취득 브랜치(backwards taken branch; BTB) 명령어 주소를 비교할 수 있는 비교기(142)를 포함할 수 있다. 래치(144)는 가장 최근에 직면한 BTB 명령어 주소를 보유할 수 있고, 이것은 현재 BTB 명령어 주소와 비교될 수 있다. 래치(144) 및 비교기(142)는 후방 취득 브랜치(BTB)가 검출되었다는 것을 나타내는 신호를 수신할 수 있다. 래치(144) 및 비교기(142)는 또한 검출된 BTB의 명령어 주소를 수신할 수 있다. 래치(144)는 가장 최근의 후방 취득 브랜치(BTB)의 주소의 명령어를 저장할 수 있다. 그 다음, 다음 번 BTB가 검출되면, BTB의 명령어 주소는 래치(144)에 저장된 이전 BTB의 명령어 주소와 비교될 수 있다. 대안적으로, 또 다른 실시예에서, 래치(144)는 레지스터 또는 메모리의 다른 유닛일 수 있다. 비교기(142)는 루프가 명령어 스트림에서 검출될 수 있다는 표시를 제공한다.
하나의 실시예에서, 비교기(142)는 2개의 출력, 즉, 균등(equality)을 나타내는 제1 출력과 불균등(inequality)을 나타내는 제2 출력을 가질 수 있다. 균등을 나타내는 제1 출력은, 검출 시작 플래그(detection started flag; 146), OR-게이트(160), 및 반복 카운터(150)에 결합될 수 있다. 비교기(142)로부터의 균등 출력은, BTB가 검출되었고, BTB가 로우에서 적어도 2번 보였다는 것을 나타내는 하나 이상의 클록 사이클에 대한 펄스일 수 있다. 비교기(142)로부터의 균등 출력은 반복 카운터(150)를 증가시킬 수 있고, 반복 카운터(150)는 명령어 스트림에서 검출된 루프 반복 수의 카운트를 제공할 수 있다. 이러한 실시예에 대해, 동일한 BTB를 로우에서 2번 직면하고, 그들 사이에 다른 BTB가 없는 경우에, 이는 루프 후보에 직면했음을 나타낸다. 따라서, 루프 추적 회로는 루프 후보에 관해 더 많이 학습하기 시작할 수 있다.
불균등을 나타내는 비교기(142)로부터의 제2 출력은 OR-게이트(162)에 결합될 수 있다. OR-게이트(162)의 출력은 검출 시작 플래그(146)를 리셋하기 위해 결합될 수 있다. 비교기(142)로부터의 제2 출력은, 현재 검출된 BTB가 이전에 검출된 BTB와 상이할 때 하이(high)일 수 있다. 이것은, 이전 BTB가 본 실시예를 위한 루프 후보의 일부가 아니었음을 나타낸다. 도 6에 도시되지는 않았지만, 비교기(142)로부터의 제2 출력은 루프 검출이 리셋되었음을 나타내는 다른 위치들에 결합될 수도 있다.
uop 카운터(148)는 루프 후보의 시작 이래로 검출된 uop의 수를 계속 추적하도록 구성될 수 있다. 하나 이상의 신호는 검출된 uop의 수를 나타내는 uop 카운터(148)에 결합될 수 있다. uop 카운터(148)로의 이러한 입력(들)은 페치 및/또는 디코드된 uop의 수를 나타낼 수 있다. 하나의 실시예에서, 신호(들)는 페치 유닛으로부터 나올 수 있다. 하나의 실시예에서, 페치 유닛이 클록 당 6개의 디코드된 uop를 출력하는 경우, uop 카운터(148)에 결합된 하이 입력은 uop 카운터(148)가 그의 카운트를 6까지 증가시키도록 할 수 있다. 또 다른 실시예에서, 이러한 신호들은 디코더 유닛들로부터 uop 카운터(148)에 결합될 수 있다.
uop 카운터(148)는 또한 브랜치에 대응하는 특정 uop까지의 uop의 수를 결정하기 위한 다른 논리를 포함할 수 있다. 브랜치에 직면할 때, uop 카운터(148)는 또한 uop가 위치하는 레인을 나타내는 입력을 수신할 수 있다. 그 다음, uop 카운터(148)는, 브랜치 uop의 앞쪽에 가장 최근 사이클의 uop들이 얼마나 많이 있는지를 결정할 수 있다. 이러한 방식에서, uop 카운터(148)는, 루프의 시작부터, 검출된 브랜치에 대응하는 특정 브랜치 uop까지의 uop의 수의 정확한 카운트를 생성할 수 있다. BTB가 검출되는 경우(루프의 끝을 뜻함)나, 프로세서의 후단(backend)으로부터 예측 실패(mispredict) 또는 플러시(flush)가 시그널링되는 경우나, 브랜치 거리에서 불균등이 검출되었다는 것을 비교기(152)가 시그널링하는 경우에 uop 카운터(148)는 리셋될 수 있다.
반복 카운터(150)는 페치 및/또는 디코드된 루프의 반복 수를 계속 추적하도록 구성될 수 있다. 반복 카운터(150)는, 프로세서의 후단으로부터 예측 실패(mispredict) 또는 플러시(flush)가 시그널링되는 경우, 또는 루프의 브랜치들 중 하나까지의 거리가 브랜치 추적 테이블(도시되지 않음)에 저장된 값과 상이한 경우에 리셋될 수 있다. 이는 비교기(152)에 의해 표시될 수 있는데, 검출된 브랜치의 현재 uop 카운터 값이 브랜치 추적 테이블(BTT)에 저장된 대응하는 값과 동일하지 않은 경우 불균등을 나타내는 신호를 생성할 수 있다. 비교기(152)는 브랜치 검출 신호 및 루프의 현재 브랜치에 대한 BTT로부터의 값을 수신할 수 있다. 비교기(152)는 현재 uop 카운터 값과 BTT 값을 비교하고, 이러한 비교의 결과를 출력할 수 있다. 비교 결과 불균등인 경우, 루프 검출 논리가 리셋될 수 있다.
하나의 실시예에서, 비교기(154)는 임계값(156)을 반복 카운터(150)의 출력과 비교하도록 구성될 수 있다. 반복 카운터(150)가 임계값(156)에 매치하거나 초과할 때, 비교기(154)는 프로세서에 대해 루프 버퍼 모드를 개시하는 신호를 출력할 수 있다. 본 실시예에서, 루프 버퍼 모드가 개시되기 전에, 루프 후보가 다수의 반복에 걸쳐 추적될 수 있으며, 추적에 필요한 반복 수가 임계값(156)으로 표시될 수 있다. 다양한 실시예에서, 임계값(156)은 프로그램 가능 값이다. 하나의 실시예에서, 임계값은 루프의 끝을 검출하기 위해 프로세서의 브랜치 예측 메커니즘에 필요한 사이클의 수 또는 시간에 기초한 것일 수 있다. 일부 실시예에서, 프로세서가 루프 버퍼 모드에 있는 동안, 브랜치 예측 메커니즘은 셧다운될 수 있다.
또 다른 실시예에서, 브랜치의 수가 카운트될 수 있으며, 브랜치의 수가 임계값에 도달하면, 루프 버퍼 모드가 개시될 수 있다. 예를 들어, 루프가 5개의 브랜치를 갖고, 브랜치 임계값이 40인 경우, 루프 후보는 브랜치 임계값에 도달하기 위해 8회의 반복을 필요로 한다. 다른 실시예에서, 루프 버퍼 모드를 개시하기 전에 루프 후보를 추적하는데 얼마나 오래 걸리는지를 결정하는 다른 방식들이 사용될 수 있다. 예를 들어, 또 다른 실시예에서, 특정 수의 브랜치나 특정 수의 반복 중 어느 하나에 도달하는 경우, 프로세서는 루프 버퍼 모드에 진입할 수 있다.
유닛(140)은 검출된 BTB, 검출된 uop의 수, 및 검출된 브랜치와 같은 다양한 신호를 수신하는 것으로 도시되지만, 또 다른 실시예에서, 유닛(140)은 프로세서 파이프라인을 통과하는 uop들을 모니터링하여 내부적으로 이러한 신호들을 생성할 수 있다. 또한, 도 6에 도시된 기능성의 분포는 프로세서 파이프라인 내에 루프 버퍼 제어 유닛을 구현하기 위한 논리에 대해 유일하게 가능한 분포는 아니라는 것이 이해되어야 한다. 다른 실시예는 다른 컴포넌트들 및 논리를 포함할 수 있고, 이러한 컴포넌트들 및 논리의 임의의 적절한 분포를 가질 수 있다. 또한, 개별 컴포넌트 각각은 실시예에 따라 다르게 구성될 수 있는 하나 이상의 유사한 컴포넌트에 의해 대체될 수 있다. 예를 들어, 도 6에 도시된 실시예에서, 루프 후보 내에서 단지 하나의 후방 취득 브랜치가 허용된다. 그러나, 다른 실시예에서, 루프 후보는 하나 보다 많은 후방 취득 브랜치를 포함할 수 있고, 루프 버퍼 제어 유닛의 논리는 그에 따라 수정될 수 있다.
이제, 도 7을 참조하면, 루프 후보를 추적하기 위한 방법에 대한 하나의 실시예가 도시된다. 논의를 목적으로, 본 실시예에서 단계들이 순차적인 순서로 도시된다. 아래 설명된 방법에 대한 다양한 실시예에서, 설명된 하나 이상의 요소들은 동시에 수행될 수도 있고 도시된 것과는 상이한 순서로 수행될 수도 있고, 또는 완전히 생략될 수도 있다는 것에 유의해야 한다. 요구에 따라 다른 추가적인 요소들이 또한 수행될 수도 있다.
하나의 실시예에서, 프로세서 파이프라인에서 루프 종료 브랜치(loop termination branch)가 검출될 수 있다(블록 172). 다양한 실시예에서, 루프 종료 브랜치는 서브루틴 호출(subroutine calls)을 제외하고 직접 후방 취득 브랜치(direct backwards taken branch)로서 정의될 수 있다. 다양한 실시예에서, 루프 종료 브랜치는 페치 스테이지, 디코더 스테이지, 또는 프로세서 파이프라인의 또 다른 스테이지에서 검출될 수 있다. 루프 종료 브랜치 uop는, 그것이 가능한 루프 버퍼 후보의 끝으로 식별될 수 있도록 마크될 수 있다.
루프 종료 브랜치의 검출에 응답하여, 루프 종료 브랜치의 명령어 주소는 루프 버퍼 제어 유닛에 래치될 수 있고, 검출 시작 플래그가 설정될 수 있으며, 반복 카운터가 시작될 수 있고, uop 카운터가 시작될 수 있다(블록 174). 반복 카운터는 루프의 반복 수를 계속 추적하는데 이용될 수 있다. 또한, 일부 실시예에서, 브랜치 카운터는 루프 후보의 반복 모두에서 검출된 브랜치의 수를 계속 추적하기 시작할 수 있다. 반복 카운터의 값 및/또는 브랜치 카운터의 값은 루프 버퍼 모드를 언제 개시할지를 결정하는데 이용될 수 있다. 루프 버퍼 모드가 개시될 때, 루프 후보는 루프 버퍼에 캐시될 수 있으며, 페치 전단은 셧다운될 수 있다. uop 카운터는 루프 후보 내에서 검출되는 각 브랜치까지의 거리(uop의 수)를 결정하기 위해 이용될 수 있다.
하나의 실시예에서, uop 카운터에 의해 유지된 카운트는 페치 및 디코드 스테이지의 일부로서 생성되는 빈 슬롯들(vacant slots)을 포함할 수 있다는 것에 유의한다. 본 실시예에서, 이러한 논의를 목적으로, 페치 유닛은 사이클 당 6개의 uop를 출력하도록 구성된다고 가정할 수 있다. 일부 클록 사이클 동안, 페치 유닛은 여러 가지 이유로 전체 6개의 uop 출력을 생성하지 않을 수 있다. 따라서, 디코더 유닛으로 전송된 uop들의 로우는 유효 uop들의 전체 로우를 포함하지 않을 수 있다. uop 카운터는 이러한 점을 고려하여 로우가 6 유효 uop를 포함하지 않는 경우에도 각 로우에 대해 6을 카운트할 수 있다. 예를 들어, 루프가 uop들의 6 로우들을 포함할 수 있고, 루프 종료 브랜치는 생성된 uop의 여섯 번째 사이클의 마지막 로우의 마지막 슬롯일 수 있다. uop 카운터는, 하나 이상의 로우가 6보다 적은 유효 uop를 포함하더라도, 루프가 6 사이클 동안 36개의 uop를 갖는다고 카운트할 수 있다. 예를 들어, 중간 로우는 단지 2 유효 uop를 포함할 수 있고, 로우의 나머지 4 슬롯은 비어있을 수 있다. 따라서, 루프는 32 유효 uop를 포함하지만, 루프 카운터는 루프가 36 uop를 포함한다고 카운트할 것이다. 일반적으로 말하자면, 본 실시예에서, uop 카운터는, 이러한 슬롯들 중 일부가 유효 uop를 포함하지 않는 경우에도, 루프 후보를 저장하기 위해 루프 버퍼에 얼마나 많은 슬롯이 필요할 것인지를 계속 추적할 수 있다.
카운터 및 임의의 추가적인 추적 논리를 설정한 후에, 루프 후보가 실행되고 추적될 수 있다(블록 176). 하나의 실시예에서, 루프 후보의 추적은 루프 후보에서 브랜치들의 검출 및 루프의 시작부터 각각의 검출된 브랜치까지의 거리로 브랜치 추적 테이블을 채우는 것을 포함할 수 있다(블록 178). 다음으로, 루프 종료 브랜치가 루프 후보의 끝에서 검출될 수 있다(블록 180). 루프 종료 브랜치가 이전에 검출된 브랜치와 동일한 경우(조건부 블록 182), 반복 카운터는 증가할 수 있다(블록 186).
루프 종료 브랜치가 이전에 검출된 브랜치와 동일하지 않은 경우(조건부 블록 182), 루프 후보의 추적은 정지될 수 있고, 카운터, 래치, 검출 시작 플래그, 및 브랜치 추적 테이블은 리셋될 수 있다(블록 184). 또한, 임의의 제외된 명령어들이 루프에서 검출되는 경우 루프 후보의 추적은 종료될 수 있다. 블록 184 이후에, 방법(170)은 리셋되고 루프의 종료 브랜치가 검출되기를 기다릴 수 있다(블록 172).
블록 186 후에, uop 카운터는, 루프 후보는 루프 버퍼에 맞을 수 있는지를 결정하기 위해 루프 버퍼의 크기와 비교될 수 있다(조건부 블록 188). 대안적으로, 또 다른 실시예에서, 방법(170)의 이러한 단계들은 재정렬될 수 있다. 예를 들어, uop 카운터가 루프 종료 브랜치를 검출(블록 180)하기 이전의 루프 버퍼의 크기를 초과하는 것으로 결정되는 경우(조건부 블록 188), 루프 검출이 취소될 수 있다.
uop 카운터가 루프 버퍼의 크기보다 작은 경우(조건부 블록 188), 루프 후보는 루프 버퍼에 맞을(fit) 수 있고, 그래서 다음 조건, 즉, 루프에서 브랜치의 수가 브랜치 추적 테이블(BTT)의 크기보다 작은지를 체크할 수 있다(조건부 블록 190). uop 카운터가 루프 버퍼의 크기보다 큰 경우(조건부 블록 188), 루프 후보는 너무 커서 루프 버퍼에 맞지 않고, 추적이 종료될 수 있다. 방법(170)은 블록 184로 리턴할 수 있고, 카운터, 래치, 검출 시작 플래그, 및 브랜치 추적 테이블이 리셋될 수 있다.
루프 후보에서 브랜치의 수가 BTT의 크기보다 작은 경우(조건부 블록 190), 루프 후보는 여전히 고려대상이고, uop 카운터는 재시작될 수 있다(블록 192). 그 다음, 루프의 또 다른 반복이 실행 및 추적될 수 있다(블록 194). 루프 반복의 추적은 취득 브랜치들 및 루프의 시작부터 각 취득 브랜치까지의 uop의 수를 모니터링하는 것을 포함할 수 있다. 루프의 시작부터 각 취득 브랜치까지의 거리가 브랜치 추적 테이블에 저장된 값과 비교될 수 있다.
루프의 반복이 완료되면, 루프 종료 브랜치가 검출될 것이고, 그것이 동일한 루프 종료 브랜치인지가 결정될 수 있다(조건부 블록 196). 대안적으로, 루프 종료 브랜치가 검출되지 않은 경우, 루프 추적은 uop 카운터 및 브랜치 추적 테이블에서 마지막 엔트리를 모니터링하고, 루프 종료 브랜치가 이미 검출되었음을 검출함으로써 종료될 수 있다. 루프 종료 브랜치가 검출되고 그것이 동일한 루프 종료 브랜치인 경우(조건부 블록 196), 루프 콘텐츠가 루프의 이러한 반복 동안 불변인지가 결정될 수 있다(조건부 블록 198).
대안적으로, 조건부 블록 198은 일부 시나리오에서 조건부 블록 196 이전에 체크될 수 있다. 예를 들면, 루프의 브랜치들 중 하나에서 루프의 시작으로부터의 거리와 브랜치 추적 테이블에 저장된 값이 동일하지 않은 경우, 루프 콘텐츠가 루프 종료 브랜치를 검출하기 전에 변경되었다고 결정될 수 있다. 이러한 경우에, 루프의 추적은 동일한 루프의 종료 브랜치를 검출하기 전에 종료될 수 있다.
루프 콘텐츠가 루프의 이러한 반복 동안 불변인 경우(조건부 브랜치 198), 이것은 동일한 루프가 실행되고 있음을 나타내고, 반복 카운터는 증가될 수 있다(블록 200). 그 다음, 루프가 버퍼링될 루프에 대해 충분히 길게 추적하였는지를 결정하기 위해 반복 카운터가 임계값보다 높은지가 결정될 수 있다(조건부 블록 202). 대안적으로, 또 다른 실시예에서, 프로세서가 루프 버퍼 모드에 진입해야 하는지를 결정하기 위해 브랜치 카운터가 임계값과 비교될 수 있다.
반복 카운터가 임계값 아래인 경우(조건부 블록 202), 방법(170)은 uop 카운터를 재시작한다(블록 192). 반복 카운터가 임계값 위인 경우(조건부 블록 202), 프로세서는 루프 버퍼 모드에 진입할 수 있고, 루프는 루프 버퍼에 캐시될 수 있다(블록 204). 블록 204 이후에, 방법(170)은 끝날 수 있다. 이 시점에서, 프로세서의 전단은 턴오프될 수 있고, uop는 루프 버퍼로부터 디스패치될 수 있다. 루프가 종료되면, 프로세서는 루프 버퍼 모드에서 나가기 위해 신호를 전달할 수 있고, 프로세서의 전단은 다시 턴온될 수 있다. 이 시점에서, 방법(170)은 재시작될 수 있으며, 루프 버퍼 제어 유닛은 루프의 종료 브랜치에 대한 명령어 스트림을 모니터링하기 위해 되돌아갈 수 있다(블록 172).
다음으로, 도 8을 참조하면, 시스템(210)의 하나의 실시예에 대한 블록도가 표시된다. 도시된 바와 같이, 시스템(210)은 데스크톱 컴퓨터(220), 랩톱 컴퓨터(230), 태블릿 컴퓨터(240), 셀 폰(250), 또는 그 외의 것들의 칩, 회로, 컴포넌트 등을 나타낼 수 있다. 도시된 실시예에서, 시스템(210)은 외부 메모리(212)에 결합된 IC(10)(도 1)의 적어도 하나의 사례를 포함한다.
IC(10)는 하나 이상의 주변기기들(214) 외부 메모리(212)에 결합된다. 전원 공급 장치(216)는 또한 메모리(212) 및/또는 주변기기(214)로의 하나 이상의 공급 전압은 물론 IC(10)로의 공급 전압을 공급하도록 제공된다. 다양한 실시예에서, 전원 공급 장치(216)는 배터리(예컨대, 스마트 폰, 랩톱 또는 태블릿 컴퓨터에서 충전식 배터리)를 나타낼 수 있다. 일부 실시예에서, IC(10)의 하나 보다 많은 인스턴스가 포함될 수 있다(뿐만 아니라 하나 보다 많은 외부 메모리(212)가 포함될 수 있다).
메모리(212)는 임의의 유형의 메모리, 이를테면, 동적 랜덤 액세스 메모리(DRAM), 동기식 DRAM(SDRAM), 더블 데이터 레이트(DDR, DDR2, DDR3 등) SDRAM(mDDR3 등과 같은 SDRAM의 모바일 버전 및/또는 LPDDR2 등과 같은 SDRAM의 저전력 버전), RAMBUS DRAM(RDRAM), 정적 RAM(SRAM) 등일 수 있다. 하나 이상의 메모리 디바이스가 회로 보드 상에 결합되어, 단일 인라인 메모리 모듈(SIMM), 이중 인라인 메모리 모듈(DIMM) 등과 같은 메모리 모듈을 형성할 수 있다.
주변기기(214)는, 시스템(210)의 유형에 따라, 임의의 원하는 회로를 포함할 수 있다. 예를 들어, 하나의 실시예에서, 주변기기(214)는 다양한 유형의 무선 통신, 이를테면, 와이파이, 블루투스, 셀룰러, 글로벌 포지셔닝 시스템 등을 위한 디바이스들을 포함할 수 있다. 주변기기(214)는 또한 RAM 저장소, 솔리드 스테이트 저장소 또는 디스크 저장소를 포함하는 추가적인 저장소를 포함할 수 있다. 주변기기(214)는 터치 디스플레이 화면이나 멀티터치 디스플레이 화면을 포함하는 디스플레이 화면, 키보드 또는 다른 입력 디바이스, 마이크, 스피커 등과 같은 사용자 인터페이스 디바이스를 포함할 수 있다.
이제, 도 9를 참조하면, IC 10(도 1)에 포함된 회로를 나타내는 하나 이상의 데이터 구조를 포함하는 컴퓨터 판독가능한 매체(260)의 블록도에 대한 하나의 실시예가 표시된다. 일반적으로, 컴퓨터 판독가능한 매체(260)는 임의의 비-일시적인 저장 매체, 이를테면, 자기 또는 광 매체, 예컨대, 디스크, CD-ROM 또는 DVD-ROM, 휘발성 또는 비-휘발성 메모리 매체, 이를테면, RAM(예컨대, SDRAM, RDRAM, SRAM 등), ROM 등 뿐만 아니라 네트워크 및/또는 무선 링크와 같은 통신 매체를 통해 전달된 전기, 전자기, 또는 디지털 신호와 같은 신호 또는 전송 매체를 통해 액세스가능한 매체를 포함할 수 있다.
일반적으로, 컴퓨터 판독가능한 매체(260) 상의 회로의 데이터 구조(들)는 프로그램에 의해 판독될 수 있고, 회로를 구성하는 하드웨어를 제작하기 위해 직접적으로 또는 간접적으로 사용될 수 있다. 예를 들어, 데이터 구조(들)는 Verilog 또는 VHDL과 같은 하이 레벨 디자인 언어(HDL)의 하드웨어 기능성의 하나 이상의 행동-레벨 디스크립션(behavioral-level descriptions) 또는 레지스터-전송 레벨(register-transfer level; RTL) 디스크립션을 포함할 수 있다. 디스크립션(들)은 합성 라이브러리에서 게이트들의 목록을 포함하는 하나 이상의 네트리스트(netlists)를 생성하기 위해 디스크립션을 합성할 수 있는 합성 도구(synthesis tool)에 의해 판독될 수 있다. 네트리스트(들)는 또한 회로를 구성하는 하드웨어의 기능성을 나타내는 게이트들의 세트를 포함한다. 그 다음, 네트리스트(들)가 배치 및 라우트되어, 마스크에 적용될 기하학적 모양들(geometric shapes)을 설명하는 하나 이상의 데이터 세트를 생성할 수 있다. 그 다음, 마스크는 다양한 반도체 제조 단계에서 사용되어, 반도체 회로나 그 회로에 대응하는 회로를 생산할 수 있다. 대안적으로, 컴퓨터 판독가능한 매체(230) 상의 데이터 구조(들)는, 요구에 따라, 네트리스트(들)(합성 라이브러리와 함께 또는 없이) 또는 데이터 세트(들)일 수 있다. 또 다른 대안으로, 데이터 구조는 개략적인 프로그램의 출력, 또는 그로부터 도출된 네트리스트(들) 또는 데이터 세트(들)를 포함할 수 있다.
컴퓨터 판독가능한 매체(260)는 IC(10)의 표현을 포함하는 한편, 다른 실시예들은 IC(10)의 임의의 일부 또는 일부의 조합(예컨대, 루프 버퍼, 루프 버퍼 제어 유닛)의 표현을 포함할 수 있다.
전술한 실시예는 제한이 아니라 단지 예의 구현이라는 것이 강조되어야 한다. 상기 개시물이 충분히 인정되면, 수많은 변형 및 수정이 당업자에게 명백해질 것이다. 다음과 같은 청구항들은 이러한 모든 변형 및 수정을 포용하는 것으로 해석되도록 의도된다.

Claims (20)

  1. 장치로서,
    명령어 동작들(instruction operations)을 저장하도록 구성된 루프 버퍼 - 상기 장치가 루프 버퍼 모드에 있다는 검출에 응답하여, 상기 루프 버퍼로부터 명령어 동작들이 디스패치(dispatch)됨 - ; 및
    상기 루프 버퍼에 결합된 루프 버퍼 제어 유닛
    을 포함하고,
    상기 루프 버퍼 제어 유닛은,
    복수의 명령어를 포함하는 루프 후보(loop candidate)의 시작부터 상기 루프 후보 내의 각각의 취득 브랜치(taken branch)까지의 거리를 추적하고,
    상기 루프 후보의 시작부터 상기 각각의 취득 브랜치까지의 거리들이 적어도 상기 루프 후보의 주어진 수의 반복 동안 불변이라는 검출에 응답하여, 상기 루프 버퍼 모드를 개시하도록
    구성되는 장치.
  2. 제1항에 있어서, 페치 유닛(fetch unit) 및 명령어 캐시를 더 포함하고, 상기 장치는 상기 루프 버퍼 모드의 개시에 응답하여 상기 페치 유닛과 상기 명령어 캐시 중 적어도 하나를 셧다운하도록 구성되는 장치.
  3. 제1항에 있어서, 상기 장치가 상기 루프 버퍼 모드에 있을 때, 상기 루프 버퍼로부터 디코드 유닛으로 명령어 동작들이 디스패치되는 장치.
  4. 제1항에 있어서, 상기 루프 후보의 시작부터 각각의 취득 브랜치까지의 거리는 명령어 동작들에서 측정되는 장치.
  5. 제1항에 있어서, 상기 주어진 수의 반복은 임계값보다 더 큰 수의 반복에 대응하는 장치.
  6. 제5항에 있어서, 상기 임계값은, 브랜치 예측기가 루프 후보의 끝을 예측하는데 필요한 시간량에 기초하는 장치.
  7. 제1항에 있어서, 브랜치 추적 테이블을 더 포함하고, 상기 브랜치 추적 테이블은 상기 루프 후보의 각각의 취득 브랜치에 대한 엔트리를 포함하고, 각각의 엔트리는 상기 루프 후보의 시작부터 상기 각각의 취득 브랜치까지의 거리에 대응하는 값을 포함하는 장치.
  8. 프로세서로서,
    루프 버퍼; 및
    상기 루프 버퍼에 결합된 루프 버퍼 제어 유닛
    을 포함하고,
    상기 루프 버퍼 제어 유닛은,
    후방 취득 브랜치(backwards taken branch)의 검출에 응답하여 루프 후보를 모니터링하고,
    상기 루프 후보의 시작부터 상기 루프 후보 내의 하나 이상의 명령어까지의 하나 이상의 거리를 추적하고,
    상기 하나 이상의 거리가 제1의 복수의 검출된 취득 브랜치들에 대해 불변이라는 검출에 응답하여, 상기 루프 후보가 상기 루프 버퍼에 저장되게 하도록
    구성되는 프로세서.
  9. 제8항에 있어서, 추적되는 상기 하나 이상의 명령어는 하나 이상의 취득 브랜치들인 프로세서.
  10. 제8항에 있어서, 상기 루프 후보의 시작은 상기 후방 취득 브랜치 이후의 명령어로서 식별되는 프로세서.
  11. 제8항에 있어서, 루프 후보에서 단 하나의 후방 취득 브랜치만 허용되는 프로세서.
  12. 제8항에 있어서, 맵 및 디스패치 유닛을 더 포함하고, 상기 루프 후보가 상기 루프 버퍼에 저장될 때, 상기 루프 버퍼로부터 상기 맵 및 디스패치 유닛으로 명령어 동작들이 디스패치되는 프로세서.
  13. 제9항에 있어서, 상기 루프 버퍼 제어 유닛은, 상기 루프 후보의 시작부터 임의의 취득 브랜치까지의 거리가 상기 루프 후보의 임의의 후속 반복에서 변경되었다는 검출에 응답하여 상기 루프 후보의 모니터링 및 추적을 종료하도록 또한 구성되는 프로세서.
  14. 제8항에 있어서, 상기 루프 버퍼 제어 유닛은, 상기 루프 후보가 상기 루프 버퍼에서 맞추어질 수 없다(is unable to fit)는 검출에 응답하여 상기 루프 후보의 모니터링 및 추적을 종료하도록 또한 구성되는 프로세서.
  15. 루프 종료 브랜치를 검출하는 단계;
    명령어 동작 카운터 및 반복 카운터를 시작하는 단계;
    루프 후보의 복수의 명령어를 추적하는 단계;
    두 번째로 상기 루프 종료 브랜치를 검출하는 것에 응답하여, 루프 버퍼의 크기와 상기 명령어 동작 카운터를 비교하는 단계;
    상기 루프 종료 브랜치가 두 번째로 검출될 때, 상기 명령어 동작 카운터가 상기 루프 버퍼의 크기보다 더 크다는 결정에 응답하여, 상기 루프 후보의 추적을 종료하는 단계;
    상기 명령어 동작 카운터가 상기 루프 버퍼의 크기보다 더 크지 않다는 결정에 응답하여, 계속해서 상기 루프 후보를 추적하고 상기 반복 카운터를 증가시키는 단계; 및
    상기 반복 카운터가 임계값을 초과한다는 것에 응답하여, 상기 루프 버퍼에 상기 루프 후보를 캐시하는 단계
    를 포함하는 방법.
  16. 제15항에 있어서,
    상기 루프 후보의 첫 번째 수의 반복들(first number of iterations)에서, 상기 루프 후보의 시작부터 상기 루프 후보의 각각의 취득 브랜치까지의 거리를 모니터링하는 단계; 및
    상기 루프 후보의 시작부터 상기 루프 후보의 임의의 취득 브랜치까지의 거리가 상기 루프 후보의 상기 첫 번째 수의 반복들 중 임의의 반복에서 변경되었다는 결정에 응답하여, 상기 루프 후보의 추적을 종료하는 단계
    를 더 포함하는 방법.
  17. 제15항에 있어서, 상기 루프 버퍼에 상기 루프 후보를 캐시하는 것에 응답하여, 페치 유닛을 셧다운하는 단계를 더 포함하는 방법.
  18. 제15항에 있어서, 상기 루프 버퍼에 상기 루프 후보를 캐시하는 것에 응답하여, 상기 루프 버퍼로부터 프로세서 파이프라인의 다음 스테이지로 상기 루프 후보를 디스패치하는 단계를 더 포함하는 방법.
  19. 제18항에 있어서, 상기 프로세서 파이프라인의 상기 다음 스테이지는 디코드 유닛인 방법.
  20. 제18항에 있어서, 상기 프로세서 파이프라인의 상기 다음 스테이지는 맵 및 디스패치 유닛인 방법.
KR20130068355A 2012-06-15 2013-06-14 루프 버퍼 학습 KR101497214B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/524,508 US9557999B2 (en) 2012-06-15 2012-06-15 Loop buffer learning
US13/524,508 2012-06-15

Publications (2)

Publication Number Publication Date
KR20130141394A true KR20130141394A (ko) 2013-12-26
KR101497214B1 KR101497214B1 (ko) 2015-02-27

Family

ID=48670377

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20130068355A KR101497214B1 (ko) 2012-06-15 2013-06-14 루프 버퍼 학습

Country Status (8)

Country Link
US (1) US9557999B2 (ko)
EP (1) EP2674858B1 (ko)
JP (1) JP5799465B2 (ko)
KR (1) KR101497214B1 (ko)
CN (1) CN103593167B (ko)
BR (1) BR102013015049B1 (ko)
TW (1) TWI520060B (ko)
WO (1) WO2013188122A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210046806A (ko) * 2018-09-18 2021-04-28 어드밴스드 마이크로 디바이시즈, 인코포레이티드 루프 종료 예측을 이용하여 프로세서의 루프 모드를 가속 또는 억제하기

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9753733B2 (en) 2012-06-15 2017-09-05 Apple Inc. Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer
US9459871B2 (en) * 2012-12-31 2016-10-04 Intel Corporation System of improved loop detection and execution
EP3005078A2 (en) * 2013-05-24 2016-04-13 Coherent Logix Incorporated Memory-network processor with programmable optimizations
US9632791B2 (en) 2014-01-21 2017-04-25 Apple Inc. Cache for patterns of instructions with multiple forward control transfers
US9471322B2 (en) * 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
US9524011B2 (en) 2014-04-11 2016-12-20 Apple Inc. Instruction loop buffer with tiered power savings
CN104298488B (zh) * 2014-09-29 2018-02-23 上海兆芯集成电路有限公司 循环预测器指导的循环缓冲器
US20160179549A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Instruction and Logic for Loop Stream Detection
US9830152B2 (en) * 2015-12-22 2017-11-28 Qualcomm Incorporated Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor
GB2548602B (en) 2016-03-23 2019-10-23 Advanced Risc Mach Ltd Program loop control
GB2548603B (en) * 2016-03-23 2018-09-26 Advanced Risc Mach Ltd Program loop control
US10223118B2 (en) 2016-03-24 2019-03-05 Qualcomm Incorporated Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor
JP2018005488A (ja) 2016-06-30 2018-01-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10318433B2 (en) * 2016-12-20 2019-06-11 Texas Instruments Incorporated Streaming engine with multi dimensional circular addressing selectable at each dimension
CN108256735B (zh) * 2017-12-14 2020-12-25 中国平安财产保险股份有限公司 查勘派工的处理方法及终端设备
US11269642B2 (en) * 2019-09-20 2022-03-08 Microsoft Technology Licensing, Llc Dynamic hammock branch training for branch hammock detection in an instruction stream executing in a processor
CN112579169B (zh) * 2019-09-27 2024-04-09 阿里巴巴集团控股有限公司 处理器追踪流的生成方法及装置
US20230103206A1 (en) * 2021-09-24 2023-03-30 Intel Corporation Caching based on branch instructions in a processor
US11928474B2 (en) * 2022-06-03 2024-03-12 Microsoft Technology Licensing, Llc Selectively updating branch predictors for loops executed from loop buffers in a processor

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63314644A (ja) 1987-06-17 1988-12-22 Nec Corp デ−タ処理装置
EP0449369B1 (en) 1990-03-27 1998-07-29 Koninklijke Philips Electronics N.V. A data processing system provided with a performance enhancing instruction cache
JP3032031B2 (ja) 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
JP3032030B2 (ja) 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
MX9306994A (es) 1992-12-15 1994-06-30 Ericsson Telefon Ab L M Sistema de control de flujo para interruptores de paquete.
JPH0991136A (ja) 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
JPH10124315A (ja) 1996-10-18 1998-05-15 Hitachi Ltd 分岐処理方法およびそのための情報処理装置
DE69718278T2 (de) 1996-10-31 2003-08-21 Texas Instruments Inc., Dallas Methode und System zur Einzel-Zyklus-Ausführung aufeinanderfolgender Iterationen einer Befehlsschleife
US5893142A (en) 1996-11-14 1999-04-06 Motorola Inc. Data processing system having a cache and method therefor
US6076159A (en) 1997-09-12 2000-06-13 Siemens Aktiengesellschaft Execution of a loop instructing in a loop pipeline after detection of a first occurrence of the loop instruction in an integer pipeline
US6125440A (en) 1998-05-21 2000-09-26 Tellabs Operations, Inc. Storing executing instruction sequence for re-execution upon backward branch to reduce power consuming memory fetch
US6269440B1 (en) 1999-02-05 2001-07-31 Agere Systems Guardian Corp. Accelerating vector processing using plural sequencers to process multiple loop iterations simultaneously
JP2000298587A (ja) 1999-03-08 2000-10-24 Texas Instr Inc <Ti> 命令反復中に指定先にブランチする装置を持つ処理装置
EP1050804A1 (en) 1999-05-03 2000-11-08 STMicroelectronics SA Execution of instruction loops
US6598155B1 (en) 2000-01-31 2003-07-22 Intel Corporation Method and apparatus for loop buffering digital signal processing instructions
US6963965B1 (en) 1999-11-30 2005-11-08 Texas Instruments Incorporated Instruction-programmable processor with instruction loop cache
JP2001195302A (ja) 1999-11-30 2001-07-19 Texas Instr Inc <Ti> 命令ループ・バッファ
US7302557B1 (en) 1999-12-27 2007-11-27 Impact Technologies, Inc. Method and apparatus for modulo scheduled loop execution in a processor architecture
US6757817B1 (en) 2000-05-19 2004-06-29 Intel Corporation Apparatus having a cache and a loop buffer
US6671799B1 (en) * 2000-08-31 2003-12-30 Stmicroelectronics, Inc. System and method for dynamically sizing hardware loops and executing nested loops in a digital signal processor
US6898693B1 (en) 2000-11-02 2005-05-24 Intel Corporation Hardware loops
US6748523B1 (en) 2000-11-02 2004-06-08 Intel Corporation Hardware loops
US6950929B2 (en) 2001-05-24 2005-09-27 Samsung Electronics Co., Ltd. Loop instruction processing using loop buffer in a data processing device having a coprocessor
JP2004038601A (ja) 2002-07-04 2004-02-05 Matsushita Electric Ind Co Ltd キャッシュメモリ装置
WO2004049154A2 (en) * 2002-11-28 2004-06-10 Koninklijke Philips Electronics N.V. A loop control circuit for a data processor
US20040123075A1 (en) * 2002-12-19 2004-06-24 Yoav Almog Extended loop prediction techniques
US7159103B2 (en) 2003-03-24 2007-01-02 Infineon Technologies Ag Zero-overhead loop operation in microprocessor having instruction buffer
US7130963B2 (en) 2003-07-16 2006-10-31 International Business Machines Corp. System and method for instruction memory storage and processing based on backwards branch control information
US7752426B2 (en) 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
JP2006309337A (ja) 2005-04-26 2006-11-09 Toshiba Corp プロセッサ及びプロセッサの命令バッファ動作方法
US7475231B2 (en) * 2005-11-14 2009-01-06 Texas Instruments Incorporated Loop detection and capture in the instruction queue
US7330964B2 (en) 2005-11-14 2008-02-12 Texas Instruments Incorporated Microprocessor with independent SIMD loop buffer
US7873820B2 (en) * 2005-11-15 2011-01-18 Mips Technologies, Inc. Processor utilizing a loop buffer to reduce power consumption
TW200723094A (en) 2005-12-01 2007-06-16 Ind Tech Res Inst Dynamic branch prediction system and method
US9052910B2 (en) * 2007-10-25 2015-06-09 International Business Machines Corporation Efficiency of short loop instruction fetch
US20090217017A1 (en) * 2008-02-26 2009-08-27 International Business Machines Corporation Method, system and computer program product for minimizing branch prediction latency
TWI362001B (en) 2008-07-16 2012-04-11 Faraday Tech Corp Recovery apparatus for solving branch mis-prediction and method and central processing unit thereof
JP2010066892A (ja) 2008-09-09 2010-03-25 Renesas Technology Corp データプロセッサ及びデータ処理システム
US9952869B2 (en) * 2009-11-04 2018-04-24 Ceva D.S.P. Ltd. System and method for using a branch mis-prediction buffer
WO2011127312A1 (en) 2010-04-07 2011-10-13 Apple Inc. Real-time or near real-time streaming
US8446186B2 (en) 2010-06-07 2013-05-21 Silicon Laboratories Inc. Time-shared latency locked loop circuit for driving a buffer circuit
US20120079303A1 (en) 2010-09-24 2012-03-29 Madduri Venkateswara R Method and apparatus for reducing power consumption in a processor by powering down an instruction fetch unit
US20120185714A1 (en) * 2011-12-15 2012-07-19 Jaewoong Chung Method, apparatus, and system for energy efficiency and energy conservation including code recirculation techniques
US9753733B2 (en) 2012-06-15 2017-09-05 Apple Inc. Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210046806A (ko) * 2018-09-18 2021-04-28 어드밴스드 마이크로 디바이시즈, 인코포레이티드 루프 종료 예측을 이용하여 프로세서의 루프 모드를 가속 또는 억제하기

Also Published As

Publication number Publication date
EP2674858B1 (en) 2019-10-30
CN103593167A (zh) 2014-02-19
US20130339700A1 (en) 2013-12-19
WO2013188122A3 (en) 2014-02-13
WO2013188122A2 (en) 2013-12-19
TWI520060B (zh) 2016-02-01
CN103593167B (zh) 2017-02-22
JP5799465B2 (ja) 2015-10-28
KR101497214B1 (ko) 2015-02-27
JP2014013565A (ja) 2014-01-23
EP2674858A2 (en) 2013-12-18
US9557999B2 (en) 2017-01-31
BR102013015049A2 (pt) 2015-06-23
EP2674858A3 (en) 2014-04-30
TW201411487A (zh) 2014-03-16
BR102013015049B1 (pt) 2021-03-02

Similar Documents

Publication Publication Date Title
KR101497214B1 (ko) 루프 버퍼 학습
KR101496009B1 (ko) 루프 버퍼 패킹
US9471322B2 (en) Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
KR101508566B1 (ko) 커밋시 실행 상태 갱신 명령어들, 장치들, 방법들, 및 시스템들
US9600289B2 (en) Load-store dependency predictor PC hashing
US20130298127A1 (en) Load-store dependency predictor content management
US10437595B1 (en) Load/store dependency predictor optimization for replayed loads
US10747539B1 (en) Scan-on-fill next fetch target prediction
US20140344558A1 (en) Next fetch predictor return address stack
CN109791493B (zh) 用于乱序集群化解码中的负载平衡的系统和方法
US9378022B2 (en) Performing predecode-time optimized instructions in conjunction with predecode time optimized instruction sequence caching
CN112673346A (zh) 用于提取组的序列的控制对分支预测单元的存取
US9329865B2 (en) Context control and parameter passing within microcode based instruction routines
US9626185B2 (en) IT instruction pre-decode
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
US9367317B2 (en) Loop streaming detector for standard and complex instruction types
US11036514B1 (en) Scheduler entries storing dependency index(es) for index-based wakeup
US20230315453A1 (en) Forward conditional branch event for profile-guided-optimization (pgo)

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: 20180201

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20200129

Year of fee payment: 6