JP2006508414A - 拡張命令エンコーディングのシステムおよびその方法 - Google Patents

拡張命令エンコーディングのシステムおよびその方法 Download PDF

Info

Publication number
JP2006508414A
JP2006508414A JP2003586743A JP2003586743A JP2006508414A JP 2006508414 A JP2006508414 A JP 2006508414A JP 2003586743 A JP2003586743 A JP 2003586743A JP 2003586743 A JP2003586743 A JP 2003586743A JP 2006508414 A JP2006508414 A JP 2006508414A
Authority
JP
Japan
Prior art keywords
instruction
execution
loop
standard
vector
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
JP2003586743A
Other languages
English (en)
Other versions
JP2006508414A5 (ja
JP4002554B2 (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.)
NXP USA Inc
Original Assignee
NXP USA 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 NXP USA Inc filed Critical NXP USA Inc
Publication of JP2006508414A publication Critical patent/JP2006508414A/ja
Publication of JP2006508414A5 publication Critical patent/JP2006508414A5/ja
Application granted granted Critical
Publication of JP4002554B2 publication Critical patent/JP4002554B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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
    • G06F9/30181Instruction operation extension or modification

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)
  • Devices For Executing Special Programs (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

ループ実行に関連するいくつかの命令に追加機能性を提供するシステムおよび方法を述べる。命令の標準の組が、標準命令サイズだけを使用して処理される。一部のループ命令は、標準命令サイズの標準命令部分および増補命令部分を用いて処理される。増補命令部分は、標準命令部分に関連する追加機能性を提供する。増補命令部分は、プログラム・ループ内の標準命令部分または他の命令の条件実行に関連する機能を提供し得る。さらに、増補命令部分は、標準命令部分と共に使用される追加オペランドを提供し得る。

Description

本発明は、一般的にはデータ処理システムでの命令実行に関し、具体的にはループ実行中の拡張長さ命令実行に関する。
最近、ポケット・ベル、セルラ電話機など、ミッドレンジからローエンドの組み込み応用向けの低コスト、低電力、高性能プロセッサの設計が注目されている。これらの組込み応用の多くが、ディジタル信号処理(DSP)機能など、データ処理システムが高度の繰り返し機能を実行することを必要とし、これらの機能では、大量の命令レベル並列性(Instruction Level Parallelism、ILP)を利用し得ると同時に、システムが制御集中機能を実行する必要もある。
この必要に対処するために、一部にシステムで、デュアルコア・ソリューションが使用され、この場合に、一方のコアが、制御集中機能を実行し、他方のコアが、特殊化されたDSP機能を実行する。この手法では、プロセッサ・コアが、共用メモリなどのシステム内で実施される通信チャネルを介して互いに通信する。これらのシステムは、しばしば、実行コアごとに1つのデュアル命令ストリームを使用する。これらのデュアル・コア・システムは、通常は、より高いハードウェア・コストおよび開発コストを有する。
さらに、多くの組込み応用では、一部のループが非常にベクトル化可能であり、他のループが、ベクトル化が困難である。非常にベクトル化可能なループは、「Cray−1 Computer System Hardware Reference Manual」、クレイリサーチ社(Cray Research,Inc.)[米国ミネソタ州ブルーミントン(Bloomington)]、出版番号2240004、1977に記載のものなどの伝統的なベクトル処理パラダイムを使用することによって効率的に処理され得る。これは、ベクトル化可能なループに適用可能であるが、ベクトル化が困難なループには拡張されない。
ベクトル化が困難なループについては、ループ実行の最適化に焦点を合わせたDSPスタイルの処理パラダイムが、より適する。ADSP−2106x SHARC User’s Manual、アナログ・デバイセズ社(Analog Devices Inc.)1997年に記載のSHARC製品が、ループ最適化を使用するシステムの例である。
「Cray−1 Computer System Hardware Reference Manual」、クレイリサーチ社(Cray Research,Inc.)[米国ミネソタ州ブルーミントン(Bloomington)]、出版番号2240004、1977 ADSP−2106x SHARC User’s Manual、アナログ・デバイセズ社(Analog Devices Inc.)1997年
ベクトル化が困難なループの効率的な性能を提供するが、この手法は、非常にベクトル化可能なループについて効率的でない。
多くの組込み応用例は、その実行時間の大半を、少数のクリティカル・プログラム・ル
ープの実行に費やす。これらのクリティカル・ループは、しばしば、静的コード側のわずかな部分だけを構成する。そのようなシステムでは、性能とシステム・コスト(コード・サイズ)の間の最適トレードオフが、少数のクリティカル・プログラム・ループを除いて、密命令エンコーディング(dense instruction−encoding)方式をプログラム全体について使用した場合に達成され得ることが多い。上の議論から、命令エンコーディングの改善された方法が必要であることは明白である。
本発明の特定の実施形態を、本明細書で提示する図面に示し、説明する。本発明の様々な目的、長所、特徴、および特性、ならびに構造の関連する要素の方法、動作、および機能と、部分および製造の経済の組合せは、そのすべてが本明細書の一部を形成する、添付図面を参照して以下の説明および請求項を考慮する際に明らかになる。
16ビット固定命令長エンコーディングを使用するISA(Instruction Set Architecture)を有する普通のシステムでは、しばしば、命令エンコーディングに対する様々な制限によって性能が悪影響を受ける。たとえば、ISAでは、通常は、3オペランド命令フォーマットではなく、2オペランド命令フォーマットが使用される。この場合に、命令は、通常、オペコード、Ra、Rbというフォーマットを有し、ここで、Raは、ソース・オペランドならびにデスティネーション・オペランドである。その結果、Raの元の値を保存する必要がある場合には、この命令のオペランド自己破壊的性質に起因して、追加の「move」命令が必要である。このISAの命令は、「即」値フィールドをエンコードするのに限られた幅も有する。さらに、ISAは、条件実行機能(たとえば、条件コードがある値である場合に命令を条件的に実行し得ること)をエンコードし得ない。この機能は、短い順方向分岐を除去するのに有利である。命令エンコーディングでのこれらの制限を有するので、16ビット固定命令長エンコーディングを使用するISAは、通常、32ビット固定命令長エンコーディングを使用するISAより低い性能を有する。しかし、前者は、後者より高いコード密度(したがって低いシステム・コスト)を有する。
クリティカル・ループについて、本発明では、拡張された命令幅エンコーディングを使用して、大量のプログラム・コードに使用される狭い命令エンコーディングに関連する性能劣化を防ぐ。下記の例を検討されたい。組込みシステムは、その実行時間の約40%を、少数のクリティカル・ループの実行に費やす。これらのループは、プログラムの静的コード・サイズの約1%を構成する。これらのループだけについて命令エンコーディングを拡張することによって、これらのループのサイズを100%だけ増やす。それと同時に、このループの実行時間を100%だけ改善することも可能である。全体として、20%だけ性能が向上する。この例の静的コード・サイズは、1%増えるのみである。
本発明は、統合されたデータ・パスでスカラ機能およびベクトル機能を実行する方法を提供する。スカラ機能は、制御機能とみなすことも可能であり、ベクトル機能は、通常は、反復プログラム・ループを置換し、実行するためのものである。この方法では、ループの性質に応じて、従来のベクトル処理パラダイムまたはDSPスタイルの処理パラダイムの間で選択する。プログラム・ループに関するこれらの処理パラダイムの両方を実行する能力を提供することによって、個々のパラダイムより高い性能改善を達成し得る。さらに、ベクトル機能の命令に関連する機能を、増補命令部分の使用を介して拡張し得る。増補命令部分は、ベクトル機能に関連する命令と共に提供される。
本明細書で使用する用語「バス」は、データ、アドレス、制御、または状況など、1つまたは複数の様々なタイプの情報を転送するのに使用し得る、複数の信号または導体を指すのに使用される。用語「アサート」および「ネゲート」は、信号、状況ビット、または
類似する装置を、論理的に真の状態および論理的に偽の状態にすることを指す時に使用される。論理的に真の状態が、論理レベル1である場合に、論理的に偽の状態は、論理レベル0である。論理的に真の状態が、論理レベル0である場合には、論理的に偽の状態は、論理レベル1である。
大括弧は、バスの導体または値のビット位置を示すのに使用される。たとえば、「バス60[0から7]」または「バス60の導体[0から7]」は、バス60の8つの下位導体を示し、「アドレス・ビット[0から7]」または「アドレス[0から7]」は、アドレス値の下位8ビットを指す。数字の前の記号「$」は、その数が16進数または16を底とする形で表されることを示す。数字の前の記号「%」は、その数が2進数または2を底とする形で表されることを示す。
ベクトル処理パラダイムで、データは、メモリまたはベクトル・レジスタから継続的に流れ、非常にパイプライン化された形の一連の機能ユニットによって処理される。処理されたデータは、メモリに継続的に流れる。上で述べたCrayアーキテクチャが、このパラダイムを使用するシステムの初期の例である。
ベクトル処理パラダイムの威力を、次の例のループを使用して示し得る。
Figure 2006508414
このループは、2つのベクトルに対して要素単位の乗算を実行する。このループは、ベクトル形式で、ベクトルA、B、CについてC[i]=A[i]*B[i]、i=0、...、n−1を実行する。
この例では、中間値が、作られ、即座に消費される。これらの値は、連続的にレジスタr6およびr7に書き戻され、読み取られる。これらは、作られ、1回だけ消費されるので、これらの値を、しばしば限られているレジスタ記憶空間に蓄積することは非効率的である。この状況は、残念ながら、ベクトル動作がload−store ISA(Instruction Set Architecture)を使用して表される時に、不可避である。
より効率的な手法は、複数の機能ユニットを一緒にチェーンにし、各ユニットが特定のタスクを実行することである。この形で、中間値が機能ユニットによって作られる時に、その値が、チェーン内の次の機能ユニットに直接に渡され、これによって、値のストアお
よび検索に関連するレジスタ・ファイルへの読取トラフィックおよび書込トラフィックが回避される。
ベクトル動作またはベクトル実行をパイプライン化し、すべてのサイクルに1つの結果を作り得るようにすることも可能である。一般に、ベクトル動作を実行するのに必要な時間は、Ts+n/Trによって与えられ、ここで、Tsは、初期セットアップ・コストであり、nは、ベクトルの長さであり、Trは、各サイクルに作られる結果の個数単位のスループット・レートである。スカラ計算機が、同等のプログラム・ループの1つの反復を実行するのにmサイクルを要する場合に、ベクトル計算機を使用することによる速度向上は、nm/(Ts+n/Tr)またはTr=1の場合にnm/(Ts+n)によって与えられる。最大の速度向上は、Tsが十分に小さく、nが十分に大きい時に達成し得る。この場合に、速度向上がmに達し、これは、スカラ計算機がプログラム・ループの1つの反復を実行するのに要するサイクル数である。
ベクトル処理は、複数の効果を有する。様々な動作を単一のデータ・ストリームでパイプライン化し、改善された性能をもたらし得る。効率的なデータのストレージおよび移動がもたらされる。というのは、大量の一時データが作られ、レジスタ・ファイルまたはメモリ・システムを通らずに、隣接する機能ユニットによって消費されるからである。さらに、ベクトル処理では、小さいルーティング区域が使用される。というのは、データ・パス全体にブロードキャストするのではなく、機能ユニットが、デスティネーション機能ユニットに直接にルーティングされるからである。効率的なデータ移動およびより小さいルーティング区域によって、電力消費が減る傾向がある。さらに、ベクトル実行中に命令を要求する必要がないので、より低い命令フェッチ帯域幅が達成される。ベクトル処理パラダイムの威力によって、ベクトル処理パラダイムが、低コスト、低電力組込みコンピュータ・システムに非常に適するようになる。
あるベクトルA、B、およびCについて、
C[i]=A[i]*B[i]、i=0、...、n−1
によって記述されるベクトル演算を実行するループは、非常にベクトル化可能なループである。ループ・ベクトル化のしやすさは、通常は、ハードウェアおよびシステム構成の関数である。一般に、実行される算術関数を決定するのに実行時情報に依存しないループは、ベクトル化しやすい。本明細書で使用されるCVA(Canonical Vector Arithmetic)は、非常にベクトル化可能なループによって実行し得るベクトル算術を表す。下に、CVAのもう1つの例を示す。
C[i]=4*A[i]+(B[i]>>1)、i=0、...、n−1
このCVAは、次のように複数のCVAに分解し得る。ある一時ベクトルT1およびT2について、
T1[i]=4*A[i];T2[i]=B[i]>>1;C[i]=T1[i]+T2[i]、i=0、...、n−1
DSPアルゴリズムまたはDSP機能は、組込み計算機で実施される時に、しばしばプログラム・ループに変換される。最適化コンパイラは、ループを再構成し、すべての可能な並列性を計算機によって簡単に利用し得るようにする。しかし、そのようなプログラム・ループは、ベクトル化が簡単でない。そのようなプログラム・ループは、コンパイラによってベクトル処理パラダイムに「あてはまる」ように変換された後にベクトル化可能になる可能性がある。これらの変換には、マスク生成、動作の収集および分散などが含まれる可能性がある、ある追加のベクトル動作の追加が含まれる。
たとえば、
C[i]=(A[i]>B[i])?A[i]:A[i]+B[i]、i=0、.
..、n−1
によって記述されるベクトル動作を実行するループは、ベクトル化が困難であるか高コストである。具体的に言うと、このループは、条件
A[i]>B[i]
に動的に頼って、結果の要素C[i]を得るために実行される算術関数を決定する。このタイプの算術を、本明細書ではPVA(Pseudo−Vector Arithmetic)と称する。
DSPタイプの計算機は、プログラム・ループの実行を最適化することによって、PVA算術を効率的に実行する。これらの計算機で、(i)ループ制御機構、(ii)定数ストライド・ロード、および(iii)定数ストライド・ストアに関連するオーバーヘッドの多くを除去することによって性能が改善される。
伝統的なDSPプロセッサの命令によって、複数の計算動作およびメモリ動作を並列に実行することを指定し得る。そのようなプロセッサの動作は、複数の動作が並列に発行されるVLIW(Very Long Instruction Word)プロセッサの動作に非常に類似する。
本発明は、ベクトル・タイプ処理を使用するベクトル化可能ループおよびDSPタイプの処理を使用するベクトル化が困難または不可能なループの処理の手段を提供する。ループのタイプに応じて、計算機は、ある条件の下ではベクトル・プロセッサのように振る舞い、他の条件の下ではDSPプロセッサのように振る舞う。さらに、この計算機は、単一データ・パスを使用して、プログラムのすべてのベクトル算術ならびにスカラ部分(すなわち非ループ部分)を実行し、同一のハードウェア・リソースの効率的な再利用を可能にする。
本発明は、ベクトル・タイプ処理またはDSPタイプ処理のどちらを使用するかを決定する判断機構としてベクトル化を組み込む。前者を、CVA実行とも称する。後者を、PVA実行とも称する。この新しい処理パラダイムを、本明細書では「擬似ベクトル計算機(Pseudo−Vector Machine)」と称する。
この新しい処理パラダイムによれば、実行モデルが、2つのモードすなわち、(i)制御機能に関するスカラ実行モードおよび(ii)命令レベル並列性(instruction level parallelism、ILP)を利用するベクトル実行モードで動作し得る。図1に、本発明の1実施形態の実行モードを示す。2つの基本モードが、スカラおよびベクトルであり、ベクトル・モードには、さらに特定の実行モードが含まれる。CVAおよびPVAは、ベクトル・モードでのみ使用可能であり、CVAモード実行には、(i)コンパウンド(compound)、(ii)リダクション(reduction)、および(iii)ハイブリッド(hybrid)という3つのタイプがある。それに対応して、この計算機には、2つのベクトル命令すなわち、CVA命令およびPVA命令がある。
図1の実行モデルでは、スカラ・モードおよびベクトル・モードが、時間的にオーバーラップしない。モデルは、単一の命令ストリームを使用して、単一のデータ・パスでこの2つのモードを実行する。このストリーム内の各命令は、スカラ命令またはベクトル命令のいずれかとして分類し得る。ベクトル命令がフェッチされ、デコードされる時に、計算機は、ベクトル実行モードに入る。計算機は、少数の事前定義の機構を介してのみベクトル・モードから出る。
非常にベクトル化可能であるループに関して、計算機は、CVA実行モードすなわち、
「真の」ベクトル処理パラダイムを使用して、ループを処理する。ベクトル化が困難または不可能であるループに関して、計算機は、PVA実行モードすなわち、DSPスタイルの処理に似た「擬似」ベクトル処理パラダイムを使用して、ループを処理する。最適化コンパイラは、この場合に、所与のプログラム・ループにどの実行モードが最も適するかを判断する。一般に、コンパイラは、まず、ベクトル処理パラダイムの低電力態様および高性能態様を利用することを試みて、真のベクトル命令またはCVA命令を使用するループのベクトル化を試みる。これが可能でない場合には、コンパイラは、PVA命令または両方の組合せを使用して、DSPスタイルのループベース実行にフォール・バックする。
普通の意味でのベクトル化は、ベクトル化可能プログラム・ループを識別し、ある同等のベクトル演算と置換することを指す。さらに、本発明は、プログラム・ループを識別し、DSPスタイルのループ構造と置換するベクトル化を提供する。これには、DO UNTIL命令またはDO WHILE命令を含め得る。そのようなループは、普通の意味ではベクトル化が困難または不可能である可能性がある。擬似ベクトル計算機で、PVA命令が、DSPタイプ・プログラム・ループの構成およびベクトル化に使用される。
プログラム・ループが、1つまたは複数のベクトル命令(CVA命令および/またはPVA命令)からなる同等のコードに置換される時に、そのプログラム・ループを、ベクトル化されたという。このベクトル化されたコード・セグメントを、元のスカラ・プログラム・ループと同等の機能を実行するので、元のスカラ・プログラム・ループのベクトル同等物とも称する。ベクトル化は、アセンブリ・レベルまたはソース・コード・レベルで行い得る。
ループが、CVA構成を使用してベクトル化可能である場合に、これをCVAベクトル化可能という。ループが、PVA構成を使用してベクトル化可能である場合に、これをPVAベクトル化可能という。ループが、CVAベクトル化可能である場合に、そのループは、PVAベクトル化可能でもある。しかし、逆は一般に真でない。PVA構成は、より一般的なベクトル化機構を表す。同等のハードウェア・コストで、CVA実行は、通常は、非常にベクトル化可能であるループのより高い性能の利益を提供する。ベクトル化が不可能またはコストが高すぎるループについて、PVA実行が、よりよい性能の利益を提供する。
DSPタイプ実行および/またはVLIWタイプ実行と、ベクトル・タイプ実行との間の区別を、図2および3に示す。図2に、DSPタイプ実行の動作を示すが、ここでは、複数の独立の動作が、複数の機能ユニットに同時に発行される。これらの独立の機能ユニットによって作られた結果が、あるアーキテクチャ的レジスタおよび/またはメモリ・システムに書き戻される。図2に示された動作によって、VLIW計算機の動作も記述されることに留意されたい。
図3に、伝統的なベクトル実行を示すが、ここでは、複数の機能ユニットが、一緒にチェーンにされて、依存する動作を実行する。チェーンされた機能ユニットの間の一時的結果は、アーキテクチャ的レジスタに書き戻されず、メモリ・システムにも書き込まれない。さらに、ベクトル実行は、ベクトル命令の最初のフェッチおよびデコードの後に、そのベクトル実行の残りについてさらなる命令要求をまったく行わないという事実も特徴とする。
本発明は、DSPタイプ実行とベクトル実行を1つの統合されたデータ・パスで組み合わせる方法を提供する。本明細書で使用されるPVA実行は、DSPタイプ実行であり、CVA実行は、ベクトル実行である。したがって、本発明は、1つの処理システム内の各タイプの実行の利益を利用する。
図4に、本発明の1実施形態による処理システム2を示す。処理システム2には、単一のデータ・パスでスカラ実行、CVA実行、およびPVA実行を実行する処理アーキテクチャが組み込まれる。実行コア4に、第1ロード・ユニットL6および第2ロード・ユニットL8が含まれる。情報は、メモリM0 14からL6に、およびメモリM1 16からL8にロードされる。
本発明の1実施形態で、M0 14およびM1 16が、ランダム・アクセス・メモリ(RAM)ブロックであるが、他のタイプのメモリ・ストレージ・デバイスを使用して実施し得る。メモリM0 14は、M0_dbusを介してデータ情報を、M0_abusを介してアドレス情報を、処理システム2の残りと通信する。同様に、M1 16は、M1_dbusを介してデータ情報を、M1_abusを介してアドレス情報を通信する。
実行コア4に、プログラム・シーケンサ24、M0_dbus、およびM0_abusに結合されたループ・キャッシュ22も含まれる。プログラム・シーケンサ24は、M0_dbusおよびM0_abusにも結合され、プログラム・シーケンサ24には、さらに、カウント・インデックス・レジスタ(CIR)50が含まれる。CIR50には、2つの独立のレジスタすなわち(i)カウント・レジスタ(CR)および(ii)インデックス・レジスタ(IXR)が含まれる。CIR50は、図11にも示されており、この図では、CR51が、CVA実行のベクトル長またはPVA実行の反復回数を指定するのに使用される。ループ・キャッシュは、M0_dbusを介してデータを受け取るように結合される。プログラム・シーケンサ24は、M0_abusを介してM0 14にアドレス情報を提供する。
レジスタ・ファイル(RF)26も設けられ、データが、L6からL0_dbusを介して、およびL8からL1_dbusを介してRF26に供給される。RF26、L6、およびL8のすべてが、マルチプレクサ28、30、および32に結合される。マルチプレクサ28は、xbusを介して主算術ユニット(P)34に情報を供給する。1実施形態で、P34は、汎用機能ユニットである。P34は、基礎になるISAで定義されたスカラ算術機能のすべてを実行し得る。マルチプレクサ30は、ybusを介してP34に情報を供給する。
P34の結果は、p_busを介して副算術/ストア・ユニット(S)36に供給される。P34の結果は、マルチプレクサ40にも供給される。メモリ・ストア動作を実行するほかに、S36は、「add」、「and」、「or」、「xor」などの単純な算術論理ユニット(ALU)算術も実行し得る。マルチプレクサ32は、zbusを介してラッチ38に情報を供給し、この情報は、ラッチ38からマルチプレクサ41に供給される。マルチプレクサ41の出力は、zs_busを介してS36に情報を供給する。S36のデータ出力は、s_dbusを介してマルチプレクサ40、マルチプレクサ41、M1_dbus、M0_dbus、および一時メモリ(商標)20に供給される。S36のアドレス出力は、s_abusを介してM0_abus、M1_abus、および一時メモリ(TM)20にも供給される。マルチプレクサ40の出力は、result_busを介して、RF26、L6、L8、SSR42、マルチプレクサ28、およびマルチプレクサ30に情報を供給する。
スカラ・モードで実行する時に、実行コアは、単一発行パイプライン式計算機のように振る舞う。実行コアは、スカラ計算にレジスタ・ファイルRF26およびP34を使用し、メモリ・ロード/ストア動作にL6、L8、およびS36を使用する。具体的に言うと、これらのロード/ストア動作のメモリ・アドレスが、S36によって、TM20、M0 14、およびM1 16を含むメモリ・システムに供給される。メモリ・ストア動
作について、データが、S36ユニットによって供給される。メモリ・ロード動作について、データは、メモリ・システムによって、L6およびL8を介し、L0_dbusおよびL1_dbusを介して、RF26およびP34に供給される。
ベクトル・モードで実行する時に、ベクトル命令すなわち、CVA命令またはPVA命令によって、任意選択として、2つまでの入力データ・ストリームLおよびLおよび1つのデータ・ストリームをイネーブルし得る。
ベクトル・モードで実行する時に、データを、M0 14からL6およびL0_dbusを介して継続的にフェッチし、RF26、P34、またはS36への複数のパスのいずれかによって供給し得る。第1パスは、L0_dbusを介してRF26にデータをストリーミングするのに使用される。第2パスは、マルチプレクサ28を介してP34にデータをストリーミングするのに使用され、第3パスは、マルチプレクサ30を介してP34にデータをストリーミングするのに使用される。第4パスは、マルチプレクサ32、ラッチ38、およびマルチプレクサ41を介してS36にデータをストリーミングするのに使用される。PVA実行に関して、第1パス、第2パス、および第3パスの1つまたは複数を、PVA命令に応じて使用し得る。CVA命令に関して、第2パス、第3パス、および第4パスの1つまたは複数を、CVA命令に応じて使用し得る。これらのデータ・ストリームのどれをも、入力データ・ストリームLと称する。
同様に、ベクトル・モードで実行する時に、データを、L8およびL1_dbusを介してM1 16から継続的にフェッチし、複数のパスのいずれかによってRF26、P34、またはS36に供給し得る。第1パスは、L1_dbusを介してRF26にデータをストリーミングするのに使用される。第2パスは、マルチプレクサ28を介してP34にデータをストリーミングするのに使用され、第3パスは、マルチプレクサ30を介してP34にデータをストリーミングするのに使用される。第4パスは、マルチプレクサ32、ラッチ38、およびマルチプレクサ41を介してS36にデータをストリーミングするのに使用される。PVA実行に関して、第1パス、第2パス、および第3パスの1つまたは複数を、PVA命令に応じて使用し得る。CVA命令に関して、第2パス、第3パス、および第4パスの1つまたは複数を、CVA命令に応じて使用し得る。これらのデータ・ストリームのどれをも、入力データ・ストリームLと称する。
また、ベクトル・モードでは、データを、S36からメモリ・モジュールM0 14、M1 16、またはTM20の1つに継続的にストアし得る。この出力データ・ストリームを、出力データ・ストリームSと称する。
実行コア4に、さらに、対応するロード/ストア動作がイネーブルされる場合にLストリーム、Lストリーム、およびSストリームのストライドおよびオペランド・サイズを指定するストライド・サイズ・レジスタ(SSR)42が含まれる。SSR42は、L6、L8、RF26およびS36に結合される。SSR42は、さらに、result_busを介して情報を受け取るためにマルチプレクサ40に結合される。一時メモリ・ストレージ・ユニット、TM20が、S36、L6、およびL8に結合される。TM20は、一時ベクトルまたは任意のデータのストアに使用し得る。TM20にストアされるベクトルは、固定ベクトル長に制限されない。
処理システム2で実行されるCVAの3つのタイプを表すデータ依存性グラフを、図5に示す。図5に示されたCVAの3つのタイプのすべてで、2つの入力の近くで実行される第1算術を、主算術と呼び、p_opと表す。この算術は、図3のP34によって実行される。出力の近くで実行される第2算術を、副算術と呼び、s_opと表す。この算術は、図3のS36によって実行される。
図5に、本発明の1実施形態に関する、CVAの入力データ・ストリームLおよびLとソース・オペランドX、Y、およびZの間の関係を示す。オペランドXは、Lストリーム、Lストリーム、またはレジスタr4からソーシングし得る。オペランドYは、Lストリーム、Lストリーム、またはレジスタr5からソーシングし得る。オペランドZは、Lストリーム、Lストリーム、またはレジスタr6からソーシングし得る。XオペランドおよびYオペランドは、主算術p_opで使用される。主算術の結果が、副算術s_opに転送される。CVAのタイプに応じて、副算術s_opは、オペランドZまたはs_op自体の出力からソーシングし得る。
図5の(A)に示されたコンパウンドCVAは、ベクトル計算の結果としてデスティネーション・ベクトルを作る。コンパウンドCVAの一般形式を次のように表し得る。
ソースXおよびソースYがすべてベクトルである場合に
=(X p_op Y)s_op Z、i=0、...、n−1
ここで、nは、ベクトルの長さを表し、p_opは、主算術を表し、s_opは、副算術を表し、Rは、デスティネーション・ベクトルの第i要素を表し、X、Y、およびZは、それぞれベクトルX、Y、およびZの第i要素である。
ソースXが、スカラx定数であり、ソースYがベクトルである場合には
=(x p_op Y)s_op Z、i=0、...、n−1
である。
ソースXが、ベクトルであり、ソースYが、スカラ定数yである場合には、
=(X p_op y)s_op Z、i=0、...、n−1
である。副算術s_opを、「ノー・オペレーション」にすることも可能であることに留意されたい。
リダクションCVAについて、図5の(B)に示されているように、XオペランドおよびYオペランドのソースは、コンパウンド・タイプと同一であるが、Zオペランドは使用されない。副算術の出力が、s_op自体への入力としてフィードバックされる。この場合に、Sストリームはディスエーブルされる。リダクションCVAは、ベクトル・リダクション演算を実行し、この動作では、1つまたは複数のベクトルが、ベクトル演算の結果として、スカラ結果に換算される。リダクションCVAの一般形式を、次のように表し得る。
ソースXおよびソースYのすべてがベクトルである場合に、
=(X p_op Y
=(X p_op Y)s_op Si−1、i=1、...、n−1;
r=Sn−1
ここで、Sは、i番目の部分的結果を表し、rは、ベクトル・リダクション演算のスカラ結果を表す。
ソースXが、スカラ定数xであり、ソースYがベクトルである場合には、
=(x p_op Y
=(x p_op Y)s_op Si−1、i=1、...、n−1;
r=Sn−1
ソースXが、ベクトルであり、ソースYが、スカラ定数yである場合には、
=(X p_op y)
=(X p_op y)s_op Si−1、i=1、n−1;
r=Sn−1
である。
副算術に関連するフィードバック・パスは、部分的結果を計算し、累算し、最終的に最後のスカラ結果を作る責任を負う。そのようなリダクション演算の例が、Σ(A[i]*B[i])によって記述される、2つのベクトルの内積である。この場合に、主算術は、「乗算」関数であり、副算術は、累算的「加算」関数である。
図5を継続すると、(C)として示されたハイブリッドCVAを用いると、リダクションの場合と同一の、XオペランドおよびYオペランドのソースならびに副算術のフィードバックが可能になるが、ハイブリッドの場合には、Sストリームがイネーブルされる。ハイブリッドCVAは、中間の部分的結果が、Sストリームを介してデスティネーション・ベクトルに継続的に書き込まれることを除いて、リダクションCVAと同一である。ハイブリッドCVAの一般形式は、部分的結果S、i=0、...、n−1も、デスティネーション・ベクトルRを形成し、R=S、i=0、...、n−1であることを除いて、リダクションCVAと同一である。ハイブリッドCVAについて、2つのデスティネーションすなわち、スカラ・デスティネーションおよびベクトル・デスティネーションがある。
ハードウェア・コストを制限するために、本発明の1実施形態では、複数の制約を課す。第1に、コンパウンドCVAでは、組み合わされる2つの算術が、2つまでの別個のベクトルからソーシングすることだけが可能である。しかし、この制約は、2つまでの別個のベクトルからソーシングする限り、3つのすべてのソース・オペランドがベクトルである場合を除外しない。たとえば、C[i]=A[i]*A[i]+B[i]によって記述されるベクトル演算は、2つの別個のベクトルAおよびBからソーシングする、3つのソース・ベクトル・オペランドを有する。別個のソース・ベクトルの数に関するこの制約によって、最大メモリ帯域幅要件が、1サイクルあたり3つのデータ・フェッチから1サイクルあたい2つのデータ・フェッチに減る。
上記の制約のほかに、副算術を、少数の単純な可換ALU関数に制限し得る(ALU関数opは、すべてのスカラxおよびyについてx op y==y op xである場合に、可換という)。この関数に、add、and、or、またはxorなどが含まれる。
CVAの少数の例を、下の表に示す。
Figure 2006508414

この例のそれぞれに、対応するCVA命令ならびにLストリーム、Lストリーム、およびSストリームのイネーブル設定およびディスエーブル設定も詳細に示されている。このCVA命令で、「@」は、データ・ストリームを表す。具体的に言うと、「@L0」は、メモリからの第1入力データ・ストリームLを表し、「@L1」は、メモリからの第2入力データ・ストリームLを表し、「@P」は、主算術p_opによって作られる中間結果ストリームを表し、「@S」は、メモリへの出力データ・ストリームSを表す。
1実施形態で、Lストリーム、Lストリーム、およびSストリームのすべてが、一定のストライドのメモリ動作である。
コンパウンドCVA動作に関して、CVA命令で、上の表1の(a)および(b)に示されているように、主算術と副算術の両方を指定し得る。この2つの算術は、CVA命令で、それらを区切るコンマを用いて指定され、主算術が先に指定され(この例では、主算術が、3番目のコンマの左に、単語「add」の前に配置される)、副算術がそれに続く(この例では、副算術が、3番目のコンマの右に、単語「add」から始めて配置される)。命令は、「;」記号で終わる。この例では、「@P」ストリームが、主算術のデスティネーションとして現れ、副算術にもソースとして現れる。
コンパウンドCVA動作に関して、CVA命令で、上の表1の(c)から(f)のように、主算術を指定するが、副算術を指定しないことが可能である。副算術、この例ではs_opは、「ノー・オペレーション」であり、主算術によって作られた結果が、「@S」ストリームを介してメモリに直接にストアされる。「@P」ストリームは、これらの命令で指定されない。
リダクションCVAについて、CVA命令では、上の表1の(g)から(i)のように、主算術と副算術の両方が指定される。この例では、「@P」ストリームが、主算術のデスティネーションとして現れ、副算術にもソース・オペランドの1つとして現れる。副算術のデスティネーションおよび第2ソース・オペランドは、レジスタR3である。リダクションCVAに関して、R3が、リダクション演算の部分的結果ならびに最終スカラ結果をストアするように指定される。
副算術は可換なので、速記表記を使用して、リダクションCVAを記述し得る。この場合に、副算術式全体が、s_opの関数名によって置換される。たとえば、内積を計算するCVA命令(上の表1の例(g))を、下記のように書き得る。
CVA mul @L0、@L1、add;//リダクションCVAの速記表記
ハイブリッドCVAについて、命令構文は、副算術が2つのデスティネーションすなわちSストリームおよびレジスタR3を有することを除いて、リダクションCVAの構文に類似する。2つのデスティネーションは、CVA命令では「{@S、R3}」という形で現れる。ハイブリッドCVAの速記表記はない。
図6に、1実施形態による、図4の実行コア4によって3タイプのCVA(図5に図示)がどのように実行されるかを示す。ストリームLが、L0_dbusを介してL6に供給され、ストリームLが、L1_dbusを介してL8に供給される。図6では、オペランドX、Y、およびZが、ストリームL、ストリームL、またはRF26の指定されたレジスタからソーシングし得る。具体的に言うと、Zオペランドが、マルチプレクサ32、ラッチ38、マルチプレクサ41、およびzs_busを介してS36に供給される。さらに、s_dbus、マルチプレクサ41、およびzs_busが、リダクションCVAおよびハイブリッドCVAの部分的結果を累算するフィードバック・パスとして使用される。リダクションCVAおよびハイブリッドCVAについて、これらの部分的結果は、常に、s_dbusおよびresult_busを介してレジスタR3に書き戻される。
図7に、本発明の1実施形態による、CVA命令のフォーマットを示す。この命令には、イネーブル・フィールドが含まれ、E、E、およびEが、それぞれLストリーム、Lストリーム、およびSストリームのイネーブル・ビットである。Vx0/Vx1、Vy0/Vy1、およびVz0/Vz1ビットは、それぞれ、CVA命令のオペランド
X、Y、およびZがその入力をどのようにソーシングし得るかを指定する。具体的に言うと、これらのビットによって、ストリームL、L、または指定されたレジスタからのこれらのオペランドのソーシングが選択される。Vz0ビット、Vz1ビット、およびEビットの組合せによって、実行されるCVAのタイプが定義される。p_opフィールドおよびs_opフィールドによって、それぞれP34およびS36で実行される主算術および副算術のオペコードが指定される。
CVA実行に関して、カウント・レジスタ(CR)51と称する特殊なレジスタが、ベクトル長の指定に使用される。CR51の1実施形態が、図4のCIR50の下位半分として図11に示されている。CIR50の上位半分は、インデックス・レジスタ(IXR)70と称し、PVA実行だけに使用される。
1実施形態で、CIR50は、特殊な「move−to−control−register」命令または「move−from−control−register」命令を使用してソフトウェア・プログラムによってアクセスされる特殊な制御レジスタとして実施される。他の実施形態では、CR51およびIXR70を、2つの別々のレジスタとして実施し得る。
CVA実行について、CR51を、CVA実行の前に適当なベクトル長を用いてソフトウェアによって初期化しなければならない。CVA実行中に、処理されるベクトル要素ごとに、CR51が、自動的に1つ減分される。CR51が0に達し、ベクトル全体が処理されていることが示される時に、CVA実行が終了する。計算機は、命令ストリームで、CVA命令またはPVA命令のいずれかである次のベクトル命令に出会うまで、スカラ・モードに入る。
あるスカラsに関するベクトル演算C[i]=sA[i]+B[i]を、次のようにCVA命令を使用してベクトル化し得る。
Figure 2006508414
これは、コンパウンドCVAである。この例では、Lストリーム、Lストリーム、およびSストリームのすべてがイネーブルされる。ストリームLは、ベクトルAに割り当てられ、ストリームLは、ベクトルBに割り当てられ、ストリームSは、ベクトルCに割り当てられる。レジスタR5は、CVA実行の前に、スカラsに初期化される。主算術は、「乗算」関数であり、副演算は、「加算」関数である。
CVA命令の前に、LストリームをベクトルAに割り当て、LストリームをベクトルBに割り当て、SストリームをベクトルCに割り当てる初期化コードがある。この「割り当て」は、ある特別に指定されたレジスタを、ベクトルA、B、およびCにアクセスするための適当な開始ベクトル位置、ストライド値、および要素サイズに初期化することを指す。
次のプログラム・ループの例を検討されたい。
Figure 2006508414
このベクトル演算は、次の式によって記述し得る。
C[i]=(lsr(A[i]、R9)|lsl(A[i]、R8))
このループでは、1時に1要素ずつベクトルAを読み込み、各要素に対して、右論理シフト(lsr)演算および左論理シフト(lsl)演算を実行する。2つのシフト演算の結果に対して「or」関数を実行し、その結果をデスティネーション・ベクトルCに書き込む。このループは、次のようにベクトル化し得る。
Figure 2006508414
例2のループは、2つのコンパウンドCVA命令を使用することによってベクトル化される。第1のCVA命令は、ソース・ベクトルAに対して「lsr」演算を実行し、一時ベクトルを作る。第2のCVA命令は、主算術として「lsl」、副算術として「or」を実行する。後者の命令は、Lを介して一時ベクトルを読み取り、これに対して「lsl」演算を実行する。この命令は、Lを介して元のソース・ベクトルAを読み取り、主算術から作られた結果との「or」関数を実行する。この命令は、その後、Sを介して結果をベクトルCに書き戻す。この実施形態で、両方のCVA命令のソース・オペランドYが
、必ずレジスタR5からソーシングされることに留意されたい。したがって、R5を初期化するCVA実行の前に、追加の「mov」命令が必要である。
CVA実行は、CRが0になる前に終了することも可能である。CVA命令は、図7に示されているように、EビットおよびCビットを含む早期終了フィールドも有する。Eビットは、CVA計算の早期終了機能をイネーブルまたはディスエーブルする。Cビットは、この機能がイネーブルされる(E=1)場合に、これを行う条件コードを指定する。次の例に、この機能をベクトル計算についてどのように使用し得るかを示す。この例では、「c」ビットが、条件コードを指す。
Figure 2006508414
このループの対応する高水準ソース・コードを下に示す。
Figure 2006508414
このループは、ベクトルAとBの間の要素単位の比較を実行する。このループは、あるiについてA[i]>B[i]になるや否や終了する。そのような要素の対がない場合には、ループを終了する前に、ベクトルAとBのすべての要素が処理されている。
あるプログラム・ループが、固定長ベクトルに対してある算術関数を実行し、ベクトルの最後の要素が処理される前であっても計算が終了し得る場合に、そのような動作を、早期終了を有するベクトル算術と称する。
早期終了を有するベクトル算術には、2つの終了条件すなわち(i)ソース・ベクトルのすべての要素が処理された時、および(ii)ある算術条件が満たされる時がある。後者の条件は、最後のベクトル要素が処理される前に満たされる可能性があり、通常は、データ依存であり、先験的には判定されない。
例3に示されたループは、早期終了を有するベクトル算術である。このループは、CVA構造を使用して下記のようにベクトル化し得る。
Figure 2006508414
このCVA命令では、LストリームおよびLストリームの両方がイネーブルされるが、Sストリームはディスエーブルされる。具体的に言うと、Lストリームは、ベクトルBに割り当てられ、Lストリームは、ベクトルAに割り当てられる。副算術は、指定されない(すなわち、「ノーオペレーション」である)。命令は、E=1およびC=1を有する。CVA命令の構文「.ct=x」によって、E=1であることがアセンブラに指示される。
主算術「cmplt」またはcompare−less−thanは、LストリームとLストリームの先頭を継続的に比較する。実際には、ベクトルAとベクトルBを要素単位で比較している。あるiについてB[i]<A[i]である場合に、条件コードに1がセットされ、CVA実行が終了する。そのような要素対が見つからない場合には、2つのソース・ベクトルを使い果たすまで実行が継続する。
早期終了をイネーブルされた(E=1)CVA実行を実行するために、主算術p_op(図4の機能ユニットP34で実行される)は、条件コードを変更し得る算術関数である。ベクトル実行の過程中に、条件コードに事前に指定された値(Cビットによって与えられる)がセットされる場合に、ベクトル実行は、即座に終了する。この終了は、ベクトルの全長が処理される前すなわち、CR51が0になる前であっても、発生し得る。この実施形態では条件コードが単一のビットであるが、代替実施形態で、条件コードを表す複数のビットおよび/またはエンコーディングを使用し得ることに留意されたい。
PVA命令は、伝統的なDSPプロセッサでのDO UNTIL命令またはDO WHILE命令によく似ている。そのDSP対応物と同様に、PVA命令を使用して構成されるプログラム・ループは、PVA命令と、それに続く複数のスカラ命令から構成されるループ本体からなる。
図8に、PVA命令のフォーマットを示す。図9に、PVA命令を使用して構成されるプログラム・ループの構造を示す。PVAモードで実行する時に、実行コア4は、PVA命令が、任意選択として、2つまでの入力データ・ストリームLおよびLならびに出力データ・ストリームSをイネーブルして、PVAループ実行中に自動的に実行され得ることを除いて、単一発行パイプライン式計算機のように振る舞う。これらのデータ・ストリームは、一定ストライドのメモリ・ロード/ストア動作である。PVA実行について、L、L、およびSのいずれかまたはすべてをディスエーブルし得る。
CVA実行に似て、入力ストリームLおよびLは、それぞれ、ロード・ユニットL6およびL8を介して、メモリM0 14およびM1 16からRF26および/またはP34にデータをストリーム・インする。しかし、PVA実行では、ストリームLおよびストリームLを介してプリフェッチされるデータは、それぞれRF26のレジスタR0およびR1に書き込まれる。これらのデータを、P34に直接にフィードフォワー
ドすることも可能である。PVA実行では、マルチプレクサ32、ラッチ38、およびマルチプレクサ41は、使用されない。
図8を参照すると、PVA命令に、E、E、およびEを有するイネーブル・フィールドが含まれ、これらは、それぞれデータ・ストリームL、L、およびSのイネーブル・ビットである。PVA命令は、EビットおよびCビットを有する早期終了フィールドも有する。CVA命令のEビットに似て、Eビットは、PVA実行の早期終了機能をイネーブルまたはディスエーブルする。Cは、この機能がイネーブルされる(E=1)場合に、これが行われる条件コードを指定する。
PVA命令のLoop_sizeフィールドは、スカラ命令の個数単位で、ループ本体のサイズを指定する。PVA命令のcs−store−indexフィールドは、ループ本体の中で、実行される時に定数ストライド・ストア(cs−store)動作を自動的に開始する命令を指定する。このcs−store動作のデータは、この命令によって書き戻されるデータである。1実施形態で、PVAループの最初の命令のインデックス値が、1であり、2番目の命令のインデックス値が、2であり、以下同様である。PVAループ内の最後の命令のインデックス値は、Loop_sizeである。この実施形態のインデックス値は、PVA命令に関する命令位置である。他の命令インデクシング方式も可能である。
PVAプログラム・ループでは、条件分岐および無条件分岐が、ループ本体内で許容される。ループ本体の中で分岐が採用され、分岐のターゲットがまだループ本体の中にある場合に、PVA実行が継続される。ループ本体の中で分岐が採用され、分岐のターゲットがループ本体の外にある場合に、PVA実行が自動的に終了する。
図11でCIR50の下位半分として示されたCR51も、PVA実行に使用される。具体的に言うと、これは、実行されるループ反復の回数を指定するのに使用される。そのCVA対応物に似て、CR51は、その実行の前に、適当な反復カウントを用いてソフトウェアによって初期化されることを必要とする。PVA実行中に、CR51は、実行される反復ごとに1つだけ自動的に減分される。CR51が0に達した時に、PVA実行が終了する。計算機は、命令ストリームで次のベクトル命令に出会うまで、スカラ・モードに入る。
PVA実行は、3つの機構すなわち(i)CR51が0に達する時、(ii)PVA命令のEビットおよびCビットが早期終了条件を示す時、または(iii)分岐がループ本体内で採用され、分岐のターゲットがループの外にある時の1つを介して終了し得る。3つの終了条件のすべてが、単一のプログラム・ループ内に共存し得る。すなわち、ループは、実行時条件に基づいて、上の3つの終了機構の1つを介して終了し得る。終了機構(ii)および(iii)を、集合的に、PVA実行の早期終了と称する。
例3に示されたプログラム・ループは、上で説明した早期終了機能(ii)を使用して、PVA構成を使用してベクトル化し得る。
Figure 2006508414
記号「@L0」および「@L1」は、両方ともPVA命令で指定される。これによって、アセンブラに、LストリームとLストリームの両方がイネーブルされることが示される。Sストリームは、ループ本体に「cs−store」ラベルが現れないので、ディスエーブルされる。この命令では、E=1かつC=1である。E=1をセットすることによって、上で説明した早期終了機能(ii)がイネーブルされる。PVA命令の構文「ct=x」によって、アセンブラに、E=1であることが指示される。
PVAプログラム・ループのサイズは、PVA命令の「#1」表記によって指定されるように、1命令である。このループには、単一のスカラ命令「cmplt」が含まれ、この命令は、レジスタR0およびR1から継続的に読み取り、この2つの値を比較する。
PVA実行について、ループ本体内でR0(またはR1)から読み取ることによって、データ項目がL(またはL)入力ストリームから自動的にデキューされる。L(またはL)からのデータ項目のデキューによって、デキュー動作によって残された空のスロットを埋めるために、定数ストライド・ロード(cs−load)動作が自動的に実行される。したがって、ループ本体でレジスタR0(またはR1)から継続的に読み取ることによって、M0 14(またはM1 16)からのデータの連続的ストリームのフェッチおよびレジスタR0(またはR1)へのロードがトリガされる。R0(またはR1)は、単一のループ反復で複数回読み取り得る。
PVA実行について、L(またはL)ストリームがイネーブルされる時に、R0(またはR1)が、読取専用レジスタになり、このレジスタへの書込は、ハードウェアによって無視される。
実質的に、上のループ本体の「cmplt」命令は、ベクトルAおよびBを要素単位で比較する。この例では、R0の内容がR1の内容より小さい(すなわちB[i]<A[i]である)場合に、条件コードに1がセットされ、事前に指定された値C=1と等しくなり、PVAループ実行が即座に終了する(E=1なので)。この終了は、CR51が0に達する前であっても発生し得る。
代替案では、例3に示されたプログラム・ループを、下のようにPVA構成を使用してベクトル化することも可能である。この例では、前に説明した早期終了機構(iii)を使用して、どのようにしてPVAループを終了し得るかを示す。
Figure 2006508414
この代替案では、PVA命令でE=0である。ループ本体には、2つの命令「cmplt」および「bt」がある。第1の命令が、ベクトルAとBの間の比較動作の結果として条件コードをセットする場合に、第2の命令(「bt EXIT」)が採用される。この分岐のターゲットは、ループ本体の外にあるので、PVA実行が即座に終了する。そうではなく、条件コードがセットされず、分岐命令「bt」が採用されない場合に、実行は、次の反復の第1命令(この場合では「cmplt」命令)から継続される。
前に示したPVAベクトル化されたループの第1版(終了機構(ii)を使用する)は、上で示したPVAベクトル化されたループの第2版(終了機構(iii)を使用する)より効率的である。前者は、ループ本体の中に1つのスカラ命令だけを有するが、後者は、ループ本体の中に2つのスカラ命令を有する。
「exit−by−conditional−branch(条件分岐による終了)」手法が、通常、条件コードも使用するループ本体内で条件実行と共にプログラム・ループによって使用される。
例3に示された元のプログラム・ループでは、反復ごとに8つの命令が、ループ実行中に実行コアによって要求される。PVA構成を使用してループをベクトル化した後には、反復ごとに2つから3つの命令だけが、ループ実行中に実行コアによって要求される。
代替案では、早期終了をもたらすために、PVA命令によって、図23に示されているように、ループを早期に終了し得る条件設定命令のオフセットを指定し得る。図23のPVA命令を使用して構成されるプログラム・ループの構造を、図24に示す。図23では、非0のCoffsetフィールドによって、早期終了機能がイネーブルされることが示される(図8のフォーマットでE=1をセットすることに似る)。このフィールドによって、条件設定命令のオフセット(PVA命令からの命令数単位)が指定される。条件コード(またはcビット)に、条件設定命令の実行の結果として、PVA命令のCフィールドによって指定される値がセットされた時に、PVA実行が即座に終了する。下に例を示す。
Figure 2006508414
この代替案では、PVA命令のCoffset=4である。ループ本体には5つの命令(「cmplt」、「bt」、「sub」、「cmpnei」、および「add」)がある。cmplt命令は、R0およびR1の値を比較し、条件コード(またはcビット)をセットする。「bt」命令は、結果のcビットの値を検査し、セットされている場合に、「sub」命令を迂回して分岐する。ループの4番目の命令は、比較命令であり、これは、減算命令の結果(レジスタR3内)を比較して、それが値「2」と等しくないかどうかを調べる。比較の結果が真である場合には、cビットに「1」がセットされ、PVA命令のCフィールドにも「1」がセットされているので、PVA実行は即座に終了する。そうでない場合には、実行は、次の命令「add」から継続される。add命令に続いて、実行は、次のループ反復(「cmplt」)で継続される。PVA命令のCoffsetフィールドによって、ループ終了の制御に「cmpnei」命令(PVA命令に関してループ内で4のオフセット)が使用されることと、ループ終了に影響せずに、ループ内の他の命令(この場合には「cmplt」命令)によってcビットが影響を受ける可能性があることが示されることに留意されたい。この機能は、ループ終了に影響せずにループ内で複数の条件をテストしなければならない時に有用である。
下の例を使用して、Sストリームを介してcs−store動作をPVA実行についてどのように実行し得るかを示す。
Figure 2006508414
上のループの高水準ソース・コードを下に示す。
Figure 2006508414
このループは、PVA構成を使用して、下記のようにベクトル化し得る。
Figure 2006508414
このループでは、LストリームおよびSストリームがイネーブルされるが、Lストリームはイネーブルされない。PVAループ・サイズは、3命令である。各反復で、「cmplt」命令は、R0(または要素A[i])を読み取り、R6にストアされた定数値16と比較する。「movt」命令は、cビット(または条件コード)がセットされている場合に、R4をR2へ条件付きで移動する。そうでない場合に、「movt」命令は、R2をR2に移動し、値は変化しない。
「movt」命令は、ループ本体の中の「cs−store」ラベルに配置されている。Sストリームを介するcs−store動作は、この「movt」命令が実行される時に、必ず自動的に開始される。このcs−store動作に使用されるデータは、「movt」命令によって書き戻されるものと同一のデータである。このPVAループを実行する時に、「movt」命令によって作られる結果が、P34によってp_busに駆動され、マルチプレクサ40およびresult_busを介してRF26に常に書き戻される。S36は、p_busでこの結果を取り込み、これらの取り込まれたデータを使用してメモリ・システムへのcs−store動作を実行する。
この例では、「movt」命令に関連するストア動作が、アセンブリ・コードで、ループ本体の中のプログラム・ラベル「cs−store」を使用して指定される。しかし、機械コード(またはアセンブルされたバイナリ・コード)では、そのようなストア動作は、「movt」命令にエンコードされない。そうではなく、ストア動作は、ループを構成するのに使用されるPVA命令で暗黙のうちに指定される。この場合では、PVA命令が、E=1にされ、その「cs−store−index」フィールドが、「movt」命令をポイントしている。このタイプのストア動作を、「暗黙ストア」動作と称する。このストア動作をトリガし得るループ本体内の命令(この例では「movt」)を、暗黙ストア命令と称する。
上の実施形態では、PVA命令内に「cs−store−index」フィールドが1つだけあり、したがって、1つの「cs−store」ラベルだけが、ループ本体の中で許容される。その結果、1つの暗黙ストア動作だけが、各反復で許容される。代替実施形態では、複数の暗黙ストア動作を、特殊なマスク・レジスタを使用することによって実行
し得る。そのような代替実施形態では、マスク・レジスタを16ビット・レジスタとすることが可能であり、このレジスタの各ビットは、ループ本体内のスカラ命令に対応する。このレジスタの各ビットによって、命令内の対応するスカラ命令に関するcs−store動作がイネーブルまたはディスエーブルされる。したがって、ループ本体の16個までの命令によって、各反復でcs−store動作を開始し得る。ソフトウェアは、PVA実行の前にこのマスク・レジスタを初期化する。PVA実行中に、命令が結果を書き戻し、それに対応するマスク・レジスタ内のビットをセットする時に、その命令によって書き戻されたデータを使用して、cs−store動作が開始される。16個のcs−storeデータ・アドレス、ストライド、およびオペランド・サイズを指定するために、ハードウェア・サポートが必要である。
暗黙ストア動作を使用するもう1つの実施形態では、cs−store−indexではなく、cs−store−reg−designator(cs−storeレジスタ指定子)フィールド(レジスタ・フィールドとも称する)をPVA命令で指定し得る。たとえば、図25に、cs−store−reg−designatorフィールドを有するPVA命令の1実施形態を示し、図26に、図25のPVA命令フォーマットを使用して構成されるプログラム・ループを示す。このcs−store−reg−designatorフィールドによって、ループ本体の内部の命令のデスティネーション・レジスタの関数としての暗黙ストア動作が定義される。たとえば、cs−store−reg−designatorフィールドによってレジスタ3が示される場合に、デスティネーションとしてレジスタ3を有するすべての命令が、暗黙ストアを呼び出す。例の命令が、「add R3、R5」であり、これは、「命令デスティネーション、ソース」というフォーマットを有する。このadd命令では、レジスタ3がデスティネーション・レジスタとして使用され、したがって、このadd命令は、暗黙ストア動作に対応する。ループ本体の中の複数の命令が、デスティネーション・レジスタとしてレジスタ3を使用する場合には、複数の命令が、暗黙ストア動作を開始し得る。しかし、「cmpnei R3、#2」などの命令は、この例ではR3がデスティネーション・レジスタとして使用されないので、暗黙ストア動作に対応し得ない。「cmpnei」命令(ならびに他の命令)は、デスティネーション・レジスタに書き込まれる結果値を生成せず、このフォーマットは、この例ではソース値の対を指定している。さらに、代替実施形態では、PVA命令で複数のレジスタを定義することを可能にして、より多くの暗黙ストアを可能にし得る。
もう1つの実施形態で、PVA命令に、継続機能を組み込むことも可能である。この機能を有するPVA命令のフォーマットを、図20に示す。このPVA命令には、早期継続フィールド内の2つの追加ビットすなわちEビットおよびCビットがある。Eビットによって、早期継続機能がイネーブルまたはディスエーブルされ、Cビットによって、この機能がイネーブルされる場合に、この早期継続が行われる条件コードの値が指定される。
次の高水準コードに、プログラム・ループの残りの実行をスキップするのにこの早期継続機能をどのように使用し得るかを示す。
Figure 2006508414
この例では、ベクトルAの要素が、スカラsと比較される。あるiについてA[i]<sである場合に、上で「<さらなるコード>」と示されたプログラム・ループの残りの部分が、スキップされ、実行は、次の反復の先頭から継続される。これは、事前に指定された条件が満たされる時にループの実行が即座に終了する、前に説明した「早期終了機能」と対照的である。
このループを、次のようにベクトル化し得る。
Figure 2006508414
このPVA命令では、E=1かつC=1である。PVA命令の構文「cc=x」によって、E=1であることがアセンブラに指示される。「cmplt」命令によって条件コードに1がセットされる時に、必ず、そのA[i]とsの間の比較動作の結果として、実行が、即座に次の反復から継続され、「<さらなるコード>」の実行がスキップされる。
早期終了機能および早期継続機能の両方がイネーブルされた(E=E=1)PVA命令では、ループ本体内の命令が、条件コードを変更することが可能であり、これによって、現在の反復の実行が終わる。条件コードに、Cビットによって指定される値がセットされている場合には、ループ実行が、完全に終了する。条件コードに、Cビットによって指定される値がセットされている場合には、ループ実行は、次の反復から継続される。条件コードに、CビットおよびCビットの両方によって指定される値がセットされている(両方が条件コードについて同一の値を指定する)場合には、ループ実行が終了する。すなわち、この実施形態では、早期終了機能が、早期継続機能の地位を奪う。他の実施形態では、早期継続機能が、早期終了機能の地位を奪う。図示されていないが、早期継続機能を、早期終了について図23に示したものに似た形で設けることも可能である。Coffset−cフィールドおよびCビットを命令フォーマットに加えることが可能であり、あるいは、Coffset指定子およびC指定子と置換し得る。Coffset−cフィールドおよびCビットによって、条件設定命令のPVA命令からの命令単位のオフセットと、指定された命令がPVA命令でセットされたCビットと一致する条件コードを生成する時にループの早期継続をもたらすのに使用される条件値を指定し得る。
PVA構成は、一般に、(i)ループ制御機構、(ii)cs−loadを介する入力データ・ストリーム化、および(iii)cs−storeを介する出力データ・ストリーム化に関連するある種の実行オーバーヘッドを除去し得る。PVA命令に、システムの必要に応じて、上で説明した諸フィールドの組合せを、適当に含めることも可能である。たとえば、代替実施形態で、暗黙ストア動作を実行する、上で説明したものと異なるフィールドおよび方法を使用し得る。
図10に、データ・ストリームL、L、およびSのストライド値およびオペランド・サイズを指定するSSR42の1実施形態を示す。このレジスタは、CVA実行とPV
A実行の両方に使用される。この実施形態では、レジスタが、3つのデータ・ストリームL、L、およびSのそれぞれに1つの3つの部分に区分される。ストライド・フィールドSTR、STR、およびSTRは、9ビット幅である。サイズ・フィールドSZ、SZ、およびSZは、2ビット幅であり、それぞれによってバイト、ハーフワード、またはフルワードが指定される。
2つのベクトルの内積、Σ(A[i]*B[i])を実施する下記の例を検討されたい。この動作は、CVA命令を使用して下記のように実行し得る。この例では、SSR[STR]が、SSRレジスタのSTRフィールドを表し、他も同様である。
CRをベクトル長に初期化する。
SSR[STR]をベクトルAのストライド値に初期化する。
SSR[STR]をベクトルBのストライド値に初期化する。
R0をベクトルAの開始アドレスに初期化する。
R1をベクトルBの開始アドレスに初期化する。
CVA mul @L0、@L1、add;
この例では、LおよびLがイネーブルされ、Sがディスエーブルされ、したがって、これはリダクションCVAである。このリダクション演算の主算術は、「mul」関数であり、副算術は、「add」関数である。CVA実行中に、部分的結果が、継続的にレジスタR3に書き戻される。ベクトル計算が完了した時に、最終結果すなわち内積が、R3に暗黙ストアされる。この例のCVAは、Vx1/Vx0=01、Vy1/Vy0=10、Vz1=Vz0=11、E=0、E=0、C=「ドント・ケア」という設定を有する。
この例では、ベクトル実行が割り込まれる場合に、レジスタR3に、内積計算の中間の部分的結果が含まれる。割込みからリターンする時に、計算が、中断されたところから継続され、最初の部分的結果としてレジスタR3の内容が使用される。
もう1つの例で、すべてのiに関するベクトル算術C[i]=sA[i]を実施する。
CRをベクトル長に初期化する。
SSR[STR]をベクトルAのストライド値に初期化する。
SSR[STR]をベクトルCのストライド値に初期化する。
R0をベクトルAの開始アドレスに初期化する。
R2をベクトルCの開始アドレスに初期化する。
R5をsに初期化する。
CVA mul @L0、R5、@S;
これはコンパウンドCVAである。第2算術は「ノー・オペレーション」である。この場合に、LストリームおよびSストリームは、イネーブルされるが、Lストリームはイネーブルされない。ベクトル実行の前に、R5が、スカラ定数sによって初期化される。この例のCVA命令は、Vx1/Vx0=01、Vy1/Vy0=00、Vz0/Vz1=00、E=1、E=0、C=「ドント・ケア」という設定を有する。
図12から14に、L6、L8、およびS36の1つの可能な実施形態を示す。L6、L8、およびS36のそれぞれが、それぞれレジスタR0、R1、およびR2のローカル・コピーを有する。このローカル・コピーを、L_R0 114、L_R1 124、およびL_R2 136と表す。
スカラ実行中に、L6(またはL8)ユニットは、レジスタR0(またはR1)への書き戻しアクティビティについてresult_busを常時スヌープし、レジスタのローカル・コピーL_R0 114(またはL_R1 124)を更新する。同様に、S36は、レジスタR2への書き戻しアクティビティについてp_busを常時スヌープし、レジスタのローカル・コピーL_R2 136を更新する(図14参照)。
CVA実行中またはPVA実行中に、これらのローカル・レジスタの内容が、メモリ・ブロックのロード・アドレスまたはストア・アドレスとして適当に使用される。これらのレジスタは、対応するデータ・ストリームがイネーブルされている時に、適当なストライド値を加算することによって、ハードウェアによって常時更新される。すなわち、L_R0 114、L_R1 124、およびL_R2 136は、それぞれ、実行されるcs−load動作またはcs−store動作のそれぞれについて、SSR[STR]、SSR[STR]、およびSSR[STR]によって指定される量と合計される。
ベクトル命令(CVA命令またはPVA命令)が、そのE(またはE)ビットをセットされて最初にデコードされる時に、第1ロード・アドレスとしてL_R0 114(またはL_R1 124)を使用して、cs−loadが即座に開始される。その後、メモリからプリフェッチされるデータごとに、L_R0 114(またはL_R1 124)が更新される。
図12および13に示された実施形態では、ロード・ユニットL6およびL8内のデータ・キューが、2つだけの深さである。L6への入力に、M0_dbusおよびTM_dbusが含まれる。この2つの入力が、マルチプレクサ110に供給される。マルチプレクサ110の出力は、データ・キューの末尾111に供給される。データ・キューの末尾111は、マルチプレクサ113およびデータ・キューの第2エントリ112にデータを供給する。この第2エントリ112も、マルチプレクサ113にデータを供給する。データは、マルチプレクサ113からL0_dbusに供給される。
ロード・ユニットL6内で、M0_dbusおよびTM_dbusからのデータを、マルチプレクサ110を介し、末尾エントリ111およびマルチプレクサ113を介し、第2データエントリ112をバイパスして、L0_dbusに供給し得る。データを、第2エントリ112からマルチプレクサ113を介してL0_dbusに供給することも可能である。
図12を継続すると、加算器116が、SSR42、SSR[STR]、およびロード・アドレスをL_R0 114から受け取る。加算器116の出力は、マルチプレクサ115に結合される。result_busも、マルチプレクサ115に結合される。マルチプレクサ115の出力は、L_R0 114に結合され、L_R0 114は、L0_abusに結合される。ベクトル実行中に、SSR[STR]によって指定される量が、ストリームLを介して実行されるcs−load動作ごとに、L_R0 114に加算される。マルチプレクサ115およびL_R0 114を用いると、ロード・ユニットL6が、レジスタR0へのすべての書き戻しについてresult_busをスヌープし得るようになる。スカラ実行中には、L_R0 114が、RF26のレジスタ0と同一の値に維持される。同様の動作および接続性が、図13に示されたロード・ユニットL8にもあてはまる。
図14を参照すると、ストア・ユニットS36内で、p_busによって、データがラッチ130に供給される。このラッチおよびzs_busの出力によって、ALU131にデータが供給される。ALU131は、ラッチ132にデータを供給し、ラッチ132は、マルチプレクサ133にデータを供給する。マルチプレクサ133は、ラッチ130
およびラッチ132からデータをとり、s_dbusにデータを供給する。
データを、p_busから、ラッチ130およびマルチプレクサ133を介してs_dbusに供給することも可能である。このパスによって、ストア・ユニットS36内のALU131の計算がバイパスされる。データを、ALU131の出力からラッチ132およびマルチプレクサ133を介してs_dbusに供給することも可能である。このパスでは、ALU131の結果が、受け取られ、s_dbusに渡される。
ベクトル算術では、メモリから定数ストライド・ロードを介してロードされるほとんどのデータが、単一の反復で消費され、絶対に再利用されないという意味で、一時的でしかない。ベクトル算術への割込みが許容される場合に、ベクトル実行に関連するすべての定数ストライド・ロード/ストア・アドレスを保存して、割込みからのリターンの後にロード/ストア動作を再開し得るようにする必要がある。
メモリからプリフェッチされるすべての一時的なものならびにロード/ストア・アドレスを、汎用レジスタ・ファイルまたは制御レジスタなどのアーキテクチャ的に可視の記憶空間を使用してストアすることは、これらの貴重なリソースの非効率的な使用になる可能性がある。本発明は、レジスタ・オーバーレイを使用して、この問題に対処する。この手法では、PVA実行モードに入る時に、アーキテクチャ的に可視のレジスタ・ファイルの一部が、レジスタの新しい組によって「オーバーレイ」される。レジスタは、オーバーレイされる時に、(i)オーバーレイされたインスタンスおよび(ii)一時的インスタンスという2つのインスタンスを有する。PVAモードでは、その一時的インスタンスだけが、プログラマに可視であり、オーバーレイされたインスタンスは不可視である。逆に、実行が、PVAモードを出てスカラ・モードに入る時に、オーバーレイされたインスタンスが、再び可視になり、一時的インスタンスは、存在しなくなる。
図15に、3つの実行モードすなわちスカラ、PVA、およびスカラのシーケンスにまたがる、オーバーレイされたレジスタの可視性を示す。1実施形態で、レジスタR0およびR1が、PVA実行中にオーバーレイされ得るレジスタの組として指定される。これを、下の表2に示す。これらのレジスタのオーバーレイされたインスタンスは、対応するcs−loadロード・アドレスをストアするのに使用される。これらのレジスタの一時的インスタンスは、cs−load LおよびLを介してメモリからプリフェッチされるデータをストアするのに使用される。
Figure 2006508414
R0およびR1の一時的インスタンスを、それぞれT_R0およびT_R1と表す。R0およびR1のオーバーレイされるインスタンスを、それぞれO_R0およびO_R1と表す。
T_R0およびT_R1は、読取専用レジスタである。ループ本体内でのこの一時レジ
スタへの書込は、ハードウェアによって無視される。これらの一時レジスタは、PVA実行中に限って定義される。PVAループが、その実行を終了する時に、これらの一時レジスタに含まれるデータは、失われる。その時点でのそのようなレジスタへのアクセスによって、レジスタのオーバーレイされたインスタンスが検索され、これは、最後に実行されたcs−load動作のロード・アドレスである。
また、PVA実行が割り込まれる時に、T_R0およびT_R1は、コンテキストの一部として保存されない。割込みからリターンする時に、データをT_R0およびT_R1にプリフェッチしたcs−load動作が、O_R0およびO_R1にストアされたロード・アドレスを使用して再初期化される。レジスタT_R0およびT_R1は、普通のPVA実行を再開し得るようになる前に再初期化される。
図16に、図4のレジスタ・ファイルRFの1実施形態を示す。RF26には、他のレジスタの中でも、O_R0 142、T_R0 143、O_R1 152、およびT_R1 153が含まれる。RF26内では、レジスタO_R0 142、O_R1 152、およびR2 162が、それぞれ加算器140、150、および160を使用して更新される。
レジスタO_R0 142の値が、マルチプレクサ144に供給される。この値は、加算器140の入力にもフィードバックされる。加算器140のもう1つの入力は、SSR[STR]に結合される。加算器140の出力は、入力としてマルチプレクサ141に供給される。マルチプレクサ141の出力は、O_R0 142の入力に結合される。マルチプレクサ164が、もう1つの入力としてマルチプレクサ141に供給される。T_R0 143は、その入力をL0_dbusから取り、その出力をマルチプレクサ144のもう1つの入力に供給する。マルチプレクサ144の出力は、RF26の出力R0として供給される。加算器140、マルチプレクサ141、およびO_R0 142を使用することによって、O_R0 142を、各サイクルにSSR[STR]によって指定される量だけ増分し得る。
同一の機構を使用して、各サイクルに、O_R1 152およびR2 162を、それぞれストライド値SSR[STR]およびSSR[STR]を加算することによって、類似するハードウェア構成によって更新し得る。
PVA実行中に、O_R0 142およびT_R0 143の更新が、対応するcs−load動作がRF26にコミットされるのと同時に行われる。同様に、O_R1 152およびT_R1 153の更新は、対応するcs−load動作がRF26にコミットされるのと同時に行われる。R2 162の更新は、対応するcs−storeがメモリにコミットされるのと同時に行われる。任意の所与の時点で、T_R0 143(またはT_R1 153)に、メモリからプリフェッチされたデータが含まれ、アドレスは、O_R0 142(またはO_R1 152)にストアされる。この一貫性は、PVA実行中の命令境界にまたがって維持される。一時レジスタT_R0 144およびT_R1 154が、CVA実行またはスカラ実行に不要であることに留意されたい。
PVA実行中の一時インスタンスおよびオーバーレイされるインスタンスの一貫性を、図17に示す。5命令の実行シーケンスが示されている。水平軸は、時間を表し、レジスタR0の一時的インスタンスおよびオーバーレイされるインスタンスが、それぞれ垂直軸に表されている。命令境界は、垂直の破線によって示されている。この例では、ストリームLを介してストリーミングされるデータが、D0、D1、D2、D3、...であり、A0、A1、A2、A3、...が、対応するロード・アドレスである。この5つの命令の中で、I0、I2、およびI3が、レジスタR0を読み取る命令である。R0からの
読み取りは、図17に示されているように、次の命令境界の先頭での新しい「アドレス−データ」対によるO_R0 142およびT_R0 143の同時更新を引き起こす。命令I1は、R0を読み取らない命令であり、したがって、O_R0 142およびT_R0 143は、次の命令境界で更新されない。レジスタO_R0 142およびT_R0
143は、レジスタR0の読み取りに続く次の命令境界で更新される。それまでは、このレジスタは最後に更新された値を維持する。レジスタO_R1 152およびT_R1
153は、類似する形でハードウェアによって更新される。
図16に戻って、RF26からのR0の読取は、T_R0 143とO_R0 142の間で選択される。この選択は、マルチプレクサ144によって、PVA_exe0と称する制御信号を使用して制御される。この信号は、計算機がPVAモードで実行しており、ストリームLがイネーブルされる時にアサートされる。RF26からのR0の読取によって、この場合には、T_R0 143の内容が出力される。それ以外で、PVA_exe0がアサートされない時には、R0からの読取によって、O_R0 142の内容が出力される。類似する制御機構が、PVA実行中のRF26からのR1読取に関して存在する。
レジスタR2 162は、オーバーレイされない。RF26のレジスタR3からR15と同様に、R2は、単一のインスタンスを有する。しかし、R2は、SストリームがイネーブルされたPVA実行中に、レジスタO_R0 142およびO_R1 152に類似する形で更新される。
スカラ実行に関して、メモリ・ロードは、メモリ・ブロックM0 14からL6を介してL0_dbusに、またはM1 16からL8を介してL1_dbusに、データをフェッチすることと、その後、RF26のレジスタのいずれかに書き込むことによって実行される。したがって、L0_dbusまたはL1_dbusからRF26のレジスタのいずれかにデータを書き込むパスが必要である。このパスは、図16に示されているように、RF26内のマルチプレクサ164によって提供される。マルチプレクサ164は、その入力をL0_dbus、L1_dbus、およびresult_busから取り、その出力をマルチプレクサ141、マルチプレクサ151、マルチプレクサ161、およびレジスタ・アレイ163に供給する。レジスタ・アレイ163によって、アーキテクチャ的レジスタR3からR15が実施される。マルチプレクサ164を介して、L0_dbusおよびL1_dbusが、T_R0 143およびT_R1 153を除く、RF26内のレジスタのいずれかに書き込み得る。この実施形態では、一時レジスタT_R0 143およびT_R1 153が、スカラ実行中に使用可能でない。
ベクトル実行(CVA実行またはPVA実行)の前に、あるレジスタを、正しく初期化する必要がある。これらの特殊なレジスタには、ハードウェアが正しいベクトル実行を実行するのに必要なすべての情報が含まれる。表3に、これらの特殊なレジスタを詳細に示す。
Figure 2006508414

この実施形態では、SSR42およびCIR50だけが、特殊な制御レジスタである。他のすべてのレジスタが、汎用レジスタである。ベクトル演算に応じて、これらのレジスタが、ベクトル動作中に特殊な意味を伝える場合とそうでない場合がある。たとえば、R2は、ベクトル実行中にSストリームがイネーブルされる時に特殊な意味を有するが、この特殊な意味は、Sストリームに関する最新のcs−storeアドレスがストアされることを指す。
表3には、R0およびR1のオーバーレイされるインスタンスだけが含まれる。割込みまたは例外の時に、SSR42およびCIR50が、ハードウェアによって保存される。これらの特殊な制御レジスタを保存するために、追加のハードウェア・サポートが必要である。レジスタR0からR6は、汎用レジスタなので、ハードウェアによって自動的に保存される。一時レジスタT_R0 143およびT_R1 153(表3に示さず)だけが、ハードウェアによって保存されない。
割込みからリターンする時に、通常の実行を再開する前に、下記の情報を計算機に復元する必要がある。O_R0 142、O_R1 152、およびR2 162の内容を、RF26から、それぞれL_R0 114(L6内)、L_R1 124(L8内)、およびL_R2 136(S36内)コピーする必要がある。後者の3つのローカル・レジスタは、それぞれ図12から14に示されている。
さらに、リダクションCVAおよびハイブリッドCVAに関して、R3にストアされた中間の部分的結果を、S36内のラッチ130に復元し、さらに、マルチプレクサ133を介してs_dbusに復元する必要がある(図14参照)。この部分的結果の復元には、RF26からR3を読み取り、そのデータをP34を介し、p_busに、さらにS36を介してs_dbusに転送することが含まれる(図4参照)。
図4からわかるように、3つの独立のオンチップ・メモリ・ブロック、M0 14、M1 16、およびTM20がある。PVA実行中にプログラム・ループ命令をストアする
ループ・キャッシュ22もある。M0 14およびM1 16は、メインのオンチップ・メモリである。M0 14は、命令およびデータのストアに使用される。M1 16は、データのみのストアに使用される。TM20も、データのみのストアに使用され、具体的には、ベクトル実行中に一時ベクトルをストアするのに使用される。
図4に示された1実施形態のメモリ・システムでは、ロード・ユニットL6が、M0
14およびTM20への読取アクセスを有し、ロード・ユニットL8が、M1 16およびTM20への読取アクセスを有し、S36が、M0 14、M1 16、およびTM20のすべてへの書込アクセスを有する。M0 14およびM1 16は、単一ポート式メモリであるが、TM20は、1つの読取ポートおよび1つの書込ポートを有する。これらのメモリ・ブロックの内容、アクセシビリティ、ならびに読取ポートおよび書込ポートの数を、表4に示す。代替実施形態で、スカラ動作およびベクトル動作を許容する他のメモリ構成を実施し得る。
Figure 2006508414

ストリームL、L、およびSをイネーブルされたコンパウンドCVAまたはハイブリッドCVAを実行するために、メモリ・システムは、1サイクルあたり1結果のピーク・スループット・レートを維持するために、1サイクルあたり2つのデータ読取および1つのデータ書込をサポートする必要がある。CVA実行中には命令要求がない。これは、CVA命令がデコードされ、実行されたならば、CVA実行の残りに関してさらなる命令が不要であるからである。2つのデータ読取および1つのデータ書込に加えて、PVA実行では、各サイクルに1つの命令フェッチも必要になる可能性がある。
各サイクルに、図4に示されたメモリ・システムは、M0 14、M1 16、およびTM20を介する2つのデータ読取および1つのデータ書込までをサポートすることが可能であり、同一のサイクルに、ループ・キャッシュ22の使用を介する1つの命令フェッチもサポートすることが可能である。3つのメモリ・ブロックM0 14、M1 16、およびTM20は、ある事前定義のメモリ空間を参照することによってアクセスし得る、すなわち、これらは、メモリ・マッピングされたブロックである。
1実施形態によれば、図4に示されたTM20は、ベクトル実行中に一時ベクトルをストアするのに使用される小さいRAMメモリである。TM20は、ディジタル・フィルタリングの係数ベクトルなど、頻繁に使用される定数ベクトルに使用することも可能である。TM20は、一時ベクトルを保持する、従来のベクトル計算機のベクトル・レジスタの拡張である。従来のベクトル計算機の最適化コンパイラと同様に、最適化コンパイラは、メモリに書き戻す前に、可能な限りこれらの一時ベクトルを操作することを試みる。TM20は、M0 14およびM1 16に対するメモリ帯域幅圧力を減らすのに役立つ。TM20は、これらのより大きいメモリ・ブロックの電力消費を減らすのにも役立つ。
TM20へのアクセスは、ベクトル・レジスタ番号など、ベクトル命令で指定される明示的な参照ではなく、適当なメモリ空間を参照することによって行われる。具体的に言うと、これらのアクセスは、ストリームL、L、およびSをセットアップすることによって行われる。
これらの一時ベクトルを構成し、割り振り、使用する時に、コンパイラは、一時記憶空間の編成においてより高い柔軟性を有する。たとえば、TM20または他の類似する一時メモリが、n要素のベクトルをストアし得る場合に、そのメモリを、それぞれがn/m要素の長さを有するm個のベクトルの記憶空間として編成することも可能である。TM20を、異なる長さの複数のベクトルの記憶空間として編成することも可能である。この場合に、コンパイラは、TM20内のフラグメンテーションを最小にするようにベクトル割振りを管理することを試みる。
次の例では、TM20が、1つの読取ポートおよび1つの書込ポートを有する直接マッピングされる512バイトであると仮定する。TM20を使用して、この例では、ベクトル実行を高速化し得る。
やはり、例2に示されたループを検討されたい。このループが、C[i]=(lsr(A[i],R9)|lsl(A[i]、R8)を実行していることを想起されたい。ベクトル化されたコードを、下に示す。
Figure 2006508414
この例では、一時ベクトルが、TM20内で作成され、割り振られる。第1のCVA命令のデスティネーションおよび第2のCVA命令のソース・オペランドの1つによって、TM20を介して一時ベクトルがアクセスされる。第1のCVA命令は、M0 14からLストリームを介してベクトルAをソーシングし、Sストリームを介して一時ベクトルをTM20に書き込む。第2のCVA命令は、M0 14からLストリームを介してベクトルAをソーシングし、Lストリームを介してTM20から一時ベクトルをソーシングする。また、この命令は、Sストリームを介してM1 16に結果ベクトルを書き込む。
この例では、第2のCVA命令で、3つのデータ・ストリームすなわち、2つの入力、および1つの出力が使用される。これらのベクトル実行では、メモリ衝突は生じない。M0 14およびM1 16だけを使用すると、メモリ衝突が引き起こされる。TM20がなければ、第2のCVA命令は、各結果要素を作るのに2サイクルを要する。
処理されるベクトルのサイズが、TM20のサイズより大きい時には、ベクトル動作が、ソフトウェア制御の下で複数のベクトル動作に分割され、各ベクトル動作が、TM20のストレージで使用可能な長さのベクトルを操作する。この意味で、TM20の使用は、ベクトル・レジスタの「ストリップマイニング(strip−mining)」に類似する。しかし、固定長ベクトル・レジスタと異なって、コンパイラは、この場合に、割振りと使用が可能な一時ベクトルの数とストリップマイニング反復の間のトレードオフに対する柔軟性を有する。
もう1つの例として、ベクトル長がコンパイル時に未知であると仮定して、上のループのストリップマイニングおよびベクトル化を行う。要素サイズは、ワード(4バイト)であることが既知である。各ベクトル要素が、4バイト長であり、TM20が512バイトなので、128要素を超える長さのベクトルは、TM20のオーバーフローを避けるために、多少のストリップマイニングを必要とする。
この例では、2つのCVA命令および1つの一時ベクトルだけが使用され、TM20全体を、128以下の長さの一時ベクトルのストア専用にし得る。下に、C風の言語での、未知のベクトル長nを有するストリップマイニングされたコードを示す。
Figure 2006508414
ある独立のベクトルA、B、C、およびDに関して、ベクトル・リダクション演算
Σ((A[i]*B[i]+C[i])* A[i]*B[i]*D[i])
の実行の例のように、最高の可能な性能レベルを維持しながら電力消費を減らすのにTM20を使用することも可能である。ベクトルAおよびCが、M0 14内にあり、ベクトルBおよびDが、M1 16内にあると仮定する。
3つの一時ベクトルおよび4つのCVA命令(3つのコンパウンドCVAおよび1つのリダクションCVA)を使用する、実行時間に関する最適解を下に示す。
(1)T1[i]=A[i]*B[i];
(2)T2[i]=T1[i]+C[i];
(3)T3[i]=T1[i]*D[i];
(4)リダクション結果=Σ(T2[i]*T3[i])
ベクトルAおよびBは、M0 14およびM1 16にあるので、ベクトルT1は、TM20内で割り振られなければならない。したがって、ベクトルT3は、ベクトルDがM1
16内にあるものとして、M0 14内になければならない。ベクトルCはM0 14にあるので、ベクトルT2は、M1 16またはTM20内に置き得る。表5に、一時ベクトルT1およびT2の割振りの2つの可能な解決を示す。
Figure 2006508414

この解決の両方が、メモリ衝突をこうむらない。両方の解決が、この計算機での最適性能レベルを達成する。しかし、表5の解決(II)は、ベクトルT2がTM20に割り振られるので、より低電力の解決を与える。解決(II)の短所は、一時ベクトルT1およびT2の両方が同時にTM20に存在することを必要とすることである。TM20が、両方のベクトルを保持するのに十分に大きくはない場合に、解決(I)が、唯一の実行可能な解決である。TM20が、単一のベクトルにも小さすぎる場合には、解決(I)をストリップマイニングする必要がある。
本発明の1実施形態のベクトル実行のすべてが、割込み可能である。割込みは、ベクトル計算の完了の前のベクトル実行の一時的中断を引き起こし得る。スカラ・コンテキストに加えて、追加のベクトル・コンテキストを保存し、その結果、割込みからのリターンの際にベクトル実行を正しく再開可能にする必要がある。割り込み時に、これらのベクトル・コンテキストの一部は保存され、一部は破棄される。保存されるベクトル・コンテキストに、表3に示されたすべてのレジスタが含まれる。このレジスタには、SSR42、CIR50、オーバーレイされるインスタンスO_R0 142およびO_R1 152、R2 162、およびRF26内の他のレジスタすなわち、T_R0 143およびT_R1 153を除くRF26内のすべてのレジスタが含まれる。
CVA実行に関して、各ベクトル要素に対する動作は、あるベクトル要素に対する動作の結果が割込み発生時に書き戻されない場合に、すべての中間結果が破棄されるという意味で、「アトミック」である。この1つまたは複数の要素に対して実行されるすべての動作が、割込みからのリターンの際に繰り返されなければならない。リダクションCVA実行またはハイブリッドCVA実行に関して、各サイクルに作られる部分的結果が、RF26内のレジスタR3に継続的に書き戻される。割込み時に、部分的結果が既にRF26にあるので、したがって、部分的結果は自動的に保存される。これによって、部分的結果を保存するための追加の浪費される時間が除去される。しかし、割込みからのリターンの時に、RF26内のレジスタR3の内容が、通常のCVA実行を再会する前にs_dbusに復元される。
PVA実行に関して、ループ本体で作られるすべての中間結果が、レジスタ・ファイル、RF26にストアされる。したがって、中間結果を保存するために追加の時間は浪費されない。一時レジスタT_R0 143およびT_R1 153は、ベクトル・コンテキストの一部として保存されない。割込みからリターンする時に、これらの一時物をフェッチしたcs−load命令は、入力ストリームがイネーブルされる場合に再初期化される。その後、一時レジスタT_R0 143およびT_R1 153が、通常のPVA実行
を再会する前にそれ相応に更新される。この場合に、ハードウェアは、割込みをサービスする過程の間にメモリ位置が変更されなかったと仮定する。
図18に、図4のプログラム・シーケンサ24の一部を示す。ループ実行おおび分岐のターゲットを監視するために、カウンタ・ベースの方式を使用し得る。PVA命令に出会う時に、その命令で指定されるLoop_sizeが、図4のプログラム・シーケンサ24などのハードウェアによって取り込まれる。さらに、IXR70(図11参照)を使用して、ループ本体のどの命令が現在実行されているかを追跡する。IXRの実施の1実施形態を、図18に示す。IXR70は、ループ本体の中でローカル・プログラム・カウンタ(PC)のように振る舞う。ループの最初の命令が実行されている時に、IXR70に1がセットされる。順次実行される命令ごとに、IXR70が1つ増分される。ループの最後の命令が実行されている時に、IXR70はLoop_sizeと等しい。IXR70が(Loop_size−1)と等しい時に、命令フェッチが、ループの最初の命令に向けられる。最後の命令が、シーケンシャル命令であるか、命令が制御フローの変更を引き起こさない(ターゲットがループ本体の外部にある)場合に、実行が、ループの先頭に転送され、IXR70が、1にリセットされる。
IXR70は、加算器72の出力であるIXR_count値を受け取る。IXR70にストアされた値は、一方の入力として加算器72に供給され、他方の入力は、マルチプレクサ74から来る。マルチプレクサ74への一方の入力は、1であり、他方の入力は、分岐命令の変位フィールドである。この形で、加算器72は、次の順次値または分岐変位値のいずれかを出力する。IXR70は、IXR70を1にリセットするreset信号と、次のIXR_countを受け入れるload信号も受け取る。
分岐がPVA実行中に採用される(順方向または逆方向のいずれか)場合に、分岐命令の分岐変位フィールドが、IXR70に加算される。この加算演算は、マルチプレクサ74および加算器72によって実行される。マルチプレクサ74は、この場合に、加算器72への分岐命令の変位フィールドを選択する。このレジスタ値と分岐変位の合計が負またはループ・サイズを超える場合には、分岐ターゲットがループ本体の外部にあることが示され、PVAループ実行が終了する。
図18を続けると、IXR_count値も、入力としてブロック76、78、および80に供給される。IXR_countは、継続的に0、Loop_size、およびLoop_size−1と比較される。(IXR_count<0)または(IXR_count>Loop_size)である場合に、命令がループ本体の外で実行されようとしていることが示される。ブロック78で(IXR_count<0)と判定される場合に、ブロック78の出力が、「or」ゲート82への入力としてアサートされる。同様に、ブロック80で(IXR_count>Loop_size)と判定される場合に、ブロック80の出力が、「or」ゲート82にアサートされる。どちらの場合でも、「or」ゲート82の出力によって、ループ実行が終了される。また、ブロック76で(IXR_count==Loop_size−1)と判定される場合に、ループの先頭からの命令フェッチが開始される。
PVA命令の最後の反復の終りに向かって、ループ内の最後の命令が、ループ本体の外のターゲット・アドレスを有する採用される条件分岐である場合に、ループの最初の命令を誤ってフェッチし、実行することに関する1サイクルのペナルティをこうむる。この場合に、この命令の実行の結果が、却下される、すなわち、結果が、破棄され、書き戻されない。分岐ターゲットを使用する新しい命令フェッチが開始される。
割込みからPVA実行を再開する時に、まず、必要なループ制御情報を回復しなければ
ならない。これは、複数の形で行い得る。1実施形態で、PVA命令に最初に出会う時に、PC(PVA命令のアドレス)が、一時ハードウェア位置に保存される。割込み時に、このハードウェア・コピーがPCとして保存される。割込みからリターンする時に、まずPCを使用してPVA命令をフェッチして、Loop_size、cs−store−indexなどを含むループ制御情報のすべてを回復する。この情報が回復された後に、IXR70の内容がPCに加算される。PVAループ実行が、新しいPCによってポイントされる命令から継続される。
もう1つの実施形態で、PVA実行が割り込まれる時に、PCは、ループ本体の中の、実行が割り込まれた命令をポイントする。このPCを、実行コンテキストの一部として保存する。割込みからリターンする時に、IXR72の内容をPCから減算して、PVA命令アドレスを得る。次に、PVA命令をフェッチして、cs−store−index、Loop_sizeなどを含むループ制御情報のすべてを回復する。
PVA実行では、「cs−store」ラベルに配置された命令およびそれに関連するcs−store動作の実行が、「アトミック」動作である。例4からのベクトル化されたPVAループをもう一度検討されたい。
Figure 2006508414
「movt」命令および関連するcs−store動作は、「アトミック」である。cs−storeが、割込みに起因して完了しない場合に、「movt」命令も、「実行されない」と考えられる。割込みからリターンする時に、「movt」命令から実行が再開される。
上で示したベクトル化された例のそれぞれについて、コンパイラは、元のコードを評価するが、このコードは、高水準言語プログラミング言語またはアセンブリ・コードで記述され得る。コンパイラは、コードを分析して、CVA命令および/またはPVA命令に適用可能なループおよび他の構成を探す。本発明の1実施形態によるコンパイルの処理フローを、図19に示す。
図19からわかるように、この処理では、まず、判断菱形170で、ループまたはコードのセクションが、CVA実行を使用してベクトル化可能であるかどうかを判断し、そう
である場合に、ブロック171で、少なくとも1つのCVA命令を使用してコードをベクトル化する。次に、ブロック172で、CVAベクトル化されたループの実行時間を推定する。次に、判断菱形173に継続する。
その代わりに、コードがCVAベクトル化可能でない場合にも、判断菱形173に継続されて、CVA実行およびPVA実行の組合せを使用してコードをベクトル化可能であるかどうかを判定する。そうである場合には、ブロック174でそのような組合せを使用してコードをベクトル化し、ブロック175で、その実行速度を推定する。その後、処理フローは判断菱形176で継続される。
コードが、CVA単独またはCVA/PVA組合せのいずれによってもベクトル化可能でない場合にも、処理は、判断菱形176に継続されて、コードがPVAベクトル化可能であるかどうかを判定する。そうである場合には、ブロック177で、少なくとも1つのPVA命令を使用してコードをベクトル化する。ブロック178で、その実行時間を推定する。
判断菱形179では、ベクトル化されたコードの実行速度が、上で述べたベクトル化方法のいずれかを使用して、元のループより改善されるかどうかを判定する。改善がない場合には、ブロック181で、元のコードを変更しない。実行速度が改善された場合には、ステップ180で、最短の実行時間を有する最良のベクトル化方法を使用するコードを実施する。この実施形態では、コンパイラが、可能なすべてのベクトル化方法を試行し、その中から最良の方法を選択する。この実施形態では、実行時間が、唯一の選択判断基準として使用される。他の実施形態では、電力消費などの他の判断基準の使用を組み込んで、最良のベクトル化方法を選択することも可能である。
代替実施形態に、まずCVA構成だけを使用することによるコードのベクトル化を組み込むことも可能であることに留意されたい。この実施形態では、次に、コードがCVAベクトル化可能でない場合に限ってCVA/PVAの組合せを試行する。CVA/PVAの組合せを使用してもコードがベクトル化可能でない場合には、PVA構成を使用するベクトル化を試行する。この代替実施形態では、最も頻繁に、CVAベクトル化が実行速度の最大の改善を作り、次がCVA/PVAの組合せであり、最後がPVAベクトル化であることが認識されている。この処理は、コードをベクトル化し得る最初の方法を見つけた時に終了する。この代替実施形態は、実行時間を推定するのに使用されるプロファイル情報が入手可能でない時に有利である。他の代替実施形態で、所与のアプリケーションに適する他の順序付けを見つけ得る。
この実施形態によれば、PVA実行は、各サイクルに1つの命令を発行することに制限される。代替実施形態では、PVA実行を、図2に示されたものに類似する、各サイクルに複数の独立の命令を発行する機能を組み込むように拡張し得る。
そのような拡張の1つである二重発行擬似ベクトル計算機を、図21に示すが、この図では、各サイクルに、2つの独立の命令を、2つの独立の計算ユニット、P1 235およびP2 234に発行し得る。スカラ・モードまたはPVAモードで実行される時に、2つの結果を、レジスタ・ファイルRF236またはメモリに書き戻し得る。
図21で、レジスタ・ファイルRF226ならびにデータ・ストリームLおよびLは、独立に、マルチプレクサ228、230、231、232、および233にデータを供給する。マルチプレクサ228および230は、機能ユニットP2 234にデータを供給する。マルチプレクサ231および232は、機能ユニットP1 235にデータを供給する。P2 234は、resultl_busを介してS236およびRF226
にデータを供給する。P1 235は、マルチプレクサ237およびS236にデータを供給する。マルチプレクサ241は、S236にデータを供給する。S236は、データ・ストリームSを介してメモリ・システムに、ならびにマルチプレクサ237および241にデータを供給する。マルチプレクサ237は、result2_busを介してRF226にデータを供給する。RF 226も、マルチプレクサ228、230、231、および232にデータを供給する。
この二重発行擬似ベクトル計算機では、3タイプのCVAすなわち、コンパウンドCVA、リダクションCVA、およびハイブリッドCVAがある。この3タイプのCVAの依存性グラフを、図22に示す。図5の依存性グラフと対照的に、この計算機では、リダクションCVAおよびハイブリッドCVAに、下記の一般形式を有する3入力算術関数s_opが含まれる。
スカラT、U、およびVについて、T s_op U s_op V
この依存性グラフでは、オペランドW、X、Y、およびZが、独立に、入力ストリームL、入力ストリームL、または指定されたレジスタからソーシングし得る。このオペランド・ソーシング・モードを、本明細書では独立ソーシング・モードと称する。その代わりに、これらのオペランドのそれぞれが、入力ストリームLまたはLの0拡張された上位ハーフワードまたは下位ハーフワードからソーシングすることも可能である。このオペランド・ソーシング・モードを、本明細書ではクロス・ソーシング・モードと称する。表6に、独立ソーシング・モードおよび2つの異なるクロス・ソーシング・モード(クロス・ソーシング・モードIおよびII)を示す。
Figure 2006508414

この表で、{0、L[15:0]}は、入力データ・ストリームLからの0拡張された下位ハーフワードを表す。{0、L[31:16]}は、入力データ・ストリームLからの0拡張された上位ハーフワードを表す。類似する表記が、Lストリームに使用される。これらの0拡張動作の結果は、32ビット・オペランドである。コンパウンドCVAの一般形式は、次のように表し得る。
=(W pl_op X)s_op(Y p2_op Z) i=0、...、n−1
リダクションCVAの一般形式は、次のように表し得る。
=(W pl_op X)s_op(Y p2_op Z);
=(W pl_op X)s_op(Y p2_op Z)s_op Si−1、 i=1、...、n−1;
R=Sn−1
ここで、Sは、i番目の部分的結果を表し、Rは、ベクトル・リダクション演算のスカラ結果を表す。
ハイブリッドCVAの一般形式は、S、i=0、...、n−1が、Sストリームを介してメモリに書き込まれることを除いて、リダクションCVAと同一である。
クロス・ソーシング・モードの多数の使用の1つが、ベクトルA、B、およびCの要素のすべてが複素数である複素ベクトル乗算C[i]=A[i]*B[i]、i=0、...、n−1である。複素数は、メモリ・システム内で2つの16ビット・ハーフワードの連結として表すことが可能であり、上位ハーフワードは、複素数の実数部を表し、下位ハーフワードは、複数数の虚数部を表す。この表現を使用すると、複素数が、32ビット・データによって完全に表される。
2つの複素数XおよびYの乗算の結果は、(Re X*Re Y−Im X*Im Y)+j(Re X*Im Y+Im X*Re Y)によって与えられ、ここで、「Re
W」は、複素数Wの実数部を表し、「Im W」は、複素数Wの虚数部を表す。
図21に戻ると、2つの複素ベクトルAおよびBの間の乗算を、2つのコンパウンドCVAを使用することによって実行し得る。これらのCVAの両方が、Lストリームを介するベクトルAおよびLストリームを介するベクトルBでストリーム化される。このCVAの両方で、p1_opおよびp2_opが、乗算関数であり、s_opが、加算関数である。第1CVA命令では、クロス・ソーシング・モードIを使用し、結果ベクトルCの虚数部を含む結果ベクトルが作られる。第2CVA命令では、クロス・ソーシング・モードIIを使用し、結果ベクトルCの実数部を含む結果ベクトルが作られる。ストリームSについて2のオペランド・サイズ(ハーフワード)および4のストライド値(1ワード離れる)を使用することによって、この2つのCVA命令を、同一のベクトル位置Cに書き込むことが可能であり、具体的には、2つのCVA命令を、互いの結果を上書きせずにベクトルCに書き込み得る。2つのCVA命令の実行の後に、ベクトルCの各要素に、要求された実数値および虚数値が含まれる。
上で説明したクロス・ソーシング・モードを、PVA実行にも使用し得る。この場合に、p1_opを実行するP1 235と、p2_opを実行するP2 234によって作られる2つの結果が、レジスタ・ファイルRF 226内の2つの別個のレジスタおよび/またはメモリ・システムに独立に書き戻される。
図27から36に、あるプログラム・ループ命令に関連するサイズまたは長さを拡張することによって、PVA実行に関連する能力を高める方法を示す。本発明の1実施形態では、PVA実行中に処理される命令などのループ実行に関連するある命令に、標準命令サイズを使用する標準部分と、第2の命令サイズを使用する増補命令部分が含まれる。増補命令部分の追加によって、ループ実行中に処理される増補命令の総合的なサイズが、強化された実行能力を提供するように拡張される。本発明のいくつかの実施形態は、あるプログラム・ループの命令に伴う追加の機能性を含めることによって、クリティカル・ループ実行の性能を高めるという長所を有する。
図27を参照すると、本発明の1実施形態による、標準命令および増補命令を処理するシステムを示すブロック図が示され、システム400として全体的に参照される。デコーダ430および440は、プログラム405の命令を処理するのに使用される。プログラム405は、メモリ450にストアされる。プログラム405には標準命令460および465ならびに増補命令470が含まれる。増補命令470には、標準命令部分すなわち標準命令部分475と、増補命令部分である増補命令部分477が含まれる。標準デコーダ430は、標準命令460および465ならびに増補命令470の標準命令部分475
の処理に使用される。副デコーダ440は、増補命令470の増補命令部分477の処理に使用される。
1実施形態で、標準デコーダ430が、標準命令460および465など、命令の特定のグループに関連する標準コマンドの処理に使用される。命令フェッチ・コンポーネント420が、メモリ450から次の命令にアクセスするのに使用される。たとえば、標準デコーダ430は、プログラム405の次に処理される命令にアクセスするように命令フェッチ・コンポーネント420に指示し得る。次の命令のアドレスに関連するメモリ・アドレスを命令フェッチ・コンポーネント420に供給して、メモリ450内の次の命令の位置を示し得る。代替案では、命令フェッチ・コンポーネント420が、プログラム・カウンタ(図示せず)を監視して、次に処理される命令のアドレスを判定し得る。
1実施形態で、命令フェッチ・コンポーネント420が、標準命令460の命令にアクセスする。したがって、命令フェッチ・コンポーネント420は、処理のために標準デコーダ430に命令を供給する。1実施形態で、標準命令460および465の命令に、スカラ命令または非ループ命令が含まれる。増補命令470の命令に、プログラム・ループ命令が含まれる。したがって、システム400は、増補命令470を処理するためにループ実行モードまたはPVA実行モードに切り替え得る。1実施形態で、ループ実行モードまたはPVA実行モードが、PVA命令またはループ初期化命令によってトリガされる。たとえば、増補命令470の最初の命令または標準命令460の最後の命令を、PVA実行を開始するのに使用されるPVA命令とすることが可能である。その代わりに、ループ実行またはPVA実行を、「WHILE」コマンドまたは「DO UNTIL」コマンドなどのプログラム・ループ命令によってトリガし得る。ループ実行モードまたはPVA実行モードをトリガする他の方法を、本発明の範囲から逸脱せずに使用可能であることに留意されたい。さらに、システムは、コンパイル処理中に、標準命令の代わりに増補命令を使用可能にし得る。コンパイラは、後で説明するように、ループまたはループ開始コマンドに出会う時に、増補命令の使用を可能にし得る。
システム400が、PVA実行モードまたはループ実行モードに入ったならば、副デコーダ440がイネーブルされる。1実施形態で、副デコーダ440は、INTER−DECODER CONTROL信号410を介するなど、標準デコーダ430によってイネーブルまたはディスエーブルされる。したがって、1実施形態で、副デコーダは、命令フェッチ・コンポーネント420に類似する命令フェッチ・コンポーネント421を使用して、標準デコーダ430によってアクセスされる標準命令部分475の標準命令部分に関連する増補命令部分477の増補命令部分にアクセスする。代替実施形態では、単一の命令フェッチ・コンポーネント420だけが、標準命令部分475ならびに増補命令部分477の両方をメモリ450からフェッチするのに使用し得る。そのような実施形態では、副デコーダ440が、命令フェッチ・コンポーネント420および標準デコーダ430によって増補命令470の増補命令部分477を受け取り得る。そのような代替実施形態では、標準デコーダ430が、修正またはデコードを実行せずに、副デコーダ440に増補命令部分477を供給し得る。代替案では、命令フェッチ・コンポーネント420が、副デコーダ440に増補命令部分477を直接に供給し得る。
1実施形態で、増補命令470が、プログラム・ループ480の一部である。プログラム・ループ480には、ループ初期化コマンドと、それに続くK個の増補命令の組が含まれ、ここで、Kは、1を超える、増補命令の数である。1実施形態で、ループ初期化コマンドが、ループ実行を初期化するために含まれる。たとえば、ループ初期化コマンドは、K個の増補命令が処理される反復の回数を示し得る。他のプログラム・ループに関連する命令を、標準命令460および465内に含め得ることに留意されたい。しかし、標準命令460および465のプログラム・ループ命令は、増補命令470のプログラム・ルー
プ命令と比較して、増補命令部分を有しない。K個の増補命令は、標準コードおよび増補コードのK個の組に分解される。
標準コードには、フォーマットにおいて標準命令460および465の少なくとも一部の命令に似るコードが含まれる。たとえば、標準コードに、オペコードおよび1つまたは複数のオペランドを含めることが可能であり、オペコードは、オペランドに対して実行される動作を指定し得る。標準コードは、標準デコーダ430を使用して処理される。1実施形態で、標準命令部分475の標準コードに、増補命令470の命令に関連する、ビット0からNなどのビットの第1の組が含まれる。増補命令部分477の増補コードに、増補命令470の命令の、ビットN+1からMなどのビットの第2の組が含まれる。本発明の範囲から逸脱せずに、標準コードで、他のフォーマットを使用し得ることを諒解されたい。NおよびMは、特定のビット位置を指定するのに使用され、MはNより大きい。1実施形態で、標準命令460および465ならびに標準命令部分475が、同一の固定サイズを有し、類似するか同一の命令エンコーディングを使用し得る。
増補命令部分477のコードによって、標準命令部分475の処理コードに関連する特定の拡張機能性を指定することが可能である。1実施形態で、標準命令部分475の処理が、増補命令部分477の処理に基づく。1実施形態で、標準デコーダ430が、standard_code_1などの特定の標準命令部分475にアクセスするので、副デコーダ440は、augmented_code_1などの関連する増補命令部分477にアクセスする。standard_code_1の処理は、augmented_code_1の処理に依存し得る。たとえば、1実施形態で、augmented_code_1を使用して、standard_code_1の条件実行が指定される。システム400の条件コードとaugmented_code_1によって指定される条件とのマッチングに応じて、副デコーダ440は、INTER−DECODER CONTROL信号410を使用して、標準デコーダ430でのstandard_code_1の処理を取り消し得る。
増補命令部分477は、標準命令部分475に関連する実行の他の形を指定するのに使用し得る。たとえば、増補命令部分477の個々のコードによって、標準命令部分475の個々のコードに関連する早期終了を指定し得る。したがって、増補命令部分477の命令によって、プログラム・ループ480のさらなる実行を終了しなければならないことを示し得る。したがって、システム400の条件コードと増補命令部分477の命令によって指定される条件に応じて、副デコーダ440は、INTER−DECODER CONTROL信号410を提供して、増補命令470のさらなる命令をスキップし得る。たとえば、標準デコーダ430に、増補命令470の代わりに標準命令465の最初の命令を処理するように指令し得る。
増補命令部分477のコードによって、標準命令部分475の関連コードを処理する時の早期継続を指定することも可能である。たとえば、システム400の条件コード値と、副デコーダ440によって処理されている増補命令部分477の現在のコードによって指定される条件とに応じて、副デコーダ440は、共通の標準デコーダ430にINTER−DECODER CONTROL信号410を供給して、プログラム・ループ480の次の反復をスキップし得る。
増補命令部分477のコードを使用して、標準命令部分475のコードを処理するための追加のオペランド指定子を提供することも可能である。1実施形態で、増補命令の増補コードによって、第1オペランドおよび第2オペランドの処理からの値が返される第3レジスタ・オペランドを指定し得る。1実施形態で、増補コードにイネーブル・ビットを含めて、デスティネーション・オペランドとしての第3オペランドの使用をイネーブルする
ことも可能である。増補命令部分477に関連するコードによって、標準命令部分475のコードの処理に関するオペランドとして使用される即値フィールドをエンコードすることも可能である。代替案では、増補命令部分477によって、標準命令部分475で既にエンコードされている即値フィールドの長さを拡張するのに使用される即値フィールドをエンコードすることも可能である。この拡張の結果として、即値フィールド・オペランドの結果の長さが増やされる。
本発明の1実施形態では、増補命令部分477を、後で図28で示すように、関連する標準命令部分475からメモリ450に別々にストアし得る。増補命令部分477を、後で図29で示すように、標準命令460の命令などの別々のコマンドを介して指定し得る。代替案では、標準命令部分475を、後で図30で示すように、標準命令部分475の各関連する部分に隣接して提供し得る。
本発明の1実施形態で、増補命令部分477が、標準デコーダ430で処理される関連する標準命令部分475と時間的に並行して副デコーダ440によって処理される。
図28を参照すると、本発明の1実施形態による、メモリに増補命令部分をストアする形を示すブロック図が示されている。標準命令460および465に、標準デコーダ430(図27)などの標準命令デコーダを使用して処理される標準命令が含まれる。1実施形態で、標準命令460および465に、同一の固定命令長が含まれる。増補命令が、特定の命令に関連する機能性を拡張するために提供され、この増補命令には、標準命令460および465の固定命令長より長い命令長が含まれる。増補命令は、標準命令部分510および増補命令部分515からなる。図示の実施形態では、増補命令部分515が、メモリ505のうちで、関連する標準命令部分510と異なる部分にストアされる。
増補命令は、一般に、ループ実行命令またはPVA実行命令である。標準命令部分510に、標準命令460および465に類似するコマンドが含まれ、標準命令460および465に関連するものと同一の固定命令長を含め得る。さらに、標準命令部分510を、標準命令460および465と同一の標準命令デコーダを使用して処理し得る。1実施形態で、標準命令部分510が、標準命令部分510が標準命令460および465に関連して処理される順序でメモリ505にストアされる。たとえば、標準命令部分510は、標準命令460が処理された後、標準命令465が処理される前に処理され得る。1実施形態で、標準命令部分510および増補命令部分515は、プログラム・ループに関連する。ループ初期化命令511を使用して、ループ実行および/または増補命令処理を初期化し得る。
増補命令部分515は、標準命令部分510に関連し、関連する標準命令部分510と時間的に並行して処理される。しかし、増補命令部分515は、標準命令部分510と別々のメモリのブロックにストアされる。たとえば、図示の実施形態で、増補命令部分515が、メモリ505内で、標準命令465の後にストアされる。増補命令レジスタ520が、増補命令部分515へのポインタを提供する。1実施形態で、増補命令レジスタ520が、レジスタ・ファイルにストアされる複数のレジスタの一部である。増補命令レジスタ520へのポインタを、命令を介して提供し得る。たとえば、ループ初期化命令511に、増補命令レジスタ520をポイントする命令フィールドを含め得る。その代わりに、ループ初期化命令511などの命令を使用して、増補命令レジスタ520のポインタを初期化して、増補命令部分515など、次に処理される増補命令部分の組の位置を提供し得る。
増補命令レジスタ520を使用して、標準命令部分510の関連する標準コードのとの並列処理のために、増補命令部分515の増補コードにアクセスし得る。たとえば、standard_code_1が標準命令デコーダによってアクセスされる時に、副デコー
ダ440(図27)などの副命令デコーダによってaugmented_code_1にアクセスし得る。増補命令レジスタ520によって提供されるポインタを使用して、次に処理される増補命令部分のメモリ・アドレスを更新し得る。したがって、K個の増補命令部分のそれぞれを、増補命令レジスタ520のポインタを介して、関連する標準命令部分と並列に処理し得る。
1実施形態で、増補命令レジスタ520に、各増補命令部分のポインタが含まれる。代替案では、増補命令レジスタ520を、増補命令部分515の最初の増補命令部分augmented_code_1だけに初期化し得る。augmented_code_1にアクセスした後に、増補命令レジスタ520に関連するメモリ・ポインタを、augmented_code_2をポイントするように増分し得る。同様に、増補命令レジスタ520の単一ポインタによって、K個のすべての増補命令部分へのアクセスを提供し得る。
図29を参照すると、本発明の1実施形態による、メモリ内で増補命令を提供する形を示すブロック図が示されている。命令のプログラムが、メモリ605にストアされる。命令のプログラムに、標準命令460、ループ初期化命令610、標準ループ命令620、および標準命令465が含まれる。1実施形態で、命令460、620、および465の各部分に、同一の固定命令長が含まれる。ループ初期化命令610は、命令460、620、および465と同一の命令長を有する標準初期化命令部分615および増補命令部分617の両方を含むように拡張される。
ループ初期化命令610は、標準命令460および465と比較して、拡張された命令長を有する増補命令として提供される。標準初期化部分615を使用して、標準ループ命令620の実行の初期化を提供し得る。たとえば、標準初期化命令部分615を使用して、増補命令部分617の処理をイネーブルすることが可能であり、あるいは標準ループ命令620のループ実行またはPVA実行をイネーブルすることが可能である。他の形のプログラム・ループ命令を、本発明の範囲から逸脱せずに標準命令460または465に含め得ることに留意されたい。
増補命令部分617を使用して、追加の処理機能を指定し得る。たとえば、増補命令部分617によって、標準ループ命令620のコード部分に関して実行される追加処理を指定し得る。たとえば、増補命令部分617のビットの第1の組によって、標準ループ命令620のstandard_code_1の処理の早期終条件を指定し得る。さらに、増補命令部分617のビットの第2の組を使用して、標準ループ命令620のstandard_code_2の処理を早期終了するように指定し得る。1実施形態で、増補命令部分617でエンコードされたビット・マスクのK個の組を使用して、標準ループ命令620の個々の命令の早期終了機能をイネーブルし、かつ/または指定し得る。たとえば、増補命令部分617のビットの第1の組によって、標準ループ命令620のstandard_code_1での早期終了を指定し得る。ビットの第1の組に、早期終了をイネーブルするイネーブル・ビットと、早期終了をトリガする条件を指定する条件ビットを含め得る。同様に、増補命令部分617のビットの第2の組によって、standard_code2など、標準ループ命令620の別の命令の早期終了を指定し得る。
代替案では、増補命令部分617を使用して、標準ループ命令620のそれぞれに早期継続機能を増補し得る。1実施形態で、増補命令部分617でエンコードされるビット・マスクのK個の組を使用して、標準ループ命令620の個々の命令の早期継続機能をイネーブルし、かつ/または指定する。
他の機能性を、増補命令部分617と共に提供することも可能であることに留意されたい。たとえば、増補命令部分617を使用して、標準ループ命令620のデスティネーシ
ョン・オペランドを指定し得る。
もう1つの例で、増補命令部分617を使用して、標準ループ命令620によって使用される様々な入力データ・ストリームおよび出力データ・ストリームをイネーブルするためなど、マスク・ベクトルを提供し得る。ループ初期化命令610以外の命令を使用して、増補命令部分617を提供し得ることを諒解されたい。
図30を参照すると、本発明の1実施形態による、増補命令部分727をストアする形を示すブロック図が示されている。命令のプログラムが、メモリ705に保管され、この命令のプログラムには、標準命令460、ループ初期化命令711、増補命令720、および標準命令465が含まれる。標準命令460および465ならびにループ初期化命令711に、標準エンコーディングの命令と、同一の固定命令長が含まれる。増補命令720に、標準命令部分725および増補命令部分727が含まれる。1実施形態で、標準命令部分725に、同一の標準エンコーディングの標準コードと、標準命令460および465と同一の固定命令長が含まれ、標準命令部分725は、標準命令デコーダによって処理される。しかし、増補命令部分727は、副命令デコーダを使用して、標準命令部分725と時間的に並行して処理される。
1実施形態で、ループ初期化命令711が、増補命令720に関連するループ実行モードをトリガするのに使用される。1実施形態で、ループ初期化命令711が、さらに、増補命令720の増補命令部分727を処理するのに使用される副命令デコーダをトリガするのに使用される。標準命令部分725は、標準命令460に関してそれらが処理される形でメモリにストアされ、標準命令460は、増補命令720および標準命令465の前に処理され、標準命令465は、増補命令720の後で処理される。
増補命令部分727に、標準命令部分725のコードの機能を拡張するコードが含まれる。増補命令部分727のaugmented_code_1は、標準命令部分725のstandard_code_1に対応する。増補命令部分727のアクセスを単純にするために、増補命令部分を、メモリ705内の関連する標準命令部分725に隣接してストアし得る。たとえば、augmented_code_1が、メモリ705内でstandard_code_1の次にストアされ、augemtned_code_2が、standard_code_2の次にストアされる。同様に、K個の増補命令部分のそれぞれが、めいめいの標準命令部分の次にストアされる。増補命令部分727を、標準命令部分725の次にストアされるものとして説明したが、増補命令部分727を、本発明の範囲から逸脱せずに各関連する標準命令部分の前に保管し得ることに留意されたい。
前に述べたように、増補命令部分727は、標準命令部分725に関連する処理機能性を拡張するか指定し得る。たとえば、増補命令部分は、特定の標準命令部分に関連する条件実行条件をイネーブルし、指定することが可能であり、この条件実行では、特定の標準命令部分の処理が、増補命令部分に関連する条件に基づいて条件的に実行される。増補命令部分は、特定の標準命令部分に関連する早期継続条件または早期終了条件を指定することも可能である。
図31を参照すると、本発明の1実施形態による、増補命令に関連するフィールドを示すブロック図が示されている。増補命令800などの増補命令が、あるプログラム・ループの命令に追加機能性を提供するのに使用される。増補命令800は、標準部分810および増補部分820に分割される。増補部分820には、プログラム・ループ内の標準命令部分810を処理する早期継続機能および早期終了機能を指定するビットE、C、E、およびCが含まれる。
システム400(図27)など、増補命令800の処理に使用されるシステムに関連する条件コードは、システムによって処理されるコマンドに基づいて変更される。たとえば、「complt」命令をシステムによって処理して、2つの別々のレジスタ値を比較し得る。その比較に基づいて、条件コードを変更して、真の状態または偽の状態に影響を及ぼす。1実施形態で、処理システムが、条件コードに、現在の状態を示すために「1」または「0」のいずれかの値をセットする。代替実施形態では、複数の条件コード、あるいは複数のビットまたは値を有する条件コードが、存在することが可能であり、増補命令部分820によって指定され得る。
条件コードの現在値に基づいて、増補命令800は、増補命令800に関連するプログラム・ループの処理に影響を及ぼし得る。前に述べたように、標準命令デコーダを使用して、標準命令部分810を処理することが可能であり、副命令デコーダを使用して、増補命令部分820を処理することが可能である。増補命令部分820は、早期終了条件を確立し得る。早期終了条件を用いると、処理システム400が、増補命令800に関連するプログラム・ループのさらなる処理を取り消し得るようになる。早期終了イネーブル・ビットEを使用して、増補命令800の早期終了機能をイネーブルし得る。早期終了条件ビットCをセットして、「0」または「1」のいずれかの値にセットされることによって特定の論理条件を示し得る。早期終了ビットEがイネーブル状態にセットされ、早期終了条件ビットCが、処理システムの条件コードの値と等しい場合に、プログラム・ループのさらなる実行が停止される。標準命令デコーダが、標準命令部分810を処理したならば、次に処理される命令は、プログラム・ループの外の次の命令である。
早期終了に似て、早期継続ビットEおよびCの組によって、早期継続条件を示し得る。早期継続イネーブル・ビットEを使用して、増補命令800に関連する早期継続をイネーブルし得る。早期継続イネーブル・ビットEに、イネーブル状態がセットされ、早期継続条件ビットCの値がシステムの条件コードの値と同等である場合に、システムは、プログラム・ループの現在の反復でのさらなる命令の処理を停止し、プログラム・ループに関連する次の反復に継続し得る。
他の機能も、増補命令部分820に似た増補命令部分の使用を介して提供し得る。たとえば、増補命令部分によって、増補命令の条件実行機能を指定し得る。図32を参照すると、本発明の1実施形態による、条件実行機能を提供する増補命令に関連するフィールドを示すブロック図が示されている。増補命令750などの増補命令を使用して、一部のプログラム・ループの命令に追加機能を提供する。増補命令750は、標準命令部分752および増補命令部分751に分割される。
増補命令部分751に、条件実行制御フィールド755が含まれる。条件実行制御フィールド755に、条件実行のイネーブル・ビットEおよび条件実行の条件コードCが含まれる。条件実行のイネーブル・ビットEによってイネーブルされる時に、増補命令750の実行が、条件実行の条件コードCの値に基づいて条件的に行われる。条件実行の条件コードCによって指定される条件が満たされる時に、標準命令部分752の実行が実行される。しかし、条件実行の条件コードCによって指定される条件が満たされない時には、標準命令部分752の実行が実行されず、増補命令750は、効果的に「ノーオペレーション」命令として扱われる。条件実行制御フィールド755を提供することによって、標準命令部分752の通常の実行を、有利に条件的にし得る。代替実施形態で、条件実行制御フィールド755を拡張して、複数の条件コードおよび/または複数のビットを有する条件コード・フィールドを含め得ることに留意されたい。
増補命令の増補命令部分を使用して、標準命令部分の処理の追加オペランドを提供することも可能である。1実施形態で、標準命令部分が、2オペランド命令であり、算術演算
などの動作が、2つのソース・オペランドからの値を使用して実行される。普通のシステムでは、2オペランド命令の処理の結果は、ソース・オペランドの1つにストアされ、そのソース・オペランドの元の値が破壊される。その代わりに、増補命令部分を使用して、第1オペランドおよび第2オペランドの処理からの値を返し得る第3オペランドを提供し得る。
図33を参照すると、本発明の1実施形態による、追加オペランドを含む増補命令に関連するフィールドを示すブロック図が示されている。増補命令830などの増補命令を使用して、あるプログラム・ループの命令に追加機能性を提供する。増補命令830は、標準命令部分850および増補命令部分840に分割される。増補命令部分840には、追加オペランド指定子Rcが含まれ、このRcを使用して、前に述べたように第3オペランドを指定し得る。この第3オペランド値は、標準命令部分850の結果を受け取るデスティネーション・レジスタ指定子として使用し得る。追加オペランド指定子Rcを提供することによって、標準命令部分850の通常の破壊的動作を有利に防ぎ得る。
増補命令部部分を使用して、特定の標準命令部分の即値フィールドを指定することも可能である。したがって、標準命令部分によって、増補命令部分によって指定される即値フィールドをソース・オペランドとして使用し得る。その代わりに、増補命令部分を使用して、標準命令部分で指定される即値フィールドの長さを拡張し得る。
図34を参照すると、本発明の1実施形態による、即値フィールドを提供する増補命令に関連するフィールドを示すブロック図が示されている。増補命令860などの増補命令を使用して、あるプログラム・ループの命令に追加機能性を提供する。増補命令860は、標準命令部分870および増補命令部分880に分割される。増補命令部分880に、即値フィールド881が含まれ、即値フィールド881は、ソース・オペランドとして使用するか、これを使用して標準命令部分870で既に指定されている即値フィールドの長さを拡張し得る。拡張として即値フィールド881を提供することによって、標準命令部分870の即値の制限された範囲を有利に回避し得る。
本発明の1実施形態では、図32、33、および34に関して説明した機能を、増補命令部分をエンコードすることによって組み合わせ、選択し得る。図35を参照すると、ブロック図に、増補命令900に関連するエンコーディングおよび機能の例が示されている。増補命令900は、標準命令部分910および増補命令部分920からなる。増補命令930の増補命令部分は、即値フィールド932を備える。増補命令940の増補命令部分は、追加オペランド指定子Rcを備える。増補命令950の増補命令部分は、早期継続/早期終了制御フィールド952を備える。増補命令930および940は、条件実行制御フィールド934および944によって増補命令の条件実行を指定する機能も備える。
図35では、3つの追加機能が、増補命令部分920の上位ビット931、941、および951のエンコーディングによって区別される。図27の副デコーダ440は、これらの上位ビットを検査して、これらの増補命令部分によって指定される追加機能を判定する。
増補命令を使用して、標準命令幅を使用して可能ではないさらなる機能を定義する拡張命令幅を提供し得る。たとえば、前に図4で述べた実施形態は、データ・ストリーミング・サポートを提供した。図4で述べた実施形態では、2つの入力ストリーム、L6およびL8ならびに単一の出力ストリームS36だけがサポートされた。しかし、増補命令を使用すると、データ・ストリーミング・マスク・ベクトルを使用し得る。データ・ストリーミング・マスク・ベクトルには、異なるデータ・ストリームをイネーブルするのに使用し得る複数のビットが含まれる。たとえば、データ・ストリーミング・マスク・ベクト
ルの第1データ・ビットを使用して、第1データ・ストリームをイネーブルすることが可能であり、データ・ストリーミング・マスク・ベクトルの第2データ・ビットを使用して、第2データ・ストリームをイネーブルすることが可能である。1実施形態で、データ・ストリーミング・マスク・ベクトルが、ロード部分およびストア部分に分割され、ロード部分のビットは、入力データ・ストリームをイネーブルし、ストア部分のビットは、出力データ・ストリームをイネーブルする。データ・ストリーミング・マスク・ベクトルによって、複数の入力データ・ストリームおよび出力データ・ストリームを指定し得る。たとえば、1実施形態で、32ビット・データ・ストリーミング・マスク・ベクトルによって、16個までの入力データ・ストリームおよび16個までの出力データ・ストリームをイネーブルし得る。
1実施形態で、データ・ストリーム・マスク・ベクトルが、増補命令部分を介して指定される。たとえば、ループ初期化命令610(図29)などのループ初期化命令に関連する増補命令部分によって、データ・ストリーミング・マスク・ベクトル値を提供して、複数のデータ・ストリームを同時に初期化し得る。各データ・ストリームを、アーキテクチャ的レジスタRに関連付け得る。アーキテクチャ的レジスタRからの読取または書込によって、関連する入力データ・ストリームからデータ要素が検索されるか、関連する出力データ・ストリームにデータ要素がストアされる。図15に関して前に説明したように、アーキテクチャ的レジスタRに、データ・ストリームの次のデータ要素に関連し、PVA実行中または非ループ実行中にのみ可視になる一時インスタンスと、スカラ実行中または非ループ実行中にのみ可視になるオーバーレイされるインスタンスが含まれる。
本明細書で述べない他の機能を、本発明の範囲から逸脱せずに、増補命令の使用を介して追加または拡張することも可能であることを諒解されたい。
図36を参照すると、本発明の1実施形態による、コマンドをコンパイルする方法を示す流れ図が示されている。コンパイラは、一般に、特定のプログラミング言語に従って記述されたコマンドを、コマンドを処理するのに使用される特定のプロセッサによって理解されるシステム・コードに変換するのに使用される。一般に、コンパイラは、特定のコマンドについて類似するコードを生成する。図示の実施形態では、コンパイラが、プログラム・ループに関連するコマンドを増補命令に変換する。したがって、コード密度は、大きくは影響されず、増補命令について前に述べた特徴を、プログラム・ループに関連するコマンドと共に使用し得る。
ステップ960で、コンパイラが、次に処理されるコマンドを受け取る。コマンドは、C、C++、Java(登録商標)、BASIC、および類似物など、特定のプログラミング言語のコマンドに関連するものとし得る。ステップ962で、受け取ったコマンドがプログラム・ループに関連するかどうかを判定する。コンパイラは、分岐コマンド、DO
UNTILコマンド、またはWHILEコマンドなどのプログラム・ループを初期化するか処理する既知のコマンドにコマンドを関連付けることによって、コマンドを認識し得る。同様に、コマンドを、PVA初期化命令に関連付け、コマンドがプログラム・ループに関連することを示し得る。
ステップ964で、コマンドがプログラム・ループに関連しない場合に、コンパイラは、コマンドを標準命令に変換する。前に述べたように、標準命令は、一般にコンパイラによってシステム・コードを提供するのに使用される命令を表し、固定サイズまたは標準サイズであるものとし得る。標準命令が生成されたならば、コンパイラは、ステップ960に戻って新しいコマンドを検索し得る。
ステップ966で、受け取ったコマンドがプログラム・ループに関連するものとして識別される場合に、コンパイラは、コマンドを増補命令に変換する。増補命令には、前に述
べた標準命令に類似する標準命令部分と、増補命令部分が含まれる。増補命令を使用して、前に述べたように、標準命令部分の処理に関する拡張プロパティを指定し得る。たとえば、増補命令部分によって、早期終了、早期継続、または条件実行の制御情報などの条件制御情報を指定し得る。その代わりに、増補命令部分によって、標準命令部分に関連するデータの処理に関するデータ・ストリーミングを指定し得る。増補命令部分を使用して、標準命令部分の処理に関する即値フィールドまたは即値フィールド拡張を提供することも可能である。本発明の範囲から逸脱せずに、他の機能を使用することも可能である。増補命令が、コマンドについて生成されたならば、コンパイラは、ステップ960に戻って、処理される新しいコマンドを検索し得る。1実施形態で、標準命令および標準命令部分は、標準デコーダ430(図27)などの標準デコーダによって処理されるが、増補命令部分は、副デコーダ440(図27)などの副デコーダを使用して処理される。
前述の明細書で、本発明を、特定の実施形態に関して説明した。しかし、当業者は、請求項に示された本発明の範囲から逸脱せずに、様々な修正および変更を行い得ることを諒解するであろう。たとえば、本明細書で教示されたソフトウェアを、コンピュータ・ハード・ディスク、フロッピ・ディスク、88.9mm(3.5インチ)ディスク、コンピュータ記憶テープ、磁気ドラム、スタティック・ランダム・アクセス・メモリ(SRAM)セル、ダイナミック・ランダム・アクセス・メモリ(DRAM)セル、電気的消去可能(EEPROM、EPROM、フラッシュ)セル、不揮発性セル、強誘電体メモリまたは強磁性体メモリ、コンパクト・ディスク(CD)、レーザ・ディスク、光ディスク、および類似するコンピュータ可読媒体の1つまたは複数で実施し得る。したがって、本明細書および図面は、制限的な意味ではなく例示的な意味であると考えられ、そのような修正のすべてが、本発明の範囲に含まれることが意図されている。
本発明の1実施形態による、データ処理システムの実行モードを概略図形式で示す図。 DSPプロセッサ内の機能ユニットの従来技術の動作をブロック図形式で示す図。 真のベクトル計算機の機能ユニットの従来技術の動作をブロック図形式で示す図。 本発明の1実施形態による、擬似ベクトル算術演算の処理に適合された処理システムをブロック図形式で示す図。 本発明の1実施形態による、CVA(canonical vector arithmetic)の3つのタイプのデータ依存性グラフをデータ流れ図形式で示す図。 本発明の1実施形態による、図4の処理システムのうちでCVA処理に関する部分の構成をブロック図形式で示す図。 本発明の1実施形態による、CVA命令のフォーマットをブロック図形式で示す図。 本発明の1実施形態による、PVA(pseudo−vector arithmetic)命令のフォーマットをブロック図形式で示す図。 本発明の1実施形態による、PVA命令を使用して構成されるプログラム・ループの構造をプログラム流れ図形式で示す図。 本発明の1実施形態による、ストライド・サイズ・レジスタ(SSR)のフォーマットをブロック図形式で示す図。 本発明の1実施形態による、カウント・インデックス・レジスタ(CIR)のフォーマットをブロック図形式で示す図。 本発明の1実施形態による、ロード・ユニットLの1実施形態をブロック図形式で示す図。 本発明の1実施形態による、ロード・ユニットLの1実施形態をブロック図形式で示す図。 本発明の1実施形態による、ストア・ユニットSの1実施形態をブロック図形式で示す図。 本発明の1実施形態による、動作のあるモード中にオーバーレイされるレジスタを有するレジスア・ファイルをブロック図形式で示す図。 本発明の1実施形態による、一時レジスタおよびオーバーレイされるレジスタを有するレジスタ・ファイルをブロック図形式で示す図。 本発明の1実施形態による、一時レジスタおよびオーバーレイされるレジスタの対応をタイミング図形式で示す図。 本発明の1実施形態による、プログラム・ループ実行を管理するカウンタをブロック図形式で示す図。 本発明の1実施形態による、コンピュータ・プログラム・コードを処理する判断フローを流れ図形式で示す図。 本発明の1実施形態による、早期ループ継続機能を有するPVA命令の代替実施形態をブロック図形式で示す図。 本発明の代替実施形態による、擬似ベクトル計算機をブロック図形式で示す図。 本発明の1実施形態による、図21の擬似ベクトル計算機の依存性グラフをデータ流れ図形式で示す図。 本発明の代替実施形態による、PVA命令のフォーマットをブロック図形式で示す図。 本発明の代替実施形態による、PVA命令を使用して構成されるプログラム・ループの構造をプログラム流れ図形式で示す図。 本発明の代替実施形態による、PVA命令のフォーマットをブロック図形式で示す図。 本発明の代替実施形態による、PVA命令を使用して構成されるプログラム・ループの構造をプログラム流れ図形式で示す図。 本発明の1実施形態による、標準命令および増補命令の標準命令部分を処理する第1デコーディング部分と、増補命令の増補命令部分を処理する第2デコーディング部分とを有するシステムをブロック図形式で示す図。 本発明の1実施形態による、レジスタと結合された増補命令が、増補命令に関連する増補命令部分の組へのポインタを提供するメモリの構造をブロック図形式で示す図。 本発明の1実施形態による、ループ初期化命令に標準初期化命令部分および増補命令部分が含まれるメモリの構造をブロック図形式で示す図。 本発明の1実施形態による、増補命令がメモリ内の標準ループ命令に結合される命令のプログラムの構造をブロック図形式で示す図。 本発明の1実施形態による、標準命令部分と、増補命令に関連する早期終了機能および早期継続機能を提供するのに使用される増補命令部分とを有する増補命令の構造をブロック図形式で示す図。 本発明の1実施形態による、標準命令部分と、増補命令に関連する条件実行機能を提供するのに使用される増補命令部分とを有する増補命令の構造をブロック図形式で示す図。 本発明の1実施形態による、標準命令部分と、増補命令に関連する追加オペランド機能を提供するのに使用される増補命令部分とを有する増補命令の構造をブロック図形式で示す図。 本発明の1実施形態による、標準命令部分と、増補命令に関連する拡張即値機能を提供するのに使用される増補命令部分とを有する増補命令の構造をブロック図形式で示す図。 本発明の1実施形態による、増補命令に関連する命令エンコーディングの例をブロック図形式で示す図。 本発明の1実施形態による、コンパイリング・コマンドの方法を流れ図形式で示す図。

Claims (10)

  1. 複数の命令(405)を受け取るステップと、
    プログラム・ループ(480)の一部である該複数の命令の命令グループを識別するステップと、
    該命令グループ内の命令に第1命令サイズを使用するステップと、
    該プログラム・ループの外の命令に第2命令サイズを使用するステップであって、該第2命令サイズが、該第1命令サイズと異なる、ステップと
    からなる方法。
  2. 標準命令グループが、前記プログラム・ループの外の命令に使用され、該標準命令グループおよび該標準命令グループと異なる増補命令グループが、前記プログラム・ループ内の命令に使用される、請求項1に記載の方法。
  3. 前記増補命令グループが、前記プログラム・ループの実行に関する条件制御情報を含む、請求項2に記載の方法。
  4. 前記増補命令グループが、入力/出力データ・ストリーミングの制御、即値フィールド拡張のサポート、または即値フィールドのサポートに使用される、請求項2に記載の方法。
  5. 動作の第1モードである時に、
    第1標準命令を受け取るステップと、
    第1命令デコーダ(430)を使用して該第1標準命令をデコードするステップと、
    動作の第2モードである時に、
    該第1標準命令部分および増補命令部分を含む第2命令を受け取るステップと、
    該第1命令デコーダ(430)を使用して該第1標準命令部分をデコードするステップと、
    第2命令デコーダ(440)を使用して該増補命令部分をデコードするステップと
    からなる方法。
  6. 動作の第2モードである時に、前記第1命令デコーダを使用して前記第1標準命令部分をデコードする前記ステップおよび前記第2命令デコーダを使用して前記増補命令部分をデコードする前記ステップが、並列に実行される、請求項5に記載の方法。
  7. 第1サイズを有する第1命令および第2サイズを有する第2命令の第1部分をデコードする第1命令デコーダ(430)であって、該第1サイズが、該第2サイズと同一である、第1命令デコーダと、
    該第2命令の第2部分をデコードする、該第1命令デコーダと異なる第2命令デコーダ(440)と
    からなるシステム。
  8. 前記第2命令の前記第2部分が、プログラム・ループの実行に関する条件制御情報を含む、請求項7に記載のシステム。
  9. 前記第2命令の前記第2部分が、入力/出力データ・ストリーミングの制御、即値フィールド拡張のサポート、または即値フィールドのサポートに使用される、請求項7に記載のシステム。
  10. コマンドを受け取るステップと、
    該コマンドがプログラム・ループに関連するかどうかを判定するステップと、
    該コマンドがプログラム・ループに関連しない場合に、該コマンドを標準命令に変換するステップと、
    該コマンドがプログラム・ループに関連する場合に、該コマンドを、標準命令部分および増補命令部分を有する増補命令に変換するステップと
    からなる方法。
JP2003586743A 2002-04-22 2003-04-14 拡張命令エンコーディングのシステムおよびその方法 Expired - Fee Related JP4002554B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/127,087 US7447886B2 (en) 2002-04-22 2002-04-22 System for expanded instruction encoding and method thereof
PCT/US2003/011571 WO2003090067A2 (en) 2002-04-22 2003-04-14 System for expanded instruction encoding and method thereof

Publications (3)

Publication Number Publication Date
JP2006508414A true JP2006508414A (ja) 2006-03-09
JP2006508414A5 JP2006508414A5 (ja) 2006-05-25
JP4002554B2 JP4002554B2 (ja) 2007-11-07

Family

ID=29215173

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003586743A Expired - Fee Related JP4002554B2 (ja) 2002-04-22 2003-04-14 拡張命令エンコーディングのシステムおよびその方法

Country Status (5)

Country Link
US (1) US7447886B2 (ja)
EP (1) EP1497712A2 (ja)
JP (1) JP4002554B2 (ja)
AU (1) AU2003234102A1 (ja)
WO (1) WO2003090067A2 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7734898B2 (en) * 2004-09-17 2010-06-08 Freescale Semiconductor, Inc. System and method for specifying an immediate value in an instruction
EP1994467A2 (en) * 2006-03-02 2008-11-26 Nxp B.V. Optimized compilation method during conditional branching
US20080040591A1 (en) * 2006-08-11 2008-02-14 Moyer William C Method for determining branch target buffer (btb) allocation for branch instructions
US20080040590A1 (en) * 2006-08-11 2008-02-14 Lea Hwang Lee Selective branch target buffer (btb) allocaiton
US8959500B2 (en) * 2006-12-11 2015-02-17 Nytell Software LLC Pipelined processor and compiler/scheduler for variable number branch delay slots
US8281109B2 (en) * 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
US20090240928A1 (en) * 2008-03-18 2009-09-24 Freescale Semiconductor, Inc. Change in instruction behavior within code block based on program action external thereto
JP5300294B2 (ja) * 2008-03-25 2013-09-25 パナソニック株式会社 処理装置、難読化装置、プログラムおよび集積回路
US9182959B2 (en) * 2008-08-15 2015-11-10 Apple Inc. Predicate count and segment count instructions for processing vectors
US8356159B2 (en) * 2008-08-15 2013-01-15 Apple Inc. Break, pre-break, and remaining instructions for processing vectors
US8949808B2 (en) 2010-09-23 2015-02-03 Apple Inc. Systems and methods for compiler-based full-function vectorization
US8621448B2 (en) 2010-09-23 2013-12-31 Apple Inc. Systems and methods for compiler-based vectorization of non-leaf code
US9529574B2 (en) 2010-09-23 2016-12-27 Apple Inc. Auto multi-threading in macroscalar compilers
US20120185670A1 (en) * 2011-01-14 2012-07-19 Toll Bret L Scalar integer instructions capable of execution with three registers
WO2013095634A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing a horizontal partial sum in response to a single instruction
US9052888B2 (en) 2013-02-21 2015-06-09 International Business Machines Corporation Vectorization in an optimizing compiler
US10180829B2 (en) * 2015-12-15 2019-01-15 Nxp Usa, Inc. System and method for modulo addressing vectorization with invariant code motion
US11614941B2 (en) * 2018-03-30 2023-03-28 Qualcomm Incorporated System and method for decoupling operations to accelerate processing of loop structures
US11216281B2 (en) * 2019-05-14 2022-01-04 International Business Machines Corporation Facilitating data processing using SIMD reduction operations across SIMD lanes

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4434459A (en) 1980-04-25 1984-02-28 Data General Corporation Data processing system having instruction responsive apparatus for both a basic and an extended instruction set
JPS59128670A (ja) * 1983-01-12 1984-07-24 Hitachi Ltd ベクトル処理装置
JPH06101044B2 (ja) * 1988-01-23 1994-12-12 シャープ株式会社 デッドロック回避実行制御方式
US5303358A (en) 1990-01-26 1994-04-12 Apple Computer, Inc. Prefix instruction for modification of a subsequent instruction
US5247696A (en) * 1991-01-17 1993-09-21 Cray Research, Inc. Method for compiling loops having recursive equations by detecting and correcting recurring data points before storing the result to memory
US5361354A (en) * 1991-12-17 1994-11-01 Cray Research, Inc. Optimization of alternate loop exits
US5530804A (en) * 1994-05-16 1996-06-25 Motorola, Inc. Superscalar processor with plural pipelined execution units each unit selectively having both normal and debug modes
US5802375A (en) * 1994-11-23 1998-09-01 Cray Research, Inc. Outer loop vectorization
US5748964A (en) * 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US6081880A (en) * 1995-03-09 2000-06-27 Lsi Logic Corporation Processor having a scalable, uni/multi-dimensional, and virtually/physically addressed operand register file
JP3711422B2 (ja) 1995-12-20 2005-11-02 セイコーエプソン株式会社 情報処理回路
US5799163A (en) * 1997-03-04 1998-08-25 Samsung Electronics Co., Ltd. Opportunistic operand forwarding to minimize register file read ports
US5903769A (en) * 1997-03-31 1999-05-11 Sun Microsystems, Inc. Conditional vector processing
US6044222A (en) * 1997-06-23 2000-03-28 International Business Machines Corporation System, method, and program product for loop instruction scheduling hardware lookahead
US6108768A (en) * 1998-04-22 2000-08-22 Sun Microsystems, Inc. Reissue logic for individually reissuing instructions trapped in a multiissue stack based computing system
US6292886B1 (en) * 1998-10-12 2001-09-18 Intel Corporation Scalar hardware for performing SIMD operations
US6496923B1 (en) * 1999-12-17 2002-12-17 Intel Corporation Length decode to detect one-byte prefixes and branch
US6795908B1 (en) * 2000-02-16 2004-09-21 Freescale Semiconductor, Inc. Method and apparatus for instruction execution in a data processing system

Also Published As

Publication number Publication date
WO2003090067A3 (en) 2004-04-01
AU2003234102A1 (en) 2003-11-03
US20030200426A1 (en) 2003-10-23
US7447886B2 (en) 2008-11-04
EP1497712A2 (en) 2005-01-19
AU2003234102A8 (en) 2003-11-03
WO2003090067A2 (en) 2003-10-30
JP4002554B2 (ja) 2007-11-07

Similar Documents

Publication Publication Date Title
JP4002554B2 (ja) 拡張命令エンコーディングのシステムおよびその方法
US6795908B1 (en) Method and apparatus for instruction execution in a data processing system
US7493475B2 (en) Instruction vector-mode processing in multi-lane processor by multiplex switch replicating instruction in one lane to select others along with updated operand address
KR100690225B1 (ko) 데이터 처리기 시스템 및 그룹화를 이용한 명령 시스템
JP3564445B2 (ja) プロセッサ、コンパイル装置及びコンパイル方法
JP3442225B2 (ja) 演算処理装置
KR100284789B1 (ko) N-지로 분기를 갖는 슈퍼스칼라 또는 초장 명령어 워드컴퓨터에서 다음 명령어를 선택하는 방법 및 장치
JP4484925B2 (ja) Simdデバイスにおける制御フロー管理のための方法及び装置
EP3289444B1 (en) Explicit instruction scheduler state information for a processor
US20140351563A1 (en) Advanced processor architecture
WO2001016710A1 (fr) Processeur de donnees
JP2004171573A (ja) 新規な分割命令トランズアクションモデルを使用して構築したコプロセッサ拡張アーキテクチャ
KR100316078B1 (ko) 파이프라인방식프로세서
US11726912B2 (en) Coupling wide memory interface to wide write back paths
EP3295299A1 (en) Decoding information about a group of instructions including a size of the group of instructions
Balfour Efficient embedded computing
JP5068529B2 (ja) 時間−静止型プロセッサにおけるゼロ−オーバヘッドのブランチング及びルーピング
US11275712B2 (en) SIMD controller and SIMD predication scheme
JP2006524859A (ja) 並列処理システム
JP3727324B2 (ja) プロセッサ及びコンパイル装置
JP3743155B2 (ja) パイプライン制御型計算機
JP2004102988A (ja) データ処理装置
JPH10283192A (ja) プリフェッチコード生成方式
JP2004005739A (ja) データ処理装置の制御方法
Examination II et al. Hardware for Exploiting Data Level Parallelism

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060329

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060329

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060627

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061121

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070207

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070306

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070530

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20070705

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070817

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100824

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110824

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110824

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120824

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120824

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130824

Year of fee payment: 6

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