[go: up one dir, main page]

JP5748800B2 - ループバッファのパッキング - Google Patents

ループバッファのパッキング Download PDF

Info

Publication number
JP5748800B2
JP5748800B2 JP2013125335A JP2013125335A JP5748800B2 JP 5748800 B2 JP5748800 B2 JP 5748800B2 JP 2013125335 A JP2013125335 A JP 2013125335A JP 2013125335 A JP2013125335 A JP 2013125335A JP 5748800 B2 JP5748800 B2 JP 5748800B2
Authority
JP
Japan
Prior art keywords
loop
loop buffer
buffer
iteration
instruction
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Fee Related
Application number
JP2013125335A
Other languages
English (en)
Other versions
JP2014002736A (ja
Inventor
ブラスコ アリュー コンラド
ブラスコ アリュー コンラド
ディー カウンタニス イアン
ディー カウンタニス イアン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Inc
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 Apple Inc filed Critical Apple Inc
Publication of JP2014002736A publication Critical patent/JP2014002736A/ja
Application granted granted Critical
Publication of JP5748800B2 publication Critical patent/JP5748800B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/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/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/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/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)

Description

本発明は、概括的にはプロセッサに、厳密にはループの複数の反復をループバッファにパックするための方法及び機構に関する。
今日のプロセッサシステムは、パイプライン式に複数段に構築される傾向にある。典型的なパイプラインは、多くの場合、命令をフェッチするためのユニット、命令をデコードするためのユニット、命令をマップするためのユニット、命令を実行するためのユニット、そして結果をレジスタの様な別のユニットへ書き込むためのユニット、という別々のユニットを含んでいる。マイクロプロセッサの命令フェッチユニットは、命令の一定したストリームをプロセッサパイプラインの次段へ提供する役割を担っている。典型的には、フェッチユニットは、パイプラインの残部が継続的に命令を供給され続けるようにするために、命令キャッシュを利用している。フェッチユニット及び命令キャッシュは、それらに求められる機能を遂行している間に相当量のパワーを消費する傾向がある。パワー消費量を可能な限り削減することが、現代のマイクロプロセッサの目標であり、バッテリによりパワー供給される移動式デバイス内で利用されているマイクロプロセッサについては特にそうである。
多くのソフトウェアアプリケーションでは、或る特定の機能又はタスクを遂行するのに同じソフトウェア段階が何度も繰り返されることがある。これらの状況では、フェッチユニットは、命令の同じループが連続して実行されているにもかかわらず命令をフェッチし続けパワーを消費し続けることになる。ループを検出してループバッファにキャッシュできるならば、ループが実行している間フェッチユニットをシャットダウンさせてパワー消費を抑えることができよう。しかしながら、ループバッファを使用させながらプロセッサパイプラインの命令処理量を最大化するのは困難を伴う。この結果、プロセッサは十分とはいえない効率で動作することになってしまう。
ループバッファからのサイクル当たり命令処理量を最大化するための装置、プロセッサ、及び方法が開示されている。サイクル当たり命令処理量を最大化するために、ループバッファにはループの複数の反復がパックされることになる。1つの実施形態では、プロセッサパイプラインのフロントエンドは、フェッチユニット、ループバッファ、及びループバッファコントロールユニットを含んでいてもよい。ループバッファコントロールユニットは、ループ候補を監視及び追跡し、どのループ候補をバッファにキャッシュするべきかを判定するものである。
1つの実施形態では、ループ候補がキャッシュのための判定基準に合致している場合、ループバッファコントロールユニットは、フェッチユニットに、ループの始まりがループバッファの第1スロットへ書き込まれる必要がある、という合図を返してもよい。フェッチユニットでは、当該ループ候補の後方分岐枝が、識別され、マークされる。そして、次の命令が、ループの始まりとして識別され、マークされることになる。フェッチユニットが、ループバッファコントロールユニットから、当該ループ候補をループバッファにキャッシュするべきであるという信号を受信すると、フェッチユニットは、後方分岐枝の後に作為的にストールするようにしてもよい。そうして、次のクロックサイクルで、フェッチユニットは、ループの始まりと識別されている命令をループバッファの第1スロットの中へ出力することになる。更に、ループバッファへ書き込み中のループの最後の反復の終わりに、後方分岐枝に遭遇すると、フェッチユニットは後方分岐枝がループバッファへ書き込まれた後に、作為的にストールするようにしてもよい。
1つの実施形態では、ループ反復の後方分岐枝がループバッファへ書き込まれると、ループバッファが少なくとも半分まで埋まっているかどうかが判定されてもよい。ループバッファが半分まで埋まっていなければ、ループの反復がもう1つループバッファへ書き込まれることになる。ループバッファが半分まで埋まっていれば、ループバッファへの書き込みは終結されてもよい。ループバッファへの書き込みが完了した後、ループの(単数又は複数の)反復がループバッファからプロセッサパイプラインの次段へディスパッチされることになる。
これら及び他の特徴及び利点は、ここに提示されている手法についての次の詳細な説明が考察されれば当業者には明らかとなるであろう。
本方法及び機構の上記及び更なる利点は、次に続く詳細な説明を添付図面と関連付けて参照することによって更に深く理解されることであろう。
集積回路の一部分の1つの実施形態を示している。 プロセッサコアの1つの実施形態を示しているブロック線図である。 プロセッサパイプラインのフロントエンドの1つの実施形態を示しているブロック線図である。 フェッチ及びデコードユニット内のループバッファの別の実施形態のブロック線図である。 アライナの1つの実施形態である。 ループバッファにキャッシュされているループの1つの実施形態を示している。 ループバッファにキャッシュされているループの複数の反復の1つの実施形態を示している。 ループバッファにキャッシュされているループの複数の反復の別の実施形態を示している。 ループ候補を追跡するための方法の1つの実施形態を示している一般化された流れ線図である。 システムの1つの実施形態のブロック線図である。 コンピュータ可読媒体の1つの実施形態のブロック線図である。
次に続く説明では、ここに提示されている方法及び機構をくまなく理解できるように数多くの特定の詳細事項が述べられている。とはいえ、様々な実施形態はこれらの特定の詳細事項無しに実践され得ることが当業者には認識されるはずである。場合に依っては、ここに記載されている手法が曖昧になるのを避けるために、周知の構造、構成要素、信号、コンピュータプログラム命令、及び技法は、詳細に示されていないこともある。説明を簡潔に分かり易くするために、図中に示されている要素は必ずしも縮尺を合わせて描かれているわけではないことが理解されよう。例えば、一部の要素の寸法は他の要素に対比して誇張されていることがあるかもしれない。
本明細書は、「1つの実施形態」という言い方を含んでいる。「1つの実施形態では」という語句が異なった文脈で登場している場合、それは必ずしも同じ実施形態を指すとは限らない。特定の機構、構造、又は特性は、本開示との矛盾のない何れかの適したやり方で組み合わされてもよい。また、本願全体を通しての使用に際し、英語の「may」の対訳である「〜してもよい、〜かもしれない、〜できるであろう」という語は、必須の意味(即ち、せねばならないを意味する)というよりむしろ許容の意味(即ち、可能性があることを意味する)に使用されている。同様に、英語の「include」、「including」、及び「includes」の対訳である「〜を含む、〜を含める」という語は、〜に限定される、ではなく、〜を含んでいる、という意味である。
用語遣い。次に続く段落は、本開示(付随の特許請求の範囲を含む)に見られる用語についての定義及び/又は文脈を提供している。
英語の「comprising」の対訳である「備えている」。この用語は、開放型である。本用語が付随の特許請求の範囲で使用されている場合、それは追加の構造又は段階を排除しない。「ループバッファコントロールユニットを備えているプロセッサは・・・」と叙述している請求項を考えてみよう。その様な請求項は、当該プロセッサが追加の構成要素(例えば、キャッシュ、フェッチユニット、実行ユニット)を含むことを排除しない。
英語の「Configured to」の対訳である「〜するように構成されている」。各種ユニット、回路、又は他の構成要素は、単数又は複数のタスクを遂行「するように構成されている」、と記載又は請求されていることがあるかもしれない。その様な文脈では、「〜するように構成されている」は、ユニット/回路/構成要素がオペレーション中に単数又は複数のタスクを遂行する構造(例えば回路構成)を含んでいる、ということを指し示すことによって、構造を含意するべく使用されている。そういうものとして、ユニット/回路/構成要素は、当該の特定されたユニット/回路/構成要素が現在作動状態ではなくても(例えばオンになっていなくても)、タスクを遂行するように構成されているといえる。一般に、「〜するように構成されている」という言い回しが使用されているユニット/回路/構成要素には、ハードウェア、例えば、回路、オペレーションを実施するべく実行可能なプログラム命令を格納しているメモリ、など、が含まれる。ユニット/回路/構成要素が1つ又はそれ以上のタスクを遂行「するように構成されている」と叙述されているからといって、それが当該ユニット/回路/構成要素について、35U.S.C.第112条、第6項を発動するものではないことを明示しておく。加えて、「〜するように構成されている」には、ジェネリック構造(例えばジェネリック回路構成)が、問題になっている(単数又は複数の)タスクを遂行することのできるやり方で動作するように、ソフトウェア及び/又はファームウェア(例えば、FPGA又はソフトウェアを実行する汎用プロセッサ)によって操作されていることを含めることができる。「〜するように構成されている」には、製造プロセス(例えば半導体製作設備)を、1つ又はそれ以上のタスクを実施又は遂行するように適合されたデバイス(例えば半導体集積回路)を製作するように、適合させることも含まれよう。
英語の「Based on」の対訳である「〜に基づいて」。ここでの使用に際し、本用語は、判定に影響を及ぼす1つ又はそれ以上の要因を記述するのに使用されている。この用語は、判定に影響を及ぼし得る追加の要因を排除しない。つまり、判定は、唯一それらの要因に基づいていることもあれば、少なくとも部分的にそれらの要因に基づいていることもあろう。「Bに基づいてAと判定する」という語句を考えてみよう。BはAという判定に影響を及ぼす要因ではあろうが、その様な語句は、Aという判定がCにも基づいていることを排除しない。他の場合には、Aは唯一Bに基づいて判定されることもあろう。
図1を参照すると、集積回路(IC)の一部分の1つの実施形態を説明するブロック線図が示されている。図示の実施形態では、IC10は、プロセッサ複合体12、メモリコントローラ22、及びメモリ物理インターフェース回路(PHY)24と26、を含んでいる。IC10は、更に、図1に示されていない多くの他の構成要素を含んでいてもよいことを指摘しておく。様々な実施形態では、IC10は、システムオンチップ(SoC)、特定用途向け集積回路(ASIC)、又は装置、と呼称されることもある。
プロセッサ複合体12は、中央処理ユニット(CPU)14と16、レベル2(L2)キャッシュ18、及びバスインターフェースユニット(BIU)20を含んでいてもよい。他の実施形態では、プロセッサ複合体12は、他の個数のCPUを含んでいてもよい。CPU14及び16は、プロセッサ又はコアと呼称されることもある。プロセッサ複合体12は、図1に示されていない他の構成要素を含んでいてもよいことを指摘しておく。
CPU14及び16は、命令セットアーキテクチャに定義されている命令を実行する回路構成を含んでいてもよい。具体的には、命令を備える1つ又はそれ以上のプログラムがCPU14及び16によって実行されることになる。様々な実施形態では、何れの命令セットアーキテクチャが実装されていてもよい。例えば、1つの実施形態では、ARM(商標)命令セットアーキテクチャ(ISA)が実装されていてもよい。ARM命令セットには、16ビット(又はThumb)命令及び32ビット命令が含まれよう。他の代表的なISAには、PowerPC(商標)命令セット、MIPS(商標)命令セット、SPARC(商標)命令セット、x86命令セット(IA−32とも呼称される)、IA−64命令セット、など、が含まれよう。
1つの実施形態では、CPU14及び16によって実行されるそれぞれの命令は、プログラムカウンタ(PC)値と関連付けられていてもよい。更に、幾つかの命令内には、読み出し及び書き込みのための1つ又はそれ以上のアーキテクチャ上のレジスタが指定されていてもよい。これらのアーキテクチャ上のレジスタは、レジスタリネームユニットによって実際の物理レジスタへマップされていてもよい。また、幾つかの命令(例えば、ARM Thumb命令)は、命令オペレーション(又はマイクロop)のシーケンスへ分解されていてもよく、当該シーケンスのそれぞれの命令オペレーションは、固有マイクロop(又はuop)番号によって参照されていてもよい。
CPU14と16のそれぞれは、更に、レベル1(L1)キャッシュ(図示せず)を含んでいてもよく、各L1キャッシュはL2キャッシュ18へ連結されていてもよい。他の実施形態は、追加のキャッシュレベル(例えば、レベル3(L3)キャッシュ)を含んでいてもよい。1つの実施形態では、L2キャッシュ18は、CPU14及び16による低待ち時間アクセスのために、命令及びデータをキャッシュするように構成されていてもよい。L2キャッシュ18は、何れの容量及び構成(例えば、ダイレクトマップ型、セット・アソシエイティブ型)を備えていてもよい。L2キャッシュ18は、メモリコントローラ22へBIU20を介して連結されていてもよい。BIU20は、更に、CPU14及び16とL2キャッシュ18を様々な他のデバイス及びブロックへ連結する様々な他の論理構造を含んでいてもよい。
メモリコントローラ22は、何れの個数のメモリポートを含んでいてもよく、メモリへインターフェースするように構成されている回路構成を含んでいてもよい。例えば、メモリコントローラ22は、シンクロナスDRAM(SDRAM)、ダブルデータレート(DDR)SDRAM、DDR2 SDRAM、ランバスDRAM(RDRAM)、などの様な、ダイナミックランダムアクセスメモリ(DRAM)へインターフェースするように構成されていてもよい。メモリコントローラ22は、更に、メモリ物理インターフェース回路(PHY)24及び26へ連結されていてもよい。メモリPHY24及び26は、メモリコントローラ22へ連結されている任意の個数のメモリPHYを代表している。メモリPHY24及び26は、メモリデバイス(図示せず)へインターフェースするように構成されていてもよい。
他の実施形態は、図1に示されている構成要素及び/又は他の構成要素のサブセット又はスーパーセットを含め、構成要素の他の組合せを含んでいてもよいことを指摘しておく。所与の構成要素の1つのインスタンスが図1に示されているが、他の実施形態は、所与の構成要素の2つ又はそれ以上のインスタンスを含んでいてもよい。同様に、この詳細な説明全体を通して、所与の構成要素のインスタンスについては、たとえ1つのインスタンスしか示されていなくても2つ又はそれ以上のインスタンスが含まれていてもよく、及び/又は、たとえ複数のインスタンスが示されていてもインスタンスを1つしか含んでいない実施形態が使用されてもよい。
次に図2を参照すると、プロセッサコアの1つの実施形態が示されている。コア30は、プロセッサコアの1つの例であり、コア30は、図1のプロセッサ複合体12の様なプロセッサ複合体内で利用されていてもよい。1つの実施形態では、図1のCPU14と16のそれぞれは、コア30の構成要素と機能性を含んでいてもよい。コア30は、フェッチ及びデコード(FED)ユニット32、マップ及びディスパッチユニット36、メモリ管理ユニット(MMU)40、コアインターフェースユニット(CIF)42、実行ユニット44、及びロード−格納ユニット(LSU)46を含んでいてもよい。コア30は図2に示されていない他の構成要素及びインターフェースを含んでいてもよいことを指摘しておく。
FEDユニット32は、メモリからの命令を読み出し、それらをレベル1(L1)命令キャッシュ33に入れるように構成されている回路構成を含んでいてもよい。L1命令キャッシュ33は、コア30に実行させる命令を格納するためのキャッシュメモリであってもよい。L1命令キャッシュ33は、何れの容量及び構成(例えば、ダイレクトマップ型、セット・アソシエイティブ型、など)を有していてもよい。また、L1命令キャッシュ33は、何れのキャッシュラインサイズを有していてもよい。FEDユニット32は、更に、分枝命令を予測して予測された経路を下ってフェッチしてゆくように構成されている分枝予測ハードウェアを含んでいてもよい。FEDユニット32は、更に、リダイレクトされることもあろう(例えば、予測ミス、例外、割り込み、フラッシュ、など、による)。
1つの実施形態では、FEDユニット32は、命令をオペレーションへ多段階でデコードするように構成されていてもよい。加えて、FEDユニット32は、更に、複数の命令を並行してデコードするように構成されていてもよい。より具体的には、命令は、L1命令キャッシュ33から引き出され、プリデコーデッド命令へとデコードされてもよく、そして、アライナ34が、プリデコーデッド命令をループバッファ35及び/又はデコーダーユニット(図示せず)の正しいレーンへ配信するように構成されていてもよい。デコーダユニットは、プリデコーデッド命令を命令オペレーションへ変換するべくデコーディングの残りを遂行するように構成されていてもよい。
概して、命令オペレーションは、実行ユニット44及びLSU46に含まれているハードウェアが実行することのできるオペレーションとされる。それぞれの命令は、実行されると当該命令についての命令セットアーキテクチャに従って定義されているオペレーションの遂行をもたらす1つ又はそれ以上の命令オペレーションへ翻訳される。「命令オペレーション」及び「uop」という用語は本開示全体を通して置き換え可能に使用されることもあることを指摘しておく。他の実施形態では、FEDユニット32内に含まれている機能性は、フェッチユニット、デコードユニット、及び/又は他のユニットの様な、2つ又はそれ以上の別々のユニットに分割されていてもよい。
様々なISAでは、幾つかの命令が単一のuopへデコードされていることもある。FEDユニット32は、命令の型式、ソースオペランド、など、を識別するように構成されていてもよく、それぞれのデコードされた命令オペレーションは、命令を幾らかのデコード情報と併せて備えていてもよい。それぞれの命令が単一のuopに翻訳される他の実施形態では、それぞれのuopは、単純に、対応する命令又はその一部分(例えば、命令の単数又は複数のopコードフィールド)であってもよい。幾つかの実施形態では、FEDユニット32は、命令についてuopを生成するための回路構成及び/又はマイクロコードの何らかの組合せを含んでいてもよい。例えば、比較的単純なuop生成(例えば命令当たり1又は2uop)はハードウェアで扱えるのに対し、より拡張的なuop生成(例えば命令当たり3uopより多い)はマイクロコードで扱われることになろう。
デコードされたuopは、マップ/ディスパッチユニット36へ提供されてもよい。マップ/ディスパッチユニット36は、uop及びアーキテクチャ上のレジスタをコア30の物理レジスタへマップするように構成されていてもよい。マップ/ディスパッチユニット36は、レジスタリネーミングを実施していて、uopからのソースレジスタアドレスをリネーム後のソースレジスタを識別するソースオペランド番号へマップしていてもよい。マップ/ディスパッチユニット36は、更に、uopを実行ユニット44及びLSU46内のリザベーションステーション(図示せず)へディスパッチするように構成されていてもよい。
1つの実施形態では、マップ/ディスパッチユニット36は、リオーダバッファ(ROB)38を含んでいてもよい。他の実施形態では、ROB38は、どこか他のところに配置されていてもよい。uopは、ディスパッチされるより前に、ROB38へ書き込まれてもよい。ROB38は、uopを、それらが順番にコミットされてゆくまで保留するように構成されていてもよい。それぞれのuopには、ROB38内の特定のエントリに対応するROBインデクス(RNUM)が割り当てられてもよい。RNUMは、コア30内でインフライトのオペレーションを追跡記録するのに使用することができよう。マップ/ディスパッチユニット36は、更に、図2に示されていない他の構成要素(例えば、マッパアレイ、ディスパッチユニット、ディスパッチバッファ)を含んでいてもよい。また、他の実施形態では、マップ/ディスパッチユニット36内に含まれている機能性は、マップユニット、ディスパッチユニット、及び/又は他のユニットの様な、2つ又はそれ以上の別々のユニットへ分割されていてもよい。
実行ユニット44は、何れの個数及び何れの型式(例えば、整数、浮動小数点、ベクトル)の実行ユニットを含んでいてもよい。実行ユニット44のそれぞれは、1つ又はそれ以上のリザベーションステーション(図示せず)を更に含んでいてもよい。CIF42は、LSU46、FEDユニット32、MMU40、及びL2キャッシュ(図示せず)、へ連結されていてもよい。CIF42は、コア30とL2キャッシュの間のインターフェースを管理するように構成されていてもよい。MMU40は、アドレス翻訳機能とメモリ管理機能を遂行するように構成されていてもよい。
LSU46は、L1データキャッシュ48、格納待ち行列50、及びロード待ち行列52を含んでいてもよい。ロードオペレーション及び格納オペレーションは、マップ/ディスパッチユニット36から、LSU46内のリザベーションステーションへディスパッチされてもよい。格納待ち行列50は格納オペレーションに対応するデータを格納し、ロード待ち行列52はロードオペレーションと関連付けられるデータを格納するものである。LSU46は、更に、L2キャッシュへCIF42を介して連結されていてもよい。LSU46は、更に、図2に示されていない他の構成要素(例えば、リザベーションステーション、レジスタファイル、プリフェッチユニット、翻訳ルックアサイドバッファ)を含んでいてもよいことを指摘しておく。
図2に示されている機能性の配分がプロセッサコアについて利用できる唯一可能なマイクロアーキテクチャというわけではないものと理解されたい。他のプロセッサコアは、他の構成要素を含んでいることもあろうし、示されている構成要素の1つ又はそれ以上を省いていることもあろうし、及び/又は、構成要素の間で異なった機能性の配列を含んでいることもあろう。
次に図3を参照すると、プロセッサパイプラインのフロントエンドの1つの実施形態のブロック線図が示されている。1つの実施形態では、図3に示されているフロントエンド論理は、(図2の)FEDユニット32の様なフェッチ及びデコードユニット内に置かれていてもよい。図3に示されている機能性の配分は、ループバッファをプロセッサパイプライン内に実装する場合の単なる一つの実施可能な構造であるものと理解されたい。他にもループバッファを実装するための適した論理配分が実施可能であり、企図されている。
フェッチフロントエンド60は、命令をフェッチしてプリデコードし、次いでプリデコーデッドuopをループバッファ62及びデコーダ70A−Fへ(マルチプレクサ68経由で)送配する、ように構成されていてもよい。1つの実施形態では、フェッチフロントエンド60は、サイクル当たり6つのプリデコーデッドuopを出力するように構成されていてもよい。他の実施形態では、フェッチフロントエンド60は、サイクル当たり他の個数のプリデコーデッドuopを出力するように構成されていてもよい。
ループバッファ62、マルチプレクサ68、及びデコーダ70A−Fは、サイクル当たり6つのuopの処理及び/又は格納につき6つのレーンを有していてもよい。それぞれのレーンは、レーンが有効uopを収容しているかどうかを指し示す有効ビットを含んでいてもよい。ループバッファ62、マルチプレクサ68、及びデコーダ70A−Fの「レーン」は、「スロット」又は「エントリ」と呼称されることもあることを指摘しておく。他の実施形態では、ループバッファ62、マルチプレクサ68、及びデコーダ70A−Fは、6つより多い又は6つ少ないレーンを含んでいてもよく、フェッチフロントエンド60は、パイプラインの次段が対応でき得る限り多くのサイクル当たりupoを出力するように構成されていてもよい。
フェッチフロントエンド60は、命令キャッシュ(図示せず)から生の命令データを掴み、データの中に命令境界を検出し、命令を命令キャッシュバッファ(図示せず)及び/又はアライナ(図示せず)にバッファし、命令を6つまでのuopのセットへ拡張し、これらのuopについて適切なペイロードを生成するものであってもよい。6つまでのuopのセットそれぞれは「デコードグループ」と呼称されることもある。他の実施形態では、デコードグループは他の個数のuopを含んでいてもよい。デコードグループは、それぞれのクロックサイクル中に、ループバッファ62及びマルチプレクサ68のレーンへ配信されることになろう。ここでの使用に際し、「レーン」とは、それぞれのクロックサイクル中にuopを処理及び/又は格納するように構成されている論理を含む経路と定義することができよう。
フェッチフロントエンド60は、命令をuopへ拡張し、これらのuopをループバッファ62及びマルチプレクサ68へ送給している。1つの実施形態では、フェッチフロントエンド60によってフェッチされてプリデコーデッドuopへとプリデコードされる命令は、ARM ISAに基づいていてもよい。それぞれのプリデコーデッドuopは、命令opコードビット、命令プリデコードビット、及びuop番号、を含んでいてもよい。命令opコードビットは、遂行されることになるオペレーションを特定している。プリデコードビットは、命令のマップ先のuopの数を指し示している。uop番号は、複数uopからなる命令シーケンス中のどのupoが生成されるべきかを表している。他の実施形態では、他のISAが利用されていてもよく、命令は、各種方式でデコード及びフォーマットされることであろう。
プロセッサがループバッファモードにないとき、フェッチフロントエンド60によって生成されたプリデコーデッドuopはデコーダ70A−Fへマルチプレクサ68を介して送配されることになる。どの経路がマルチプレクサ68を経由してデコーダ70A−Fの入力へ連結されているかを判定するために、ループバッファコントロールユニット64からの選択信号がマルチプレクサ68へ連結されていてもよい。プロセッサがループバッファモードにあるときは、プリデコーデッドuopは、ループバッファ62から読み出され、デコーダ70A−Fへ送配される。プリデコーデッドuopは、デコードされ、次いでデコーダ70A−Fの出力からプロセッサパイプラインの次段へ送配されることになる。1つの実施形態では、プロセッサパイプラインの次段は、図2のマップ/ディスパッチユニット36の様なマップ/ディスパッチユニットであってもよい。
ループバッファコントロールユニット64は、フェッチされプリデコードされた命令内にループを識別するように構成されていてもよい。ループが或る程度の確実度で識別されたら、次いでループバッファコントロールユニット64は、当該ループをループバッファ62にキャッシュさせ、フェッチフロントエンド60をシャットダウンさせて、プロセッサパイプラインの残部がループバッファ62から送給を受けられるようにしてもよい。ループの複数の反復がループバッファ62にキャッシュされてもよく、これらのキャッシュされた反復が繰り返しパイプラインを下ってディスパッチされてゆくことになろう。ループバッファコントロールユニット64は、ループの反復をループバッファ62へ書き込むとき、ループバッファ62内でどの行が書き込まれるかを判定するのに書き込みポインタを利用してもよい。同様に、ループバッファ62からの読み出し時には、ポインタを利用して読み出し中の現在の行を指させるようにしてもよい。
キャッシュするループを識別するため、先ず、フェッチされた命令の中で、後方分岐枝が検出されることになる。「後方分岐枝(backward taken branch)」とは、命令シーケンス中の先の命令へ枝分かれしている分岐枝と定義することができよう。後方分岐枝が行き着く先の命令がループの始まりと考えられよう。1つの実施形態では、一部の特定の型式のループだけがバッファリングの候補として考慮されてもよい。例えば1つの実施形態では、バッファリングが考慮されるループ候補としては、ループの反復の全てが不変でなくてはならない。
ループバッファコントロールユニット64は、ループバッファリングのための判定基準に合致するループを形成している命令を求めて、命令ストリームを監視することになろう。ループバッファコントロールユニット64は、所与のループ候補がどの様に見えるかについての情報を全て捕捉してもよい。或る一定の期間中、ループ候補は複数の反復に亘って追跡されて、当該ループ候補が同じであり続けるかどうかが確かめられてもよい。例えば、ループの始まりからループ内の1つ又はそれ以上の命令までの距離が最初の反復で記録され、それが以降の反復で監視されて、これらの距離が同じままであるかどうかが判定されてもよい。
幾つかの実施形態では、ループ候補が不変であり、以上に掲げられた他の判定基準に合致していたとしても、ループ候補の他の特性が、当該ループ候補がループバッファ62にキャッシュされる資格を奪うこともある。例えば、ループ候補のサイズが大きすぎてループバッファ62に納まりきらなければ、当該ループ候補は失格となろう。更に、分枝追跡表66のサイズに等しいループ内最大許容分岐枝数があるかもしれない。分岐枝の数がこの数を超過していれば、その結果、ループは、ループバッファ62にキャッシュされる候補としての考慮から除外されてしまう。1つの実施形態では、分枝追跡表66は、ループ内の分岐枝について8つのエントリを含んでいてもよい。他の実施形態では、分枝追跡表66は、ループ内の分岐枝について8つより多い又は8つより少ないエントリを有していてもよい。
1つの実施形態では、同じ後方分岐枝が2回以上検出されたら、次に、当該ループについて情報を捕捉する状態マシンがループバッファコントロールユニット64によって始動させられることになる。例えば、ループバッファコントロールユニット64は、ループ候補の分岐枝を追跡するのに分枝追跡表66を利用してもよい。分枝追跡表66は、ループの始まりからそれぞれの分岐枝までの距離を追跡記録している。
ループのそれぞれの反復が、ループの始まりから各分枝までuopの数が同じであるように実行しているなら、その結果、当該ループ候補は不変であると見なされよう。表66中のそれぞれの分枝までの距離は、ループ候補が不変であってキャッシュされるべきであると判定される以前に、或る一定の反復数の間、追跡されることであろう。ループ候補の不変性を追跡するために割り当てられる時間の量は、ループ反復数及び/又は遭遇される分枝数に基づくものであろう。
次に図4を見ると、フェッチ及びデコードユニット内のループバッファの別の実施形態が示されている。1つの実施形態では、ループバッファ84は、図4に示されている様にプロセッサパイプライン内でデコーダ82A−Fから下流に置かれていてもよい。これは、プロセッサパイプライン内でデコーダ70A−Fから上流に置かれている(図3の)ループバッファ62とは対照的である。1つの実施形態では、ループバッファ84は、行と列(又はレーン)へ編成されていてもよい。1つの実施形態では、ループバッファ84は、16の行と6つの列を有していてもよい。他の実施形態では、ループバッファ84は、他の個数の行と列を含んでいてもよい。
フェッチフロントエンド80は、命令をフェッチし、フェッチされた命令をプリデコーデッドuopへとプリデコードするようになっていてもよい。次いで、プリデコーデッドuopは、デコーダ82A−Fへ送配されることになる。1つの実施形態では、フェッチフロントエンド80は、サイクル当たり6つのプリデコーデッドuopを生成し、デコーダ82A−Fの6つのレーンへ送配する、ように構成されていてもよい。デコーダ82A−Fは、プリデコーデッドuopをデコーデッドuopへとデコードする。次いで、デコーダ82A−Fは、デコーデッドuopを、プロセッサパイプラインの次段へマルチプレクサ90を介して送配する。更に、デコーダ82A−Fは、ループ候補が識別され、ループバッファ84の中へキャッシュさせるための判定基準に合致した場合、uopをループバッファ84へ送配する。マルチプレクサ90の出力は、プロセッサパイプラインの次段へ連結されていてもよい。1つの実施形態では、プロセッサパイプラインの次段は、マップ/ディスパッチユニットであってもよい。
ループバッファ84、ループバッファコントロールユニット86、及び分枝追跡表88は、図3に示されているプロセッサフロントエンドに関連して説明されている機能と同様の機能を遂行するように構成されていてもよい。図4での1つの重要な違いは、ループバッファ84は、図3でループバッファ62がプリデコーデッドuopを格納しているのとは対照的に、デコーデッドuopを格納していることである。それ故、デコーデッドuopは典型的にプリデコーデッドuopより多くの情報を有しているがために、ループバッハ84はより大量のデータに対応できるようにループバッファ62より大きいサイズとなろう。ループバッファ84は、更に、図3及び図4に示されている2つの場所に加えて、プロセッサパイプライン内の他の場所に置かれていてもよいことを指摘しておく。例えば、ループバッファ84はフェッチフロントエンド内に置かれていてもよいし、或いは、代わりに、ループバッファ84はマップ/ディスパッチユニット内に置かれていてもよい。ループバッファがパイプライン内のどこに置かれているかに依存して、ループバッファに格納されているループの内容は、パイプライン内の当該地点におけるそれまでに遂行されてきた命令処理の量に基づいて異なることであろう。
1つの実施形態では、ループ候補の最初の反復で、ループバッファコントロールユニット86は、分枝追跡表88に、ループの始まりからループの各分岐枝までの距離を投入してもよい。ループの次の反復で、コントロールユニット86は、それぞれの分枝が、ループの始まりからの距離について表88に格納されている対応する距離と同じであるかどうかを判定する。ループ候補が或る一定の反復数の間不変であれば、その結果、当該ループ候補はループバッファ84にキャッシュされ、ループバッファ84からパイプラインの残部へ送給されることになる。ループがループバッファ84からプロセッサパイプラインの残部へディスパッチされている間、フェッチフロントエンド80とデコーダ82A−Fはパワー供給を落とされてもよい。
次に図5を参照すると、アライナの1つの実施形態が示されている。アライナ100は、フェッチユニットの部分であってもよく、アライナ100は、命令待ち行列102と命令クロスバー104を含んでいてもよい。命令キャッシュ(図示せず)の中の命令データ内に命令境界が検出されると、次いでそれら命令は命令待ち行列102へ送配される。命令待ち行列102は、何れの容量及び構成を有していてもよい。アライナ100は、デコーダユニットがそれぞれのクロックサイクル中に適切な数のプリデコーデッド命令を供給される状態を維持するように構成されていてもよく、ここに、適切な数はプロセッサアーキテクチャに基づく。例えば、1つの実施形態では、デコーダが6つあるとして、すると、アライナ100は、クロックサイクル当たり6つまでのプリデコーデッドuopを生成し、6つのデコーダへ送配する、ように構成されていてもよい。他の実施形態では、アライナ100は、クロックサイクル当たり他の個数のプリデコーデッドuopを生成するように構成されていてもよい。
それぞれクロックサイクルで、アライナ100は、命令待ち行列102の中で命令シーケンスの次の6つのuopに対応している命令に注目する。アライナ100は、これらの命令を、適切なデコーダスロットへ、命令クロスバー104を介して割り当てる。アライナ100は、更に、ループ反復の境界(例えば、反復境界103)を識別するように構成されていてもよい。例えば、ループ候補がキャッシュのための判定基準に合致している場合、直近の反復の後方分岐枝(BTB)、即ち命令C、が識別されることになろう。
図5に示されている例では、命令待ち行列102中に示されている命令は、命令A、B、C(BTB)、D、E、及びFを含んでいる。命令DはBTBの次に続いているので、Dはループの始まりとしてマークされることになる。それぞれの命令は、1つ又はそれ以上のuopへと割られ、命令のマップ先のuopの数は、命令が命令キャッシュの中へ充填されるときにプリデコードされる。ループをループバッファ(図示せず)にキャッシュさせるべきであると判定されたとき、ループバッファコントロールユニット(図示せず)は、アライナ100に信号を送ってループのBTB後にストールさせてもよい。
図5に示されている様に、アライナ100は、クロックサイクル「N」中に、uopを3つだけデコーダスロットへ書き込んでいる。これら3つのuopは、A、B、及びC(BTB)である。命令A、B、及びCのそれぞれは、本例では、単一のuop命令である。クロックサイクル「N」を見て分かる通り、スロット3−5はBTB(命令C)がスロット2へ割り当てられたために空である。アライナ100は、BTBがデコーダスロットへ割り当てられた後にストールし、従って残りのスロットは、クロックサイクル「N」の間は埋まらない。次のクロックサイクルで、アライナ100は、ループの始まりをスロット0へ割り当てる。命令Dがループの始まりであり、命令Dは本例では3uop命令であるので、よって、対応する3つのuop(D−0、D−1、及びD−2)がクロックサイクル「N+1」のデコーダスロット0−2へ割り当てられている。命令Eに対応する2つのuopがクロックサイクル「N+1」のスロット3及び4を占め、命令Fに対応するuopがスロット5へ割り当てられることになる。
クロックサイクル「N」及び「N+1」に示されているuopは、デコーダユニットとループバッファの両方へ送配されてもよい。ループがループバッファへ書き込まれている間も、ループはパイプラインの次段(例えばデコーダ)へ送給され続ける。ループの1つ又はそれ以上の反復がループバッファへ書き込まれた後、今度はパイプラインのバックエンドがループバッファによる送給を受け、フロントエンドはパワー供給を落とされる。
アライナ100は、更に、同じ方式で、ループバッファへ書き込まれるループの最後の反復の終わりにストールしてもよい。BTBがどのスロットへ割り当てられようと、そのスロットは、ループバッファの当該行内で書き込まれる最後のスロットということになる。例えば、最終ループ反復をループバッファへ書き込む最後のクロックサイクル中にBTBがスロット1へ書き込まれれば、残りのスロット(スロット2−5)は空で残ることになる。この様にすると、次のクロックサイクルでのループバッファの第1行のスロット0に置かれているループの第1反復の第1uopから開始してループが読み出されてゆくときの引き継ぎがすっきりする。
次に図6を参照すると、ループバッファの中へパックされているループの単一反復の1つの実施形態が示されている。ループは、本例では、7uopループとされ、それぞれのuopはループバッファ110の中に「ループ1」と標示されている。これはループの一例にすぎず、他のループは他の個数のuopを含んでいてもよいことを指摘しておく。更に、指摘しておくこととして、ループバッファ110はプロセッサパイプライン内の様々な場所の何れに置かれていてもよく、図3及び図4にはそれらの場所の2つの例が示されている。ループバッファ110は、6つのレーン(0−5と標示)を含んでいることが示されているが、他のループバッファは他の個数のレーンを有していてもよいことを指摘しておく。更に、ループバッファ110の「レーン」は、「スロット」又は「列」と呼称されることもあることを指摘しておく。
ループ1の最初の6つのuopは、ループバッファ110の第1行へ書き込まれている。後方分岐枝に対応している最後のuopは、ループバッファ110の第2行の第1エントリを埋めている。このループの場合、ループをプロセッサパイプラインの次段へディスパッチするには2サイクルかかることになり、平均サイクル当たりuop出力は3.5(2クロックサイクルで7uop)ということになる。これは、サイクル当たり6uopというサイクル当たり最大可能uop処理量より遙かに少ない。サイクル当たりuop処理量を改善するためには、ループ反復を1つより多くループバッファ110へ書き込んだ方がよく、それについて以下に更に詳細に説明してゆく。
他の実施形態では、ループバッファ110は、6つとは別の他の個数のレーンを含んでいてもよい。例えば、別の実施形態では、ループバッファ110は、8つのレーンを有していてもよい。この実施形態では、9uopのループなら、この9uopのループがループバッファ110からディスパッチされた場合、効率の悪いサイクル当たりuop処理量になってしまうことであろう。この例では、9つのuopが2クロックサイクルおきにディスパッチされるので、サイクル当たり命令は平均4.5となろう。これでは、この実施形態の8つというサイクル当たり最大可能uop処理量を遙かに下回ることになる。
様々な実施形態では、異なったフォーマットの命令が、ループバッファ110に格納されることもあろう。利用されている異なったフォーマットには、命令、命令オペレーション、プリデコーデッドuop、デコーデッドuop、uop、op、又は他のフォーマットが含まれよう。処理量を一般的に記述するのに、「サイクル当たり命令」、「サイクル当たり命令オペレーション」、及び「サイクル当たりuop」という用語が使用されているが、これらの用語は各種命令フォーマットの何れをも指すものと理解されたい。
次に図7を見ると、ループバッファの中へパックされているループの複数の反復の1つの実施形態が示されている。1つの実施形態では、ループは長さが7uopとされている。ループバッファ110へ書き込まれているループの第1反復は、ループのそれぞれのuopについて「ループ1」の標示が付されており、ループバッファ110内の第1行と第2行のレーン0の中に示されている。「ループ2」と標示されているループの第2反復は、ループの第1反復が終わったところから再び始めてループバッファ110へ書き込まれることになる。「ループ2」の第1uopは、同じ行の「ループ1」の最後のuopに隣接するエントリに入れられよう。また、ループの第2反復の最初の5つのuopは、ループバッファ110の第2行のレーン1−5へ書き込まれ、第2反復の最後の2つのuopは、ループバッファ110の第3行へ書き込まれることになる。このパターンは、ループバッファ110へ書き込まれるループの次の5つの反復についても継続する。ループバッファ110へ書き込まれているそれぞれのループ反復は、他のループ反復と同一である。換言すると、それぞれのループ反復は、ループバッファ110へ書き込まれている他のループ反復と全く同じuopを収容しており、他のループ反復のどれとも見分けがつかない。
図7に示されている様に、ループバッファ110は、16行のエントリを有しており、中間点112は第8行の後である。1つの実施形態では、ループの或る反復がループバッファ110へ書き込まれているとき、ループの最後のuop(即ち後方分岐枝)がループバッファ110へ書き込まれたら、そのときループバッファコントロールユニットは中間点112に達したかどうかをチェックして確かめてもよい。中間点112に達していたなら、その結果、ループの反復をそれ以上ループバッファ110へ書き込ませないようにしてもよい。中間点112に達していなければ、ループの反復がもう1つループバッファ110へ書き込まれることになる。
図7に示されている例では、プロセッサがループバッファモードにあるときのループバッファ110からの平均サイクル当たりuop出力は、大凡5.4サイクル当たりuop処理量(9サイクルで49uop)となろう。これは、図6に示されている例の、3.5uopという平均サイクル当たりuop処理量に比べると改善である。
次に図8を参照すると、ループの複数の反復をループバッファ110の中へ書き込む場合の別の実施形態が示されている。図7に示されている例に類似しているこの実施形態では、ループの複数の反復がループバッファ110へ書き込まれている。しかしながら、この実施形態では、ループ反復の終わりに達すると、或る別の条件がチェックされることになる。チェックされる条件は、ループ反復の最終uopがループバッファ110の最終レーン(即ちレーン5)へ書き込まれたかどうか、ということであってもよい。この条件に合致していれば、ループの反復のループバッファ110への書き込みは停止されることになろう。この条件に合致していなければ、中間点112に達しているかどうかが判定されてもよい。中間点112に達していれば、その結果、ループバッファ110への書き込みは停止されよう。中間点112に達していなければ、その結果、ループの反復がもう1つループバッファ110へ書き込まれることになろう。
これらの条件に基づき、7uopループの6つの反復が、ループバッファ110へ書き込まれてゆく。ループの第6反復がループへ書き込まれてしまったところで、当該第6反復の最後のuopは第7行のレーン5へ書き込まれている。従って、ループバッファ110からのサイクル当たりuop出力は最大化されており、よって反復がそれ以上ループバッファ110へ書き込まれる必要はない。書き込みは、中間点112にまだ達していないにもかかわらず停止されることになる。
他の実施形態では、反復をループバッファへ書き込むより前に、ループバッファへ書き込まれることになる反復の数が求められてもよいことを指摘しておく。例えば、ループの検出及び命令の監視には、ループの反復に含まれている命令又はuopの数を数えることが含まれていてもよい。加えて、ループバッファ内の利用可能な空間が、既知であるか又は求められてもよい。ループ反復と利用可能なバッファストレージのサイズに基づいて、どれだけの数の反復をループバッファへ書き込むかについて計算が行われてもよい。様々な実施形態では、書き込まれることになる反復の数は、バッファからの最大命令処理量が実現されるように選定されてもよい。他の実施形態では、どれだけの数のループ反復をバッファへ書き込むかに関し、追加の制約が設けられていてもよい。例えば、バッファの或る既定部分(例えば半分)より多くは書き込まない、とされていてもよい。数多くのその様な代わりのやり方が実施可能であり、企図されている。
これらの条件を利用することで、プロセッサがループバッファモードにあるときのループバッファ110からの高いサイクル当たりuop処理量を実現することができよう。他の実施形態では、他のサイズのループについて、これらの条件が利用されていてもよい。例えば、9uopのサイズを有するループであれば、結果的に、2つの反復がループバッファ110へ書き込まれることになる。ループバッファ110の最初の3行分が埋まったところで、9uopループの反復はそれ以上ループバッファ110へ書き込まれないようにしておく。こうすれば、サイクル当たり6uopという最大可能処理量を実現させることができよう。
他の実施形態では、ループの反復をもう1つループバッファ110へ書き込むべきか否かを判定するのに他の条件が利用されていてもよい。例えば、別の実施形態では、反復の最後のuopが行の最も右側2つのスロットのどちらかへ書き込まれれば、その結果、ループバッファ110への書き込みが終結されてもよい。更に別の実施形態では、ループ反復がループバッファ110へ書き込まれた後に処理量が計算され、次いで、当該処理量が閾値と比較されてもよい。処理量が閾値を上回っていれば、その結果、ループバッファ110への書き込みは終結されることになろう。前記処理量が閾値を下回っていれば、ループ反復がもう1つループバッファ110へ書き込まれることになろう。これら及び他の条件は、更に別の実施形態では、独立に使用されていてもよいし又は何れかの適したやり方で組み合わされていてもよい。
図9を参照すると、ループの複数の反復をループバッファにパックするための方法120の1つの実施形態が示されている。考察上、この実施形態の諸段階は逐次的に順を追って示されている。以下に説明されている方法の様々な実施形態では、記載されている要素の1つ又はそれ以上は、同時に遂行されてもよいし、示されている順序とは異なった順序で遂行されてもよいし、又はまるごと省略されてもよい、ということに留意されたい。更に、所望に応じて他の追加の要素が遂行されてもよい。
1つの実施形態では、ループ候補が命令ストリームの中に検出される(ブロック122)。次いで、ループバッファコントロールユニットが、当該ループ候補はループバッファリングのための判定基準に合致していると判定する(ブロック124)。ループバッファコントロールユニットは、次いで、当該ループ候補についてループバッファモードを開始する(ブロック126)。ループバッファモードが開始されると、ループ終結分枝uopがマークされて、それがループの終わりと識別されることになる。ループ終結分枝は、サブルーチンコールを除いた直進後方分岐枝(direct backward taken branch)と定義することができよう。更に、ループ終結分枝の後の次のuopであるループの最初のuopがループの始まりとしてマークされることになる。フェッチユニットのアライナはループ終結分枝の後にストールして、ループ内の最初のuopがループバッファの第1行のスロット0へ書き込まれるようにする(ブロック128)。
次に、ループの反復1つ分がループバッファへ書き込まれる(ブロック130)。ループの反復がループバッファへ書き込まれてゆくと、反復の終わりにループ終結分枝が検出される(ブロック132)。ループ終結分枝の検出に応えて、ループバッファコントロールユニットは、ループバッファが既に半分埋まっているかどうかをチェックして確認する(条件ブロック134)。1つの実施形態では、ループバッファコントロールユニットは、ループバッファに対する書き込みポインタを監視し、書き込みポインタがループバッファの中間点を通り越したかどうかを確認してもよい。
ループバッファが半分まで埋まっていない場合(条件ブロック134)、ループの反復がもう1つループバッファへ書き込まれる(ブロック130)。この反復について、ループの第1uop(即ちループの始まり)は、ループの先の反復のループ終結分枝の後の次の隣接するスロットへ書き込まれるものであり、当該スロットは、ループ終結分枝が行の最も右側のスロット以外の何れかのスロットに位置しているなら、ループバッファの同じ行ということになろう。これは、ループの第1反復がどの様にループバッファへ書き込まれるかとは対照をなす。第1反復については、アライナは、先の反復由来の終結分枝の後にストールして、第1反復の第1uopがループバッファの第1行の第1(又は最も左側)のスロットへ書き込まれるようにする。
ループバッファが半分より多く埋まっている場合(条件ブロック134)、ループバッファコントロールユニットは、ループの反復をそれ以上ループバッファへ書き込むことを打ち切るようにフロントエンドへ合図する(ブロック136)。ループの最後の反復について、フェッチユニットのアライナは、ループ終結分枝をディスパッチした後に停止を命ぜられてもよい。この様にすれば、プロセッサがループバッファモードへ移行したときのuopをループバッファからディスパッチする段階への引き継ぎがすっきりする。加えて、プロセッサがループバッファモードに入ると、命令待ち行列の中のuop及びプロセッサパイプラインのフロントエンドの更に上流の命令がフラッシュされてもよい。ブロック136の後、ループバッファは、ループの1つ又はそれ以上の反復を、プロセッサパイプラインの次段へディスパッチする(ブロック138)。ループがループバッファからディスパッチされている間、プロセッサのフロントエンドはシャットダウンされることになろう。
1つの実施形態では、ループバッファへ書き込まれてしまった行の数が格納されることになる。ループバッファコントロールユニットは、格納済みの有効行の数を使用して、ループバッファから読み出されるべき有効行がもう無い状態になるのは何時かを判定することができよう。例えば、uopの行がプロセッサパイプラインの次段へディスパッチされるとき、読み出しポインタは、ループバッファの行を進んでゆき、そうして格納済みの有効行の数によって指し示される通りにループバッファ内にそれ以上有効行が無くなった時点でリセットされてループバッファの一番上へ戻されるようになっていてもよい。
ブロック138の後、方法120は、ループが終結した時点で終わる。ループが終結した後、フロントエンドは引き返され、フェッチユニットは命令をプロセッサパイプラインの残部へ供給する。
次に図10を参照すると、システム140の1つの実施形態のブロック線図が示されている。示されている様に、システム140は、デスクトップコンピュータ150、ラップトップコンピュータ160、タブレットコンピュータ170、セルフォン180、又はそれ以外、のチップ、回路構成、構成要素、など、を表している。図示の実施形態では、システム140は、外部メモリ142へ連結されている(図1の)IC10という少なくとも1つのインスタンスを含んでいる。
IC10は、1つ又はそれ以上の周辺機器144及び外部メモリ142へ連結されている。IC10への供給電圧並びにメモリ142及び/又は周辺機器144への1つ又はそれ以上の供給電圧を供給する電源146も提供されている。様々な実施形態では、電源146はバッテリ(例えば、スマートフォン、ラップトップコンピュータ、又はタブレットコンピュータ内の充電式バッテリ)を表していよう。幾つかの実施形態では、IC10のインスタンスは1つより多く含まれていてもよい(同様に、1つより多い外部メモリ142が含まれていてもよい)。
メモリ142は、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレート(DDR、DDR2、DDR3、など)SDRAM(mDD3などの様なSDRAMのモバイルバージョン及び/又はLPDDR2などの様なSDRAMの低パワーバージョンを含む)、RAMBUS DRAM(RDRAM)、スタティックRAM(SRAM)、など、の様な何れの型式のメモリであってもよい。1つ又はそれ以上のメモリデバイスは、回路板へ連結されて、シングルインラインメモリモジュール(SIMM)、デュアルインラインメモリモジュール(DIMM)、など、の様なメモリモジュールを形成していてもよい。
周辺機器144は、システム140の型式に依存して、何れの所望の回路構成を含んでいてもよい。例えば、1つの実施形態では、周辺機器144には、wifi、ブルートゥース、セルラー、全地球測位システム、など、の様な、様々な型式のワイヤレス通信用のデバイスを含めることができる。周辺機器144には、RAMストレージ、ソリッドステートストレージ、又はディスクストレージ、を含め、追加のストレージも含まれる。周辺機器144には、タッチディスプレイスクリーンやマルチタッチディスプレイスクリーンを含むディスプレイスクリーン、キーボード又は他の入力デバイス、マイクロフォン、スピーカ、など、の様なユーザーインターフェースデバイスを含めることができる。
次に図11を見ると、(図1の)IC10に含まれている回路構成を表す1つ又はそれ以上のデータ構造を含んでいるコンピュータ可読媒体190のブロック線図の1つの実施形態が示されている。一般的にいうと、コンピュータ可読媒体190には、磁気式媒体又は光学式媒体である例えばディスクやCD−ROM又はDVD−ROM、RAM(例えば、SDRAM、RDRAM、SRAM、など)、ROM、など、の様な揮発性又は不揮発性のメモリ媒体、並びに、伝送媒体を介してアクセスできる媒体又はネットワーク及び/又はワヤレスリンクの様な通信媒体を介して送配される電気信号、電磁信号、又はデジタル信号の様な信号を介してアクセスできる媒体、の様な何れかの非一時的記憶媒体を含めることができる。
概して、コンピュータ可読媒体190上の回路構成の(単数又は複数の)データ構造は、プログラムによって読み出され、直接又は間接に、回路構成を備えるハードウェアを製作するのに使用されるものである。例えば、(単数又は複数の)データ構造は、ハードウェアの機能性についてのVerilog又はVHDLの様な高級設計言語(HDL)による1つ又はそれ以上の動作レベル記述又はレジスタ転送レベル(RTL)記述を含んでいてもよい。当該(単数又は複数の)記述は、合成ツールによって読み出され、当該合成ツールが記述を合成して、合成ライブラリからのゲートのリストを備える1つ又はそれ以上のネットリストを作製することであろう。(単数又は複数の)ネットリストは、回路構成を備えるハードウェアの機能性を表してもいるゲートのセットを備えている。(単数又は複数の)ネットリストは、次に、マスクに適用させる幾何学形状を記述する1つ又はそれ以上のデータセットを作製するように配置され、経路指定されることであろう。その後、マスクは、様々な半導体製作工程で回路構成に対応する単数又は複数の半導体回路を作製するのに使用されることになろう。代わりに、コンピュータ可読媒体230上の(単数又は複数の)データ構造は、所望に応じ、(単数又は複数の)ネットリスト(合成ライブラリ有り又は合成ライブラリ無し)であってもよいし、又は(単数又は複数の)データセットであってもよい。更に別の代わりのやり方では、データ構造は、スキマティックプログラムの出力又はそこから導出された(単数又は複数の)ネットリスト又は(単数又は複数の)データセットを備えていてもよい。
コンピュータ可読媒体190はIC10という表現を含んでいるが、他の実施形態は、IC10の何れかの部分又は複数部分の組合せ(例えば、ループバッファ、ループバッファコントロールユニット、アライナ)の表現を含んでいてもよい。
以上に説明されている実施形態は実施形の非限定的な例であることを強調しておかなくてはならない。以上の開示が十分に理解されたからには、当業者には数多くの変型及び修正が自明となることであろう。付随の特許請求の範囲は、その様な変型及び修正全てを網羅すると解釈されるべきものとする。
10 集積回路
12 プロセッサ複合体
14、16 中央処理ユニット(CPU)
18 レベル2(L2)キャッシュ
20 バスインターフェースユニット(BIU)
22 メモリコントローラ
24、26 メモリ物理インターフェース回路(PHY)
30 コア
32 フェッチ及びデコード(FED)ユニット
33 L1命令キャッシュ
34 アライナ
35 ループバッファ
36 マップ及びディスパッチユニット
38 リオーダバッファ(ROB)
40 メモリ管理ユニット(MMU)
42 コアインターフェースユニット(CIF)
44 実行ユニット
46 ロード−格納ユニット(LSU)
48 L1データキャッシュ
50 格納待ち行列
52 ロード待ち行列
60 フェッチフロントエンド
62 ループバッファ
64 ループバッファコントロールユニット
66 分枝追跡表
70A−F デコーダ
80 フェッチフロントエンド
82A−F デコーダ
84 ループバッファ
86 ループバッファコントロールユニット
88 分枝追跡表
100 アライナ
102 命令待ち行列
103 反復境界
104 命令クロスバー
110 ループバッファ
112 中間点
140 システム
142 外部メモリ
144 周辺機器
146 電源
150 デスクトップコンピュータ
160 ラップトップコンピュータ
170 タブレットコンピュータ
180 セルフォン
190 コンピュータ可読媒体

Claims (20)

  1. 複数の行を含むループバッファであって、各行は複数のエントリを含む、ループバッファと、
    前記ループバッファへ連結されているループバッファコントロールユニットであって、 命令ストリームの中にループを検出し、
    前記ループの第1反復を前記ループバッファへ書き込ませ、
    前記ループの最後の命令が前記ループバッファの行の最後のエントリに書き込まれなかったことを検出することに応えて、前記ループの第2反復を前記ループバッファへ書き込ませるように、
    構成されているループバッファコントロールユニットと、を備えている装置。
  2. 前記ループバッファコントロールユニットは、更に、
    前記ループバッファが少なくとも半分まで埋まっていないと判定したことに応えて、前記ループの反復をもう1つ前記ループバッファへ書き込ませるように、及び、
    前記ループバッファが少なくとも半分まで埋まっていると判定したことに応えて、前記ループの追加の反復が前記ループバッファへ書き込まれることを防ぐように、構成されている、請求項1に記載の装置。
  3. 前記ループバッファコントロールユニットは、前記ループバッファが半分まで埋まっているかどうかを、前記ループバッファに対する書き込みポインタの位置に基づいて判定するように構成されている、請求項2に記載の装置。
  4. 前記ループバッファコントロールユニットは、更に、
    前記最後の命令が前記ループバッファの行の最後のエントリへ書き込まれたと判定したことに応えて、前記ループの追加の反復が前記ループバッファへ書き込まれることを防ぐように、構成されている、請求項1に記載の装置。
  5. 前記ループバッファコントロールユニットは、前記ループバッファが少なくとも半分まで埋まっていないことを検出したことにさらに応えて、前記ループの第2反復を前記ループバッファに書き込むように構成されている、請求項1に記載の装置。
  6. 前記ループの第1反復の第1命令オペレーションを前記ループバッファの第1行の第1スロットへ書き込むように構成されているアライナを更に備えている、請求項1に記載の装置。
  7. 前記ループバッファは、同時に当該ループバッファの行のすべての命令オペレーションをディスパッチするように構成されている、請求項1に記載の装置。
  8. 複数の行を含むループバッファであって、各行は複数のエントリを含む、ループバッファと、
    前記ループバッファへ連結されているループバッファコントロールユニットであって、 命令ストリームの中にループを検出し、
    前記ループの第1反復を前記ループバッファへ書き込ませ、
    前記ループの最後の命令が前記ループバッファの行の最後のエントリに書き込まれなかったことを検出することに応えて、前記ループの第2反復を前記ループバッファへ書き込ませるように、
    構成されているループバッファコントロールユニットと、を備えているプロセッサにおいて、
    前記ループバッファが、
    前記ループの複数の反復を格納するように、及び、
    前記プロセッサがループバッファモードに入ったことに応えて、前記ループの前記複数の反復の命令をディスパッチするように、構成されている、プロセッサ。
  9. 前記ループの前記複数の反復のそれぞれの反復は同一である、請求項8に記載のプロセッサ。
  10. 前記ループの始まりを識別してマークするように構成されているフェッチユニットを更に備えている、請求項8に記載のプロセッサ。
  11. 前記フェッチユニットは、ループ反復境界を識別するように構成されているアライナを備えている、請求項10に記載のプロセッサ。
  12. 前記アライナは、更に、前記プロセッサがループバッファモードに入ったことに応えて、前記ループの先の反復の後方分岐枝を検出した後にストールを生じさせるように構成されている、請求項11に記載のプロセッサ。
  13. 前記アライナは、更に、前記ループの最終反復の後方分岐枝が前記ループバッファへ書き込まれたことを検出した後にストールを生じさせるように構成されている、請求項12に記載のプロセッサ。
  14. 前記アライナは、更に、
    前記ループの第1反復の後方分岐枝を、第1クロックサイクルの第1スロットへ割り当てるように、及び、
    前記ループの第2反復の第1命令オペレーションを、前記第1クロックサイクルの前記第1スロットに隣接している第2スロットへ割り当てるように、構成されている、請求項13に記載のプロセッサ。
  15. 命令ストリームの中にループを検出する段階と、
    前記ループの第1反復を複数の行を含むループバッファへ書き込む段階であって、各行は複数のエントリを含む、段階と、
    前記ループの最後の命令が前記ループバッファの行の最後のエントリへ書き込まれなかったことを検出することに応えて、前記ループの第2反復を前記ループバッファへ書き込む段階と、を備えている方法。
  16. 前記方法は、
    前記ループの前記第2反復のループ終結分枝を検出したことに応えて、前記ループバッファが半分まで埋まっているかどうかを判定する段階と、
    前記ループの前記第1反復及び前記第2反復を前記ループバッファからディスパッチする段階と、を更に備えている、請求項15に記載の方法。
  17. 前記方法は、前記ループの前記第1反復及び前記第2反復を前記ループバッファからディスパッチしたことに応えて、フェッチユニットをシャットダウンする段階を更に備えている、請求項16に記載の方法。
  18. 前記ループバッファに格納されている有効行の数に等しい第1値を格納する段階を更に備えている、請求項17に記載の方法。
  19. 前記ループの前記第1反復及び前記第2反復を前記ループバッファからディスパッチする段階は、読み出しポインタに前記ループバッファの前記第1値に等しい行数を進ませる段階を備えている、請求項18に記載の方法。
  20. 前記読み出しポインタが前記ループバッファの前記第1値に等しい行数を進んだことに応えて、前記読み出しポインタを前記ループバッファの第1行へリセットする段階を更に備えている、請求項19に記載の方法。
JP2013125335A 2012-06-15 2013-06-14 ループバッファのパッキング Expired - Fee Related JP5748800B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
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
US13/524,478 2012-06-15

Publications (2)

Publication Number Publication Date
JP2014002736A JP2014002736A (ja) 2014-01-09
JP5748800B2 true JP5748800B2 (ja) 2015-07-15

Family

ID=48607066

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013125335A Expired - Fee Related JP5748800B2 (ja) 2012-06-15 2013-06-14 ループバッファのパッキング

Country Status (8)

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

Families Citing this family (18)

* 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 富士通株式会社 演算処理装置及び演算処理装置の制御方法
TWI666930B (zh) * 2016-07-12 2019-07-21 聯發科技股份有限公司 一種使用環形緩衝器和競賽模式環形緩衝器訪問控制方案的視訊處理系統
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
US20240385841A1 (en) * 2023-05-18 2024-11-21 Qualcomm Incorporated Fetching beyond predicted-taken branch instructions in fetch bundles of processor-based devices
US12360765B2 (en) * 2023-10-20 2025-07-15 Qualcomm Incorporated Processing unit employing micro-operations (micro-ops) random access memory (RAM) as main program memory

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
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.
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
JP2001195302A (ja) 1999-11-30 2001-07-19 Texas Instr Inc <Ti> 命令ループ・バッファ
US6963965B1 (en) 1999-11-30 2005-11-08 Texas Instruments Incorporated Instruction-programmable processor with instruction loop cache
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 キャッシュメモリ装置
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 プロセッサ及びプロセッサの命令バッファ動作方法
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
CN102882845B (zh) * 2010-04-07 2016-07-13 苹果公司 实时或准实时流传输
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
EP2674857B1 (en) 2019-07-24
KR20130141396A (ko) 2013-12-26
JP2014002736A (ja) 2014-01-09
TW201411486A (zh) 2014-03-16
WO2013188123A3 (en) 2014-02-13
KR101496009B1 (ko) 2015-02-25
CN103513964B (zh) 2015-12-02
CN103513964A (zh) 2014-01-15
TWI503744B (zh) 2015-10-11
BR102013015262A2 (pt) 2015-07-14
EP2674857A1 (en) 2013-12-18
US9753733B2 (en) 2017-09-05
US20130339699A1 (en) 2013-12-19
WO2013188123A2 (en) 2013-12-19

Similar Documents

Publication Publication Date Title
JP5748800B2 (ja) ループバッファのパッキング
US9557999B2 (en) Loop buffer learning
US9471322B2 (en) Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
US9582276B2 (en) Processor and method for implementing barrier operation using speculative and architectural color values
US9448936B2 (en) Concurrent store and load operations
US9600289B2 (en) Load-store dependency predictor PC hashing
US9354886B2 (en) Maintaining the integrity of an execution return address stack
US8856447B2 (en) Converting memory accesses near barriers into prefetches
US20120185714A1 (en) Method, apparatus, and system for energy efficiency and energy conservation including code recirculation techniques
US9201658B2 (en) Branch predictor for wide issue, arbitrarily aligned fetch that can cross cache line boundaries
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
US12229557B2 (en) Atomic operation predictor to predict whether an atomic operation will complete successfully
US11422821B1 (en) Age tracking for independent pipelines

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140804

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141104

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150406

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150427

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150512

R150 Certificate of patent or registration of utility model

Ref document number: 5748800

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees