KR20130141396A - 루프 버퍼 패킹 - Google Patents

루프 버퍼 패킹 Download PDF

Info

Publication number
KR20130141396A
KR20130141396A KR1020130068472A KR20130068472A KR20130141396A KR 20130141396 A KR20130141396 A KR 20130141396A KR 1020130068472 A KR1020130068472 A KR 1020130068472A KR 20130068472 A KR20130068472 A KR 20130068472A KR 20130141396 A KR20130141396 A KR 20130141396A
Authority
KR
South Korea
Prior art keywords
loop
buffer
loop buffer
iteration
written
Prior art date
Application number
KR1020130068472A
Other languages
English (en)
Other versions
KR101496009B1 (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 KR20130141396A publication Critical patent/KR20130141396A/ko
Application granted granted Critical
Publication of KR101496009B1 publication Critical patent/KR101496009B1/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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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
    • 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
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

루프 버퍼에 루프의 다수의 반복을 패킹하기 위한 방법, 장치, 및 프로세서가 제공된다. 버퍼링을 위한 기준을 충족하는 루프 후보가 프로세서에 의해 실행되는 명령어 스트림에서 검출된다. 루프가 루프 버퍼에 기록되고 있고 루프의 끝이 검출될 때, 아직 루프 버퍼의 반이 차지 않은 경우에, 루프의 또 다른 반복이 루프 버퍼에 기록된다. 이러한 방식에서, 프로세서가 루프 버퍼 모드에 있을 때, 루프 버퍼로부터의 사이클당 명령어 동작 처리량을 극대화하기 위해, 루프 버퍼에 짧은 루프들이 여러 번 기록된다.

Description

루프 버퍼 패킹{LOOP BUFFER PACKING}
본 발명은 일반적으로 프로세서에 관한 것으로, 특히, 루프의 다수의 반복을 루프 버퍼에 패킹하기 위한 방법 및 메커니즘에 관한 것이다.
현대의 프로세서 시스템들은 파이프라인 방식의 다수의 스테이지로 구성되는 경향이 있다. 일반적인 파이프라인들은 종종 명령어들을 페치(fetch)하고, 명령어들을 디코드하고, 명령어들을 매핑하고, 명령어들을 실행한 다음, 결과들을 레지스터와 같은 또 다른 유닛에 기록하기 위한 별도의 유닛들을 포함한다. 마이크로프로세서의 명령어 페치 유닛(instruction fetch unit)은 명령어들의 끊임없는 스트림을 프로세서 파이프라인의 다음 스테이지에 제공할 책임이 있다. 일반적으로, 파이프라인의 나머지에 지속적으로 명령어들이 제공되도록 유지하기 위해, 페치 유닛은 명령어 캐시를 사용한다. 페치 유닛과 명령어 캐시는, 그들에게 요구되는 기능들을 수행하는 동안 상당한 양의 전력을 소비하는 경향이 있다. 현대의 마이크로프로세서, 특히, 배터리로 전력이 공급되는 모바일 디바이스에서 이용되는 마이크로프로세서의 목표는 최대한 전력 소비를 줄이는 것이다.
많은 소프트웨어 애플리케이션에서, 동일한 소프트웨어 단계들은 특정 기능 또는 작업을 수행하기 위해 여러 번 반복될 수 있다. 이러한 상황에서, 명령어들의 동일한 루프가 지속적으로 실행되더라도, 페치 유닛은 계속해서 명령어들을 페치하고 전력을 소비할 것이다. 루프가 검출되어 루프 버퍼에 캐시될 수 있는 경우, 루프가 실행하는 동안 전력 소비를 줄이기 위해 페치 유닛은 셧다운될 수 있다. 그러나, 루프 버퍼가 사용중인 동안 프로세서 파이프라인에서 명령어 처리량(instruction throughput)을 극대화하는 것은 어려울 수 있다. 이는 결과적으로 프로세서가 최대 효율보다 낮은 효율로 동작하게 할 수 있다.
루프 버퍼로부터의 사이클당 명령어 처리량을 극대화하기 위한 장치, 프로세서 및 방법이 개시되어 있다. 사이클당 명령어 처리량을 극대화하기 위해, 루프 버퍼에는 루프의 다수의 반복이 패킹될(packed) 수 있다. 하나의 실시예에서, 프로세서 파이프라인의 전단은 페치 유닛, 루프 버퍼 및 루프 버퍼 제어 유닛을 포함할 수 있다. 루프 버퍼 제어 유닛은 루프 후보들을 모니터링 및 추적할 수 있고, 루프 후보들이 루프 버퍼에 캐시되어야 하는지를 결정할 수 있다.
하나의 실시예에서, 루프 후보가 캐시를 위한 기준을 충족할 때, 루프 버퍼 제어 유닛은, 루프의 시작이 루프 버퍼의 제1 슬롯에 기록될 필요가 있다는 것을 페치 유닛에게 다시 시그널링할 수 있다. 페치 유닛에서, 루프 후보의 후방 취득 브랜치가 식별 및 마크될 수 있다. 그 다음에, 다음의 명령어가 루프의 시작으로서 식별 및 마크될 수 있다. 루프 후보가 루프 버퍼에 캐시되어야 한다는 신호를 페치 유닛이 루프 버퍼 제어 유닛으로부터 수신할 때, 페치 유닛은 후방 취득 브랜치 이후에 인위적으로 스톨(stall)할 수 있다. 그 다음, 다음의 클록 사이클에서, 페치 유닛은 루프의 시작으로서 식별된 명령어를 루프 버퍼의 제1 슬롯으로 출력할 수 있다. 또한, 루프 버퍼에 기록되는 루프의 마지막 반복(last iteration)의 끝(end)에서, 후방 취득 브랜치에 직면할 때, 페치 유닛은 후방 취득 브랜치가 루프 버퍼에 기록된 후에 인위적으로 스톨할 수 있다.
하나의 실시예에서, 루프 반복의 후방 취득 브랜치가 루프 버퍼에 기록될 때, 루프 버퍼의 적어도 반이 찼는지가 결정될 수 있다. 루프 버퍼의 반이 차지 않은 경우, 루프의 또 다른 반복이 루프 버퍼에 기록될 수 있다. 루프 버퍼의 반이 찬 경우, 루프 버퍼로의 기록은 종료될 수 있다. 루프 버퍼로의 기록이 완료된 후에, 루프의 반복(들)은 루프 버퍼로부터 프로세서 파이프라인의 다음 스테이지로 디스패치될 수 있다.
이들 및 다른 특징들 및 장점들은 여기에 제시된 접근법들에 대한 다음의 상세한 설명의 견지에서 당업자에게 명백해질 것이다.
방법 및 메커니즘의 상기 및 추가 장점들은 첨부 도면과 함께 다음의 설명을 참조하여 더 잘 이해될 수 있다.
도 1은 집적 회로의 일부에 대한 하나의 실시예를 도시한다.
도 2는 프로세서 코어에 대한 하나의 실시예를 도시하는 블록도이다.
도 3은 프로세서 파이프라인의 전단(front end)에 대한 하나의 실시예를 도시하는 블록도이다.
도 4는 페치 및 디코드 유닛(fetch and decode unit) 내의 루프 버퍼에 대한 또 다른 실시예의 블록도를 도시한다.
도 5는 얼라이너(aligner)에 대한 하나의 실시예이다.
도 6은 루프 버퍼에 캐시된 루프에 대한 하나의 실시예를 도시한다.
도 7은 루프 버퍼에 캐시된 루프의 다수의 반복에 대한 하나의 실시예를 도시한다.
도 8은 루프 버퍼에 캐시된 루프의 다수의 반복에 대한 또 다른 실시예를 도시한다.
도 9는 루프 후보를 추적하기 위한 방법에 대한 하나의 실시예를 도시하는 일반화된 흐름도이다.
도 10은 시스템에 대한 하나의 실시예의 블록도이다.
도 11은 컴퓨터 판독가능한 매체에 대한 하나의 실시예의 블록도이다.
다음 설명에서, 여기에 제시된 방법 및 메커니즘에 대한 철저한 이해를 제공하기 위해 수많은 특정 상세가 명시되어 있다. 그러나, 당업자는, 이러한 특정 상세 없이 다양한 실시예가 실행될 수 있음을 인식해야 한다. 여기에 설명된 접근법이 애매해지는 것을 피하기 위해, 어떤 경우에는, 잘 알려진 구조, 컴포넌트, 신호, 컴퓨터 프로그램 명령어, 및 기법은 자세히 표시되지 않는다. 설명을 간략하고 명확하게 하기 위해, 도면에 도시된 요소들이 반드시 크기에 맞게 그려질 필요는 없다는 것이 인정될 것이다. 예를 들어, 일부 요소의 치수가 다른 요소에 비해 과장될 수 있다.
본 명세서는 "하나의 실시예(one embodiment)"라는 지칭을 포함한다. 다른 문맥에서, "하나의 실시예에서(in one embodiment)"라는 문구의 등장이 반드시 동일한 실시예를 지칭하는 것일 필요는 없다. 특정한 특징, 구조 또는 특성이 본 개시에 부합하는 임의의 적절한 방식으로 조합될 수 있다. 또한, 본 출원의 전체에 걸쳐 사용된, "할 수 있다(may)"라는 단어는 필수의 의미(즉, 해야만 한다(must)는 것을 의미함)보다는 관대한 의미(즉, 할 수 있는 가능성을 가지고 있다(have the potential to)는 것을 의미함)로 사용된다. 마찬가지로, "포함한다(include, includes)" 및 "포함하는(including)"이라는 단어는 포함하고 있다(including)는 것을 의미하지만 이로 제한되는 것은 아니다.
용어(Terminology). 다음 단락은 (첨부된 청구항들을 포함하는) 본 개시에서 발견된 용어들에 대한 정의 및/또는 문맥을 제공한다:
"포함하는(Comprising)". 이 용어는 개방형이다. 첨부된 청구항에 사용된, 이 용어는 추가적인 구조나 단계들을 배제하지 않는다. "... 루프 버퍼 제어 유닛을 포함하는 프로세서"를 인용하는 청구항을 고려하자. 이러한 청구항은 프로세서가 추가적인 컴포넌트(예컨대, 캐시, 페치 유닛, 실행 유닛)를 포함하는 것을 배제하지 않는다.
"하도록 구성된(Configured to)". 다양한 유닛, 회로, 또는 다른 컴포넌트는 작업 또는 작업들을 수행"하도록 구성되는" 것으로 설명되거나 청구될 수 있다. 이러한 문맥에서, "하도록 구성된"은, 유닛들/회로들/컴포넌트들이 동작하는 동안 작업 또는 작업들을 수행하는 구조(예컨대, 회로)를 포함한다는 것을 나타냄으로써 구조를 암시하는데 사용된다. 보통, 유닛/회로/컴포넌트는, 지정된 유닛/회로/컴포넌트가 현재 동작중이지 않을(예컨대, 온 상태가 아닐) 때조차 작업을 수행하도록 구성될 수 있다고 할 수 있다. "하도록 구성된"이라는 언어로 사용되는 유닛/회로/컴포넌트는 하드웨어 - 예를 들어, 회로, 동작을 구현하도록 실행가능한 프로그램 명령어들을 저장하는 메모리 등을 포함한다. 유닛/회로/컴포넌트가 하나 이상의 작업을 수행"하도록 구성"된다는 인용은, 유닛/회로/컴포넌트에 대해, 35 U.S.C. §112, 여섯 번째 단락을 적용하지 않도록 분명히 의도된다. 추가로, "하도록 구성된"은 이슈 중인 작업(들)을 수행할 수 있는 방식으로 동작하기 위해 소프트웨어 및/또는 펌웨어(예컨대, 소프트웨어를 실행하는 범용 프로세서 또는 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(program counter) 값과 연관될 수 있다. 또한, 하나 이상의 구조적 레지스터(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), 메모리 관리 유닛(memory management unit; MMU)(40), 코어 인터페이스 유닛(core interface unit; CIF)(42), 실행 유닛(44), 및 로드-저장 유닛(load-store unit; LSU)(46)을 포함할 수 있다. 코어(30)는 도 2에 도시되지 않은 다른 컴포넌트들 및 인터페이스들을 포함할 수 있다는 것에 유의한다.
FED 유닛(32)은 메모리로부터 명령어들을 판독하고 그들을 L1(level one) 명령어 캐시(33)에 배치하도록 구성된 회로를 포함할 수 있다. L1 명령어 캐시(33)는 코어(30)에 의해 실행될 명령어들을 저장하기 위한 캐시 메모리일 수 있다. L1 명령어 캐시(33)는 임의의 용량과 구조(예컨대, 직접 매핑, 세트 연관, 완전 연관 등)를 가질 수 있다. 또한, L1 명령어 캐시(33)는 임의의 캐시 라인 크기를 가질 수 있다. FED 유닛(32)은 또한 브랜치 명령어를 예측하고 예측된 경로를 페치 다운하도록 구성된 브랜치 예측 하드웨어를 포함할 수 있다. FED 유닛(32)은 또한 리디렉트(redirect)될 수 있다(예컨대, 예측 실패, 예외, 인터럽트, 플러시 등을 통해).
하나의 실시예에서, FED 유닛(32)은 명령어들을 다수의 단계의 명령어 동작(operation)들로 디코드하도록 구성될 수 있다. 추가로, FED 유닛(32)은 또한 다수의 명령어를 병렬로 디코드하도록 구성될 수 있다. 더 구체적으로, L1 명령어 캐시(33)로부터 명령어들이 풀링되어(pulled) 프리-디코드된 명령어들로 디코드될 수 있으며, 얼라이너(34)는 프리-디코드된 명령어들을 루프 버퍼(35)의 적절한 레인들 및/또는 디코더 유닛들(도시되지 않음)로 전달하도록 구성될 수 있다. 디코더 유닛은 프리-디코드된 명령어들을 명령어 동작들로 변환하기 위해 디코딩의 나머지를 수행하도록 구성될 수 있다.
일반적으로, 명령어 동작은 실행 유닛(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) 내의 예약(reservation) 스테이션들(도시되지 않음)에 uop들을 디스패치하도록 구성될 수 있다.
하나의 실시예에서, 맵/디스패치 유닛(36)은 ROB(reorder buffer)(38)를 포함할 수 있다. 다른 실시예들에서, ROB(38)는 다른 곳에 위치할 수 있다. 디스패치되기 전에, uop는 ROB(38)에 기록될 수 있다. ROB(38)는 uop들이 순서대로 커밋(commit)될 수 있을 때까지 그들을 보유하도록 구성될 수 있다. 각 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를 출력하도록 구성될 수 있다.
페치 전단(fetch front end; 60)은 명령어 캐시(도시되지 않음)로부터 원 명령어 데이터(raw instruction data)를 그랩(grap)하고, 데이터에서 명령어 경계들을 검출하고, 명령어 캐시 버퍼(도시되지 않음) 및/또는 얼라이너(도시되지 않음)에 명령어들을 버퍼링하고, 명령어들을 최대 6개 uop의 세트들로 확장하고, 이러한 uop들에 대한 적절한 페이로드를 생성할 수 있다. 최대 6개 uop의 각 세트는 "디코드 그룹"으로 지칭될 수 있다. 다른 실시예에서, 디코드 그룹은 다른 수의 uop를 포함할 수 있다. 디코드 그룹은 각 클록 사이클에 루프 버퍼(62)의 레인들 및 멀티플렉서(68)로 전달될 수 있다. 여기서 사용된, "레인(lane)"은 각 클록 사이클에 uop를 처리 및/또는 저장하도록 구성되는 논리를 포함하는 패스웨이(pathway)로서 정의될 수 있다.
페치 전단(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)은 페치되고 프리-디코드된 명령어들 내에서 루프를 식별하도록 구성될 수 있다. 루프가 어느 정도의 확실성으로 식별되면, 루프 버퍼 제어 유닛(64)은, 루프가 루프 버퍼(62)에 캐시되도록 할 수 있고, 페치 전단(60)은 셧다운될 수 있고, 그 다음, 프로세서 파이프라인의 나머지가 루프 버퍼(62)로부터 피드될 수 있다. 루프의 다수의 반복은 루프 버퍼(62)에 캐시될 수 있고, 이렇게 캐시된 반복들은 파이프라인 아래로 반복적으로 디스패치될 수 있다. 루프의 반복들을 루프 버퍼(62)에 기록할 때, 루프 버퍼 제어 유닛(64)은 기록 포인터(write pointer)를 사용하여 루프 버퍼(62)에서 어느 로우에 기록되고 있는지를 결정할 수 있다. 마찬가지로, 루프 버퍼(62)로부터 판독할 때, 판독 포인터(read pointer)가 사용되어 현재 판독되고 있는 로우를 가리킬 수 있다.
캐시하기 위한 루프를 식별하기 위해, 먼저 페치된 명령어들 중에서 후방 취득 브랜치(backwards taken branch)가 검출될 수 있다. "후방 취득 브랜치"는 명령어 시퀀스에서 이전 명령어로 분기하는 취득 브랜치로서 정의될 수 있다. 후방 취득 브랜치가 가는(go to) 명령어는 루프의 시작으로 간주될 수 있다. 하나의 실시예에서, 단지 특정한 유형의 루프들만 버퍼링하기 위한 후보로서 간주될 수 있다. 예를 들어, 하나의 실시예에서, 버퍼링을 위해 고려될 루프 후보에 대해, 루프 반복들 모두는 불변이어야 한다.
루프 버퍼 제어 유닛(64)은 루프 버퍼링을 위한 기준을 충족하는 루프를 형성하는 명령어들에 대한 명령어 스트림을 모니터링할 수 있다. 루프 버퍼 제어 유닛(64)은 소정의 루프 후보가 어떻게 생겼는지에 대한 모든 정보를 캡처할 수 있다. 특정 시간 기간 동안, 루프 후보가 동일하게 유지되도록 보장하기 위해 다수의 반복에 걸쳐 루프 후보가 추적될 수 있다. 예를 들어, 루프의 시작부터 루프 내의 하나 이상의 명령어까지의 거리는 제1 반복에서 기록될 수 있으며, 이러한 거리가 동일하게 유지되는지를 결정하기 위해 후속 반복들에서 모니터링될 수 있다.
일부 실시예에서, 루프 후보가 불변이며, 위에 나열된 다른 기준을 충족하는 경우에도, 루프 후보의 다른 특성들은, 루프가 루프 버퍼(62)에 캐시되지 못하게 실격되게(disqualify)할 수 있다. 예를 들어, 루프 후보의 크기가 너무 커서 루프 버퍼(62)에 맞지 않는 경우, 루프 후보는 실격될 수 있다. 또한, 루프 내의 취득 브랜치들의 최대 허용가능한 수는 브랜치 추적 테이블(66)의 크기와 같을 수 있다. 취득 브랜치들의 수가 이 수를 초과하면, 그 루프는 루프 버퍼(62)에 캐시하기 위한 후보로서의 고려대상에서 제외될 수 있다. 하나의 실시예에서, 브랜치 추적 테이블(66)은 루프 내의 취득 브랜치들을 위한 8개의 엔트리를 포함할 수 있다. 다른 실시예에서, 브랜치 추적 테이블(66)은 루프 내의 취득 브랜치들을 위한 8개의 엔트리보다 많거나 적은 엔트리를 가질 수 있다.
하나의 실시예에서, 동일한 후방 취득 브랜치가 한 번보다 많이 검출되면, 그 루프에 대한 정보를 캡처하는 상태 머신이 루프 버퍼 제어 유닛(64)에 의해 시작될 수 있다. 예를 들어, 루프 버퍼 제어 유닛(64)은 루프 후보의 취득 브랜치들을 추적하기 위해 브랜치 추적 테이블(66)을 사용할 수 있다. 브랜치 추적 테이블(66)은 루프의 시작부터 각 취득 브랜치까지의 거리를 계속 추적할 수 있다.
루프의 시작부터 각 브랜치까지 동일한 수의 uop가 존재하도록 루프의 각각의 반복이 실행되는 경우, 루프 후보는 불변으로 간주될 수 있다. 테이블(66)에 있는 각 브랜치까지의 거리는, 루프 후보가 불변이며, 캐시되어야 한다는 것을 결정하기 전에 특정 수의 반복에 대해 추적될 수 있다. 루프 후보의 불변성을 추적하기 위해 할당된 시간량은 루프 반복의 수 및/또는 직면한 브랜치의 수에 기초한 것일 수 있다.
이제 도 4를 참조하면, 페치 및 디코드 유닛 내에 있는 루프 버퍼에 대한 또 다른 실시예가 도시된다. 하나의 실시예에서, 루프 버퍼(84)는, 도 4에 도시된 바와 같이, 프로세서 파이프라인에서 디코더(82A-F)의 하류(downstream)에 위치할 수 있다. 이는 디코더(70A-F)로부터 프로세서 파이프라인 상류(upstream)에 위치하는 (도 3의) 루프 버퍼(62)와는 대조적이다. 하나의 실시예에서, 루프 버퍼(84)는 로우들 및 컬럼들(또는 레인들)로 구조화될 수 있다. 하나의 실시예에서, 루프 버퍼(84)는 16개의 로우와 6개의 컬럼을 가질 수 있다. 다른 실시예에서, 루프 버퍼(84)는 다른 수의 로우들 및 컬럼들을 포함할 수 있다.
페치 전단(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를 참조하면, 얼라이너에 대한 하나의 실시예가 도시된다. 얼라이너(100)는 페치 유닛의 일부일 수 있고, 얼라이너(100)는 명령어 큐(instruction queue; 102) 및 명령어 크로스바(instruction crossbar; 104)를 포함할 수 있다. 명령어 캐시(도시되지 않음)에서 명령어 데이터 내에서 명령어 경계들이 검출될 수 있고, 그 다음, 명령어는 명령어 큐(102)로 전달될 수 있다. 명령어 큐(102)는 임의의 용량(capacity) 및 구성(construction)을 가질 수 있다. 얼라이너(100)는 각 클록 사이클에 적절한 수의 프리-디코드된 명령어들을 디코더 유닛에 계속 공급하도록 구성될 수 있는데, 여기서, 적절한 수는 프로세서 아키텍처에 기초한 것이다. 예를 들어, 하나의 실시예에서, 6개의 디코더가 존재할 수 있고, 그래서 얼라이너(100)는 클록 사이클당 최대 6개의 프리-디코드된 uop를 생성하여 6개의 디코더로 전달하도록 구성될 수 있다. 다른 실시예에서, 얼라이너(100)는 클록 사이클당 다른 수의 프리-디코드된 uop를 생성하도록 구성될 수 있다.
각 클록 사이클에, 얼라이너(100)는, 명령어 큐(102)에서, 명령어 시퀀스에서 다음 6개의 uop에 대응하는 명령어들을 검토할 수 있다. 얼라이너(100)는 이러한 명령어들을 명령어 크로스바(104)를 통해 적절한 디코더 슬롯에 할당할 수 있다. 얼라이너(100)는 또한 루프 반복들의 경계들(예컨대, 반복 경계(103))를 식별하도록 구성될 수 있다. 예를 들어, 루프 후보가 캐시를 위한 기준을 충족할 때, 가장 최근의 반복의 후방 취득 브랜치(backwards taken branch; BTB), 즉, 명령어 C가 식별될 수 있다.
도 5에 도시된 예에서, 명령어 큐(102)에 도시된 명령어들은 명령어 A, B, C (BTB), D, E 및 F를 포함한다. 명령어 D는 BTB에 이어 오기 때문에, D는 루프의 시작으로 마크될 수 있다. 각 명령어는 하나 이상의 uop로 침투(crack into)될 수 있고, 명령어가 매핑하는 uop들의 수는 명령어들이 명령어 캐시에 채워질 때 프리디코드될 수 있다. 루프가 루프 버퍼(도시되지 않음)에 캐시되어야 한다고 결정될 때, 루프 버퍼 제어 유닛(도시되지 않음)은 루프의 BTB 이후에 스톨하도록 얼라이너(100)에게 신호를 전송할 수 있다.
도 5에 도시된 바와 같이, 얼라이너(100)는 클록 사이클 'N'에 디코더 슬롯에 단지 3개의 uop를 기록할 수 있다. 이러한 3개의 uop는 A, B 및 C(BTB)이다. 명령어 A, B, 및 C 각각은 이 예에서는 단일 uop 명령어들이다. 클록 사이클 'N'에서 볼 수 있는 바와 같이, BTB(명령어 C)가 슬롯 2에 할당되므로 슬롯(3-5)은 비어 있다. 얼라이너(100)는 BTB가 디코더 슬롯에 할당된 이후에 스톨하고, 그 다음, 슬롯의 나머지는 클록 사이클 'N' 동안 채워지지 않는다. 다음의 클록 사이클에서, 얼라이너(100)는 루프의 시작을 슬롯 0에 할당한다. 명령어 D는 루프의 시작이고, 명령어 D는 이 예에서는 3개의 uop 명령어이므로, 대응하는 3개의 uop(D-0, D-1, 및 D-2)는 클록 사이클 'N+1'에서 디코더 슬롯 0-2에 할당된다. 명령어 E에 대응하는 2개의 uop는 슬롯 3 및 4를 차지하고, 명령어 F에 대응하는 uop는 클록 사이클 'N+1'에서 슬롯 5에 할당될 수 있다.
클록 사이클 'N' 및 'N+1'에 도시된 uop들은 디코더 유닛과 루프 버퍼 둘 다로 전달될 수 있다. 루프가 루프 버퍼에 기록되고 있는 동안, 루프는 계속해서 파이프라인의 다음 스테이지(예컨대, 디코더들)로 피드될 수 있다. 루프의 하나 이상의 반복이 루프 버퍼에 기록된 후에, 파이프라인의 후단은 루프 버퍼에 의해 피드될 수 있고 전단은 전원이 차단될 수 있다.
얼라이너(100)는 또한 루프 버퍼에 기록되는 루프의 마지막 반복의 끝에서 유사한 방식으로 스톨할 수 있다. BTB가 할당되는 어떠한 슬롯도 루프 버퍼의 로우 내에 기록된 마지막 슬롯일 것이다. 예를 들어, 루프 버퍼에 최종 루프 반복을 기록하는 마지막 클록 사이클에서 BTB가 슬롯 1에 기록되는 경우, 슬롯들 나머지(슬롯 2-5)는 비어 있게 될 수 있다. 이러한 방식에서, 루프 버퍼의 제1 로우의 슬롯 0에 위치한 루프의 제1 반복의 제1 uop로 시작하는 루프가 루프 버퍼로부터 판독될 때 다음의 클록 사이클에 클린 핸드오프(clean handoff)가 존재할 수 있다.
이제, 도 6을 참조하면, 루프 버퍼에 패킹된 루프의 단일 반복에 대한 하나의 실시예가 도시된다. 이 예에서는 루프가 7 uop 루프일 수 있고, 루프 버퍼(110)에서 각 uop에는 "Loop1"이 표시된다. 이는 단순히 루프에 대한 하나의 예이고, 다른 루프들은 다른 수의 uop를 포함할 수 있다는 것에 유의한다. 루프 버퍼(110)는 프로세서 파이프라인 내의 다양한 위치들 중 임의의 것에 위치할 수 있다는 것에 유의하고, 그 위치의 두 가지 예가 도 3 및 도 4에 도시된다. 루프 버퍼(110)는 6개의 레인(0-5로 표시됨)을 포함하는 것으로 도시되지만, 다른 루프 버퍼는 다른 수의 레인을 가질 수 있다는 것에 유의한다. 루프 버퍼(110)의 "레인들"은 또한 "슬롯들" 또는 "칼럼들"로 지칭될 수 있다는 것 또한 유의한다.
Loop1의 처음 6개의 uop는 루프 버퍼(110)의 제1 로우에 기록될 수 있다. 후방 취득 브랜치에 대응하는 마지막 uop는 루프 버퍼(110)의 제2 로우의 제1 엔트리를 채울 수 있다. 이러한 루프에 대해, 루프를 프로세서 파이프라인의 다음 스테이지로 디스패치하기 위해 2 사이클이 걸릴 것이고, 사이클당 출력된 평균 uop 는 3.5일 것이다(2 클록 사이클에서 7개의 uop). 이것은, 사이클당 6개의 uop인 사이클당 가능한 최대의 uop 처리량보다 훨씬 더 적다. 사이클당 uop 처리량을 향상시키기 위해, 루프의 하나보다 많은 반복이 루프 버퍼(110)에 기록될 수 있고, 이는 아래 더 자세히 설명될 것이다.
다른 실시예에서, 루프 버퍼(110)는 6 이외의 다른 수의 레인을 포함할 수 있다. 예를 들어, 또 다른 실시예에서, 루프 버퍼(110)는 8개의 레인을 가질 수 있다. 본 실시예에서, 9개의 uop의 루프는, 이러한 9-uop 루프가 루프 버퍼(110)로부터 디스패치될 때, 사이클당 비효율적인 uop 처리량을 가질 것이다. 이러한 예에서, 사이클당 명령어들은 평균 4.5이고, 2 클록 사이클마다 9개의 uop가 디스패치된다. 이것은, 본 실시예에 대해 8인 사이클당 가능한 최대의 uop 처리량보다 훨씬 낮다.
다양한 실시예에서, 상이한 포맷들의 명령어들이 루프 버퍼(110)에 저장될 수 있다. 이용되는 상이한 포맷들은 명령어들, 명령어 동작들, 프리-디코드된 uop들, 디코드된 uop들, uop들, op들, 또는 다른 포맷들을 포함할 수 있다. "사이클당 명령어들(instructions per cycle)", "사이클당 명령어 동작들(instruction operations per cycle)", 및 "사이클당 uop들(uops per cycle)"이라는 용어는 일반적으로 처리량을 설명하는데 사용될 수 있고, 이러한 용어들은 여러 가지 명령어 포맷들 중 임의의 것을 지칭할 수 있다는 것이 이해될 것이다.
이제, 도 7을 참조하면, 루프 버퍼에 패킹된 루프의 다수의 반복에 대한 하나의 실시예가 도시된다. 하나의 실시예에서, 루프는 7개의 uop 길이일 수 있다. 루프 버퍼(110)에 기록된 루프의 제1 반복은 루프의 각 uop에 대해 "Loop1"로 표시되고, 루프 버퍼(110) 내의 제1 로우와 제2 로우의 레인 0에 도시된다. "Loop2"로 표시된, 루프의 제2 반복은 루프의 제1 반복이 끝나는 곳을 픽업하는 루프 버퍼(110)에 기록될 수 있다. "Loop2"의 제1 uop는 "Loop1"의 마지막 uop와 동일한 로우에서 인접한 엔트리에 배치될 수 있다. 또한, 루프의 제2 반복의 처음 5개의 uop는 루프 버퍼(110)의 제2 로우의 레인들 1-5에 기록될 수 있고, 제2 반복의 최종 2개의 uop는 루프 버퍼(110)의 제3 로우에 기록될 수 있다. 이러한 패턴은 루프 버퍼(110)에 기록되는 루프의 다음 5개의 반복들에 대해서도 계속될 수 있다. 루프 버퍼(110)에 기록된 각 루프 반복은 다른 루프 반복과 동일하다. 다시 말해, 각 루프 반복은 루프 버퍼(110)에 기록된 다른 루프 반복들과 정확히 동일한 uop를 포함하고, 임의의 다른 루프 반복과 구별하기 어렵다.
도 7에 도시된 바와 같이, 루프 버퍼(110)는 엔트리들의 16개의 로우를 갖고, 하프웨이 포인트(halfway point; 112)는 8번째 로우 이후이다. 하나의 실시예에서, 루프의 반복이 루프 버퍼(110)에 기록되고 있을 때, 루프의 마지막 uop(즉, 후방 취득 브랜치)가 루프 버퍼(110)에 기록되었을 때, 루프 버퍼 제어 유닛은 하프웨이 포인트(112)에 도달했는지를 보기 위해 체크할 수 있다. 하프웨이 포인트(112)에 도달한 경우, 루프의 반복은 더 이상 루프 버퍼(110)에 기록될 수 없다. 하프웨이 포인트(112)에 도달하지 않은 경우, 루프의 또 다른 반복이 루프 버퍼(110)에 기록될 수 있다.
도 7에 도시된 예에서, 프로세서가 루프 버퍼 모드에 있을 때, 사이클당 루프 버퍼(110)로부터 출력된 평균 uop는 사이클당 거의 5.4 uop 처리량일 것이다(9 사이클에서 49개의 uop). 이는 도 6에 도시된 예에서 3.5 uop인 사이클당 평균 uop 처리량에 비해 향상된 것이다.
이제, 도 8을 참조하면, 루프의 다수의 반복을 루프 버퍼에 기록하는 또 다른 실시예가 도시된다. 본 실시예에서, 도 7에 도시된 것과 유사하게, 루프의 다수의 반복은 루프 버퍼(110)에 기록될 수 있다. 그러나, 본 실시예에서, 루프 반복의 끝에 도달할 때 별도의 조건이 체크될 수 있다. 체크될 수 있는 조건은, 루프 반복의 최종 uop가 루프 버퍼(110)의 최종 레인(즉, 레인 5)에 기록되었는지 여부일 수 있다. 이러한 조건이 충족되는 경우, 루프의 반복을 루프 버퍼(110)에 기록하는 것은 정지될 수 있다. 이러한 조건이 충족되지 않는 경우, 하프웨이 포인트(112)에 도달했는지가 결정될 수 있다. 하프웨이 포인트(112)에 도달한 경우, 루프 버퍼(110)로의 기록은 정지할 수 있다. 하프웨이 포인트(112)에 도달하지 않은 경우, 루프의 또 다른 반복이 루프 버퍼(110)에 기록될 수 있다.
이러한 조건들에 기초하여, 7-uop 루프의 6회 반복이 루프 버퍼(110)에 기록될 수 있다. 루프의 6번째 반복이 루프에 기록된 후에, 제6 반복의 마지막 uop는 7번째 로우의 레인 5에 기록된다. 따라서, 루프 버퍼(110)로부터 출력된 사이클당 uop는 극대화될 것이고, 더 이상 반복들이 루프 버퍼(110)에 기록될 필요가 없다. 하프웨이 포인트(112)에 아직 도달하지 않더라도 기록이 정지될 수 있다.
다른 실시예에서, 루프 버퍼에 기록될 반복의 수는 루프 버퍼에 반복을 기록하기 전에 결정될 수 있다는 것에 유의한다. 예를 들어, 루프의 검출 및 명령어들의 모니터링은 루프의 반복에 포함된 명령어들 또는 uop의 수를 카운트하는 것을 포함할 수 있다. 추가적으로, 루프 버퍼에서 사용가능한 공간이 알려지거나 결정될 수 있다. 루프 반복의 크기 및 사용가능한 버퍼 저장소에 기초하여, 얼마나 많은 반복이 루프 버퍼에 기록되는지에 관한 계산이 실시될 수 있다. 다양한 실시예에서, 기록될 반복의 수가 선택될 수 있어, 버퍼로부터의 최대 명령어 처리량이 달성된다. 다른 실시예에서, 추가적인 제약은 루프의 얼마나 많은 반복들이 버퍼에 기록되는지에 있을 수 있다. 예를 들어, 버퍼의 소정 부분(예컨대, 반(half)) 이외에는 기록될 수 없다. 수많은 그러한 대안들이 가능하고 고려된다.
이러한 조건을 사용하면, 프로세서가 루프 버퍼 모드에 있을 때, 루프 버퍼(110)로부터 사이클당 하이 uop 처리량을 달성할 수 있다. 다른 실시예에서, 루프의 다른 크기에 대해, 이러한 조건들이 이용될 수 있다. 예를 들어, 9개의 uop의 크기를 갖는 루프는 결과적으로 2개의 반복이 루프 버퍼(110)에 기록되는 것을 야기한다. 루프 버퍼(110)의 처음 3개의 로우가 채워지고, 그 다음, 9-uop 루프의 반복은 더 이상 루프 버퍼(110)에 기록되지 않는다. 이는, 사이클당 6개의 uop인 가능한 최대의 처리량을 달성할 것이다.
다른 실시예에서, 다른 조건은 루프 버퍼(110)에 루프의 또 다른 반복을 기록할지 여부를 결정하는데 사용될 수 있다. 예를 들어, 또 다른 실시예에서, 반복의 마지막 uop가 로우의 가장 우측 2개 슬롯 중 어느 하나에 기록되는 경우, 루프 버퍼(110)로의 기록은 종료될 수 있다. 또 다른 실시예에서, 처리량은 루프 반복이 루프 버퍼(110)에 기록된 후에 계산될 수 있고, 그 다음, 처리량은 임계값과 비교될 수 있다. 처리량이 임계값 위인 경우, 루프 버퍼(110)로의 기록은 종료될 수 있다. 처리량이 임계값 아래인 경우, 또 다른 루프 반복이 루프 버퍼(110)에 기록될 수 있다. 이러한 및 다른 조건들은 독립적으로 또는 추가 실시예들에서 임의의 적절한 방식으로 조합하여 사용될 수 있다.
이제, 도 9를 참조하면, 루프 버퍼에 루프의 다수의 반복을 패킹하기 위한 방법(120)에 대한 하나의 실시예가 도시된다. 논의를 목적으로, 본 실시예에서 단계들이 순차적인 순서로 도시된다. 아래 설명된 방법에 대한 다양한 실시예에서, 설명된 하나 이상의 요소들은 동시에 수행될 수도 있고 도시된 것과는 상이한 순서로 수행될 수도 있고, 또는 완전히 생략될 수도 있다는 것에 유의해야 한다. 요구에 따라 다른 추가적인 요소들이 또한 수행될 수도 있다.
하나의 실시예에서, 루프 후보는 명령어 스트림에서 검출될 수 있다(블록 122). 그 다음, 루프 버퍼 제어 유닛은 루프 후보가 루프 버퍼링을 위한 기준을 충족하는지를 결정할 수 있다(블록 124). 루프 버퍼 제어 유닛은 그 다음 루프 후보에 대해 루프 버퍼 모드를 개시할 수 있다(블록 126). 루프 버퍼 모드가 개시될 때, 루프 종료 브랜치 uop는 그것이 루프의 끝으로서 식별될 수 있도록 마크될 수 있다. 루프 종료 브랜치는 서브루틴 호출(subroutine calls)을 제외하고 직접 후방 취득 브랜치(direct backwards taken branch)로서 정의될 수 있다. 또한, 루프 종료 브랜치 이후에 다음의 uop인, 루프의 처음 uop는 루프 시작으로서 마크될 수 있다. 페치 유닛의 얼라이너는 루프 종료 브랜치 후에 스톨할 수 있어, 루프에서 처음 uop는 루프 버퍼의 제1 로우의 슬롯 0에 기록된다(블록 128).
다음에, 루프의 단일 반복이 루프 버퍼에 기록될 수 있다(블록 130). 루프의 반복이 루프 버퍼에 기록됨에 따라, 루프 종료 브랜치는 반복의 끝에서 검출될 수 있다(블록 132). 루프 종료 브랜치의 검출에 응답하여, 루프 버퍼 제어 유닛은 루프 버퍼가 이미 홀 풀(hall full)인지 보기 위해 체크할 수 있다(조건부 블록 134). 하나의 실시예에서, 루프 버퍼 제어 유닛은 루프 버퍼로의 기록 포인터를 모니터링할 수 있고, 기록 포인터가 루프 버퍼의 하프웨이 포인트를 지났는지를 볼 수 있다.
루프 버퍼가 하프 풀(half full)보다 적은 경우(조건부 블록 134), 루프의 또 다른 반복이 루프 버퍼에 기록될 수 있다(블록 130). 이러한 반복에 대해, 루프의 처음 uop(즉, 루프 시작)는, 루프 종료 브랜치가 로우의 가장 우측 슬롯 이외의 임의의 슬롯에 위치하는 경우에, 루프 버퍼의 동일한 로우일 수 있는, 루프의 이전 반복의 루프 종료 브랜치 이후의 다음의 인접한 슬롯에 기록될 수 있다. 이는, 루프의 제1 반복이 루프 버퍼에 기록되는 방법과는 대조적이다. 제1 반복에 대해, 얼라이너는 이전 반복으로부터의 루프 종료 브랜치 이후에 스톨할 수 있어, 제1 반복의 처음 uop는 루프 버퍼의 제1 로우의 제1(또는 가장 좌측) 슬롯에 기록된다.
루프 버퍼가 하프 풀보다 더 큰 경우(조건부 블록 134), 루프 버퍼 제어 유닛은 루프 버퍼에 루프의 더 많은 반복을 기록하는 것을 중단하기 위해 전단으로 시그널링할 수 있다(블록 136). 루프의 마지막 반복에 대해, 페치 유닛의 얼라이너는 루프 종료 브랜치를 디스패치한 후에 홀드업될 수 있다. 이러한 방식에서, 프로세서가 루프 버퍼 모드로 이동할 때, 루프 버퍼로부터 uop를 디스패치하는 클린 핸드오프가 존재할 수 있다. 추가로, 프로세서가 루프 버퍼 모드에 진입할 때, 명령어 큐 내의 uop들 및 프로세서 파이프라인의 전단에서 더 상류의 명령어들은 플러시될 수 있다. 블록 136 이후에, 루프 버퍼는 루프의 하나 이상의 반복을 프로세서 파이프라인의 다음 스테이지로 디스패치할 수 있다(블록 138). 루프가 루프 버퍼로부터 디스패치되는 동안 프로세서의 전단은 셧다운될 수 있다.
하나의 실시예에서, 루프 버퍼에 기록된 로우의 수가 저장될 수 있다. 루프 버퍼 제어 유닛은 저장된 수의 유효 로우들을 사용하여, 루프 버퍼로부터 판독될 유효 로우가 더 이상 없을 때를 결정할 수 있다. 예를 들어, uop의 로우가 프로세서 파이프라인의 다음 스테이지로 디스패치될 때, 판독 포인터는 루프 버퍼의 로우들에 걸쳐 스텝(step)할 수 있고, 판독 포인터는 저장된 수의 유효 로우로 표시되는 유효 로우가 루프 버퍼에 더 이상 존재하지 않을 때 루프 버퍼의 맨 위로 돌아가 리셋될 수 있다.
블록 138 이후에, 방법(120)은 루프가 종료할 때 끝날 수 있다. 루프 종료 후에, 전단은 다시 턴온될 수 있고, 페치 유닛은 프로세서 파이프라인의 나머지에 명령어들을 공급할 수 있다.
다음으로, 도 10을 참조하면, 시스템(140)의 하나의 실시예에 대한 블록도가 표시된다. 도시된 바와 같이, 시스템(140)은 데스크톱 컴퓨터(150), 랩톱 컴퓨터(160), 태블릿 컴퓨터(170), 셀 폰(180), 또는 그 밖의 것들의 칩, 회로, 컴포넌트 등을 나타낼 수 있다. 도시된 실시예에서, 시스템(140)은 외부 메모리(142)에 결합된 (도 1의) IC(10)의 적어도 하나의 인스턴스를 포함한다.
IC(10)는 하나 이상의 주변기기들(144) 및 외부 메모리(142)에 결합된다. 전원 공급 장치(146)는 또한 메모리(142) 및/또는 주변기기(144)로의 하나 이상의 공급 전압은 물론 IC(10)로 공급 전압을 공급하도록 제공된다. 다양한 실시예에서, 전원 공급 장치(146)는 배터리(예컨대, 스마트 폰, 랩톱 또는 태블릿 컴퓨터에서 충전식 배터리)를 나타낼 수 있다. 일부 실시예에서, IC(10)의 하나 보다 많은 인스턴스가 포함될 수 있다(뿐만 아니라 하나 보다 많은 외부 메모리(142)가 포함될 수 있다).
메모리(142)는 임의의 유형의 메모리, 이를테면, 동적 랜덤 액세스 메모리(DRAM), 동기식 DRAM(SDRAM), 더블 데이터 레이트(DDR, DDR2, DDR3 등) SDRAM(mDDR3 등과 같은 SDRAM의 모바일 버전 및/또는 LPDDR2 등과 같은 SDRAM의 저전력 버전), RAMBUS DRAM(RDRAM), 정적 RAM(SRAM) 등일 수 있다. 하나 이상의 메모리 디바이스가 회로 보드 상에 결합되어, 단일 인라인 메모리 모듈(SIMM), 이중 인라인 메모리 모듈(DIMM) 등과 같은 메모리 모듈을 형성할 수 있다.
주변기기(144)는, 시스템(140)의 유형에 따라, 임의의 원하는 회로를 포함할 수 있다. 예를 들어, 하나의 실시예에서, 주변기기(144)는 다양한 유형의 무선 통신, 이를테면, 와이파이, 블루투스, 셀룰러, 글로벌 포지셔닝 시스템 등을 위한 디바이스들을 포함할 수 있다. 주변기기(144)는 또한 RAM 저장소, 솔리드 스테이트 저장소 또는 디스크 저장소를 포함하는 추가적인 저장소를 포함할 수 있다. 주변기기(144)는 터치 디스플레이 화면이나 멀티터치 디스플레이 화면을 포함하는 디스플레이 화면, 키보드 또는 다른 입력 디바이스, 마이크, 스피커 등과 같은 사용자 인터페이스 디바이스를 포함할 수 있다.
이제, 도 11를 참조하면, (도 1의) IC(10)에 포함된 회로를 나타내는 하나 이상의 데이터 구조를 포함하는 컴퓨터 판독가능한 매체(190)의 블록도에 대한 하나의 실시예가 표시된다. 일반적으로, 컴퓨터 판독가능한 매체(190)는 임의의 비-일시적인 저장 매체, 이를테면, 자기 또는 광 매체, 예컨대, 디스크, CD-ROM 또는 DVD-ROM, 휘발성 또는 비-휘발성 메모리 매체, 이를테면, RAM(예컨대, SDRAM, RDRAM, SRAM 등), ROM 등 뿐만 아니라 네트워크 및/또는 무선 링크와 같은 통신 매체를 통해 전달된 전기, 전자기, 또는 디지털 신호와 같은 신호 또는 전송 매체를 통해 액세스가능한 매체를 포함할 수 있다.
일반적으로, 컴퓨터 판독가능한 매체(190) 상의 회로의 데이터 구조(들)는 프로그램에 의해 판독될 수 있고, 회로를 포함하는 하드웨어를 제작하기 위해 직접적으로 또는 간접적으로 사용될 수 있다. 예를 들어, 데이터 구조(들)는 Verilog 또는 VHDL과 같은 하이 레벨 디자인 언어(HDL)의 하드웨어 기능성의 하나 이상의 행동-레벨 디스크립션(behavioral-level descriptions) 또는 레지스터-전송 레벨(register-transfer level; RTL) 디스크립션을 포함할 수 있다. 디스크립션(들)은 합성 라이브러리에서 게이트들의 목록을 포함하는 하나 이상의 네트리스트(netlists)를 생성하기 위해 디스크립션을 합성할 수 있는 합성 도구(synthesis tool)에 의해 판독될 수 있다. 네트리스트(들)는 또한 회로를 구성하는 하드웨어의 기능성을 나타내는 게이트들의 세트를 포함한다. 그 다음, 네트리스트(들)가 배치 및 라우트되어, 마스크에 적용될 기하학적 모양들(geometric shapes)을 설명하는 하나 이상의 데이터 세트를 생성할 수 있다. 그 다음, 마스크는 다양한 반도체 제조 단계에서 사용되어, 반도체 회로나 그 회로에 대응하는 회로를 생산할 수 있다. 대안적으로, 컴퓨터 판독가능한 매체(230) 상의 데이터 구조(들)는, 요구에 따라, 네트리스트(들)(합성 라이브러리와 함께 또는 없이) 또는 데이터 세트(들)일 수 있다. 또 다른 대안으로, 데이터 구조는 개략적인 프로그램의 출력, 또는 그로부터 도출된 네트리스트(들) 또는 데이터 세트(들)를 포함할 수 있다.
컴퓨터 판독가능한 매체(190)는 IC(10)의 표현을 포함하는 한편, 다른 실시예들은 IC(10)의 임의의 일부 또는 일부의 조합(예컨대, 루프 버퍼, 루프 버퍼 제어 유닛, 얼라이너)의 표현을 포함할 수 있다.
전술한 실시예는 제한이 아니라 단지 예의 구현이라는 것이 강조되어야 한다. 상기 개시물이 충분히 인정되면, 수많은 변형 및 수정이 당업자에게 명백해질 것이다. 다음과 같은 청구항들은 이러한 모든 변형 및 수정을 포용하는 것으로 해석되도록 의도된다.

Claims (20)

  1. 장치로서,
    루프 버퍼; 및
    상기 루프 버퍼에 결합된 루프 버퍼 제어 유닛
    을 포함하고,
    상기 루프 버퍼 제어 유닛은,
    명령어 스트림에서 루프를 검출하고,
    상기 루프의 2 이상의 반복이 상기 루프 버퍼에 기록되게 하도록
    구성되는 장치.
  2. 제1항에 있어서, 상기 루프 버퍼 제어 유닛은 또한,
    상기 루프 버퍼의 적어도 반이 차지 않았다는 결정에 응답하여, 상기 루프의 또 다른 반복이 상기 루프 버퍼에 기록되게 하고,
    상기 루프 버퍼의 적어도 반이 찼다는 결정에 응답하여, 상기 루프의 추가적인 반복들이 상기 루프 버퍼에 기록되는 것을 방지하도록
    구성되는 장치.
  3. 제2항에 있어서, 상기 루프 버퍼 제어 유닛은, 상기 루프 버퍼로의 기록 포인터의 위치에 기초하여 상기 루프 버퍼의 반이 찼는지를 결정하도록 구성되는 장치.
  4. 제1항에 있어서, 상기 루프 버퍼 제어 유닛은 또한,
    소정의 반복(given iteration)에서 후방 취득 브랜치(backwards taken branch)가 상기 루프 버퍼에서 로우(row)의 가장 우측(rightmost) 엔트리에 기록되지 않았다는 결정에 응답하여, 상기 루프의 또 다른 반복이 상기 루프 버퍼에 기록되게 하고,
    상기 소정 반복으로부터의 후방 취득 브랜치가 상기 루프 버퍼에서 로우의 가장 우측 엔트리에 기록되었다는 결정에 응답하여, 상기 루프의 추가적인 반복들이 상기 루프 버퍼에 기록되는 것을 방지하도록
    구성되는 장치.
  5. 제1항에 있어서, 상기 루프 버퍼에 기록된 루프의 반복들의 수는, 상기 장치가 루프 버퍼 모드에 있을 때, 상기 루프 버퍼로부터의 사이클당 명령어 동작 처리량의 극대화에 기초하여 결정되는 장치.
  6. 제1항에 있어서, 상기 루프 버퍼의 제1 로우에서 제1 슬롯에 상기 루프의 제1 반복의 제1 명령어 동작을 기록하도록 구성된 얼라이너(aligner)를 더 포함하는 장치.
  7. 제1항에 있어서, 상기 루프 버퍼는, 상기 장치가 루프 버퍼 모드에 진입하는 것에 응답하여, 상기 루프의 2 이상의 반복의 명령어 동작들을 디스패치하도록 구성되는 장치.
  8. 프로세서로서,
    루프 버퍼; 및
    상기 루프 버퍼에 결합된 루프 버퍼 제어 유닛 - 상기 루프 버퍼 제어 유닛은 명령어 스트림에서 루프를 검출하도록 구성됨 -
    을 포함하고,
    상기 루프 버퍼는,
    상기 루프의 다수의 반복을 저장하고,
    상기 프로세서가 루프 버퍼 모드에 진입하는 것에 응답하여, 상기 루프의 다수의 반복의 명령어들을 디스패치하도록
    구성되는 프로세서.
  9. 제8항에 있어서, 상기 루프의 다수의 반복들의 각 반복은 동일한 프로세서.
  10. 제8항에 있어서, 상기 루프의 시작을 식별 및 마크하도록 구성된 페치 유닛을 더 포함하는 프로세서.
  11. 제10항에 있어서, 상기 페치 유닛은 루프 반복 경계들을 식별하도록 구성된 얼라이너를 포함하는 프로세서.
  12. 제11항에 있어서, 상기 얼라이너는 또한, 상기 프로세서가 루프 버퍼 모드에 진입하는 것에 응답하여, 상기 루프의 이전 반복의 후방 취득 브랜치를 검출한 후에 스톨(stall)하도록 구성되는 프로세서.
  13. 제12항에 있어서, 상기 얼라이너는 또한, 상기 루프 버퍼에 기록되는 상기 루프의 최종 반복의 후방 취득 브랜치를 검출한 후에 스톨하도록 구성되는 프로세서.
  14. 제13항에 있어서, 상기 얼라이너는 또한,
    제1 클록 사이클에, 상기 루프의 제1 반복의 후방 취득 브랜치를 제1 슬롯에 할당하고,
    상기 제1 클록 사이클에, 상기 루프의 제2 반복의 제1 명령어 동작을 제2 슬롯에 할당하도록
    구성되며,
    상기 제2 슬롯은 상기 제1 슬롯에 인접하는 프로세서.
  15. 방법으로서,
    명령어 스트림에서 루프 후보를 검출하는 단계;
    상기 루프 후보가 루프 버퍼에 버퍼링하기 위한 기준을 충족하는지를 결정하는 단계;
    상기 루프 후보의 제1 반복을 상기 루프 버퍼에 기록하는 단계;
    상기 루프 후보의 상기 제1 반복의 루프 종료 브랜치의 검출에 응답하여, 상기 루프 버퍼의 적어도 반이 찼는지를 결정하는 단계; 및
    상기 루프 버퍼의 적어도 반이 차지 않았다는 결정에 응답하여, 상기 루프 버퍼에 상기 루프 후보의 제2 반복을 기록하는 단계
    를 포함하는 방법.
  16. 제15항에 있어서, 상기 방법은,
    상기 루프 후보의 상기 제2 반복의 루프 종료 브랜치의 검출에 응답하여, 상기 루프 버퍼의 반이 찼는지를 결정하는 단계; 및
    상기 루프 버퍼의 적어도 반이 찼다는 결정에 응답하여, 상기 루프 버퍼로부터 상기 루프 후보의 상기 제1 반복 및 제2 반복을 디스패치하는 단계
    를 더 포함하는 방법.
  17. 제16항에 있어서, 상기 방법은, 상기 루프 버퍼로부터 상기 루프 후보의 상기 제1 반복 및 제2 반복을 디스패치하는 단계에 응답하여, 페치 유닛을 셧다운하는 단계를 더 포함하는 방법.
  18. 제17항에 있어서, 상기 루프 버퍼에 저장된 유효 로우들(valid rows)의 수와 동일한 제1 값을 저장하는 단계를 더 포함하는 방법.
  19. 제18항에 있어서, 상기 루프 버퍼로부터 상기 루프 후보의 상기 제1 반복 및 제2 반복을 디스패치하는 단계는 상기 제1 값과 동일한 상기 루프 버퍼의 다수의 로우들에 걸쳐 판독 포인터를 스텝(step)하는 단계를 포함하는 방법.
  20. 제19항에 있어서, 상기 제1 값과 동일한 상기 루프 버퍼의 다수의 로우들에 걸쳐 스텝하는 상기 판독 포인터에 응답하여, 상기 루프 버퍼의 제1 로우에 대한 상기 판독 포인터를 리셋하는 단계를 더 포함하는 방법.
KR20130068472A 2012-06-15 2013-06-14 루프 버퍼 패킹 KR101496009B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/524,478 2012-06-15
US13/524,478 US9753733B2 (en) 2012-06-15 2012-06-15 Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer

Publications (2)

Publication Number Publication Date
KR20130141396A true KR20130141396A (ko) 2013-12-26
KR101496009B1 KR101496009B1 (ko) 2015-02-25

Family

ID=48607066

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20130068472A KR101496009B1 (ko) 2012-06-15 2013-06-14 루프 버퍼 패킹

Country Status (8)

Country Link
US (1) US9753733B2 (ko)
EP (1) EP2674857B1 (ko)
JP (1) JP5748800B2 (ko)
KR (1) KR101496009B1 (ko)
CN (1) CN103513964B (ko)
BR (1) BR102013015262A2 (ko)
TW (1) TWI503744B (ko)
WO (1) WO2013188123A2 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9557999B2 (en) 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9710276B2 (en) * 2012-11-09 2017-07-18 Advanced Micro Devices, Inc. Execution of instruction loops using an instruction buffer
US9459871B2 (en) * 2012-12-31 2016-10-04 Intel Corporation System of improved loop detection and execution
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
CN104317572B (zh) * 2014-09-30 2017-05-24 南京大学 一种实时系统的循环边界内向分析方法
CN104461933B (zh) * 2014-11-07 2017-10-03 珠海全志科技股份有限公司 内存管理方法及其装置
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
JP2018005488A (ja) * 2016-06-30 2018-01-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20180018999A1 (en) * 2016-07-12 2018-01-18 Mediatek Inc. Video processing system using ring buffer and racing-mode ring buffer access control scheme
US10348329B2 (en) * 2017-02-13 2019-07-09 Qualcomm Incorporated Low density parity check (LDPC) circular buffer rate matching
CN108897700A (zh) * 2018-06-26 2018-11-27 青岛海信宽带多媒体技术有限公司 一种环形缓存器的数据处理方法、装置及机顶盒
US10915322B2 (en) * 2018-09-18 2021-02-09 Advanced Micro Devices, Inc. Using loop exit prediction to accelerate or suppress loop mode of a processor
CN111414199B (zh) * 2020-04-03 2022-11-08 中国人民解放军国防科技大学 一种指令融合的实现方法及装置
US20240028339A1 (en) * 2022-07-25 2024-01-25 Apple Inc. Using a Next Fetch Predictor Circuit with Short Branches and Return Fetch Groups

Family Cites Families (48)

* 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
JP3032030B2 (ja) 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
JP3032031B2 (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.
US5493556A (en) * 1993-02-16 1996-02-20 Sanyo Electric Co., Ltd. Multi-disk player/recorder with biased locking means for disk cassettes
JPH0991136A (ja) 1995-09-25 1997-04-04 Toshiba Corp 信号処理装置
JPH10124315A (ja) 1996-10-18 1998-05-15 Hitachi Ltd 分岐処理方法およびそのための情報処理装置
JPH10177482A (ja) 1996-10-31 1998-06-30 Texas Instr Inc <Ti> マイクロプロセッサおよび動作方法
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
EP1107110B1 (en) 1999-11-30 2006-04-19 Texas Instruments Incorporated Instruction loop buffer
US7302557B1 (en) * 1999-12-27 2007-11-27 Impact Technologies, Inc. Method and apparatus for modulo scheduled loop execution in a processor architecture
US6578138B1 (en) * 1999-12-30 2003-06-10 Intel Corporation System and method for unrolling loops in a trace cache
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
US6748523B1 (en) 2000-11-02 2004-06-08 Intel Corporation Hardware loops
US6898693B1 (en) * 2000-11-02 2005-05-24 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
KR100464406B1 (ko) * 2002-02-08 2005-01-03 삼성전자주식회사 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법
JP2004038601A (ja) 2002-07-04 2004-02-05 Matsushita Electric Ind Co Ltd キャッシュメモリ装置
US20060107028A1 (en) 2002-11-28 2006-05-18 Koninklijke Philips Electronics N.V. 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 プロセッサ及びプロセッサの命令バッファ動作方法
US7330964B2 (en) * 2005-11-14 2008-02-12 Texas Instruments Incorporated Microprocessor with independent SIMD loop buffer
US7475231B2 (en) 2005-11-14 2009-01-06 Texas Instruments Incorporated Loop detection and capture in the instruction queue
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
CN102238179B (zh) * 2010-04-07 2014-12-10 苹果公司 实时或准实时流传输
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
US9557999B2 (en) 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold

Also Published As

Publication number Publication date
KR101496009B1 (ko) 2015-02-25
WO2013188123A3 (en) 2014-02-13
CN103513964B (zh) 2015-12-02
EP2674857A1 (en) 2013-12-18
BR102013015262A2 (pt) 2015-07-14
US9753733B2 (en) 2017-09-05
TW201411486A (zh) 2014-03-16
EP2674857B1 (en) 2019-07-24
TWI503744B (zh) 2015-10-11
JP2014002736A (ja) 2014-01-09
JP5748800B2 (ja) 2015-07-15
US20130339699A1 (en) 2013-12-19
CN103513964A (zh) 2014-01-15
WO2013188123A2 (en) 2013-12-19

Similar Documents

Publication Publication Date Title
KR101496009B1 (ko) 루프 버퍼 패킹
EP2674858B1 (en) Loop buffer learning
US9471322B2 (en) Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
KR101594090B1 (ko) 공유 메모리에 대한 액세스들의 동기화를 완화하기 위한 프로세서들, 방법들 및 시스템들
US9710268B2 (en) Reducing latency for pointer chasing loads
US9582276B2 (en) Processor and method for implementing barrier operation using speculative and architectural color values
US9600289B2 (en) Load-store dependency predictor PC hashing
US8856447B2 (en) Converting memory accesses near barriers into prefetches
US9354886B2 (en) Maintaining the integrity of an execution return address stack
US9201658B2 (en) Branch predictor for wide issue, arbitrarily aligned fetch that can cross cache line boundaries
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
US9626185B2 (en) IT instruction pre-decode
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
CN113448626B (zh) 推测分支模式更新方法和微处理器
US9720840B2 (en) Way lookahead
US20210132985A1 (en) Shadow latches in a shadow-latch configured register file for thread storage
CN115858022A (zh) 集群化解码管线的可缩放切换点控制电路系统
CN114489808A (zh) 高置信度多分支偏移预测器

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

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190116

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20200115

Year of fee payment: 6