(57)【要約】  命令を実行する際にプロセッサとメモリとの間のデータパスより幅広いオペランドが用いられる拡張可能Ｗｉｄｅ演算が開示される。拡張可能Ｗｉｄｅオペランドは、レジスタファイルの幅、プロセッサのクロック速度、プロセッサの例外サブシステム、ならびにワイド・キャッシュ・メモリにおけるオペランドのロードおよび使用の際の演算の順序を含む、計算を行う機能ユニットの設計における関連付けられるプロセッサの特性の影響を低減する。
2017520873.tif 000002
【特許請求の範囲】
【請求項１】
幅を有するデータパスによってプロセッサに結合されたメモリに記憶されたオペランドを必要とする命令を実行するための前記プロセッサであって、第１の拡張可能Ｗｉｄｅ命令が、
前記プロセッサによって行われるべき第１の演算を定義する第１の演算コードフィールドであって、前記第１の演算は前記データパスの前記幅より広い第１のオペランドを必要とする、第１の演算コードフィールドと、
前記メモリ内の第１のデータブロックの第１のアドレスを指定する前記第１の拡張可能Ｗｉｄｅ命令内のフィールドと、
を含み、前記メモリ内の前記第１のデータブロックは、前記第１のデータブロック内の、少なくとも（ｉ）前記プロセッサによって行われるべき前記演算において用いられるべき第１の入力データと（ｉｉ）前記第１の入力データに対する前記演算を行う際に用いられるべき第１の関数データの位置を指定する第１の記述子フィールドを含み、
前記第１の入力データおよび前記第１の関数データのうちの少なくとも１つは前記データパスより幅広い、プロセッサ。
【請求項２】
前記プロセッサによって行われるべき前記第１の演算の実行を完了する前に、前記メモリと前記プロセッサとの間で前記第１のデータブロックを前記プロセッサと関連付けられたキャッシュメモリへ転送するための複数の転送が必要とされる、請求項１に記載のプロセッサ。
【請求項３】
前記第１の記述子フィールドは、前記第１のデータブロック内の、前記プロセッサによって行われるべき前記第１の演算からの第１の出力データを記憶するのに用いられるべき第１の出力フィールドの位置をさらに指定する、請求項１に記載のプロセッサ。
【請求項４】
前記第１の記述子フィールドは、前記第１のブロック内の、前記プロセッサによって行われるべき前記第１の演算からの第１の状態データを記憶するのに用いられるべき第１の状態フィールドの位置をさらに指定する、請求項１に記載のプロセッサ。
【請求項５】
前記第１の拡張可能Ｗｉｄｅ命令は少なくとも１つの行列に対して行われるべき算術演算を指定する行列命令を含み、前記第１の関数データは前記少なくとも１つの行列の各々の少なくとも次元を含む、請求項１に記載のプロセッサ。
【請求項６】
前記第１の拡張可能Ｗｉｄｅ命令は復号演算を指定するハフマン命令を含み、前記第１の関数データは少なくとも変換記号を記述する情報を含む、請求項１に記載のプロセッサ。
【請求項７】
前記第１の拡張可能Ｗｉｄｅ命令は変換演算を指定する高速フーリエ変換命令を含み、前記第１の関数データは少なくともバタフライの基数を記述する情報を含む、請求項１に記載のプロセッサ。
【請求項８】
前記第１の拡張可能Ｗｉｄｅ命令はデータを分散させるためのデータ処理演算を指定する分散命令を含み、前記第１の関数データは少なくとも前記データの分散先である位置のオフセットを記述する情報を含む、請求項１に記載のプロセッサ。
【請求項９】
前記第１の拡張可能Ｗｉｄｅ命令はデータを収集するためのデータ処理演算を指定する収集命令を含み、前記第１の関数データは少なくとも前記データの収集元である位置のオフセットを記述する情報を含む、請求項１に記載のプロセッサ。
【請求項１０】
第２の拡張可能Ｗｉｄｅ命令を実行するための請求項２に記載のプロセッサであって、前記第２の拡張可能Ｗｉｄｅ命令は、
前記プロセッサによって行われるべき第２の演算を定義する第２の演算コードフィールドであって、前記第２の演算は前記データパスの前記幅より広い第２のオペランドを必要とする、第２の演算コードフィールドと、
前記メモリ内の第２のデータブロックの第２のアドレスを指定する前記第２の拡張可能Ｗｉｄｅ命令内のフィールドと、
を含み、前記メモリ内の前記第２のデータブロックは、前記第２のデータブロック内の、少なくとも（ｉ）前記プロセッサによって行われるべき前記演算において用いられるべき第２の入力データと（ｉｉ）前記第２の入力データに対する前記演算を行う際に用いられるべき第２の関数データの位置を指定する第２の記述子フィールドを含み、
前記第２の入力データおよび前記第２の関数データの少なくとも一方は前記データパスより幅広く、前記第２の入力データは前記第１の出力データの少なくとも一部を含む、
請求項２に記載のプロセッサ。
【請求項１１】
前記第１の記述子フィールドは、
前記第１の入力データの開始オフセットおよび終了オフセット、
前記第１の入力データの開始オフセットおよび長さ、ならびに
前記第１の入力データの前記長さおよび終了オフセット
のうちの少なくとも１つを含む、請求項２に記載のプロセッサ。
【請求項１２】
前記第１の演算コードフィールドは前記第１の記述子フィールドの有無を示すビットを含む、請求項２に記載のプロセッサ。
【請求項１３】
前記第１の演算コードフィールドは前記第１の演算を行う際に用いられるべき実行ユニットを指定する情報を含む、請求項２に記載のプロセッサ。
【請求項１４】
前記第１のデータブロックは前記第１のデータブロックの内容を記述する情報を含む、請求項１３に記載のプロセッサ。
【請求項１５】
前記第１の記述子フィールドは、前記演算において用いられるべき前記第１の入力データの前記位置を、少なくとも、前記メモリ内の前記第１のデータブロックの前記アドレスと前記第１の入力データが記憶されている前記第１のデータブロック内の位置との間のオフセットを指定することによって指定する、請求項２に記載のプロセッサ。
【請求項１６】
前記第１の記述子フィールドは、前記演算を行う際に用いられるべき前記第１の関数データの前記位置を、少なくとも、前記メモリ内の前記第１のデータブロックの前記アドレスと前記第１の関数データが記憶されている前記第１のデータブロック内の位置との間のオフセットを指定することによって指定する、請求項１５に記載のプロセッサ。
【請求項１７】
幅を有するデータパスによってプロセッサに結合されたメモリに記憶されたオペランドを必要とする命令を実行するための前記プロセッサであって、第１の拡張可能Ｗｉｄｅ命令が、
前記プロセッサによって行われるべき第１の演算を定義する第１の演算コードフィールドであって、前記第１の演算は前記データパスの前記幅より広い第１のオペランドを必要とする、第１の演算コードフィールドと、
行われるべき前記第１の演算のために入力されるべきデータを含むメモリ内の第１のデータ入力領域のアドレスを指定する第１のデータ入力フィールドと、
前記プロセッサによって行われるべき第１の関数に関する情報を含む前記メモリ内の第１の関数領域のアドレスを指定する第１の関数フィールドと、
前記プロセッサによって行われるべき前記演算の状態に関する情報を記憶するための前記メモリ内の状態領域のアドレスを指定する状態フィールドと、
を含み、前記第１の演算コードフィールド、前記第１のデータ入力フィールド、前記第１の関数フィールド、および前記状態フィールドのうちの少なくとも１つが、行われるべき前記演算によって必要とされる前記メモリ内の第１のデータブロックのアドレスを提供し、前記第１のデータブロックは前記データパスの前記幅より広い、プロセッサ。
【請求項１８】
前記プロセッサによって行われるべき前記第１の演算の実行を完了する前に、前記メモリと前記プロセッサとの間で前記第１のデータブロックを前記プロセッサと関連付けられたキャッシュメモリへ転送するための複数の転送が必要とされる、請求項１７に記載のプロセッサ。
【請求項１９】
前記第１の演算コードフィールドは前記第１の演算を行う際に用いられるべき実行ユニットを指定する情報を含む、請求項１８に記載のプロセッサ。
【請求項２０】
第２の拡張可能Ｗｉｄｅ命令を実行するための請求項１７に記載のプロセッサであって、前記第２の拡張可能Ｗｉｄｅ命令は、
前記プロセッサによって行われるべき第２の演算を定義する第２の演算コードフィールドであって、前記第２の演算は前記データパスの前記幅より広い第２のオペランドを必要とする、第２の演算コードフィールドと、
行われるべき前記第２の演算のために入力されるべきデータを含むメモリ内の第２のデータ入力領域のアドレスを指定する第２のデータ入力フィールドと、
前記プロセッサによって行われるべき第２の関数に関する情報を含む前記メモリ内の第２の関数領域のアドレスを指定する第２の関数フィールドと、
を含み、前記第２の演算コードフィールド、前記第２のデータ入力フィールド、および前記第２の関数フィールドのうちの少なくとも１つが、行われるべき前記演算によって必要とされる前記メモリ内の第２のデータブロックのアドレスを提供し、前記第２のデータブロックは前記データパスの前記幅より広い、請求項１７に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
[01]本発明はコンピュータプロセッサに関し、詳細には、プロセッサとメモリとの間のデータパス幅より大幅に広いオペランドを有するコンピュータプロセッサに関する。
【背景技術】
【０００２】
[02]本発明者らは先に、プロセッサの内部データパス幅より大きいオペランドの使用を可能にすることによりプログラマブルプロセッサの性能を改善するためのプログラマブルプロセッサおよび方法について述べた。参照により本明細書に組み入れられる、「Ｐｒｏｃｅｓｓｏｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｆｏｒ  Ｅｘｅｃｕｔｉｎｇ  Ｗｉｄｅ  Ｔｒａｎｓｆｏｒｍ  Ｓｌｉｃｅ  Ｉｎｓｔｒｕｃｔｉｏｎｓ」という名称の、米国特許第８２６９７８４号を参照されたい。この先行発明では、汎用レジスタの内容を用いてプロセッサの内部データパスより幅広いメモリに記憶されたオペランドを指定する。オペランドは通常、データパスより何倍も幅広く、好ましくはメモリの隣接行に記憶される。レジスタは複数の幅のデータを読み出す（または書き込む）ためのメモリアドレスも指定する。
【０００３】
[03]図１に、本発明者らの先の特許から引用された、５つのフィールド‘ｗｍｉｎｏｒ’、‘＊ｄａｔａ’、‘＊ｔｗｉｄｄｌ’、‘ｆｆｔｐａｒ’、および‘ｗｆｆｔｓｌｉｃ’を有するＦＦＴスライス命令のサンプルを示す。この命令はプロセッサに、十分な回数だけ反復されると高速フーリエ変換（ＦＦＴ）を算出する演算を行わせる。命令が実行される都度、ＦＦＴの１「スライス」が算出される。レジスタフィールド＊ｄａｔａはデータを含むメモリ内の領域のアドレスを指定し、レジスタフィールド＊ｔｗｉｄｄｌは「回転因子」係数（１の複素根）を含むメモリ内の別の領域のアドレスを指定する。
【０００４】
[04]最初にこの演算が実行されるときに、回転因子が、利用可能なプロセッサ・メモリ・バスの速度で、実行ユニットに組み込まれた「係数ＲＡＭ」へロードされ（または、一代替実施形態では、組み込みＲＯＭにすでに存在しており）、データが組み込み「ワイドキャッシュ」メモリへロードされる。連続した演算が回転因子を再利用して、組み込みキャッシュにバッファされたデータに対してＦＦＴの連続したスライスを実行する。
【０００５】
[05]図１にはこの演算を行うための例示的ハードウェアも示されている。図１のハードウェアは、例えば、１６サイクルで２５６点基数４の複素ＦＦＴの単一スライスを実行することのできる、１６個の複素乗算器と４個の基数４の「バタフライ／ＭＵＸストリップ」を含む。レジスタフィールドｆｆｔｐａｒ（「ＦＦＴパラメータ」）は、次のＦＦＴスライスの実行時のオーバフローを回避するのに必要な倍率変更やシフト量といった状況情報と共に、データおよび回転因子オペランドのサイズおよび形状、実行されるＦＦＴスライスの特質を指定するプロセッサレジスタを指定する。４つの連続したＷＦＦＴＳＬＩＣＥ演算が６４サイクルで全２５６点の複素ＦＦＴを算出し、結果を、メモリマップド・ワイド・キャッシュに置く。
【０００６】
[06]以下で説明する発明は、本発明者らの先行技術より広範囲のアルゴリズムに関して改善された効率での拡張可能Ｗｉｄｅ演算を可能にするための追加機能を提供するものである。
【発明の概要】
【０００７】
[07]本発明で開示する拡張可能Ｗｉｄｅ演算は、（１）１つまたは複数のレジスタファイルの幅、（２）プロセッサのクロック速度、（３）プロセッサの例外・割込みサブシステム、ならびに（４）ワイド・キャッシュ・オペランドのロードおよびワイドキャッシュの内容の使用、例えば、オペランドのストリーミングや演算の連鎖を伴う演算の順序を含む、計算を行う機能ユニットの設計における関連付けられるプロセッサの特性の影響を低減する。
【０００８】
[08]さらに、拡張可能Ｗｉｄｅ演算の指定は、機能ユニットがこれらの演算を実行するための並列度が、命令自体の定義またはこれらの命令を用いるソフトウェアを変更することなく、実行ごとに異なりうるように設計される。よって、後の方の実行では、初期実行のために設計されたソフトウェアへの変更を必要とせずに、初期実行より大きな並列性を有する機能ユニットを用いることができる。一代替実施形態においては、可変の並列度を有する機能ユニットが、やはりアプリケーションソフトウェアを変更する必要なしに、有効電力目標および性能目標を達成するように並列度を制御することができる。そうした可変並列性を有する機能ユニットは、任意選択で機能ユニットの一部分および関連付けられるＷｉｄｅオペランド・メモリ・ブロックの電源を落とす（それらの有効電力を除去する）ことによって並列度を変えることができる。
【０００９】
[09]一実施形態において、拡張可能Ｗｉｄｅオペランドを必要とする命令を実行するためのプロセッサは、演算がプロセッサとメモリとの間のデータパスより幅広いオペランドを必要とする、プロセッサによって行われるべき演算を定義する演算コードフィールドを含む命令を実行する。命令は、行われるべき演算のために入力されるべきデータを含むメモリ内のデータ入力領域のアドレスを指定するデータ入力フィールド、およびプロセッサによって行われるべき関数に関する情報を含むメモリ内の関数領域のアドレスを指定する関数フィールドも含む。命令は、命令の実行の状態、例えば、実行が中断されるかどうかに関する情報を記憶するのに用いることができる状態フィールドも指定する。演算コードフィールド、データ入力フィールド、および関数フィールドのうちの少なくとも１つが行われるべき演算によって必要とされるデータブロックのメモリ内のアドレスを提供し、このデータブロックはプロセッサとメモリとの間の最も幅広いデータパスより幅広い。
【００１０】
[10]別の実施形態において、拡張可能Ｗｉｄｅオペランドを必要とする命令を実行するためのプロセッサは、プロセッサによって行われるべき演算を定義する演算コードフィールドを含み、演算はプロセッサとメモリとの間の最も幅広いデータパスより幅広いオペランドを必要とする。拡張可能Ｗｉｄｅ命令内のフィールドがメモリ内のデータブロックのアドレスを指定する。データブロック内のデータは、当該ブロック内の、少なくとも、プロセッサによって行われるべき演算において用いられるべき入力データと入力データに対する演算を行う際に用いられるべき関数データとの位置を指定する記述子フィールドを含む。入力データと関数データの少なくとも一方はプロセッサとメモリとの間の最も幅広いデータパスより幅広い。必要な場合には、メモリブロック内の状態データと出力データとの位置も記述子フィールドに含めることができる。
【００１１】
[11]本発明の他の目的、特徴、および利点は、以下の詳細な説明および添付の図面を考察すれば明らかになるであろう。図面において、類似した参照符号は全図にわたって類似した特徴を表すものである。
【図面の簡単な説明】
【００１２】
[12]
【図１】米国特許第８２６９７８４号からの先行技術の図である。  [13]
【図２】拡張可能Ｗｉｄｅ命令および当該命令内の各フィールドの図である。  [14]
【図３】記述子ブロックを用いた拡張可能Ｗｉｄｅ命令の図である。  [15]
【図４】記述子ブロックを用いた拡張可能Ｗｉｄｅ命令の連鎖を示す図である。  [16]
【図５】フィールドを用いた拡張可能Ｗｉｄｅ命令の連鎖を示す図である。  [17]
【図６】拡張可能Ｗｉｄｅ演算の単一命令セットを様々な幅のコアを有するプロセッサ上で正しく実行することができることを示す図である。  [18]
【図７】拡張可能Ｗｉｄｅ演算を実行するためのプロセッサのアーキテクチャの一実施形態の図である。
【発明を実施するための形態】
【００１３】
[19]本発明は、プロセッサ・メモリ間データパスより大幅に広い命令およびオペランドがプロセッサによって用いられうる拡張可能Ｗｉｄｅ演算を可能にする。プロセッサはコンピュータシステムにおけるメインプロセッサであってもよく、あるいは、直接接続でまたは分散させて単一のメモリシステムを共用するコンピュータシステム内の複数のプロセッサのうちの１つであってもよい。図２には、拡張可能Ｗｉｄｅ命令２０が示されている。本例示的実施形態には、５つのフィールドを有する３２ビット命令が示されているが、本発明は他の固定長、または可変長でさえもの命令にも適用することができる。
【００１４】
[20]命令は複数のフィールド２２〜２６を用いる。フィールド２２は演算コード（‘ｏｐｃｏｄｅ’）を提供する。命令によって実行される演算の例については表１に関連して、また別の箇所で後述する。これらの例示的演算については以下で論じる。その他のレジスタフィールド２３、２４、２５、および２６は、その内容が、後述する命令オペランドのためのプロセッサのメモリシステムへ、仮想アドレスまたは実アドレスとすることのできるアドレスを提供するレジスタを指定する。ここでいうメモリシステムは、プロセッサのメイン・メモリ・システムまたは複数のプロセッサのメモリシステムのうちの１つ、例えばキャッシュメモリとすることができる。このメモリシステムは、様々な代替実施形態において、メモリ密度および平均アクセス時間の性能目標を達成するために様々な階層として命令キャッシュおよび／またはデータキャッシュを含むことができる。
【００１５】
[21]拡張可能Ｗｉｄｅ命令において、フィールド＊ｉｎ２３およびフィールド＊ｏｕｔ２６は、（１つまたは複数の）実行ユニット３０に入力されるべきデータを含むメモリ内の位置および（１つまたは複数の）実行ユニット３０からの結果として得られる出力データを記憶するための位置のアドレスを指定する。（本明細書の表記法として、アステリスク‘＊’はＣ言語のアドレス変数の宣言を示す。）    レジスタフィールド＊ｆｕｎｃｔｉｏｎ２４は命令によって実行される関数を提供するメモリ内のアドレスを指定する。レジスタフィールド＊ｓｔａｔｅ２５は演算の状態の記述を含むアドレスを指定する。例えば、拡張可能Ｗｉｄｅ高速フーリエ変換（ＥＸＷＩＤＥＦＦＴ）演算の例示的実施形態において、関数領域は、回転因子係数ならびに／またはＦＦＴが算出される型および方式の記述、例えば、基数２、基数４、分割基数２／４、基数８もしくは他のバタフライ方式の指定、ならびに／または実行すべき精度、シフト、丸め、およびオーバフロー戦略を含む。この命令では、状態領域は、中間ＦＦＴ計算の丸めおよび倍率変更を最適化することを目的として、制御および状況情報、例えば、そうした演算が割り込まれうるときの進行中のＦＦＴの中間経過の内訳を、何回のバタフライ計算が行われたかのカウントとして、またはそれまでに生じた最大値の近似値として含む。フィールドによって提供されるメモリ領域のアドレスは、メモリブロックによって対応するフィールドの下に示されており、例えば、＊ｉｎフィールド２３はメモリブロック２３ａのアドレスを提供し、＊ｏｕｔフィールドはメモリブロック２６ａのアドレス提供し、以下同様である。
【００１６】
[22]一代替実施形態においては、（別々のフィールド＊ｉｎおよびフィールド＊ｏｕｔではなく）単一の＊ｉｎ／ｏｕｔフィールドで、入力と出力両方に用いられるメモリブロックを指定することができる。加えて、単一の＊ｆｕｎｃｔｉｏｎフィールドで、関数と状況の両方に用いられるメモリブロックを指定することもできる。これらのフィールドのうちの１つまたは複数を、命令が複数の入力オペランドを有しうるようなときに複製することもでき、あるいは省略することもできる。例えば、＊ｓｔａｔｅフィールドは、命令演算があまりにも短く、演算が割り込まれてもよいかどうかが重要ではない場合には省略されてもよい。状態領域２５ａの別の用法は、そうした命令が命令自体の内部で生じる、または入出力イベントといった別の発生源からの条件から生じる例外条件を処理するために割り込まれるようなときに、演算が一部しか完了されない可能性があることを指示する状態情報を含むことである。この条件の状態を有する命令を再実行することにより演算が中断されたところから演算を続行することが可能になり、あたかも演算が全く割り込まれなかったかのように演算を終了することができる。＊ｓｔａｔｅでアドレス指定されるメモリブロックは、個々の命令に応じて、任意のサイズのものとすることもでき、なしとすることもできる。＊ｆｕｎｃｔｉｏｎフィールドは、命令の１つまたは複数の演算コードフィールド以外の関数指定が不要である場合には省略されてもよい。
【００１７】
[23]図２には、メモリの様々な領域からの情報がどのように用いられるかが示されている。＊ｉｎフィールドでアドレス指定されるデータ２３ａは１つまたは複数の実行ユニット３０への入力として用いられ、１つまたは複数の実行ユニット３０は＊ｆｕｎｃｔｉｏｎ情報２４ａで指定されるように当該データに対して関数を実行する。結果は出力として＊ｏｕｔメモリブロック２６ａに提供される。状態領域２５ａは、命令の入力オペランドと出力オペランドの両方を提供するのに用いられてもよく、演算の中間状態を保存するのに用いられてもよい。この状態情報は、汎用レジスタ内に含まれるのではなく、メモリアドレスによって指定されるため、プロセッサのレジスタ幅によって課される制限を越える追加情報を含むことができる。さらに、この状態の更新に際しての（例えば、１００サイクルを超える）長い遅延に、プロセッサ・データ・パスのパイプライン制御、レジスタバイパスおよび例外処理論理を複雑にすることなく、メモリ階層において待ち時間を処理するための既存の機構によって対処することができる。
【００１８】
[24]一例示的実施形態において、メモリブロックのアドレスは、プロセッサのメモリシステムと、２３ａ、２４ａ、２５ａ、および２６ａとして指示されているこれらの相対的に小さいメモリブロックとの間のメモリデータの転送を制御するのに用いられる。これらのメモリブロックをプロセッサのメモリシステム内のデータのキャッシュコピーとして管理することにより、命令の初期実行によって、これらのメモリブロックへのデータのコピーが、命令の演算の初期実行の前に、または命令の演算の初期実行とほぼ同時に開始される。同じ命令または同じメモリアドレスを用いる他の命令の後続の実行は、コピーが依然として有効である限り、データのコピーを繰り返さずに開始されうる。プロセッサ書き込みまたはコンピュータシステム内の他のプロセッサもしくは他のデバイスによって開始される書き込みを、これらの書き込みによりメモリブロックがこれらの演算に関して最新の状態に保持されるように、または一代替実施形態においては、無効もしくは有効でなくなったと表示されて、後続の命令実行がプロセッサのメモリデータを再コピーするように、追跡することができる。
【００１９】
[25]プロセッサのメモリシステムとこれらのメモリブロックとの間でデータがコピーされなければならない回数を減らすために、これらのメモリブロック（またはメモリブロックの各部分）にラベル付けする際に例示的実施形態では、Ｍ、Ｏ、Ｅ、Ｓ、Ｉ、または類似したコヒーレンシ方式で一般に指定されるキャッシュコヒーレンシ状態が用いられる。これらのメモリブロックの物理設計は、プロセッサのメモリシステムの設計によって決定される速度でのそうした転送を受け入れると同時に、機能ユニットによるアクセスを実質的により高い帯域幅とし、これらのオペランドがプロセッサのメモリシステムから直接転送された場合よりも広い帯域幅で機能ユニットが動作しうるようにするためのものである。
【００２０】
[26]図３に、命令内のフィールド３０が、＊ｉｎ、＊ｆｕｎｃｔｉｏｎ、＊ｓｔａｔｅ、および＊ｏｕｔデータのうちのただ１つだけより多くの情報を記憶するメモリブロック３３のアドレスを提供する拡張可能Ｗｉｄｅ命令の一実施形態を示す。ブロック３３自体は、＊ｉｎ、＊ｆｕｎｃｔｉｏｎ、＊ｓｔａｔｅ、および＊ｏｕｔデータのうちの１つまたは複数を含むブロック３３内の各領域までのオフセットを提供する記述子フィールド３４を含む。ブロックは、任意の特定の関数の必要に応じて「その他」情報も含むことができる。記述子フィールドおよびオフセットの使用は様々なフィールドについての異なるサイズ（またはサイズなしさえも）を可能にするという利点を提供する。効率の便宜を得るために、これらの領域のうちの１つまたは複数が、好都合な境界に位置合わせされてもよく、かつ／または定義された領域間の未使用のパディング領域を含んでいてもよい。ブロックおよび記述子フィールドの使用の別の利点は、命令指定の柔軟性を可能にすることである。記述子フィールドは、例えば、命令指定の追加部分が提供される関数フィールド３５までのオフセットを提供することができ、ｏｐｃｏｄｅ２２が任意の長さを有すること、および異なる命令が異なる有効長を有することを可能にする。実質上、ｏｐｃｏｄｅ自体は拡張可能Ｗｉｄｅオペランドとみなされうる。
【００２１】
[27]一実施形態において、ブロック３３は、別々のフィールドからの情報を含む連続したメモリブロックである。一代替実施形態において、このブロックは、実行ユニット３０が指定された演算を実行するのに必要な値を提供する、メモリの、または異なるメモリでさえもの、仮想アドレスまたは異なるエリアまでのオフセットも含むことができる。本手法の柔軟性は、例えば、メモリの他のエリアまでのオフセットを提供する情報を記述子３４に追加することによる、将来の拡張を可能にする。「その他」フィールド３６はこれを表している。一代替実施形態においては、小さいメモリブロックまたは専用レジスタが記述子情報を含むように設計されており、機能ユニットに合わせて適切な帯域幅で設計された物理的に別個のメモリブロックが、本明細書に記載されるキャッシュコヒーレントなコピー法によって埋められることになる、＊ｉｎ、＊ｏｕｔ、＊ｆｕｎｃｔｉｏｎ、および＊ｓｔａｔｅデータを格納するのに用いられる。このように、物理設計は依然図２の物理設計に類似したものである。
【００２２】
[28]メモリブロック３３は好ましくは、＊ｉｎ、＊ｆｕｎｃｔｉｏｎ、＊ｓｔａｔｅ、および＊ｏｕｔのすべての情報を含むが、それらのフィールドのうちの１つまたは複数が特定の命令に不要である場合、そのフィールドはブロック内に含まれなくてよい。よって、図２に示すようにメモリ２３ａ、２４ａ、２５ａ、および２６ａの別々の領域を用いるのではなく、メモリの１つの領域３３が＊ｉｎ、＊ｆｕｎｃｔｉｏｎ、＊ｓｔａｔｅ、および＊ｏｕｔの各フィールドのうちの適切なフィールドの必要な情報を含む。
【００２３】
[29]＊ｉｎ、＊ｆｕｎｃｔｉｏｎ、＊ｓｔａｔｅ、および＊ｏｕｔの各フィールドのうちの１つまたは複数のメモリ内の（１つまたは複数の）位置が特定された後で、プロセッサのメモリシステムからのオペランドデータが、プロセッサの関連実行ユニットの近くの、またはそれと関連付けられたキャッシュ・メモリ・ブロックへロードされる。キャッシュ・メモリ・ブロックは、プロセッサがその実行ユニットで用いることができる最も幅広いオペランドを記憶するのに十分な大きさであり、プロセッサのメモリシステムのアクセス帯域幅だけに制限されない。情報がキャッシュに入れられた後で、プロセッサの実行ユニットは次いで、当該演算に必要な＊ｉｎ、＊ｆｕｎｃｔｉｏｎ、＊ｓｔａｔｅ、および＊ｏｕｔデータを取得する（または記憶する）ことができる。ワイド・キャッシュ・メモリは、図２において、命令フィールドからの矢印が指し示す四角２３ａ、２４ａ、２５ａ、および２６ａで示されている。そうした機能を果たすための例示的ハードウェアが、以下で論じる図７に示されている。
【００２４】
[30]メモリへ、またはメモリから転送されるべきデータは、プロセッサとメモリとの間のデータパスより大幅に「幅広い」ため、プロセッサとメモリとの間で当該データを移動するには複数のサイクルが用いられる。例えば、プロセッサ・メモリ間データパスが１２８ビット幅である場合には、２０４８ビットのオペランドの移動は、当該演算の実行に用いられる機能ユニットと関連付けられたキャッシュメモリに２０４８ビットのオペランドを配置するのにプロセッサ・メモリ間データパス上で１６回の転送を必要とする。
【００２５】
[31]記述子を有するメモリブロックの使用は１命令につきただ１つのメモリブロックだけに制限されない。図３に示すように、命令内の他のフィールド３７、３８、および３９が、各々任意選択で独自の記述子を有する他のメモリブロックにアドレスを提供することもできる。言い換えると、１つまたは複数のフィールドがより多くのメモリブロックを指定することができ、各メモリブロックは１つまたは複数の含まれるメモリブロックを指定する記述子を含むことができる。よって、代替実施形態においては、類似した命令が、単一のメモリブロックを指定するわずか１つのフィールドで符号化されてもよく、あるいは、各々様々なメモリブロックを指定する複数のフィールドを有していてもよい。記述子の使用は、単一の命令フィールドが、各々＊ｉｎ、＊ｏｕｔ、＊ｆｕｎｃｔｉｏｎ、または＊ｓｔａｔｅの各タイプのうちの１つである複数のサブセット・メモリ・ブロックを指定することを可能にする。一例示的実施形態において、１つまたは複数のメモリブロックのための記述子の使用は任意選択であり、（１つまたは複数の）命令のｏｐｃｏｄｅフィールド内のビットまたは指定コードによって制御され、あるいは、１つまたは複数の命令フィールドによって指定されるアドレス内のビットまたは指定コードによって制御される。
【００２６】
[32]例えば、メモリブロックが２のべき乗サイズに揃えられたアドレスによって指定されるときには、アドレスの最下位端のところは１つまたは複数のゼロビットになる。この特性を用いて、メモリブロックの２のべき乗サイズの半分を加えることによって、アドレスはアドレスの符号化と、さらにメモリブロックのサイズの指定の両方を行うことができる。メモリブロックの最小サイズを指定のサイズに制限することによって、ゼロになる１つまたは複数の最下位アドレスビットが必ず生じるようにすることができる。例えば、拡張可能Ｗｉｄｅオペランドの最小サイズが４バイトである場合、アドレスにメモリ・ブロック・サイズの半分（この場合は２）を加えた後で、アドレスとサイズの組み合わせはゼロである１つの最下位ビットを有することになる。例えば、最下位ビットを設定することにより記述子の存在を指定することができる。最下位ビットがクリアされている場合には、記述子をないものとみなすことができる。あるいは、この規則を逆にすることもでき、最下位ビットは設定されると記述子なしを指定し、クリアされると記述子を指定する。記述子フィールドの内容は、一般に、個々のサブメモリブロック自体が含まれるメモリブロック内のオフセットおよびサイズを含むことになる。オフセットおよびサイズは各々あるバイト数の項目として指定することができ、メモリブロックの残りの部分は依然として様々なサブメモリブロックに利用することができる。
【００２７】
[33]一代替実施形態においては、サブブロックを含むメモリブロックの全体サイズをメモリブロック自体の内部の固定フィールドにおいて符号化することができ、そのため、全体サイズは前述の２のべき乗だけに制限されない。サブブロックサイズは、オフセットフィールドにサイズの半分を加えることによって指定することもでき、これはコンパクトな表現を提供するが、サブブロック整列および２のべき乗のサブブロックサイズを必要とし、あるいは、サブブロックサイズおよびオフセットは別々に指定される項目とすることもでき、これはサブブロックの整列およびサイズの制限を取り除く。メモリブロックの全体サイズより大きいオフセットを指定するセキュリティ上の影響を回避するために、オフセットおよびサイズはそれらが許容できないほど大きい場合に例外をトリガすることができる。あるいは、オフセットおよびサイズは、全体サイズ−１の値（１のビットが許容される各位置には１のビットを有し、１のビットが許容されない各位置にはゼロのビットを有する値）を含むビットフィールドによってマスクされてもよい。これにより全体ブロック内にないサブブロックの参照が回避される。
【００２８】
[34]図４に、複数の拡張可能Ｗｉｄｅ命令を相互に連鎖させるための記述子の別の使用を示す。図４では、第１の拡張可能Ｗｉｄｅ命令はｏｐｃｏｄｅ２２と、メモリブロック３２のアドレスを提供するフィールド３０とを含む。命令内の別のフィールド４０は別のメモリブロック５０のアドレスを提供する。ブロック３２内の記述子フィールドはブロック内の様々なフィールドのオフセットを提供し、ブロック５０内の類似した記述子フィールドは演算２２からのオフセットを提供する。よって、演算２２からの出力データを、演算６０を実行する後続命令のための入力データとして用いることができる。このように例示のように拡張可能Ｗｉｄｅ命令を連鎖させることができることにより、複雑な演算を先行技術の手法より簡単なやり方で行うための柔軟性が提供される。例えば、順変換を行うＥＸＷＩＤＥ−ＦＦＴ演算を、変換された値を変換されたフィルタ係数で乗算するＥＸＷＩＤＥ−ＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹに連鎖させることができ、これをさらに、逆変換を行うＥＸ−ＷＩＤＥ−ＦＦＴ演算に連鎖させて、ディジタルフィルタ演算を行うことができる。
【００２９】
[35]図５に命令フィールド自体がｏｐ  ｃｏｄｅ２２、＊ｉｎ２３、＊ｆｕｎｃｔｉｏｎ２４、＊ｓｔａｔｅ２５、および＊ｏｕｔデータのアドレスを提供する複数の拡張可能Ｗｉｄｅ命令の連鎖を示す。第１の命令２０の＊ｏｕｔアドレスが、結果として得られる出力データが第２の命令の演算６０の入力データとして用いられるバッファ２１をどのように指定するかに留意されたい。
【００３０】
[36]以下の表１に拡張可能Ｗｉｄｅオペランドを用いたいくつかの例示的命令を記載する。
【表１】
2017520873.tif 000003
表１    例示的拡張可能Ｗｉｄｅ演算
【００３１】
[37]図２、図３、図４、および図５に記載されている手法は、拡張可能Ｗｉｄｅ命令および／またはオペランドを用いた多数の演算の実行を可能にする。上記の表にはいくつかの例示的拡張可能Ｗｉｄｅ演算が記載されている。これらは、ＥＸＷＩＤＥＭＡＴＲＩＸ（関数領域が入力ベクトルまたは行列で乗算されて出力ベクトルまたは行列を生じる行列要素を含む）、ＥＸＷＩＤＥＦＩＬＴＥＲ（関数がＦＩＲまたはＩＩＲフィルタの係数を含む）、ＥＸＷＩＤＥＭＯＴＩＯＮＥＳＴ（関数が動きの最善の推定値を探索するためのオフセットの範囲を含む）、ＥＸＷＩＤＥＲＡＫＥ（関数がレーキフィルタのパラメータを含む）、ＥＸＷＩＤＥＨＵＦＦＭＡＮ（関数が変換記号および長さの表を含む）、ＥＸＷＩＤＥＨＡＳＨ（関数がパラメータ、およびハッシュアルゴリズムに入力すべき初期値を含む）、ＥＸＷＩＤＥＮＥＵＲＡＬＮＥＴ（関数が多層ニューラルネットワークの記述を含む）、ならびにＥＸＷＩＤＥＦＰＧＡ（関数がフィールド・プログラマブル・ゲート・アレイの構成データを含む）を含む。
【００３２】
[38]他の拡張可能Ｗｉｄｅ命令は、分散関数または収集関数を実行する命令を含むことができる。例えば、ＥＸＷＩＤＥＳＣＡＴＴＥＲまたはＥＸＷＩＤＥＧＡＴＨＥＲによって呼び出される演算は、関数領域によって指定されるアドレスのリストへデータを分散させ、または関数領域によって指定されるアドレスのリストからデータを収集することができる。加えて、入力および／または出力データをある型から別の型へ、例えば固定小数点から浮動小数点へ、またはその逆へ、また所望の精度間またはサイズ間で変換するＥＸＷＩＤＥ命令を実行することもできる。
【００３３】
[39]いずれの場合にも、状態領域は入力、出力および関数オペランドのサイズおよび形状、ならびに、内部状態および進捗状況を含む、行われるべき演算の詳細を記述する。前述のように、いくつかの演算では、＊ｉｎ、＊ｏｕｔ、＊ｆｕｎｃｔｉｏｎ、および＊ｓｔａｔｅの各パラメータのすべてが必要であるとは限らない。例えば、ＥＸＷＩＤＥ−ＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ命令では、乗算されるべき２つの行列またはベクトルの各々について別々の＊ｉｎパラメータがあってよく、＊ｆｕｎｃｔｉｏｎパラメータは省略されてもよい。＊ｉｎパラメータは、行列オペランドのサイズおよび形状、ならびにオペランドの精度を指定する記述子を含むことができる。あるいは、＊ｆｕｎｃｔｉｏｎパラメータは、特に、他の行列演算ではなく行列乗算が行われるべきであること、ならびにオペランドの精度および乗算すべき行列の形状を指定することもできる。
【００３４】
[40]先の特許、例えば、上記の本発明者らの先行特許において、本発明者らはメモリからのＷｉｄｅオペランドの取得を可能にするＷｉｄｅオペランド指定子について記述した。この場合の指定子は、メモリの２のべき乗整列領域を指し示すポインタを、Ｗｉｄｅオペランドのサイズおよび／または形状を指定する追加情報と共に含む。追加情報は、整列によりゼロになるように保証される下位ビットへと符号化される。前述のように、オペランドの最小サイズを指定することによって通常はゼロになるように保証されうる追加の下位ビットは、例えば、記述子ブロックがＷｉｄｅオペランドについて存在するかどうか指定するために配置されてもよい。
【００３５】
[41]本明細書に記載される拡張可能Ｗｉｄｅオペランドはより柔軟であり、追加のフォーマットと共に、Ｗｉｄｅオペランド自体の異なるフォーマットも用い、オペランドのサイズおよび形状の追加オプションを提供する。例えば、本発明のＷｉｄｅオペランド記述子は、整列の要件が少ない、または特定の整列を全く有しないメモリの領域を指し示すことができる。そうした場合には、オペランドのサイズおよび形状といった追加情報を含む下位ビットのより小さいセットが生じうる。これは、例えば、複数のＷｉｄｅオペランドがあり、１つのＷｉｄｅオペランドのサイズおよび／または形状を他のＷｉｄｅオペランドのサイズおよび／または形状から推測することができる場合、例えば、フィルタベクトルまたは行列が、整列Ｗｉｄｅオペランドにおいて、非整列Ｗｉｄｅオペランドに対して畳み込まれるようなときに生じうる。
【００３６】
[42]加えて、関連オペランドを含むＷｉｄｅオペランドの部分をさらに叙述する情報もメモリ領域内に含めることができる。例えば、様々な代替実施形態において、Ｗｉｄｅオペランドメモリ領域内の記述子ブロックは、開始オフセットおよび終了オフセット、または開始オフセットおよび長さ、または長さおよび終了オフセットを含むことができる。長さおよびオフセットは、バイト数、要素サイズの倍数、またはそれ以外の単位で計ることができる。記述子ブロックは、指定メモリ領域の先頭や指定メモリ領域の末尾といった固定されたオフセットのところに含まれていてもよく、あるいは、固定されたオフセットのところで指示されるオフセットまたは長さ自体によって位置決めされてもよい。拡張可能Ｗｉｄｅオペランド記述子によって指定されるメモリ領域内に記述子ブロックを組み込むことによって、Ｗｉｄｅオペランドのソースまたはデスティネーションがもはや２のべき乗の全体サイズだけに制限されなくなる。
【００３７】
[43]様々な代替実施形態においては、例えば図３に示すように、通常はレジスタフィールドで指定されたはずの追加のサイズおよび／または形状情報は記述子ブロック３２内に位置する。他の実施形態においては、オペランドサイズ指定も記述子ブロック内に位置しうる。オペランドのサイズおよび形状を指定する際に、この情報は、２を底とする対数の形の２のべき乗値として、または（サイズが要素数ではなくバイト数単位の全体サイズとして表されるようなときには）追加のオフセットを有するそうした値として表すことができる。あるいは、サイズ、形状またはオペランドサイズの値のいずれかを、バイト数、ビット数、または要素数の単純な２進数として表すこともできる。
【００３８】
[44]形状データは、要素の２次元配列の行または列サイズを特定することができ、次元数の指定に一般化することができ、この次元数は２に限定されず、１、２、３、または任意の最大数の次元とすることができ、各次元でのバイト数、ビット数、または要素数単位のサイズを伴う。一代替実施形態においては、次元を関連拡張可能Ｗｉｄｅオペランドの全体サイズの知識によって暗黙的に示すこともでき、または全体サイズを配列の各次元のサイズの知識から推測することもできる。
【００３９】
[45]さらに、関連オペランドは拡張可能Ｗｉｄｅオペランドメモリ領域の一部分だけを用いることができる。残りの領域は、プロセッサが、例えばＥＸＷＩＤＥ命令の後に続く演算のための領域を、ＥＸＷＩＤＥ命令自体の演算を中断せずに用意するために書き込むことができる追加バッファ空間を含むことができる。例えば、ＥＸＷＩＤＥＨＵＦＦＭＡＮ命令は、指定オフセットのところから開始し、結果オペランド空間が使い果たされ、入力ストリームが使い果たされ、または演算がそれ以外に打ち切られるまで続くストリームを復号することができる。
【００４０】
[46]本発明の別の利点は、プロセッサが、動作中の命令、例えばＥＸＷＩＤＥＨＵＦＦＭＡＮ命令を中断せずに入力ストリームに追加記号を付加する書き込み演算を行うことができることである。例えば、入力ストリームは、循環バッファの境界を記す記述子ブロック内のオフセット値を伴う循環バッファとして表すことができる。入力ストリームに有効記号を追加するように記述子ブロックに書き込むことにより、ＥＸＷＩＤＥＨＵＦＦＭＡＮに、入力ストリームの記述子ブロックが変更されなかった場合には停止したはずの境界を越えて続行させることができる。同様に、一代替実施形態においては、結果オペランドから出力記号を除去し、それによって結果オペランド内の領域を空けるために記述子ブロックに書き込むことにより、ＥＸＷＩＤＥＨＵＦＦＭＡＮに、入力ストリームの記述子ブロックが変更されなかった場合には停止したはずの境界を越えて続行させることができる。加えて、入力ストリームがどの程度まで消費され、出力ストリームが命令の完了時にどの程度まで埋まったかを表すように、入力ストリームと出力ストリーム両方の記述子ブロックをＥＸＷＩＤＥＨＵＦＦＭＡＮ命令によって更新することもできる。あるいは、記述子ブロックは、命令が進行するに従って入力ストリームが埋まり、または出力ストリームが空くことを同時に可能にするように、中間段階で更新されてもよい。一代替実施形態においては、入力ストリームおよび／もしくは出力ストリームの記述子ブロック、または別個の「＊ｓｔａｔｅ」メモリ領域の記述子ブロックがそうした中間更新の頻度を制御する。ＥＸＷＩＤＥＨＵＦＦＭＡＮ命令は、他の同様のストリーム動作命令をどのように用いることができるかを例示するものである。
【００４１】
[47]記述子ブロックでこれらの次元、サイズ、および要素サイズを指定することによって、拡張可能Ｗｉｄｅオペランド内の情報は本質的に自己記述的となり、そのため、この情報は、命令自体で指定されるにせよ、命令によって指定される（１つまたは複数の）レジスタの値内で指定されるにせよ、もはや命令によって指定される必要がなくなる。また、次元、サイズ、および要素サイズの値は、結果オペランドの次元、サイズ、および要素サイズの値も暗黙的に指示しうる。Ｗｉｄｅオペランドを用いた命令は、これらの値を結果オペランドのメモリ領域に書き込むこともでき、あるいは、一代替実施形態においては、これらの値を記述子領域に、または関数もしくは状態を表す領域に書き込むこともできる。
【００４２】
[48]拡張可能Ｗｉｄｅ命令、例えばＥＸＷＩＤＥＨＵＦＦＭＡＮ命令の一代替実施形態においては、第１のキャッシュコヒーレンス維持戦略として、入力ストリームおよび／または出力ストリームの記述子ブロックは、機能ユニットが命令を実行している間は機能ユニットだけに限られるキャッシュコヒーレンス状態で維持される。プロセッサ、すなわち命令を開始したプロセッサ、または任意の他のプロセッサもしくは入出力装置が記述子ブロックを読み出そうとする場合、機能ユニットは入力ストリームおよび出力ストリームの処理の現在の中間状態を反映するコピーを提供することができる。あるいは、記述子ブロックの要素が、機能ユニットがストリームをアクティブに処理しているか否か、言い換えると、命令が完了したかどうかを指示してもよい。新しく更新された記述子ブロックが有効になるはずであると指示する値の出力ストリームの読み出しまたは入力ストリームへの書き込みは、関連記述子ブロックが読み出された後で安全に行うことができる。
【００４３】
[49]さらに代替のキャッシュコヒーレンス維持戦略として、キャッシュ・コヒーレンス・システムに関する記述子ブロックの処理は、最終値を確立することができるまで命令によって変更されうる出力ストリームのいかなる部分の読み出しも中止し、ブロックし、または遅延させることである。その最終値が存在する出力メモリ空間の部分の出力ストリームの読み出しは正常に行うことができる。入力ストリームへの書き込みは、命令によってアクティブに使用されていない入力ストリームの領域に対してのみ許容される。このように、メモリのアーキテクチャ状態が維持され、しかも、入力Ｗｉｄｅオペランドおよび出力Ｗｉｄｅオペランドへのいくつかの演算は命令の演算と並行して行うことができる。言い換えると、メモリ内のＷｉｄｅオペランドの状態は、いかなる中間状態も見えずに、あたかも命令が一挙に完了するかのように維持される。とは言え、そうした演算を開始した後で、前の演算からの結果を出力ストリームから読み出すことができ、命令の後続の呼び出しの新しい値を入力ストリームに書き込むことができ、これらはすべて演算が進行している間に行われる。記述子に作用したときに初めて、あたかも演算が一挙に行われたかのように値を維持するために演算が直列化される。
【００４４】
[50]プログラマは、例えば、命令のうちの１つまたは複数における制御フィールド、命令によって参照されるレジスタ、または入力記述子もしくは出力記述子もしくは＊ｆｕｎｃｔｉｏｎ  Ｗｉｄｅオペランドもしくは＊ｓｔａｔｅ  Ｗｉｄｅオペランドによって、適切なキャッシュコヒーレンス維持戦略を選択することができる。この手法は、高度に逐次的に進行する他の演算において、例えば、有限インパルス応答（ＦＩＲ）フィルタや無限インパルス応答（ＩＩＲ）フィルタにおいても用いることができる。
【００４５】
[51]行列を乗算するときには、数学規則は、行列は、左右のオペランド配列の指定された次元、多くの場合、左の最後の次元および右の最初の次元に沿った積の和によって結合されるというものである。しかし、乗算される行列は、転置され、またはそうした規則に適応するように何らかの他のやり方で再構築されることが必要となりうることも一般的である。例えば、ＥＸＷＩＤＥＭＡＴＲＩＸ命令は、オペランドの記述子ブロック、またはレジスタオペランド、または命令内に、配列が乗算される際に、乗算されるべき配列の有効な転置または再構築に導く情報を含むことができる。別の例として、ＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹは、従来の行列乗算でオペランドを結合する前に左オペランドを転置するように構成されうる。あるいは、ＥＸＷＩＤＥＭＡＴＲＩＸ命令は、数学規則とは異なりうる積の和と結合するように、左オペランド配列および／または右オペランド配列のどちらかまたは両方を指定してもよく、これは、左オペランド配列および／または右オペランド配列のどちらかまたは両方を転置するのと類似した結果を有しうる。
【００４６】
[52]拡張可能Ｗｉｄｅ命令の別の例は、配列オペランドを転置し、またはそれ以外に再構築し、ソース・オペランド・データを新しい結果オペランドにコピーし、またはソースオペランドの代わりの結果オペランドを同じメモリ領域に配置する、ＥＸＷＩＤＥＲＥＳＨＡＰＥ命令である。別のＥＸＷＩＤＥＥＸＴＲＡＣＴ命令は、パラメータレジスタによって指定されるパラメータ、またはＷｉｄｅオペランドもしくはＷｉｄｅオペランドの記述子ブロックで指定されるパラメータを用いてＷｉｄｅオペランドからより小さい要素サイズ結果を抽出する。ＥＸＷＩＤＥＲＥＳＨＡＰＥ命令の関数は、配列オペランドを転置し、または他のやり方で再構築すると共に、ソース配列から要素を抽出するために、ＥＸＷＩＤＥＥＸＴＲＡＣＴ命令と組み合わせることができる。一代替実施形態においては、ＥＸＷＩＤＥＲＥＳＨＡＰＥ命令とＥＸＷＩＤＥＥＸＴＲＡＣＴ命令のどちらかまたは両方の関数を、ＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ、ＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ−ＡＤＤ、ＥＸＷＩＤＥＭＡＴＲＩＸ−ＡＤＤといった他のＥＸＷＩＤＥ命令と結合することができる。
【００４７】
[53]次元、サイズ、形状、および／または要素サイズの各パラメータは、各値を埋めるＥＸＷＩＤＥ命令の実行前に結果拡張可能Ｗｉｄｅオペランドに書き込まれる記述子によって指定することができる。そうした一実施形態においては、記述子ブロックの先の値は、パラメータ値と整合性のある値を生成するように演算に影響を及ぼす。必要に応じて、記述子ブロックは、転置もしくはそれ以外の再構築、抽出、または積の和との指定された配列次元に沿った結合の演算を制御することができる。記述子ブロック値の中にはオペランドに影響を及ぼすものもあり、有効な結果を生み出すように入力オペランドと整合性を有する値になるよう強いられるものもある。
【００４８】
[54]ＥＸＷＩＤＥ命令によって書き込まれた記述子ブロック値は、記述子ブロックと記述子ブロックが記述するデータとの組み合わせが一緒に収集されて、自己完結的、自己記述的なデータ構造として扱うことのできる単一の拡張可能Ｗｉｄｅメモリブロックになるという点で、結果を自己記述的にする。加えて、全拡張可能Ｗｉｄｅオペランドメモリ領域の値を、第２のＥＸＷＩＤＥ命令のソースとして直接用いることもできる。一代替実施形態において、ＥＸＷＩＤＥ命令の演算は、結果オペランドの記述子ブロックを可能な限り早く、しかし少なくともすべての結果値の生成の完了の前に埋めるように優先的に進行する。これは、先のＷｉｄｅオペランド結果をＷｉｄｅオペランドソースとして用いる第２のＥＸＷＩＤＥ命令が、第１のＥＸＷＩＤＥ命令の完了の前に引き続いて計算処理を開始することを可能にする。一代替実施形態においては、第２の演算が制御されたやり方でＷｉｄｅオペランドソース値を獲得することを可能にするために、ＭＯＥＳＩまたは類似したキャッシュ・コヒーレンス・プロトコルが用いられる。
【００４９】
[55]レジスタ関連の厄介な問題から切り離されるため、ＥＸＷＩＤＥＦＦＴ演算を、（ただ１つの単一スライスではなく）全２５６点の複素ＦＦＴ、あるいは１０２４点や４０９６点のＦＦＴといった、より強力なＦＦＴ計算ブロックへと拡張することができる。これらの同じＥＸＷＩＤＥＦＦＴ演算を、単一の乗算器まで縮小した実装、あるいは１６乗算器もしくは６４乗算器の設計まで、または全ＦＦＴ段ほども、もしくは全ＦＦＴを一度にさえも可能なより大規模な設計まで拡大した実装で行うことができる。大規模では、乗算器は固定回転因子値を組み込むことができ、そのため、乗算器は、より一般的でおおむねより大型の２オペランド乗算器ではなく定数乗算ハードウェアとして実装されうる。一代替実施形態においては、大量の並列性を有する実施形態との整合性を維持しつつ電力消費を最小化するために、同じ演算がわずか１つの単一整数乗算加算器を含む機能ユニットで行われうる。
【００５０】
[56]拡張可能Ｗｉｄｅ演算の１つの重要な利点は、計算におけるより大きな精度に適応するようにソースオペランドと結果オペランドとのサイズおよび形状が異なりうることである。例えば、ＥＸＷＩＤＥＭＡＴＲＩＸでは、結果オペランドはソースオペランドと比べて２倍、または４倍でさえものサイズとすることができるはずであり、ソースオペランドは同じサイズでなくてもよく、例えば、８ビット行列と１６ビット行列との乗算が、丸めなし、オーバフローなしで３２ビットの結果を有しうる。
【００５１】
[57]ＥＸＷＩＤＥＭＡＴＲＩＸ命令はＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ命令として実行することができ、ＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ命令は、Ｗｉｄｅオペランド記述子または＊ｆｕｎｃｔｉｏｎパラメータもしくは＊ｓｔａｔｅパラメータから取得されたサイズおよび形状パラメータを用い、＊ｆｕｎｃｔｉｏｎパラメータもしくは＊ｓｔａｔｅパラメータから、または命令のサブフィールドから指定された制度および丸めパラメータを用いて、行列・ベクトル乗算または行列・行列乗算を行う。一代替実施形態において、ＥＸＷＩＤＥＭＡＴＲＩＸ命令は、行列・ベクトルの場合と行列・行列の場合とについて別々のＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ−ＭＡＴＲＩＸ−ＶＥＣＴＯＲ命令およびＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ−ＭＡＴＲＩＸ−ＭＡＴＲＩＸとして実行されうる。別の代替実施形態において、ＥＸＷＩＤＥＭＡＴＲＩＸ命令は、要素ごとのベクトル乗算を行うＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ−ＶＥＣＴＯＲ−ＶＥＣＴＯＲ命令として実行されてもよく、またはＥＸＷＩＤＥＭＡＴＲＩＸ命令は、ＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹと類似したパラメータを用いて行列対行列の加算またはベクトル対ベクトルの加算を行う、ＥＸＷＩＤＥＭＡＴＲＩＸ−ＡＤＤ命令として実行されてもよい。
【００５２】
[58]別の実施形態においては、ＥＸＷＩＤＥＭＡＴＲＩＸ命令は、乗算演算と加算演算との間で中間精度または範囲を失うおそれなしで、単一の命令において行列・ベクトル乗算または行列・行列乗算を行列対行列の加算と組み合わせる、ＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ−ＡＤＤ命令として実行されうる。さらに、ＥＸＷＩＤＥＭＡＴＲＩＸ命令は、要素ごとの乗算をすべての積の水平和と組み合わせる、乗算・加算演算を行うＥＸＷＩＤＥＭＡＴＲＩＸ−ＭＵＬＴＩＰＬＹ−ＳＵＭ命令として実行されてもよく、または上記の場合の組み合わせを単一の命令として行い、レジスタまたは拡張Ｗｉｄｅオペランドパラメータを用いて各場合を区別する命令として詳述されてもよい。
【００５３】
[59]ＥＸＷＩＤＥ演算でアドレス指定された各メモリ領域は、対応するＥＸＷＩＤＥ実行ユニットに組み込まれたワイドキャッシュへ転送される。入力キャッシュおよび出力キャッシュは、高度な局所性があるときに利益を得る。すなわち、キャッシュライン内の単一のデータ項目が作用を受けると、その他の項目も作用されることになる。関数キャッシュおよび状態キャッシュは高度の再利用から利益を得る。すなわち、関数データおよび状態データがメモリ階層からキャッシュへフェッチされた後で、これらは何度も再利用される。典型的なキャッシュはシングルポートもしくはデュアルポートのメモリセル（または、１のＦＦＴ根、いわゆる回転因子の場合のように、ＲＯＭセルさえも）を含み、必要とされるキャッシュエントリの数は少なめ（例えば１〜８エントリ）であり、そのため、エリアおよび電力損失は、同じオペランド帯域幅についてマルチポートのレジスタ・ファイル・アクセスが消費するはずのものよりも低い。
【００５４】
[60]拡張可能Ｗｉｄｅ演算ハードウェアは、汎用ホストプロセッサとの統合を簡素化しつつ、ＡＳＩＣの低いエリアおよび電力に接近することができる。例えば、ＥＸＷＩＤＥＨＵＦＦＭＡＮ実行ユニットは、ハフマン復号に特化された狭い（例えば、３２ビットの整数以下の）データパスを備えることができ、アイドル状態のときには電力がオフにゲート制御される。単一のＥＸＷＩＤＥＨＵＦＦＭＡＮ命令を発することにより、ホストプロセッサは自律的にハフマンユニット内で記号の長いストリーム（例えば何千も）の符号化に着手し、同時にホストは他の命令を進める。ホストは、状態メモリ領域またはメモリマップド・イベント・レジスタを読み出すことによってハフマン状況を問い合わせることができる。あるいは、イベントレジスタは、ホストに合図するための割込みを可能にする関連付けられたメモリマップドマスクを備えることもできる。
【００５５】
[61]多数の実行ユニットが特定の拡張可能Ｗｉｄｅ演算を実行することができる。例えば、高圧縮（伸張）性能を必要とするサーバアプリケーションでは、各々が単一のＥＸＷＩＤＥＨＵＦＦＭＡＮ命令を有する複数の小型のシリアル・ハフマン・ユニットが各々開始され、次いで、記号の複数の長いストリームを並列に独立して処理することができるはずである。
【００５６】
[62]拡張可能Ｗｉｄｅ実行ユニットは、メモリ階層における非同期性に適応する同じ機構を用いて、ホストプロセッサとは異なるクロック速度で非同期的に動作することができる。例えば、ＥＸＷＩＤＥＦＩＬＴＥＲ実行ユニットは、外部の混合信号インターフェースに同期されたクロック速度でメモリの循環バッファ領域に置かれたデータに対してＩＩＲフィルタまたはＦＩＲフィルタを行うことにより、インターフェースの確実なロッキングのための高精度のリアルタイムフィードバック信号を提供することができる。
【００５７】
[63]図６に、チップ上の大規模システムが、（例えば、パケットストリームのスカラ処理に適した）狭い低電力コアから、（例えば、４Ｇ無線チャネルまたはオーディオチャネルのベクトル処理に適した）中程度の幅のコア、（例えば、ＨＤビデオおよび３Ｄグラフィックスの行列処理に適した）きわめて幅広いコアにまで及ぶ多くのコアをどのように含みうるかを示す。拡張可能Ｗｉｄｅ演算の単一の命令セットがきわめて広範囲の幅のコア上で正確に実行される。したがって、ホスト・オペレーティング・システムのハイパーバイザは、性能および電力損失を最適化するために最善の幅のコアにタスクを割り振ることができる。アプリケーション開発者らはこの割り振りを事前に適合させることができる。あるいは、コア・モニタリング・ハードウェアを用いて、たとえアプリケーション開発者らがコア割り振りを事前に予想するための情報またはリソースを欠いているときでさえも、最適な性能および電力を得るようタスクを動的に割り振るためにハイパーバイザによって利用される性能統計（例えば、実行ユニット利用、キャッシュミスなど）のデータベースを維持することもできる。
【００５８】
[64]図７に、前述の拡張可能Ｗｉｄｅ命令を実行するのに用いられうるプロセッサの一例としてブロック図形式で汎用プロセッサを示す。図には、（Ａユニットとラベル付けされた）アクセスユニット１０２の４つのコピーが示されている。各アクセスユニット１０２は、レジスタファイルおよび機能ユニット（不図示）に結合されたアクセス命令フェッチ待ち行列を含む。典型的な実施形態において、プロセッサの各スレッドはおおよそ６４個程度の汎用レジスタを有しうる。アクセスユニットは４つの同時実行スレッドについて独立して機能し、算術命令および分岐命令を実行することによってプログラム制御フローを各々算出し、ロード命令および記憶命令を実行することによってメモリにアクセスする。アクセスユニット１０２は上述の拡張可能Ｗｉｄｅオペランド命令のためのＷｉｄｅオペランド記述子を提供する。図７において、メモリシステムは、キャッシュメモリ１０４、外部バスインターフェース１０６、およびメイン・メモリ・システム１０８を入出力装置１１０と共に含む。必要に応じて、追加のキャッシュメモリ、例えばセカンダリキャッシュも設けることができる。アクセスユニット１０２は、アクセス・レジスタ・ファイルのための結果を生成し、共用メモリシステム１０４、１０６、および１０８にメモリアドレスを提供する。メモリ階層は、オンチップ命令およびデータメモリ、命令およびデータキャッシュ、仮想メモリ設備、および外部デバイスへのインターフェースを含むことができる。
【００５９】
[65]メモリシステムからフェッチされたメモリの内容は、アクセスユニットによって実行されない実行命令と組み合わされ、（「Ｅユニット」とラベル付けされた）４つの実行命令ユニット１０５へ入力される。拡張可能Ｗｉｄｅ命令について、メモリシステムからフェッチされたメモリの内容は、バス１２０によって拡張可能Ｗｉｄｅオペランドキャッシュ１１６にも提供される。Ｅユニット１１５内で、命令およびメモリデータは、実行レジスタ・ファイル・ソース・オペランドをフェッチする実行レジスタファイルに提示される。それらの命令は、４つのスレッドからのどの命令が利用可能な実行機能ユニット１３０、１３２、１３４、１３６、および１３８へ経路制御されるべきか選択するアービトレーションユニット１２４に結合される。各実行機能ユニットは、拡張可能Ｗｉｄｅオペランドを保持するためのキャッシュメモリ１１６を含む  実行機能ユニット１３０〜１３８は、拡張可能Ｗｉｄｅオペランドを用いて様々な演算を行うように最適化された算術論理演算装置である。例えば、行列実行機能ユニットは、行列に対する演算を行うように設計されたユニットである。ｏｐｃｏｄｅ内のフィールドが、特定の命令に用いられる実行機能ユニットを指定することができる。
【００６０】
[66]実行機能ユニット１３０〜１３８は、各々、前述の拡張可能Ｗｉｄｅオペランドを含むソースオペランドの記憶を可能にするために専用記憶１１６を含む。これらのキャッシュメモリは典型的には、プロセッサとメモリとの間のデータパス１４０の幅の倍数である幅を有する。よって、データパス１４０の幅が１２８ビットである場合、専用記憶１１６は好ましくは、その１２８ｂｕｔ幅の倍数の幅、例えば、２５６ビット、５１２ビット、１０２４ビット、または２０４８ビットの幅を有する。当然ながら、実行されるべき個々の関数および関数と関連付けられたデータに応じて、オペランドの中には専用記憶の全幅を利用するものもあり、そうでないものもあるであろう。前述のように、メモリ１０８から個々の機能ユニットと関連付けられた記憶１１６へのこれらの拡張可能Ｗｉｄｅオペランドの転送は、拡張可能Ｗｉｄｅオペランドの各部分が専用記憶１１６へ順次にロードされる複数サイクルを必要とすることになる。しかし、ロードされた後には、各拡張可能Ｗｉｄｅオペランドはほぼ同時に用いられうる。
【００６１】
[67]本発明のこの記述は例示と説明を目的として提示したものである。網羅的であることも、本発明を記述したとおりの形態だけに限定することも意図されておらず、上記の教示に照らして多くの改変および変形が可能である。実施形態は、本発明の原理および本発明の実際の適用を説明するために選択し、記述したものである。この記述は、当業者が様々な実施形態において、個々の用途に適した様々な改変を伴って本発明を最適に利用、実施することを可能にするであろう。本発明の範囲は添付の特許請求の範囲によって定義される。
【図１】
2017520873.tif 000004
【図２】
2017520873.tif 000005
【図３】
2017520873.tif 000006
【図４】
2017520873.tif 000007
【図５】
2017520873.tif 000008
【図６】
2017520873.tif 000009
【図７】
2017520873.tif 000010
【国際調査報告】
2017520873.tif 000011