JP2011526045A - ループ制御システムおよび方法 - Google Patents

ループ制御システムおよび方法 Download PDF

Info

Publication number
JP2011526045A
JP2011526045A JP2011516552A JP2011516552A JP2011526045A JP 2011526045 A JP2011526045 A JP 2011526045A JP 2011516552 A JP2011516552 A JP 2011516552A JP 2011516552 A JP2011516552 A JP 2011516552A JP 2011526045 A JP2011526045 A JP 2011526045A
Authority
JP
Japan
Prior art keywords
loop
instruction
predicate
value
instructions
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.)
Granted
Application number
JP2011516552A
Other languages
English (en)
Other versions
JP5536052B2 (ja
JP2011526045A5 (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.)
Qualcomm Inc
Original Assignee
Qualcomm 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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2011526045A publication Critical patent/JP2011526045A/ja
Publication of JP2011526045A5 publication Critical patent/JP2011526045A5/ja
Application granted granted Critical
Publication of JP5536052B2 publication Critical patent/JP5536052B2/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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4452Software pipelining
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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, 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
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

ループ制御のシステムおよび方法を開示する。特定の実施形態では、ハードウェアループ制御論理回路が、プログラムループのループ終了インジケータを検出するための検出ユニットを含む。このハードウェアループ制御論理回路は、ループカウントをデクリメントし、述語トリガカウンタをデクリメントするためのデクリメントユニットも含む。このハードウェアループ制御論理回路は、その述語トリガカウンタを基準と比較して述語値をいつセットするのか決定するための比較ユニットをさらに含む。
【選択図】 図3

Description

本開示は、一般にループ制御のシステムおよび方法に関する。
技術の進歩は、より小型かつより高性能のコンピューティングデバイスをもたらした。例えば現在では、小型、軽量かつユーザが容易に持ち運べる、携帯無線電話、PDA(携帯情報端末)、ページングデバイスなどの無線コンピューティングデバイスを含む、様々なポータブルパーソナルコンピューティングデバイスが存在する。より詳細には、セルラー電話やIP電話などのポータブルコンピューティングデバイスは、音声およびデータパケットを無線ネットワークを介して伝達することができる。さらに、そうした多くのポータブル無線デバイスは他の種類のデバイスも組み込む。例えば、無線電話は、ディジタルスチルカメラ、ディジタルビデオカメラ、ディジタルレコーダ、およびオーディオファイルプレーヤを含むこともできる。さらに、そうした無線電話は、インターネットにアクセスするために使用することができるウェブブラウザアプリケーションなどのソフトウェアアプリケーションを含む、実行可能命令を処理することができる。そのため、これらの無線電話はかなりの計算能力を含むことができる。
ソフトウェアアプリケーション内で繰り返される実行可能命令は、ソフトウェアパイプライン化されたループとしてプロセッサによって実行することができ得る。ソフトウェアパイプライン化とは、プログラムループの様々な論理的反復の非依存命令をスケジューリングして同時に実行するための方法である。ループの様々な論理的反復の重複する命令は、効率的処理のための並列処理の量を増やす。例えば、第1のループ命令と第2のループ命令とを、無線移動体デバイスなどのコンピューティングデバイス内のプロセッサの別個の実行ユニットにおいて並列に実行することができ得、第1の命令は第1のループ反復に対応する一方、第2の命令は第2のループ反復に対応する。そうしたソフトウェアパイプライン化されたループはパイプライン化されていないループよりも効率的に実行することができ得るが、パイプラインを埋めるときの、命令間のデータ依存性に起因するデータハザードを防止するための追加命令(例えばプロログ命令)、およびパイプラインを空にするときのメモリアクセスハザードを防止するための追加命令(例えばエピログ命令)は、アプリケーションの実行に必要なメモリ量を増加させる可能性がある。そうした追加のメモリは、無線コンピューティングデバイスにおいて容易に使用可能ではない場合がある。
特定の実施形態において、ハードウェアループ制御論理回路を含むシステムを開示する。このハードウェアループ制御論理回路は、プログラムループのループ終了インジケータを検出するための検出ユニットと、ループカウントをデクリメントし、述語(predicate)トリガカウンタをデクリメントするためのデクリメントユニットと、その述語トリガカウンタを基準と比較して述語値をいつセットするのか決定するための比較ユニットとを含む。このシステムは、ハードウェアループ制御論理回路の実行をトリガする特殊命令を実行するプロセッサも含む。このシステムをハードウェアループ制御論理回路とともに使用することは、ソフトウェアパイプラインループをプロログ命令なしで実行できるようにし、それによりメモリの使用量は減る。
別の特定の実施形態において、述語トリガカウントを記憶するための述語カウントレジスタを含む機器を開示する。この機器は、プログラムループのループパラメータを初期化するための初期化論理回路も含む。この機器は、プログラムループのループ命令を実行し、ループ終了インジケータを含むパケットを実行するためのプロセッサを含む。この機器は、述語トリガカウントを修正し、プログラムループのループカウントを修正するための論理回路も含む。この機器は、述語トリガカウントを基準値と比較するための比較論理回路も含む。この機器は、その比較の結果に基づき、プログラムループの中の少なくとも1つの命令に影響を及ぼす述語の値を変えるための論理回路をさらに含む。
別の特定の実施形態において、ループ命令を処理する方法を開示する。この方法は、特殊レジスタ内でループパラメータを初期化することを含み、その特殊レジスタは述語トリガカウントを含む。この方法は、ループ命令を実行し、ループ終了インジケータを有するパケットを実行することも含む。この方法は、述語トリガカウントを修正し、ループカウントを修正することをさらに含む。述語トリガカウントが基準値に等しい場合、この方法は、ループ命令のうちの少なくとも1つに影響を及ぼす述語の値を変更することを含む。
別の特定の実施形態において、ループ内の1組の命令を処理する方法を開示する。この方法は、特定の種類のループ命令の実行時に述語値をセットする前に、実行するループの反復回数を指示するための述語トリガカウンタを自動的に初期化することを含む。この方法は、ループの反復中にその1組の命令を実行し、そのループのループ終了インジケータの検出時にループ制御ハードウェアを自動的にトリガして述語トリガカウンタを修正し、その述語トリガカウンタを基準と比較して述語値をいつセットするのか決定することも含む。その1組の命令の中の複数の命令のうちの少なくとも1つは、述語値に基づいて条件的に実行される。
開示する実施形態のうちの少なくとも1つが提供する、ある特定の利点は、符号サイズが小さくなること、より低い電力で動作すること、およびパイプライン化されたソフトウェアループとして実行される命令の処理がより高速になることである。以下の節、図面の簡単な説明、発明を実施するための形態、および特許請求の範囲を含む本出願の全体を検討した後、本開示の他の態様、利点、および特徴が明らかになろう。
ループ制御システムの、第1の説明のための実施形態のブロック図。 ループ制御システムの、第2の説明のための実施形態のブロック図。 ソフトウェアパイプライン化されたループの処理を示す概要図。 図1または図2のループ制御システムが実行することができ得るループ制御方法の、第1の説明のための実施形態の流れ図。 図1または図2のループ制御システムが実行することができ得るループ制御方法の、第2の説明のための実施形態の流れ図。 述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路を含む無線処理デバイスの、説明のための特定の実施形態のブロック図。
図1を参照すると、ループ制御システムの第1の説明のための実施形態が図示され、全体として100で示されている。このシステム100は、コンピュータ、ポータブル無線デバイス、無線電話、またはソフトウェア命令を実行する他の任意のデバイスの一部とすることができ得る。システム100は、ハードウェアループ制御論理回路104を備えるプロセッサ102を含む。
プロセッサ102は、ループ命令120を実行するように構成される。ループ命令120は、述語論理回路110を使用する少なくとも1つの条件的に実行されるループ命令122を含む。例えば、プロセッサ102は、述語論理回路110が真に評価される述語値を記憶するとき、条件的に実行されるループ命令122を実行することができ得、述語論理回路110が偽に評価される述語値を記憶するとき、条件的に実行されるループ命令122を実行しないことができ得る。ループ命令120を実行することは、例えばマルチメディアソフトウェアアプリケーションや、ディジタル信号処理演算などのための繰り返し演算を、プロセッサ102が効率的に実行することを可能にする。
ループ制御値106は、ハードウェアループ制御論理回路104にとって、および述語セット論理回路108にとってアクセス可能である。述語セット論理回路108は、述語論理回路110に結合される。特定の実施形態では、この述語論理回路110は、偽の値(例えば論理的「0」値)または真の値(例えば論理的「1」値)を有するデータビットを記憶するように構成される、ラッチもしくは他の記憶デバイスを含むことができ得る。ハードウェアループ制御論理回路104および述語セット論理回路108を使用することにより、ソフトウェアパイプライン化されたループをコンパクトな形で符号化することができ得、以下に記載するように、ソフトウェアパイプラインを初期化するために使用されるパイプライン化されたループステージを、システム100のハードウェアループ制御論理回路104と連動して動作する1つまたは複数の条件的に実行されるループ命令と置き換えることができ得る。
特定の実施形態では、ハードウェアループ制御論理回路104は、ループ命令120に対応するソフトウェアループの始まりを認識するように構成される回路を含む。プロセッサ102によるループ命令120の実行を初期化/制御するために、ループ制御値106を最初にセットし、修正するようにハードウェアループ制御論理回路104を構成することができ得る。具体的には、ハードウェアループ制御論理回路104は、ループ制御値106の述語カウンタ124を初期化するように構成される。述語カウンタ124に加え、ループ制御値106は、説明のための例としてループ開始アドレスやループ反復回数など、ループの演算を制御するための他の値を含むことができ得る。
ハードウェアループ制御論理回路104により、プロセッサ102におけるループ命令120を含む、ソフトウェアパイプライン化されたループを埋めるための処理サイクル数に一致する値に述語カウンタ124を初期化することができ得る。概して、プロセッサ102は、それぞれのループ反復を、複数の実行ユニット(不図示)において同時実行でき得る複数の連続するパイプラインステージとして、パイプライン化された方法で実行することができ得る。例えば、プロセッサ102が、3つのパイプラインステージの深さを有するソフトウェアパイプライン化されたループにおいてループ命令120を実行するとき、述語カウンタ124を3の値に初期化することができ得る。図3に、3つのパイプラインステージの深さを有するソフトウェアパイプライン化されたループの一例を示す。
ハードウェアループ制御論理回路104は、プロセッサ102におけるループの反復状態を検出し、ループの反復ごとに述語カウンタ124を修正するようにさらに構成することができ得る。例えば、述語カウンタ124は、述語カウンタ124の値が基準値に達するまで、ハードウェアループ制御論理回路104に応答して連続的にデクリメントされる初期化値を保持することができ得る。ソフトウェアパイプライン化されたループが完全にパイプライン化され、ソフトウェアループのすべての命令が、パイプラインの依存性により無効ではないデータを処理するとき、この基準値は述語カウンタ124の値に一致することができ得る。例えば、あるループ反復の中で、前の演算によってもたらされるデータを後の演算が使用し、前の演算を第1のパイプラインステージで行い、その第1のパイプラインステージと同時に実行される後のパイプラインステージで後の演算を行うようループをパイプライン化する場合、第1のパイプラインステージにおいてもたらされるデータに対する後のパイプラインステージの依存性は、第1のパイプラインステージにおいてもたらされるデータが後のパイプラインステージにおいて受け取られるまで、後のパイプラインステージに無効なデータを処理させる。説明すると、プロセッサはループ命令「A=A+1」および「Aをメモリに記憶する」を別個の実行ユニットで実行することができるが、最初の命令「A=A+1」からのデータを受け取るまで、命令「Aをメモリに記憶する」は無効な結果を記憶する。
述語セット論理回路108は、述語カウンタ124の値を検出することに応答して、述語論理回路110において記憶する述語値をセットするように構成することができ得る。特定の実施形態では、述語セット論理回路108は、述語カウンタ124の値と基準値との間の比較を行うための比較論理回路(不図示)を含む。述語カウンタ124における値が基準値に等しい値を有すると検出される場合、述語論理回路110に記憶される述語値を自動的にセットするよう、述語セット論理回路108を構成することができ得る。例えば、述語論理回路110を偽の状態で記憶するよう初期化することができ得、述語カウンタ124をソフトウェアパイプライン化されたループのパイプラインステージの数に初期化することができ得、基準値をゼロとすることができ得る。述語カウンタ124がゼロまでデクリメントされるとき、述語セット論理回路108は、述語論理回路110の述語値を真の状態に自動的に変更することができ得る。述語論理回路110において記憶される述語値の真の状態は、条件的に実行されるループ命令122に与えられ、プロセッサ102におけるループ命令120の処理に影響を及ぼすことができ得る。別の例として、述語カウンタ124をゼロにセットすることができ得、基準値をソフトウェアパイプライン化されたループのパイプラインステージの数にセットすることができ得、それぞれのループ反復に応答して述語カウンタ124をインクリメントすることができ得る。
したがって、プロセッサ102におけるループの初期化およびループの制御は、ハードウェアループ制御論理回路104、ループ制御値106を記憶し述語セット論理回路108を実装するためのラッチまたは他のデバイスを含むハードウェア要素によって実行することができ得る。ソフトウェアパイプライン化されたループのためのループ制御論理を、ハードウェアを使用して実装することにより、ソフトウェアループをコンパクトな形で符号化することができ得、プロログと呼ばれる、ソフトウェアパイプラインを初期化するために使用されるパイプライン化されたループステージを、システム100のハードウェアと連動して動作する1つまたは複数の条件的に実行されるループ命令122と置き換えることができ得る。
図2を参照すると、ループ制御システムの第2の説明のための実施形態が図示され、全体として200で示されている。このシステム200は、プロセッサ202、ハードウェアループ制御論理回路204、およびループパラメータ制御レジスタ206を含む。ハードウェアループ制御論理回路204は、図1に示すハードウェアループ制御論理回路104に相当することができ得る。ループパラメータ制御レジスタ206に記憶されるデータは、図1に示すループ制御値106に相当することができ得、プロセッサ202は図1に示すプロセッサ102に相当することができ得る。
特定の実施形態では、ループパラメータ制御レジスタ206は、プロセッサ202において実行されようとするソフトウェアパイプライン化されたループの開始アドレスを表すデータを記憶する、開始アドレスレジスタ212を含む。このループパラメータ制御レジスタ206は、ソフトウェアパイプライン化されたループに対応するループカウント値を記憶する、ループカウントレジスタ214も含む。ループパラメータ制御レジスタ206は、プロセッサ202において実行されようとするソフトウェアパイプライン化されたループに関連する述語トリガカウント値を記憶する、述語トリガカウントレジスタ216をさらに含む。概して、このループパラメータ制御レジスタ206は、ハードウェア制御論理回路204から受け取る制御入力に応答する。
特定の実施形態では、ハードウェアループ制御論理回路204は、初期化ユニット220、デクリメントユニット222、比較ユニット230、検出ユニット228、および述語変更ユニット234を含む。初期化ユニット220は、プロセッサ202において実行される特殊命令240に応答することができ得る。初期化ユニット220は、開始アドレスを決定し、開始アドレスレジスタ212の値をセットするように構成することができ得る。初期化ユニット220は、デクリメントユニット222のループカウンタ224の初期値をセットするようにさらに構成することができ得る。初期化ユニット220は、デクリメントユニット222の述語トリガカウンタ226の初期値をセットするようにも構成することができ得る。
特定の実施形態では、デクリメントユニット222は、プロセッサ202においてループ反復が完了したことを指示する検出ユニット228からの制御入力に応じて、ループカウンタ224および述語トリガカウンタ226の値をデクリメントするよう、検出ユニット228に応答する。具体的には、ループカウンタ224は、プロセッサ202において実行されようとするループ命令250の総反復回数に初期化することができ得、検出ユニット228において検出されるそれぞれのループ反復に応答してデクリメントすることができ得る。さらに、順次的パイプラインステージを、前のステージからの有効なデータを使用して実行するよう、述語トリガカウンタ226を、ソフトウェアパイプライン化されたループのパイプラインを完全に埋めるために必要とされる実行サイクル数に一致する値に初期化することができ得る。述語トリガカウンタ226は、検出ユニット228によって検出されるループ反復に応答してデクリメントすることができ得る。ループカウンタ224および述語トリガカウンタ226は、ループカウントレジスタ214および述語トリガカウントレジスタ216それぞれに値を書き込むことができ得、デクリメントユニット222の演算に応答してそれぞれの値を更新することができ得る。
特定の実施形態では、検出ユニット228は、プロセッサ202におけるループ終了状態を検出するように構成される。例えば、検出ユニット228は、ループ終了インジケータを伴うVLIW(超長命令語)パケット254をプロセッサ202において構文解析するための、構文解析論理回路を含むことができ得る。特定の実施形態では、このループ終了インジケータは、VLIWパケット254内の規定値を有する所定のビットフィールドを含む。ループ終了インジケータを検出すると、検出ユニット228はデクリメントユニット222に制御入力を与えて、カウンタ224およびカウンタ226のうちの一方または両方をデクリメントする。
特定の実施形態では、比較ユニット230は、述語トリガカウントレジスタ216に記憶される値に応答する。この比較ユニット230は、述語トリガカウントレジスタ216の値を基準値と比較し、その比較の出力を述語変更ユニット234に与えるように構成される比較器232を含むことができ得る。例えば、特定の実施形態では、基準値をゼロとすることができ得、述語トリガカウントレジスタ216がゼロ値または負の値を有するまで述語変更ユニット234にゼロ値出力を与えるよう、比較ユニット230を構成することができ得る。特定の実施形態では、比較器232は、述語トリガカウントレジスタ216などを介し、述語トリガカウンタ226の1値から0値への遷移を自動的に識別するように構成される。
特定の実施形態では、述語変更ユニット234は、述語論理回路210に記憶される述語値をセットしまたはリセットするための、比較ユニット230から受け取る制御信号に応答する。例えば、この述語変更ユニット234は、述語論理回路210に記憶される述語値を偽の状態に初期化するように構成することができ得る。述語変更ユニット234は、述語トリガカウントレジスタ216の値が基準値に等しいことを指示する制御入力を比較ユニット230から受け取ると、述語論理回路210の述語値を真の値にセットすることができ得る。述語変更ユニット234は、ループ命令を実行する前に述語論理回路210に記憶されている述語値をクリアするために、初期化ユニット220に応答することもでき得る。
特定の実施形態では、述語論理回路210は、論理的な真の値または偽の値を記憶するように構成される1つまたは複数のハードウェアコンポーネントを含むことができ得る。この述語論理回路210は、ループ命令250を実行することに関連して使用されるプロセッサ202にとってアクセス可能とすることができ得る。
特定の実施形態では、プロセッサ202は、ソフトウェアパイプライン化されたループに関連する命令を受け取り、実行するように構成される。具体的には、プロセッサ202は、初期化値を指定することができ得る特殊命令240を実行し、後続のソフトウェアパイプライン化されたループに関連する値を制御するように構成される。この特殊命令240の初期化値および制御値は、ハードウェアループ制御論理回路204によって検出し、またはハードウェアループ制御論理回路204に与えることができ得る。
さらに、プロセッサ202は、ループ命令250をソフトウェアパイプライン化されたループとして受け取り、実行するように構成される。例えば、プロセッサ202は、プロセッサ202の複数の並列実行ユニットなどにおいて、ループ命令250のうちの1つまたは複数を並列に実行するように構成することができ得る。さらに、プロセッサ202は、ループ命令250の単一の反復をプロセッサ202における様々な順次的パイプラインステージで実行でき得るよう、ループ命令250をソフトウェアパイプライン化された命令として実行することができ得る。
特定の実施形態では、ループ命令250は、少なくとも1つの条件的に実行されるループ命令252を含む。この少なくとも1つの条件的に実行されるループ命令252は、実行条件を決定するために述語論理回路210に記憶される述語値に応答する。特定の実施形態では、この条件的に実行されるループ命令252は、述語論理回路210における述語値に基づいて条件的にデータを記憶し、そのためその述語値が「真」にセットされる前に計算される値は記憶されない。例えば、この条件的に実行されるループ命令252は、現在のループ命令250の反復において前に実行された計算に基づいて、出力レジスタ(不図示)などのメモリにデータを書き込むための書き込みコマンドを含むことができ得る。ループが完全にパイプライン化される前にこの条件的に実行されるループ命令252を実行することは、それより前の計算によって生成されるデータを受け取る前に書き込みを行うとき、無効なデータをメモリに書き込むことになる。したがって、条件的に実行されるループ命令252を実行することは、述語論理回路210に記憶される述語値を必要条件とすることができ得、この述語論理回路210に記憶される述語値は、ループ命令250に対応するソフトウェアパイプライン化されたループの状態を指示する。説明すると、プロセッサ202はループ命令「A=A+1」および「Aをメモリに記憶する」を実行することができるが、最初の命令「A=A+1」からのデータを受け取るまで、命令「Aをメモリに記憶する」は無効な結果を記憶する。したがって、命令「Aをメモリに記憶する」は、当初「偽」にセットされ、最初の命令「A=A+1」を完了したときに「真」に変更される述語値に基づいて条件的に実行することができ得る。
図3を参照すると、ソフトウェアパイプライン化されたループを処理する特定の説明のための実施形態が図示され、全体として300で示されている。表現する命令パイプラインステージ302、304、306、および308は、ソフトウェアパイプライン化されたループのパイプラインステージを表す。述語値310は、「P3」と表し、命令パイプラインステージ302〜308で実行される命令のうちの1つまたは複数によってアクセスすることができ得る述語の値を示す。ハードウェア述語ループカウンタ312は、ソフトウェアパイプライン化されたループに対応するカウントダウン値を示す。命令パイプラインステージ302〜308のそれぞれ、述語値310、およびハードウェア述語ループカウンタ312に関連する値を、ループの開始期間におけるクロックサイクル1で始まり、後の期間におけるクロックサイクル23に進む連続したクロックサイクルに関して図示する。特定の実施形態では、それぞれのクロックサイクルは、パイプライン化されたプロセッサにおける実行サイクルに対応する。
説明のための実施形態では、このシステム300は、図1に示すプロセッサ102においてループ命令120を実行することを表し、述語値310は述語論理回路110に記憶される述語値を反映し、ハードウェア述語ループカウンタ312は述語カウンタ124に相当する。別の説明のための実施形態では、このシステム300は、図2に示すプロセッサ202においてループ命令250を実行することを表し、述語値310は述語論理回路210に記憶される述語値に相当し、ハードウェア述語ループカウンタ312は、述語トリガカウントレジスタ216に記憶される述語トリガカウンタ226の出力に相当する。
特定の実施形態では、ソフトウェアパイプライン化されたループは、ループ初期化命令330として分解図で示す特殊命令によって開始される。このループ初期化命令330は、spNLoopの形式を有する命令名334を含み、ただし「N」は3の値を有する。ループ初期化命令330は、プログラムループセットアップ情報を含むデータフィールドを含む。例えば、ループ初期化命令330は、ソフトウェアループの開始アドレスに対応する第1のデータフィールド336を含む。ループ初期化命令330は、実行されるループの反復回数を指示するループカウントに対応する第2のデータフィールド338も有する。このループ初期化命令330は、プロセッサによって実行されるとき、述語値310に対応する述語P3 332の値など、述語の初期化に対応する初期値を返すことができ得る。
したがって、ループ初期化命令330は、ループの命令の開始アドレス、そのループの反復回数を指示することができ得、名前334の中の「N」の値により、ハードウェア述語ループカウンタ312の初期値をさらに指示することができ得る。図示する実施形態では、名前sp3loopは、ハードウェア述語ループカウンタ312における3の初期値を指示する。ハードウェア述語ループカウンタ312の他の初期値を指示するために、他の「N」の値を使用することができ得る。説明のための例として、「sp1Loop」は1の初期値を指示することができ得、「sp2Loop」は2の初期値を指示することができ得る。ループが十分にパイプライン化されるまで、条件的演算が実行されることを防ぐために、ハードウェア述語ループカウンタ312の初期値をセットすることができ得る。特定の実施形態では、「N」は4より小さい正の整数とすることができ得、述語値310を変更する前に実行するプログラムループのプロログカウントまたはループ数を指示することができ得る。
ソフトウェアパイプライン化されたループ初期化命令330を処理した後、A、B、C、およびDとラベル付けした命令を有するVLIWパケットを含むものとして図示する、ソフトウェアパイプライン化されたループが開始する。これらの命令A、B、C、およびDは、単一のプロセッサの複数の実行ユニットにおいてなど、プロセッサにおいてそれぞれ並列に実行することができ得る。さらに、これらの命令A、B、C、およびDは、命令Bが命令Aによって生成されるデータを使用することができ得るという点で順次的であり得る。同様に、命令Cは、命令A、命令B、またはその任意の組合せによって生成されるデータを使用することができ得る。さらに、命令Dは、命令A、B、C、またはそれらの任意の組合せのいずれかによって生成されるデータを使用することができ得る。命令Dは、個々のループ反復の出力を示すデータをメモリに書き込むことができ得る。例えば、命令Dは、演算A、B、およびCそれぞれの結果を使用して計算を行うことができ得、その結果生じる値を出力レジスタに記憶することができ得る。したがって、命令Dへの入力が有効な値で構成されることを確実にするために、命令A、B、およびCのそれぞれが命令Dの前に順次的に実行されるよう、ソフトウェアパイプライン化されたループが完全にパイプライン化されるまで命令Dを実行すべきではない。ソフトウェアパイプラインが完全に埋められる前に順次的に実行することができ得る命令を、全体としてプロログ320として示す。パイプラインが満杯の、ソフトウェアパイプラインループの実行部分をカーネル322として示す。最初の命令の最終実行を完了したが、他のパイプライン命令がまだ実行されていないソフトウェアパイプラインループの部分を、全体としてエピログ324と呼ぶ。
図示のように、クロックサイクル1で、「3」の初期値をハードウェア述語ループカウンタ312において記憶する。同様に、述語値P3 310を偽の値に初期化する。このソフトウェアループは、ループの最初の反復のための命令Aを実行することで開始する。命令B、C、およびDもAに並列に実行することができ得、カーネル部分322において実行されるが、命令B、C、およびDは前の命令からのデータ出力に依拠し得るので、クロックサイクル1での命令B、C、およびDの結果は無効であり得る。さらに、命令Dがメモリにデータを記憶するための書き込み命令を含む場合、書き込もうとするデータが、最初のサイクルの命令A、B、およびCの出力を示す有効なデータであるまで、命令Dは実行すべきではない。したがって命令Dは、特定のクロックサイクルにおいてこの命令を実行しないことを示すパイプラインステージの陰影として図示する、述語値310に基づいて条件的に実行することができ得る。述語値310が偽であるので、第4の命令パイプラインステージ308における条件的書き込み命令Dは実行されない。
クロックサイクル2に進むと、命令Bが命令Aから出力を受け取り、B(1)として図示するループの最初の反復にわたり実行される。同様に、命令Aが、A(2)として図示するループの2番目の反復に関連するデータを使用して実行される。命令CおよびDは実行することができ得るが、前の命令に対するデータ依存性のため、命令CおよびDそれぞれの入力値および必然的に出力は未定義であり得る。図示のように、クロックサイクル2においてハードウェア述語ループカウンタが「3」の値から「2」の値にデクリメントされ、述語値310は偽のままである。述語値310が偽なので、第4の命令パイプラインステージ308における条件的書き込み命令Dは実行されない。
クロックサイクル3に進むと、第3の命令パイプラインステージ306における命令Cが、ループの最初の反復に対応して実行される。命令Bが、ループの2番目の反復に対応する第2の命令パイプラインステージ304において実行され、命令Aが、ループの3番目の反復に対応する第1の命令パイプラインステージ302において実行される。ハードウェア述語ループカウンタ312が「2」の値から「1」の値にデクリメントされ、述語値310は偽のままである。述語値310が偽なので、条件的書き込み命令Dは実行されない。
クロックサイクル4において、このソフトウェアループのプロログ部分320が終了し、カーネル部分322が開始している。概して、このカーネル部分322ではソフトウェアパイプラインが埋められており、命令パイプラインステージ302〜308のそれぞれが有効なデータに対して演算を行う。ハードウェア述語ループカウンタ312は、パイプラインが満杯であり、プロログステージ302が終了したことを示す値「0」にデクリメントされる。ハードウェア述語ループカウンタ312が「0」に等しくなることに応答して、述語値310が真の状態にセットされる。特定の実施形態では、述語値310は、図2に示す比較器232など、述語ループカウンタ312の値を基準値と比較するように構成されるハードウェア論理回路によってセットされる。
クロックサイクル4からクロックサイクル20まで、このループは実行のカーネル部分322にとどまり、このカーネル部分322ではパイプラインは満杯のままであり、すべてのパイプラインステージ302〜308が、命令間のデータ依存性に適合するために命令を順番に実行する。述語値310が真に評価されるので、命令Dを含むすべての命令が、クロックサイクル4からクロックサイクル20を通して続く間に実行される。クロックサイクル21においてエピログ部分324が開始し、このエピログ部分324では、第1のパイプラインステージ302が全20のループ反復にわたる命令Aの実行を完了しているが、残りのパイプラインステージ304、306、および308は、ソフトウェアループの前の反復に関連する命令を処理し続ける。例えば、クロックサイクル21において、命令Bの実行は反復20に対応し、命令Cは反復19に対応し、命令Dは反復18に対応する。したがって、クロックサイクル21では、命令B、C、およびDは実行されるが命令Aは実行されない。クロックサイクル22では、命令CおよびDは実行されるが、命令AおよびBは実行されない。クロックサイクル23において、命令Dを実行してこのループの最後の反復を完了する。
図示のように、プロログ部分320およびカーネル部分322は、命令A、B、C、およびDを含む単一のVLIWパケットを使用して実行することができ得、命令Dの実行は、述語値P3 310に基づいて条件的であり、「{A,B,C,if(P3)D}:endloop」として示されるループ終了インジケータを含む。したがって、カーネルコード(すなわち命令A、B、C、およびDを含むVLIWパケット)は、プロログ部分320とカーネル部分322との両方において実行される。エピログ部分324の間、パイプラインは空になっていくため、{NOP,B,C,D}、{NOP,NOP,C,D}、{NOP,NOP,NOP,D}などのエピログVLIWパケットを使用することができ得、ただしNOPは特定の実行ユニットにおいて演算しないことを指示する。そうしたエピログ命令は、前のパイプライン命令が、最後のループ反復を超えて実行されるとき、メモリの許可されていない部分にアクセスしないことを確実にする。しかし、別の実施形態では、クロックサイクル21、22、および23において命令Aによって安全に実行することができ得る追加のメモリ読み取り操作など、ループ境界の外部で1つまたは複数の入力データソースに安全にアクセスでき得るとき、エピログ部分322が代わりにカーネル命令を実行することができ得る。
プロログ部分320およびカーネル部分322にわたり単一のVLIWパケットを使用することは、パイプラインを埋めるために特殊プロログ命令を実行する場合より少ないメモリを使用してソフトウェアループを実行することを可能にする。ハードウェア述語ループカウンタを、プロログ部分320の間は非ゼロ値に、およびループが完全にパイプライン化されるカーネル部分322ではゼロ値に一致するよう初期化/デクリメントすることにより、命令Dなどの条件的に実行されるデータ依存命令の実行をパイプラインが満杯のカーネルに制限するよう、述語値310をセットすることができ得る。そうしたソフトウェアパイプライン化されたループ処理は、図1のプロセッサ102とともに述語論理回路110および述語カウンタ124を使用して実行することができ得、または図2に示すプロセッサ202とともに述語論理回路210、述語トリガカウンタ226、および述語トリガカウントレジスタ216を使用することにより実行することができ得る。
図4を参照すると、ループ制御方法の第1の説明のための実施形態の流れ図が図示され、全体として400で示されている。特定の実施形態では、ループ内の1組の命令を処理するこの方法400は、図1および図2に示すシステムのうちの1つまたは複数を使用して実行することができ得る。402で、特定の種類のループ命令の実行時に述語値をセットする前に、ループの反復回数を指示するための述語トリガカウンタを自動的に初期化する。この1組の命令はソフトウェアパイプライン化されたループとして実行することができ得、述語トリガカウンタは、そのソフトウェアパイプライン化されたループの、パイプラインステージの数に基づくことができ得る。説明のための実施形態では、特定の種類のループ命令は、図3に示すループ初期化命令330である。
404に移ると、ループの反復中にその1組の命令を実行する。その1組の命令の中の複数の命令のうちの少なくとも1つは、述語値に基づいて条件的に実行される。例えば、条件的に実行される1組の命令の中の複数の命令のうちの少なくとも1つは、述語値に基づいて条件的に出力レジスタにデータを書き込むことができ得る。
406に進むと、ループのループ終了インジケータの検出時に、述語トリガカウンタを修正するループ制御ハードウェアを自動的にトリガする。例えばこのループ制御ハードウェアは、ループ終了インジケータを検出することに応答して、述語トリガカウンタをデクリメントすることができ得る。408に進むと、ループのループ終了インジケータの検出時に、述語値をいつセットするのか決定するために、述語トリガカウンタを基準と比較する。特定の実施形態では、この基準はゼロ値である。
判定410において、述語トリガカウンタが基準に等しいかどうかについて判定を行う。述語トリガカウンタが基準に等しくない場合、処理は、その1組の命令を次のループ反復中に実行する404において続行する。述語トリガカウンタが基準に等しい場合、412で述語値をセットし、処理は、その1組の命令を次のループ反復中に実行する404に戻る。
したがって、条件的に実行される命令を実行することは、述語トリガカウンタを初期化し、述語トリガカウンタと基準とを比較することに応じて述語をセットすることによって制御することができ得る。したがって、図3に示すように、別個のプロログ命令およびカーネル命令なしでソフトウェアパイプライン化されたループを実行することが可能にされ、図1および図2に示すシステムを使用して実行することができ得る。
図5を参照すると、ループ制御方法の第2の説明のための実施形態の流れ図が図示され、全体として500で示されている。特定の実施形態では、ループ命令を処理するこの方法500は、図1および図2に示すシステムのうちの1つまたは複数を使用して実行することができ得る。502において、述語トリガカウントを含む特殊レジスタ内でループパラメータを初期化する。特定の実施形態では、述語値が偽の状態に初期化され、述語トリガカウントは、ソフトウェアパイプライン化されたループのパイプラインの深さに対応する。
504に進み、ループ命令を実行する。特定の実施形態では、このループ命令はカーネルコードを含むがプロログ命令は含まない。そのカーネルコードは、ソフトウェアパイプライン化されたループの1組の命令を含むことができ得る。506に進み、ループ終了インジケータを有する命令を実行する。508に移り、述語トリガカウントを修正し、ループカウントを修正する。510に進み、述語トリガカウントが基準値に等しい場合、ループ命令のうちの少なくとも1つに影響を及ぼす述語の値を変更する。
例えば、このループ命令は、述語に基づいて条件的に実行される少なくとも1つの命令を含むことができ得る。述語トリガカウンタがソフトウェアパイプラインの深さに初期化されるとき、基準値「0」に等しくなるよう述語トリガカウントをデクリメントすることは、ソフトウェアパイプライン化されたループのプロログ部分の終わり、およびパイプラインが埋まっているそのループのカーネル部分の始まりを示すことができ得る。したがって、述語に基づいて実行される条件的に実行される命令は、パイプラインが埋められるまで実行しなくてよい。よって、パイプラインが十分に埋められる前に有害な結果を引き起こす可能性がある命令の実行を防止するために述語が使用される場合、カーネル命令をプロログにおいて実行することもでき得る。
図1および図2に示すシステムは、方法500を実行することができ得るシステムの例を与える。例えば、ループパラメータは、図2のループパラメータ制御レジスタ206内で初期化することができ得、ループカウントおよび述語トリガカウントは、デクリメントユニット222によってデクリメントすることができ得、述語210の値は、図2の述語変更ユニット234によって変更することができ得る。
図6を参照すると、述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路664を含む無線処理デバイスの、説明のための特定の実施形態のブロック図が図示され、全体として600で示されている。このデバイス600は、メモリ632に結合される、ディジタル信号プロセッサ(DSP)610などのプロセッサを含む。述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路664は、図1および図2に示すシステムのうちの1つまたは複数を含むことができ得、図3〜5のうちの1つもしくは複数またはそれらの任意の組合せに従って動作することができ得る。説明のための実施形態では、このシステム600は無線電話である。
図6は、ディジタル信号プロセッサ610およびディスプレイ628に結合される、ディスプレイコントローラ626も示す。ディジタル信号プロセッサ610には、CODEC(符号器/復号器)634も結合することができる。そのCODEC634には、スピーカ636およびマイクロフォン638を結合することができる。モデム640を、ディジタル信号プロセッサ610に結合し、さらに無線アンテナ642に結合することができる。
特定の実施形態では、DSP610、ディスプレイコントローラ626、メモリ632、CODEC634、およびモデム640が、システムインパッケージまたはシステムオンチップデバイス622に含まれる。特定の実施形態では、そのオンチップシステム622には、入力デバイス630および電源644が結合される。さらに、特定の実施形態では、図6に示すように、ディスプレイ628、入力デバイス630、スピーカ636、マイクロフォン638、無線アンテナ642、および電源644が、システムオンチップデバイス622にとって外部にある。しかし、そのそれぞれは、インターフェースやコントローラなど、システムオンチップデバイス622のコンポーネントに結合することができる。
演算中、ディジタル信号プロセッサ610において効率的なソフトウェアパイプライン化されたループ処理を可能にするために、述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理664を使用することができ得る。例えば、この述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路664は、ディジタル信号プロセッサ610においてループ初期化命令、ループ終了命令、またはその両方を検出するための回路もしくはデバイスを含むことができ得、プロログカウンタなどの1つまたは複数のループカウンタ、1つまたは複数の述語、またはそれらの任意の組合せの値を制御することにより、ディジタル信号プロセッサ610におけるループ演算を制御するように動作することができ得る。ディジタル信号プロセッサ610に含まれるものとして図示するが、この述語カウンタを備えるソフトウェアパイプライン化されたループハードウェア制御論理回路664は、システムオンチップデバイス622の制御部などにある1個または複数個のプロセッサと分けることができ得る。概して、ソフトウェアパイプライン化されたループは、同一ソフトウェアループ内の命令を1つまたは複数の並列パイプラインにわたって実行でき得るようにする、1つまたは複数の並列パイプラインを有する任意のプロセッサで実施することができ得る。さらに、デバイス600は、PDA(携帯情報端末)、オーディオプレーヤ、IP(インターネットプロトコル)電話、セルラー電話、携帯電話、ラップトップコンピュータ、ノートブックコンピュータ、テンプレートコンピュータ、ソフトウェアパイプライン化されたループを処理することができ得る他の任意のシステム、またはそれらの任意の組合せなど、任意の無線処理デバイスであり得ることが理解されよう。
本明細書で開示した実施形態に関連して記載した様々な説明のための論理ブロック、構成、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装できることを当業者はさらに理解されよう。このハードウェアとソフトウェアとの互換性を明瞭に示すために、様々な説明のためのコンポーネント、ブロック、構成、モジュール、回路、およびステップを概してそれらの機能の観点から上述してきた。そうした機能をハードウェアとして実装するのかソフトウェアとして実装するのかは、個々の応用例およびシステム全体に課せられる設計制約によって決まる。当業者は、記載した機能を個々の応用例ごとに様々な方法で実装することができ得るが、そうした実装の決定は本開示の範囲からの逸脱を生じさせるものとして解釈すべきでない。
本明細書で開示した実施形態に関連して記載した方法またはアルゴリズムのステップは、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、もしくはその2つの組合せで直接実施することができ得る。ソフトウェアモジュールは、RAM(ランダムアクセスメモリ)、フラッシュメモリ、ROM(読み取り専用メモリ)、PROM(プログラム可能読み取り専用メモリ)、EPROM(消去可能プログラム可能読み取り専用メモリ)、EEPROM(電気的消去可能プログラム可能読み取り専用メモリ)、レジスタ、ハードディスク、リムーバブルディスク、CD−ROM(コンパクトディスク読み取り専用メモリ)、または当技術分野で知られている他の任意の形式の記憶媒体の中にあることができ得る。プロセッサが記憶媒体との間で情報を読み取り、情報を書き込めるように、例示的記憶媒体はプロセッサに結合される。代替形態では、この記憶媒体はプロセッサの一部分をなすことができ得る。このプロセッサおよび記憶媒体はASIC(特定用途向け集積回路)の中にあることができ得る。そのASICはコンピューティングデバイスまたはユーザ端末の中にあることができ得る。代替形態では、このプロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末の中の個別コンポーネントとして存在することができ得る。
開示した実施形態についての前述の記載は、開示した実施形態を任意の当業者が作成し、または使用できるようにするために提供した。これらの実施形態に対する様々な修正は当業者に容易に明らかになり、本明細書に定める原理は、本開示の範囲から逸脱することなく他の実施形態に適用することができ得る。したがって本開示は、本明細書に示した実施形態に限定されることは意図せず、むしろ特許請求の範囲によって定義される原理および新規の特徴に一致する、可能な限り広い範囲が認められるべきである。

Claims (23)

  1. ループ内の1組の命令を処理する方法であって、
    特定の種類のループ命令の実行時に述語値をセットする前に、前記ループの反復回数を指示するための述語トリガカウンタを自動的に初期化することと、
    ループの反復中に前記1組の命令を実行することと、
    前記ループのループ終了インジケータの検出時にループ制御ハードウェアを自動的にトリガして前記述語トリガカウンタを修正し、前記述語トリガカウンタを基準と比較して前記述語値をいつセットするのか決定することであって、前記1組の命令の中の前記複数の命令のうちの少なくとも1つは、前記述語値に基づいて条件的に実行される、前記述語値をいつセットするのか決定することと
    を備える、方法。
  2. 前記基準はゼロ値であり、前記ループ制御ハードウェアは、前記ループ終了インジケータに応答して前記述語トリガカウンタをデクリメントする、請求項1に記載の方法。
  3. 条件的に実行される前記1組の命令の中の前記複数の命令のうちの前記少なくとも1つは、出力レジスタにデータを書き込む、請求項1に記載の方法。
  4. 前記1組の命令はソフトウェアパイプライン化されたループとして実行され、前記述語トリガカウンタは、前記ソフトウェアパイプライン化されたループのパイプラインステージの数に基づく、請求項3に記載の方法。
  5. ループ命令を処理する方法であって、
    述語トリガカウントを含む特殊レジスタ内でループパラメータを初期化することと、
    前記ループ命令を実行することと、
    ループ終了インジケータを伴う命令を実行することと、
    前記述語トリガカウントを修正し、ループカウントを修正することと、
    前記述語トリガカウントが基準値に等しい場合、前記ループ命令のうちの少なくとも1つの実行に影響を及ぼす述語の値を変更することと
    を含む、方法。
  6. 前記ループ命令はカーネルコードを含むが、前記ループ命令はプロログ命令を含まない、請求項5に記載の方法。
  7. 前記カーネルコードは、ソフトウェアパイプライン化されたループの1組の命令を含む、請求項6に記載の方法。
  8. 前記基準値はゼロに等しく、前記述語トリガカウントおよび前記ループカウントは、前記ループ終了インジケータを伴う前記命令を実行することに応答してデクリメントされる、請求項5に記載の方法。
  9. 前記ループ命令は、前記述語に基づいて条件的に実行される少なくとも1つの命令を含む、請求項5に記載の方法。
  10. 前記ループ命令はカーネルコードを含むが、前記ループ命令はプロログ命令を含まない、請求項9に記載の方法。
  11. 述語トリガカウントを記憶するための述語カウントレジスタと、
    プログラムループのループパラメータを初期化するための初期化論理回路と、
    前記プログラムループのループ命令を実行し、ループ終了インジケータを含むパケットを実行するためのプロセッサと、
    前記述語トリガカウントを修正し、前記プログラムループのループカウントを修正するための論理回路と、
    前記述語トリガカウントを基準値と比較するための比較論理回路と、
    前記比較の結果に基づき、前記プログラムループの中の少なくとも1つの命令に影響を及ぼす述語の値を変えるための論理回路と
    を備える、機器。
  12. 前記初期化論理回路は、前記ループ命令を実行する前に前記述語をクリアする、請求項11に記載の機器。
  13. プログラムループのループ終了インジケータを検出するための検出ユニットと、
    ループカウントをデクリメントし、述語トリガカウンタをデクリメントするためのデクリメントユニットと、
    前記述語トリガカウンタを基準と比較して述語値をいつセットするのか決定するための比較ユニットと
    を備える、ハードウェアループ制御論理回路。
  14. 前記プログラムループは、前記述語値に基づいて条件的に実行可能な少なくとも1つの命令を含む、請求項13に記載のハードウェアループ制御論理回路。
  15. プログラムループのループ終了インジケータを検出するための検出ユニット、
    ループカウントをデクリメントし、述語トリガカウンタをデクリメントするためのデクリメントユニット、および
    前記述語トリガカウンタを基準と比較して述語値をいつセットするのか決定するための比較ユニット
    を備える、ハードウェアループ制御論理回路と、
    前記ハードウェアループ制御論理回路の実行をトリガする特殊命令を実行するプロセッサと
    を備える、システム。
  16. 前記特殊命令は、spNloop型命令を含み、ただしNは4より小さい正の整数であり、Nは前記述語値を変更する前に実行する前記プログラムループのループ数を指示する、請求項15に記載のシステム。
  17. 前記spNloop型命令の実行時に、セットされている前記述語値に先立って値が計算され、前記計算される値は記憶されない、請求項16に記載のシステム。
  18. 前記spNloop型命令は、プログラムループセットアップ情報を含むデータフィールドを含む、請求項16に記載のシステム。
  19. 前記検出ユニットは、前記ループ終了インジケータを検出するためにVLIW(超長命令語)パケットを構文解析するように構成され、前記デクリメントユニットは、前記ループ終了インジケータを検出するときに前記述語トリガカウンタを自動的にデクリメントするためのカウンタを含み、前記比較ユニットは、前記述語トリガカウンタの1値から0値への遷移を自動的に識別するための比較器を含む、請求項18に記載のシステム。
  20. ソフトウェアパイプラインループアプリケーションに関連して前記spNloop型命令を使用する、請求項16に記載のシステム。
  21. 前記プロセッサは、前記ハードウェアループ制御論理回路を含むVLIW(超長命令語)型プロセッサであり、前記プロセッサにより、前記プログラムループの中の複数の命令が並列に実行される、請求項17に記載のシステム。
  22. Nは、プロログカウントを示す、請求項18に記載のシステム。
  23. 前記プログラムループの少なくとも1つの命令は、前記述語値に基づいて条件的にデータを記憶する、請求項16に記載のシステム。
JP2011516552A 2008-06-27 2009-06-24 ループ制御システムおよび方法 Expired - Fee Related JP5536052B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/147,893 US20090327674A1 (en) 2008-06-27 2008-06-27 Loop Control System and Method
US12/147,893 2008-06-27
PCT/US2009/048370 WO2009158370A2 (en) 2008-06-27 2009-06-24 Loop control system and method

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2014090336A Division JP5917592B2 (ja) 2008-06-27 2014-04-24 ループ制御システムおよび方法

Publications (3)

Publication Number Publication Date
JP2011526045A true JP2011526045A (ja) 2011-09-29
JP2011526045A5 JP2011526045A5 (ja) 2013-07-18
JP5536052B2 JP5536052B2 (ja) 2014-07-02

Family

ID=41306021

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2011516552A Expired - Fee Related JP5536052B2 (ja) 2008-06-27 2009-06-24 ループ制御システムおよび方法
JP2014090336A Expired - Fee Related JP5917592B2 (ja) 2008-06-27 2014-04-24 ループ制御システムおよび方法
JP2016076753A Pending JP2016157463A (ja) 2008-06-27 2016-04-06 ループ制御システムおよび方法

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2014090336A Expired - Fee Related JP5917592B2 (ja) 2008-06-27 2014-04-24 ループ制御システムおよび方法
JP2016076753A Pending JP2016157463A (ja) 2008-06-27 2016-04-06 ループ制御システムおよび方法

Country Status (7)

Country Link
US (1) US20090327674A1 (ja)
EP (1) EP2304557A2 (ja)
JP (3) JP5536052B2 (ja)
KR (1) KR101334863B1 (ja)
CN (1) CN102067087B (ja)
TW (1) TW201015431A (ja)
WO (1) WO2009158370A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014010832A (ja) * 2012-06-29 2014-01-20 Analog Devices Inc ステージド・ループ命令

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7991985B2 (en) * 2006-12-22 2011-08-02 Broadcom Corporation System and method for implementing and utilizing a zero overhead loop
US7987347B2 (en) * 2006-12-22 2011-07-26 Broadcom Corporation System and method for implementing a zero overhead loop
JP5300294B2 (ja) * 2008-03-25 2013-09-25 パナソニック株式会社 処理装置、難読化装置、プログラムおよび集積回路
KR101645001B1 (ko) * 2009-02-18 2016-08-02 삼성전자주식회사 Vliw 명령어 생성 장치 및 그 방법과 vliw 명령어를 처리하는 vliw 프로세서 및 그 방법
EP2367102B1 (en) * 2010-02-11 2013-04-10 Nxp B.V. Computer processor and method with increased security properties
WO2013089709A1 (en) * 2011-12-14 2013-06-20 Intel Corporation System, apparatus and method for generating a loop alignment count or a loop alignment mask
WO2013089707A1 (en) * 2011-12-14 2013-06-20 Intel Corporation System, apparatus and method for loop remainder mask instruction
US9632779B2 (en) * 2011-12-19 2017-04-25 International Business Machines Corporation Instruction predication using instruction filtering
KR101991680B1 (ko) * 2012-01-25 2019-06-21 삼성전자 주식회사 소프트웨어 파이프라인된 프로그램의 하드웨어 디버깅 장치 및 방법
US9280344B2 (en) * 2012-09-27 2016-03-08 Texas Instruments Incorporated Repeated execution of instruction with field indicating trigger event, additional instruction, or trigger signal destination
US9201828B2 (en) 2012-10-23 2015-12-01 Analog Devices, Inc. Memory interconnect network architecture for vector processor
EP2725483A3 (en) * 2012-10-23 2015-06-17 Analog Devices Global Predicate counter
US9342306B2 (en) 2012-10-23 2016-05-17 Analog Devices Global Predicate counter
CN103777922B (zh) * 2012-10-23 2018-05-22 亚德诺半导体集团 预测计数器
US9830164B2 (en) * 2013-01-29 2017-11-28 Advanced Micro Devices, Inc. Hardware and software solutions to divergent branches in a parallel pipeline
US9633409B2 (en) * 2013-08-26 2017-04-25 Apple Inc. GPU predication
US20160019061A1 (en) * 2014-07-21 2016-01-21 Qualcomm Incorporated MANAGING DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPs), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA
US9348595B1 (en) 2014-12-22 2016-05-24 Centipede Semi Ltd. Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US9135015B1 (en) 2014-12-25 2015-09-15 Centipede Semi Ltd. Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US9208066B1 (en) 2015-03-04 2015-12-08 Centipede Semi Ltd. Run-time code parallelization with approximate monitoring of instruction sequences
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US9715390B2 (en) 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
GB2548603B (en) * 2016-03-23 2018-09-26 Advanced Risc Mach Ltd Program loop control
US20180060221A1 (en) * 2016-08-24 2018-03-01 Google Inc. Multi-layer test suite generation
US10248908B2 (en) * 2017-06-19 2019-04-02 Google Llc Alternative loop limits for accessing data in multi-dimensional tensors
US11614941B2 (en) * 2018-03-30 2023-03-28 Qualcomm Incorporated System and method for decoupling operations to accelerate processing of loop structures
US11520570B1 (en) * 2021-06-10 2022-12-06 Xilinx, Inc. Application-specific hardware pipeline implemented in an integrated circuit
US11954496B2 (en) * 2021-08-02 2024-04-09 Nvidia Corporation Reduced memory write requirements in a system on a chip using automatic store predication
US11693666B2 (en) * 2021-10-20 2023-07-04 Arm Limited Responding to branch misprediction for predicated-loop-terminating branch instruction
CN117250480B (zh) * 2023-11-08 2024-02-23 英诺达(成都)电子科技有限公司 组合逻辑电路的环路检测方法、装置、设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0863355A (ja) * 1994-08-18 1996-03-08 Mitsubishi Electric Corp プログラム制御装置及びプログラム制御方法
US5794029A (en) * 1996-08-07 1998-08-11 Elbrus International Ltd. Architectural support for execution control of prologue and eplogue periods of loops in a VLIW processor
JP2002024011A (ja) * 2000-06-13 2002-01-25 Siroyan Ltd プロセッサにおける命令の叙述された実行
US20060182135A1 (en) * 2005-02-17 2006-08-17 Samsung Electronics Co., Ltd. System and method for executing loops in a processor
WO2006091778A2 (en) * 2005-02-24 2006-08-31 Qualcomm Incorporated Suppressing update of a branch history register by loop-ending branches
US20060218379A1 (en) * 2005-03-23 2006-09-28 Lucian Codrescu Method and system for encoding variable length packets with variable instruction sizes

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5452425A (en) * 1989-10-13 1995-09-19 Texas Instruments Incorporated Sequential constant generator system for indicating the last data word by using the end of loop bit having opposite digital state than other data words
US5958048A (en) * 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
DE69936952T2 (de) * 1998-01-28 2008-05-21 Texas Instruments Inc., Dallas Verfahren und Vorrichtung zur Verarbeitung von Programmschleifen
US6192515B1 (en) * 1998-07-17 2001-02-20 Intel Corporation Method for software pipelining nested loops
US6598155B1 (en) * 2000-01-31 2003-07-22 Intel Corporation Method and apparatus for loop buffering digital signal processing instructions
US7302557B1 (en) * 1999-12-27 2007-11-27 Impact Technologies, Inc. Method and apparatus for modulo scheduled loop execution in a processor architecture
US6754893B2 (en) * 1999-12-29 2004-06-22 Texas Instruments Incorporated Method for collapsing the prolog and epilog of software pipelined loops
US6629238B1 (en) * 1999-12-29 2003-09-30 Intel Corporation Predicate controlled software pipelined loop processing with prediction of predicate writing and value prediction for use in subsequent iteration
US6892380B2 (en) * 1999-12-30 2005-05-10 Texas Instruments Incorporated Method for software pipelining of irregular conditional control loops
US6567895B2 (en) * 2000-05-31 2003-05-20 Texas Instruments Incorporated Loop cache memory and cache controller for pipelined microprocessors
US6615403B1 (en) * 2000-06-30 2003-09-02 Intel Corporation Compare speculation in software-pipelined loops
US6912709B2 (en) * 2000-12-29 2005-06-28 Intel Corporation Mechanism to avoid explicit prologs in software pipelined do-while loops
US6986131B2 (en) * 2002-06-18 2006-01-10 Hewlett-Packard Development Company, L.P. Method and apparatus for efficient code generation for modulo scheduled uncounted loops
US7269719B2 (en) * 2002-10-30 2007-09-11 Stmicroelectronics, Inc. Predicated execution using operand predicates
US20040221283A1 (en) * 2003-04-30 2004-11-04 Worley Christopher S. Enhanced, modulo-scheduled-loop extensions
US7020769B2 (en) * 2003-09-30 2006-03-28 Starcore, Llc Method and system for processing a loop of instructions
US7406590B2 (en) * 2004-02-25 2008-07-29 Analog Devices, Inc. Methods and apparatus for early loop bottom detection in digital signal processors
US7673294B2 (en) * 2005-01-18 2010-03-02 Texas Instruments Incorporated Mechanism for pipelining loops with irregular loop control
GB0524720D0 (en) * 2005-12-05 2006-01-11 Imec Inter Uni Micro Electr Ultra low power ASIP architecture II
US20070266229A1 (en) * 2006-05-10 2007-11-15 Erich Plondke Encoding hardware end loop information onto an instruction
US20080040591A1 (en) * 2006-08-11 2008-02-14 Moyer William C Method for determining branch target buffer (btb) allocation for branch instructions

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0863355A (ja) * 1994-08-18 1996-03-08 Mitsubishi Electric Corp プログラム制御装置及びプログラム制御方法
US5794029A (en) * 1996-08-07 1998-08-11 Elbrus International Ltd. Architectural support for execution control of prologue and eplogue periods of loops in a VLIW processor
JP2002024011A (ja) * 2000-06-13 2002-01-25 Siroyan Ltd プロセッサにおける命令の叙述された実行
US20060182135A1 (en) * 2005-02-17 2006-08-17 Samsung Electronics Co., Ltd. System and method for executing loops in a processor
WO2006091778A2 (en) * 2005-02-24 2006-08-31 Qualcomm Incorporated Suppressing update of a branch history register by loop-ending branches
JP2008532142A (ja) * 2005-02-24 2008-08-14 クゥアルコム・インコーポレイテッド ループ終結分岐により分岐履歴レジスタの更新を抑制すること
US20060218379A1 (en) * 2005-03-23 2006-09-28 Lucian Codrescu Method and system for encoding variable length packets with variable instruction sizes

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014010832A (ja) * 2012-06-29 2014-01-20 Analog Devices Inc ステージド・ループ命令

Also Published As

Publication number Publication date
US20090327674A1 (en) 2009-12-31
JP2016157463A (ja) 2016-09-01
JP2014170571A (ja) 2014-09-18
KR101334863B1 (ko) 2013-12-02
JP5536052B2 (ja) 2014-07-02
JP5917592B2 (ja) 2016-05-18
TW201015431A (en) 2010-04-16
KR20110034656A (ko) 2011-04-05
WO2009158370A2 (en) 2009-12-30
WO2009158370A3 (en) 2010-02-25
CN102067087B (zh) 2014-04-23
CN102067087A (zh) 2011-05-18
EP2304557A2 (en) 2011-04-06

Similar Documents

Publication Publication Date Title
JP5917592B2 (ja) ループ制御システムおよび方法
JP2011526045A5 (ja)
JP6345623B2 (ja) 条件付き非ブランチング命令の非実行を予測するための方法および機器
TWI431526B (zh) 硬體流控制監視器
TWI469046B (zh) 基於旋轉的別名保護暫存器中的暫存器配置
JP2015144002A (ja) 単一方向回転子のためのレジスタベースのシフト
KR101290493B1 (ko) 선형 피드백-쉬프트 명령을 실행하기 위한 시스템 및 방법
US8843730B2 (en) Executing instruction packet with multiple instructions with same destination by performing logical operation on results of instructions and storing the result to the destination
TW201342225A (zh) 用於使用觸發來決定指令順序之方法
US8707013B2 (en) On-demand predicate registers
JP5759537B2 (ja) 命令としてデータ値を評価するシステムおよび方法
KR100551544B1 (ko) 하드웨어 루프
KR100536018B1 (ko) 하드웨어 루프
EP2542963B1 (en) System and method of processing hierarchical very long instruction packets
JP2004516571A (ja) 資源を効率的に用いるハードウェア・ループ
KR20030061002A (ko) 추측 레지스터 조정 방법 및 장치
US20170052782A1 (en) Delayed zero-overhead loop instruction
JP2014059665A (ja) マイクロコンピュータ及びマイクロコンピュータにおける命令処理方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121204

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130304

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130311

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130507

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130514

A524 Written submission of copy of amendment under section 19 (pct)

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20130531

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130603

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130702

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20131002

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20131009

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20131105

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20131112

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131202

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140423

R150 Certificate of patent or registration of utility model

Ref document number: 5536052

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

LAPS Cancellation because of no payment of annual fees