本発明の1つ以上の態様によれば、コンピューティング環境内の処理を容易にする能力が提供される。一例として、例えば、プロセッサの選択された属性(プロセッサの特定のモデルの選択された属性など)に関するモデル依存(model-dependent)の詳細情報を伝達するクエリ関数(query function)が提供される。選択された属性には、例えば、データレイアウト、データタイプ、もしくはデータサイズまたはその組み合わせなど、プロセッサによって記憶もしくは使用またはその両方が行われるデータに関する選択された属性が含まれる。
一例において、クエリ関数は、例えばクエリ関数を含む複数の関数を実行するように構成された単一の命令(例えば、ハードウェア/ソフトウェアインタフェースにおける単一のアーキテクチャ化されたハードウェア機械命令)などの命令の一部として含まれる。クエリ関数は、命令によってサポートされる関数/演算、および1つ以上のデータ属性に関する詳細情報を示すように構成される。各関数は、単一の命令(例えば、単一のアーキテクチャ化された命令)の一部として構成されるため、システムリソース使用および複雑さを低減し、システム性能を向上させることができる。
命令は、汎用プロセッサなどのプロセッサ上のプログラムによってディスパッチされる、汎用プロセッサ命令セットアーキテクチャ(ISA)の一部であってもよい。命令は、汎用プロセッサによって実行されてもよいし、命令の1つ以上の関数が、汎用プロセッサに結合されるかまたはその一部である、特定の関数用に構成されたコプロセッサなどの専用プロセッサによって実行されてもよいし、その両方であってもよい。その他の変形も可能である。
クエリ関数を含みかつそれを使用する命令の一例として、テンソル計算(tensor computations)もしくは他の演算またはその両方に関連する機能を提供するために使用されるニューラルネットワーク処理アシスト命令(Neural Network Processing Assist instruction)が挙げられる。この命令の一例については後段で詳述する。なお、ニューラルネットワーク処理アシスト命令は、クエリ関数を使用する命令の一例であるが、他の命令もこのような関数を使用することができる。
本発明の1つ以上の態様を組み込んで使用するコンピューティング環境の一実施形態を、図1Aを参照して説明する。一例として、コンピューティング環境は、z/Architecture(登録商標)命令セットアーキテクチャ(インターナショナル・ビジネス・マシーンズ・コーポレーション(ニューヨーク州アーモンク)製)に基づいている。z/Architecture命令セットアーキテクチャの一実施形態は、「z/Architecture Principles of Operation」と題された刊行物(IBM刊行物番号SA22-7832-12、第13版、2019年9月)に記載されており、その全体が参照により本明細書に組み込まれる。ただし、z/Architecture命令セットアーキテクチャは、一例に過ぎず、インターナショナル・ビジネス・マシーンズ・コーポレーションおよび/もしくは他のエンティティの他のアーキテクチャもしくは他のタイプのコンピューティング環境またはその両方が、本発明の1つ以上の態様を含む、もしくは使用する、またはその両方を行うことができる。なお、z/ArchitectureおよびIBMは、少なくとも1つの法域における、インターナショナル・ビジネス・マシーンズ・コーポレーションの商標または登録商標である。
図1Aを参照すると、コンピューティング環境100は、例えば、コンピュータシステム102を含む。コンピュータシステム102は例えば、汎用コンピューティングデバイスとして示される。コンピュータシステム102は、特に限定されないが、1つ以上のバスもしくは他の接続またはその両方を介して互いに結合された、1つ以上の汎用プロセッサまたは処理ユニット104(例えば、中央処理装置(CPU))と、ニューラルネットワークプロセッサ105などの少なくとも1つの専用プロセッサと、メモリ106(または、例えば、システムメモリ、メインメモリ、メインストレージ、中央ストレージ、またはストレージとも呼ばれる)と、1つ以上の入力/出力(I/O)インタフェース108とを含んでもよい。例えば、プロセッサ104、105およびメモリ106は、1つ以上のバス110を介してI/Oインタフェース108に結合され、プロセッサ104、105は、1つ以上のバス111を介して互いに結合される。
バス111は、例えば、メモリまたはキャッシュコヒーレンスバス(cache coherence bus)である。バス110は、例えば、メモリバスまたはメモリコントローラ、周辺バス、アクセラレーテッドグラフィックスポート、および様々なバスアーキテクチャのいずれかを使用するプロセッサまたはローカルバスを含む、複数のタイプのバス構造のいずれか1つ以上を表す。例えば、特に限定されないが、このようなアーキテクチャには、インダストリスタンダードアーキテクチャ(ISA:Industry Standard Architecture)、マイクロチャネルアーキテクチャ(MCA:Micro Channel Architecture)、拡張ISA(EISA:Enhanced ISA)、ビデオエレクトロニクススタンダーズアソシエーション(VESA:Video Electronics Standards Association)ローカルバス、およびペリフェラルコンポーネントインターコネクト(PCI:Peripheral Component Interconnect)が含まれる。
例として、1つ以上の専用プロセッサ(例えば、ニューラルネットワークプロセッサ)は、1つ以上の汎用プロセッサと別体であってこれらに結合されていてもよいし、これらに組み込まれていてもよいし、その両方であってもよい。多くの変形が可能である。
例えば、メモリ106は、例えば1つ以上のバス111を介してプロセッサ104のローカルキャッシュ114もしくはニューラルネットワークプロセッサ105またはその両方に結合可能な、共有キャッシュなどのキャッシュ112を含んでもよい。さらに、メモリ106は、1つ以上のプログラムまたはアプリケーション116および少なくとも1つのオペレーティングシステム118を含んでもよい。オペレーティングシステムの一例としては、z/OS(登録商標)オペレーティングシステム(インターナショナル・ビジネス・マシーンズ・コーポレーション(ニューヨーク州アーモンク)製)。なお、z/OSは、少なくとも1つの法域における、インターナショナル・ビジネス・マシーンズ・コーポレーションの商標または登録商標である。インターナショナル・ビジネス・マシーンズ・コーポレーションもしくは他のエンティティまたはその両方が提供する他のオペレーティングシステムを使用してもよい。メモリ106はまた、本発明の態様の実施形態の機能を実行するように構成可能な、1つ以上のコンピュータ可読プログラム命令120を含んでもよい。
さらに、1つ以上の実施形態において、メモリ106は、プロセッサファームウェア122を含む。プロセッサファームウェアは、例えば、プロセッサのマイクロコードまたはミリコードを含む。プロセッサファームウェアは、例えば、より上位レベルのマシンコードの実装において使用されるハードウェアレベルの命令もしくはデータ構造またはその両方を含む。一実施形態において、プロセッサファームウェアは、例えば、信頼できるソフトウェアを含むマイクロコードもしくはミリコード、または基礎となるハードウェアに固有のマイクロコードもしくはミリコードとして通常は提供される、システムハードウェアへのオペレーティングシステムのアクセスを制御する独自コードを含む。
コンピュータシステム102は、例えばI/Oインタフェース108を介して、ユーザ端末、テープドライブ、ポインティングデバイス、ディスプレイ、および1つ以上のデータストレージデバイス134などの1つ以上の外部デバイス130と通信してもよい。データストレージデバイス134は、1つ以上のプログラム136、1つ以上のコンピュータ可読プログラム命令138、もしくはデータまたはその組み合わせなどを記憶してもよい。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成されてもよい。
コンピュータシステム102はまた、例えばI/Oインタフェース108を介して、ネットワークインタフェース132と通信してもよい。これにより、コンピュータシステム102は、ローカルエリアネットワーク(LAN)、汎用ワイドエリアネットワーク(WAN)、もしくは公衆ネットワーク(例えば、インターネット)またはその組み合わせなどの1つ以上のネットワークと通信することができ、他のコンピューティングデバイスまたはシステムとの通信を実現することができる。
コンピュータシステム102は、取り外し可能/取り外し不可能な揮発性/不揮発性コンピュータシステム可読媒体を含んでもよいし、これらの媒体に結合されてもよいし、その両方であってもよい。例えば、コンピュータシステム102は、取り外し不可能な不揮発性磁気媒体(一般的に「ハードドライブ」と呼ばれる)、取り外し可能な不揮発性磁気ディスク(例えば、「フロッピーディスク」)への読み書きのための磁気ディスクドライブ、もしくは、取り外し可能な不揮発性光ディスク(CD-ROM、DVD-ROMや他の光媒体など)への読み書きのための光ディスクドライブ、またはその組み合わせを含んでもよいし、これらの媒体に結合されてもよいし、その両方であってもよい。なお、他のハードウェアコンポーネントもしくはソフトウェアコンポーネントまたはその両方をコンピュータシステム102とともに使用してもよい。例としては、特に限定されないが、マイクロコードまたはミリコード、デバイスドライバ、冗長処理ユニット、外部ディスクドライブアレイ、RAIDシステム、テープドライブ、データアーカイブストレージシステムなどが挙げられる。
コンピュータシステム102は、他の多くの汎用または専用コンピューティングシステム環境または構成とともに動作してもよい。コンピュータシステム102とともに使用するのに適した周知のコンピューティングシステム、環境、もしくは構成またはその組み合わせの例としては、特に限定されないが、パーソナルコンピュータ(PC)システム、サーバコンピュータシステム、シンクライアント、シッククライアント、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家電、ネットワークPC、ミニコンピュータシステム、メインフレームコンピュータシステム、および、これらのシステムまたはデバイスのいずれかを含む分散型クラウドコンピューティング環境などが挙げられる。
一例として、プロセッサ(例えば、プロセッサ104もしくはプロセッサ105またはその両方)は、命令を実行するために使用される複数の機能コンポーネント(またはそのサブセット)を含む。図1Bに示すように、これらの機能コンポーネントは、例えば、実行される命令をフェッチする命令フェッチコンポーネント150と、フェッチされた命令をデコードし、デコードされた命令のオペランドを取得する命令デコードユニット152と、デコードされた命令を実行する1つ以上の命令実行コンポーネント154と、必要に応じて命令実行のためにメモリにアクセスするメモリアクセスコンポーネント156と、実行された命令の結果を提供するライトバック(write back)コンポーネント158とを含む。コンポーネントのうちの1つ以上は、命令処理において1つ以上のレジスタ160にアクセスする、もしくはレジスタ160を使用する、またはその両方を行うことができる。さらに、コンポーネントのうちの1つ以上は、本発明の1つ以上の態様に従って、例えば本明細書に記載するニューラルネットワーク処理アシスト命令(または本発明の1つ以上の態様を使用可能な他の処理)のクエリ関数もしくはニューラルネットワーク処理アシスト処理またはその両方を実行する際に使用される1つ以上の他のコンポーネントの少なくとも一部を含むか、またはこれら1つ以上の他のコンポーネントにアクセスすることができる。これら1つ以上の他のコンポーネントには、例えば、クエリ関数コンポーネント170もしくはニューラルネットワーク処理アシストコンポーネント172またはその両方(および/または1つ以上の他のコンポーネント)が含まれる。
本発明の1つ以上の態様に従って、選択されたプロセッサ(例えば、ニューラルネットワークプロセッサ105)の特定のモデルに関する詳細情報を伝達するクエリ関数が提供される。例えば、クエリ関数は、プロセッサ104において実装される(選択されたプロセッサの特定のモデルの詳細をプロセッサは把握しているため)か、または、選択されたプロセッサ(例えば、ニューラルネットワークプロセッサ105)において実装される。詳細情報には、例えば、プロセッサの特定のモデルなど、プロセッサによってサポートされるモデル依存データ属性、および選択された命令によって提供される関数/演算が含まれる。一例において、プロセッサは、ニューラルネットワークプロセッサ105などのニューラルネットワークプロセッサ(ニューラルネットワークアクセラレータとも呼ばれる)であり、クエリ関数は、少なくとも、ニューラルネットワークプロセッサの特定のモデルによってサポートされるデータ属性に関する詳細情報を伝達するために使用される。
クエリ関数を処理する一例を、図2を参照して説明する。この処理は、汎用プロセッサ104などの汎用プロセッサによって実行される。他の実施形態において、この処理はニューラルネットワークプロセッサ105などの専用プロセッサによって実行されてもよい。他の実施形態も可能である。
図2を参照すると、一実施形態において、クエリ関数は命令を介して開始される。したがって、ステップ200にて命令が取得され、ステップ210にて実行される。一例において、この実行は、ステップ220にて、クエリ関数がこの命令によって指定されているかどうかを判断することを含む。これには、例えば、命令を解読し、命令の少なくとも1つのオペランドをチェックして、どの関数が開始されるかを判断することが含まれる。ステップ220にてクエリ関数が指定されていない場合、ステップ230にて他の命令処理が実行される。これに対して、ステップ220にてクエリ関数が指定された場合、ステップ240にて、特定のプロセッサ、特にプロセッサの特定のモデルに関する情報が取得される。マシンまたはプロセッサの特定のモデルは、特定の能力を有する。(例えば、現在実装されている)マシンまたはプロセッサの別のモデルは、追加の能力、より少ない能力、もしくは異なる能力もしくはその組み合わせを有している場合があり、かつ/または、追加の能力、より少ない能力、もしくは異なる能力もしくはその組み合わせを有する異なる世代(例えば、現在または将来の世代)のものである場合がある。取得される情報には、例えば、特定のプロセッサのモデル依存属性、特に、特定のプロセッサの特定のモデルによって使用もしくは記憶またはその両方が行われるデータに関する属性が含まれる。クエリ関数はまた、例えば、クエリ関数を実行するために使用される命令などを介して、プロセッサ上で実行される可能のある特定の関数の表示(indication)も取得する。追加の情報、これより少ない情報、もしくは他の情報またはその組み合わせを取得してもよい。
一例において、情報は、クエリ関数を実行するプロセッサのファームウェアによって取得される。ファームウェアは、特定のプロセッサ(例えば、ニューラルネットワークプロセッサ)の特定のモデルの属性に関する知識を有する。この情報は、例えば、制御ブロック、レジスタ、もしくはメモリもしくはその組み合わせに記憶されてもよいし、かつ/または、クエリ関数を実行するプロセッサがアクセス可能であってもよい。
取得した情報は、ステップ250にて、例えば、さらなる処理においてこの情報を使用する可能性のある1つ以上のアプリケーションにアクセス可能であるか、これら1つ以上のアプリケーションとともに使用されるか、またはその両方であるパラメータブロック(parameter block)または他の構造内に配置される。一例において、パラメータブロックもしくはパラメータブロックの情報またはその両方は、メモリ内に保持される。他の実施形態において、パラメータブロックもしくは情報またはその両方は、1つ以上のハードウェアレジスタ内に保持されてもよい。別の例として、クエリ関数は、この情報をアプリケーションまたは他の非特権(non-privileged)プログラムが利用できるようにするためのアプリケーションプログラミングインタフェースを利用可能にする、オペレーティングシステムによって実行される特権操作(privileged operation)であってもよい。さらに別の例では、クエリ関数は、ニューラルネットワークプロセッサ105などの専用プロセッサによって実行される。他の例も可能である。
一具体例において、クエリ関数は、ニューラルネットワークプロセッサ105などのニューラルネットワークプロセッサに関する情報を決定するために実行される。この情報には、たとえば、ニューラルネットワークプロセッサの選択されたモデルによってサポートされるデータタイプ、データサイズ、もしくはデータレイアウトフォーマットまたはその組み合わせが含まれる。この情報は、他のモデル(例えば、以前のモデルもしくは将来のモデルまたはその両方)が同じデータタイプ、データサイズ、もしくはデータレイアウトフォーマットまたはその組み合わせなどの同じデータ属性をサポートしない可能性があるという点で、モデル依存である。
他の実施形態において、他の情報が取得されてもよい。取得された情報(例えば、モデル依存データ属性もしくは他の情報またはその両方)は、例えば、さらなる処理においてアプリケーションによって使用される。例えば、アプリケーションは、ニューラルネットワークプロセッサに関するモデル依存情報(例えば、モデル依存データ属性)もしくは他の情報(例えば、命令もしくはニューラルネットワークプロセッサまたはその両方によってサポートされる機能、パラメータブロックフォーマットなど)またはその両方を取得するために、汎用プロセッサ104などのプロセッサ上でニューラルネットワーク処理アシスト命令を実行する。次に、取得された情報(少なくとも選択された情報)は、命令によって指定された他の関数(本明細書において「非クエリ関数(non-query functions)」と呼ぶ)を実行するために、ニューラルネットワーク処理アシスト命令の他の実行において使用される。これらの非クエリ関数を使用して、例えばテンソル計算に関連する演算が実行される。一実施形態において、ニューラルネットワーク処理アシスト命令の他の実行は汎用プロセッサによって開始されるが、命令によって指定された非クエリ関数は、取得された情報の少なくとも一部を使用して専用プロセッサ(例えば、ニューラルネットワークプロセッサ105)によって実行される。クエリ関数およびニューラルネットワーク処理アシスト命令に関連するさらなる詳細は後述する。
ニューラルネットワーク処理アシスト命令の一例を、図3Aを参照して説明する。一例において、命令は汎用プロセッサ(例えば、プロセッサ104)上で開始され、命令によって指定された関数は、当該関数に応じて汎用プロセッサもしくは専用プロセッサ(例えば、専用プロセッサ105)またはその両方において実行される。その後、命令は汎用プロセッサ上で完了する。他の例において、命令は、1つ以上の汎用プロセッサまたは1つ以上の専用プロセッサ上で開始、実行、完了される。他の変形も可能である。なお、本明細書における説明では、特定の場所、特定のフィールド、もしくはフィールドの特定のサイズまたはその組み合わせが示される(例えば、特定のバイトもしくはビットまたはその両方)。ただし、他の場所、フィールド、もしくはサイズまたはその組み合わせが提供されてもよい。さらに、ビットを特定の値、例えば1または0に設定することが指定される場合があるが、これは一例に過ぎない。他の例において、ビットが設定される場合、反対の値や別の値など、異なる値に設定されてもよい。多くの変形が可能である。
一例において、図3Aを参照すると、ニューラルネットワーク処理アシスト命令300は、拡張操作コード(オペコード(opcode))によってレジスタおよびレジスタ操作を示すRREフォーマットを有する。図3Aに示すように、一例において、ニューラルネットワーク処理アシスト命令300は、ニューラルネットワーク処理アシスト操作を示す操作コード(オペコード)フィールド302(例えば、ビット0~15)を含む。一例において、命令のビット16~31は予備(reserved)で、0を含むようになっている。
一例において、命令は、命令によって暗黙的に(implicitly)指定された複数の汎用レジスタを使用する。例えば、ニューラルネットワーク処理アシスト命令300は、暗黙のレジスタである汎用レジスタ0および汎用レジスタ1を使用する。これらの例は、それぞれ図3Bおよび図3Dを参照して説明する。
図3Bを参照すると、一例において、汎用レジスタ0は、関数コードフィールドと、命令の完了時に更新される可能性のあるステータスフィールドとを含む。一例として、汎用レジスタ0は、応答コードフィールド310(例えば、ビット0~15)と、例外フラグフィールド312(例えば、ビット24~31)と、関数コードフィールド314(例えば、ビット56~63)とを含む。さらに、一例において、汎用レジスタ0のビット16~23およびビット32~55は予備で、0を含むようになっている。1つ以上のフィールドは、命令によって実行される特定の関数によって使用される。一例において、すべてのフィールドがすべての関数で使用されるわけではない。各フィールドについて以下に説明する。
応答コード(RC)310:このフィールド(例えば、ビット位置0~15)は、応答コードを含む。ニューラルネットワーク処理アシスト命令の実行が、例えば「1」の条件コードで完了すると、応答コードが記憶される。無効な入力条件に遭遇すると、実行中に認識された無効な入力条件の原因を示す0以外の値が応答コードフィールドに記憶され、選択された条件コード、例えば「1」が設定される。応答コードフィールドに記憶されるコードは、一例として以下のように定義される。
応答コード 意味
0001 パラメータブロックのバージョン番号で指定されているパラメータブロックのフォーマットが、モデルでサポートされていない。
0002 指定された関数が定義されていないか、マシンにインストールされていない。
0010 指定されたテンソルのデータレイアウトフォーマットがサポートされていない。
0011 指定されたテンソルのデータタイプがサポートされていない。
0012 指定された単一のテンソル次元(single tensor dimension)が最大次元インデックスサイズ(maximum dimension index size)より大きい。
0013 指定されたテンソルのサイズが最大テンソルサイズより大きい。
0014 指定されたテンソルのアドレスが4Kバイト境界(4 K-byte boundary)にアライメントされていない。
0015 関数固有セーブ領域アドレス(function-specific-save-area-address)が4Kバイト境界にアライメントされていない。
F000-FFFF 関数固有応答コード。これらの応答は、特定の関数に対して定義される。
例外フラグ(EF)312:このフィールド(例えば、ビット位置24~31)は、例外フラグを含む。命令の実行中に例外条件が検出された場合、対応する例外フラグ制御(例えば、ビット)が、例えば1に設定され、そうでない場合、制御は変更されない。例外フラグフィールドは、命令の最初の呼び出しの前に0に初期化される。予備のフラグは、命令の実行中に変更されない。例外フラグフィールドに記憶されるフラグは、一例として以下のように定義される。
EF(ビット) 意味
0 範囲違反。このフラグは、非数値(non-numeric value)が入力テンソルで検出されたか、または出力テンソルに記憶されたときにセットされる。このフラグは、例えば、命令が例えば「0」の条件コードで完了したときにのみ有効である。
1~7 予備
関数コード(FC)314:このフィールド(例えば、ビット位置56~63)は、関数コードを含む。ニューラルネットワーク処理アシスト命令に対して割り当てられた関数コードの例を、図3Cに示している。他のすべての関数コードは未割り当てである。未割り当てまたは未インストールの関数コードが指定された場合、例えば16進数「0002」の応答コードと、例えば「1」の選択条件コードとが設定される。このフィールドは、実行中に変更されない。
ここで示すように、ニューラルネットワーク処理アシスト命令は、汎用レジスタ0に加えて汎用レジスタ1も使用する。汎用レジスタ1の例を、図3Dに示している。例として、24ビットアドレス指定モードにおけるビット40~63、31ビットアドレス指定モードにおけるビット33~63、または64ビットアドレス指定モードにおけるビット0~63は、パラメータブロック320のアドレスを含む。汎用レジスタ1の内容は、例えば、ストレージ内のパラメータブロックの左端バイト(leftmost byte)の論理アドレスを指定する。パラメータブロックは、ダブルワード境界(doubleword boundary)で指定される。そうでない場合、指定例外が認識される。すべての関数について、汎用レジスタ1の内容は変更されない。
アクセスレジスタモードでは、アクセスレジスタ1は、一例として、パラメータブロック、入力テンソル、出力テンソル、および関数固有セーブ領域を含むアドレス空間を指定する。
一例において、パラメータブロックは、実行される命令によって指定される関数に応じて、異なるフォーマットを有することができる。例えば、クエリ関数はあるフォーマットのパラメータブロックを有し、命令の他の関数は別のフォーマットのパラメータブロックを有する。別の例では、すべての関数が同じパラメータブロックフォーマットを使用する。他の変形も可能である。
NNPA-QAF(使用可能関数照会(Query Available Functions))演算などのクエリ関数によって使用されるパラメータブロックの一例について、図3Eを参照して説明する。図示するように、一例において、NNPA-QAFパラメータブロック330は、例えば以下を含む。
インストール済み関数ベクトル(installed functions vector)332:パラメータブロックのこのフィールド(例えば、バイト0~31)は、インストール済み関数のベクトルを含む。一例において、インストール済み関数ベクトルのビット0~255は、ニューラルネットワーク処理アシスト命令の関数コード0~255にそれぞれ対応する。ビットが例えば1の場合、対応する関数がインストールされ、そうでない場合、関数はインストールされない。
インストール済みパラメータブロックフォーマットベクトル(installed parameter block formats vector)334:パラメータブロックのこのフィールド(例えば、バイト32~47)は、インストール済みパラメータブロックフォーマットのベクトルを含む。一例において、インストール済みパラメータブロックフォーマットベクトルのビット0~127は、ニューラルネットワーク処理アシスト命令の非クエリ関数のパラメータブロックフォーマット0~127に対応する。ビットが例えば1の場合、対応するパラメータブロックフォーマットがインストールされ、そうでない場合、パラメータブロックフォーマットはインストールされない。
インストール済みデータタイプ336:パラメータブロックのこのフィールド(例えば、バイト48~49)は、インストール済みデータタイプのベクトルを含む。一例において、インストール済みデータタイプベクトルのビット0~15は、インストールされるデータタイプに対応する。ビットが例えば1の場合、対応するデータタイプがインストールされ、そうでない場合、データタイプはインストールされない。データタイプの例としては、以下のものが挙げられる(なお、追加のデータタイプ、より少ないデータタイプ、もしくは他のデータタイプ、またはその組み合わせも可能である)。
ビット データタイプ
0 NNP-データタイプ1
1~15 予備
インストール済みデータレイアウトフォーマット338:パラメータブロックのこのフィールド(例えば、バイト52~55)は、インストール済みデータレイアウトフォーマットのベクトルを含む。一例において、インストール済みデータレイアウトフォーマットベクトルのビット0~31は、インストールされるデータレイアウトフォーマットに対応する。ビットが例えば1の場合、対応するデータレイアウトフォーマットがインストールされ、そうでない場合、データレイアウトフォーマットはインストールされない。データレイアウトフォーマットの例としては、以下のものが挙げられる(なお、追加のデータレイアウトフォーマット、より少ないデータレイアウトフォーマット、もしくは他のデータレイアウトフォーマット、またはその組み合わせも可能である)。
ビット データレイアウトフォーマット
0 4次元特徴テンソル(4D-feature tensor)
1 4次元カーネルテンソル(4D-kernel tensor)
2~31 予備
最大次元インデックスサイズ340:パラメータブロックのこのフィールド(例えば、バイト60~63)は、例えば、任意の指定のテンソルについての指定の次元インデックスサイズ内の要素の最大数を指定する32ビットの符号なし2進整数を含む。別の例において、最大次元インデックスサイズは、任意の指定のテンソルについての指定の次元インデックスサイズ内の最大バイト数を指定する。他の例も可能である。
最大テンソルサイズ342:パラメータブロックのこのフィールド(例えば、バイト64~71)は、例えば、テンソルフォーマットによって必要とされるパッドバイト(pad bytes)を含む、任意の指定のテンソルの最大バイト数を指定する32ビットの符号なし2進整数を含む。別の例において、最大テンソルサイズは、テンソルフォーマットによって必要とされる任意のパディング(padding)を含む、任意の指定のテンソルの最大総要素数を指定する。他の例も可能である。
インストール済みNNP-データタイプ1変換ベクトル344:パラメータブロックのこのフィールド(例えば、バイト72~73)は、インストール済みNNP-データタイプ1変換のベクトルを含む。一例において、インストール済みNNP-データタイプ1変換ベクトルのビット0~15は、NNP-データタイプ1フォーマットからの/へのインストール済みデータタイプの変換に対応する。ビットが1の場合、対応する変換がインストールされ、そうでない場合、変換はインストールされない。追加の変換、より少ない変換、もしくは他の変換、またはその組み合わせが指定されてもよい。
ビット データタイプ
0 予備
1 BFPタイニーフォーマット(tiny format)
2 BFPショートフォーマット(short format)
3~15 予備
図3Eを参照してクエリ関数のパラメータブロックの一例を説明したが、NNPA-QAF演算を含むクエリ関数のパラメータブロックの他のフォーマットを使用してもよい。フォーマットは、一例において、実行されるクエリ関数のタイプに依存する場合がある。さらに、パラメータブロックもしくはパラメータブロックの各フィールドまたはその両方は、追加の情報、より少ない情報、もしくは他の情報、またはその組み合わせを含んでもよい。
クエリ関数用のパラメータブロックに加えて、一例において、ニューラルネットワーク処理アシスト命令の非クエリ関数などの、非クエリ関数用のパラメータブロックフォーマットが存在する。ニューラルネットワーク処理アシスト命令の非クエリ関数などの非クエリ関数によって使用されるパラメータブロックの一例を、図3Fを参照して説明する。
図示するように、一例において、例えばニューラルネットワーク処理アシスト命令の非クエリ関数によって採用されるパラメータブロック350には、例えば以下のものが含まれる。
パラメータブロックバージョン番号352:パラメータブロックのこのフィールド(例えば、バイト0~1)は、パラメータブロックのバージョンおよびサイズを指定する。一例において、パラメータブロックバージョン番号のビット0~8は予備で、0を含むようになっており、パラメータブロックバージョン番号のビット9~15は、パラメータブロックのフォーマットを指定する符号なし2進整数を含む。クエリ関数は、使用可能なパラメータブロックフォーマットを示すメカニズムを提供する。指定されたパラメータブロックのサイズまたはフォーマットがモデルによってサポートされていない場合、例えば16進数「0001」の応答コードが汎用レジスタ0に記憶され、条件コード(例えば、条件コード「1」)を設定することによって命令が完了する。パラメータブロックバージョン番号はプログラムによって指定され、命令の実行中に変更されることはない。
モデルバージョン番号354:パラメータブロックのこのフィールド(例えば、バイト2)は、命令(例えば、特定の非クエリ関数)を実行したモデルを識別する符号なし2進整数である。継続フラグ(後述)が1である場合、モデルバージョン番号は、パラメータブロックの継続状態バッファフィールド(後述)の内容を解釈して演算を再開する目的で、演算に対する入力となることができる。
継続フラグ356:パラメータブロックのこのフィールド(例えば、ビット63)は、例えば、1のとき、演算が部分的に完了しており、継続状態バッファの内容を使用して演算が再開可能であることを示す。プログラムは、継続フラグを0に初期化し、演算を再開する目的で命令が再実行される場合には、継続フラグを変更しない。それ以外の場合、結果は予測不可能となる。
演算の最初に継続フラグがセットされ、パラメータブロックの内容が最初の呼び出し以降に変更された場合、結果は予測不可能となる。
関数固有セーブ領域アドレス358:パラメータブロックのこのフィールド(例えば、バイト56~63)は、関数固有セーブ領域の論理アドレスを含む。一例において、関数固有セーブ領域アドレスは4Kバイト境界にアライメントされる。そうでない場合、汎用レジスタ0に例えば16進数「0015」の応答コードが設定され、命令は例えば「1」の条件コードで完了する。アドレスは現在のアドレス指定モードに従う。関数固有セーブ領域のサイズは、関数コードに依存する。
関数固有セーブ領域全体がプログラムイベント記録(PER:program event recording)ストレージ領域指定と重なる場合、関数固有セーブ領域について、該当する場合、PERストレージ変更イベントが認識される。関数固有セーブ領域の一部のみがPERストレージ領域指定と重なる場合、以下のいずれが発生するかはモデルに依存する:
* 関数固有セーブ領域全体について、該当する場合、PERストレージ変更イベントが認識される。
* 関数固有セーブ領域の記憶される部分について、該当する場合、PERストレージ変更イベントが認識される。
パラメータブロック全体がPERストレージ領域指定と重なる場合、パラメータブロックについて、該当する場合、PERストレージ変更イベントが認識される。パラメータブロックの一部のみがPERストレージ領域指定と重なる場合、以下のいずれが発生するかはモデルに依存する。
* パラメータブロック全体について、該当する場合、PERストレージ変更イベントが認識される。
* パラメータブロックの記憶される部分について、該当する場合、PERストレージ変更イベントが認識される。
パラメータブロックについて、該当する場合、PERゼロアドレス検出イベント(PER zero-address detection event)が認識される。ゼロアドレス検出は、一例において、テンソルアドレスまたは関数固有セーブ領域アドレスには適用されない。
出力テンソル記述子(descriptor)(例えば、1~2)360/入力テンソル記述子(例えば、1~3)365:テンソル記述子の一例を、図3Gを参照して説明する。一例において、テンソル記述子360、365は以下を含む。
データレイアウトフォーマット382:テンソル記述子のこのフィールド(例えば、バイト0)は、データレイアウトフォーマットを指定する。有効なデータレイアウトフォーマットには、例えば以下のようなものがある(なお、追加のデータレイアウトフォーマット、より少ないデータレイアウトフォーマット、もしくは他のデータレイアウトフォーマット、またはその組み合わせも可能である)。
フォーマット 説明 アライメント(バイト)
0 4次元特徴テンソル 4096
1 4次元カーネルテンソル 4096
2~255 予備 -
サポートされていない、または予備のデータレイアウトフォーマットが指定された場合、例えば、16進数「0010」の応答コードが汎用レジスタ0に記憶され、例えば「1」の条件コードを設定することによって命令が完了する。
データタイプ384:このフィールド(例えば、バイト1)は、テンソルのデータタイプを指定する。サポートされるデータタイプの例を以下に示す(なお、追加のデータタイプ、より少ないデータタイプ、もしくは他のデータタイプ、またはその組み合わせも可能である)。
値 データタイプ データサイズ(ビット)
0 NNPデータタイプ-1 16
1~255 予備 -
サポートされていない、または予備のデータタイプが指定された場合、例えば、16進数「0011」の応答コードが汎用レジスタ0に記憶され、例えば「1」の条件コードを設定することによって命令が完了する。
次元1~4インデックスサイズ386:まとめて、次元インデックスサイズ1~4は、4次元テンソルの形状を指定する。各次元インデックスサイズは、0より大きく、最大次元インデックスサイズ(340、図3E)以下である。そうでない場合、例えば16進数「0012」の応答コードが汎用レジスタ0に記憶され、例えば「1」の条件コードを設定することによって命令が完了する。総テンソルサイズは、最大テンソルサイズ(342、図3E)以下である。そうでない場合、例えば16進数「0013」の応答コードが汎用レジスタ0に記憶され、例えば「1」の条件コードを設定することによって命令が完了する。
一例において、NNPA-データタイプ1の要素を持つ4D特徴テンソルのバイト数(すなわち、総テンソルサイズ)を決定するために、以下が使用される:次元インデックス4*次元インデックス3*ceil(次元インデックス2/32)*32*ceil(次元インデックス1/64)*64*2。
テンソルアドレス388:テンソル記述子のこのフィールド(例えば、バイト24~31)は、テンソルの左端バイトの論理アドレスを含む。アドレスは現在のアドレス指定モードに従う。
アドレスが関連するデータレイアウトフォーマットの境界にアライメントされていない場合、例えば16進数「0014」の応答コードが汎用レジスタ0に記憶され、例えば「1」の条件コードを設定することによって命令が完了する。
アクセスレジスタモードでは、アクセスレジスタ1は、ストレージ内のすべてのアクティブな入出力テンソルを含むアドレス空間を指定する。
図3Fに戻ると、パラメータブロック350は、一例において、本明細書で説明するように、特定の関数によって使用可能な関数固有パラメータ1~5(370)をさらに含む。
さらに、パラメータブロック350は、一例において、継続状態バッファ(continuation state buffer)フィールド375を含む。このフィールドは、この命令の演算が再開される場合に使用されるデータ(またはデータの位置)を含む。
演算への入力として、パラメータブロックの予備フィールドは0を含む必要がある。演算が終了すると、予備フィールドは0として記憶されてもよいし、変更されなくてもよい。
図3Fを参照して非クエリ関数のパラメータブロックの一例を説明したが、ニューラルネットワーク処理アシスト命令の非クエリ関数を含む、非クエリ関数のパラメータブロックの他のフォーマットを使用してもよい。フォーマットは、一例において、実行される関数のタイプに依存してもよい。さらに、図3Gを参照してテンソル記述子の一例を説明したが、他のフォーマットを使用してもよい。さらに、入出力テンソルについて異なるフォーマットを使用してもよい。他の変形も可能である。
ニューラルネットワーク処理アシスト命令の一実施形態によってサポートされる様々な関数に関するさらなる詳細を以下に説明する。
関数コード0:NNPA-QAF(使用可能関数照会)
ニューラルネットワーク処理アシスト(NNPA:Neural Network Processing Assist)クエリ関数は、例えば、インストールされた関数の利用可能性、インストールされたパラメータブロックフォーマット、インストールされたデータタイプ、インストールされたデータレイアウトフォーマット、最大次元インデックスサイズ、最大テンソルサイズなどの選択された情報を表示するメカニズムを提供する。情報は取得されると、パラメータブロック(例えば、パラメータブロック330)などの選択された場所に配置される。演算が終了すると、パラメータブロックの予備フィールドは0として記憶されてもよいし、変更されなくてもよい。
クエリ関数の一実施形態の実行において、汎用プロセッサ104などのプロセッサは、ニューラルネットワークプロセッサ105などのニューラルネットワークプロセッサの特定のモデルなど、選択されたプロセッサの特定のモデルに関する情報を取得する。取得された情報は、パラメータブロック(例えば、パラメータブロック330)内に配置されるか、あるいは、さらなる処理においてこの情報を使用する可能性のある1つ以上のアプリケーションがアクセス可能であるか、もしくはこれら1つ以上のアプリケーションとともに使用されるか、またはその両方である他の構造内に配置される。
取得される情報は、例えば、特定のプロセッサの選択されたモデルの1つ以上のインストールまたはサポートされたデータタイプ、1つ以上のインストールまたはサポートされたデータレイアウトフォーマット、もしくは1つ以上のインストールまたはサポートされたデータサイズ、またはその組み合わせを含む、特定のプロセッサの少なくとも1つ以上のデータ属性に関するモデル依存詳細情報を含む。この情報は、他のモデル(例えば、以前のモデルもしくは将来のモデルまたはその両方)が同じデータタイプ、データサイズ、もしくはデータレイアウトフォーマット、またはその組み合わせなどの同じデータ属性をサポートしない可能性があるという点で、モデル依存である。クエリ関数(例えば、NNPA-QAF関数)の実行が完了すると、一例として、条件コード0が設定される。条件コード1、2、3は、一例において、クエリ関数には適用されない。取得される情報に関するさらなる詳細を以下に説明する。
ここで示すように、一例において、取得される情報は、例えば、ニューラルネットワークプロセッサの特定のモデルの1つ以上のデータ属性に関するモデル依存情報を含む。データ属性の一例は、ニューラルネットワークプロセッサのインストールされたデータタイプである。例えば、ニューラルネットワークプロセッサ(または他のプロセッサ)の特定のモデルは、例として、NNP-データタイプ1データタイプ(ニューラルネットワーク処理-データタイプ1データタイプとも呼ぶ)もしくは他のデータまたはその両方などの1つ以上のデータタイプをサポートしてもよい。NNP-データタイプ1データタイプは、16ビット浮動小数点(floating-point)フォーマットであり、例えば、ディープラーニングの訓練と推論演算について多くの利点を提供する。利点は例えば、ディープラーニングネットワークの精度を維持する、サブノーマルフォーマットを排除して丸めモード(rounding mode)とコーナーケース(corner case)の取り扱いを簡素化する、算術演算で最も近い値に自動的に丸める、無限大と非数(NaN:not-a-number)の特別なエンティティを1つの値(NINF)に結合し、算術演算で受け入れられ取り扱われるようにする、などである。NINFは、指数オーバーフローや無効な演算(0による除算など)に対するより良いデフォルトを提供する。これにより、多くのプログラムはそのようなエラーを隠すことなく、また専用の例外ハンドラを使用することなく実行を続けることができる。その他のモデル依存データタイプも可能である。
NNP-データタイプ1データタイプのフォーマットの一例を図4に示す。図示するように、一例において、NNP-データタイプ1のデータは、例えば、フォーマット400で表すことができる。フォーマット400は、例えば、符号402(例えば、ビット0)、指数+31(404)(例えば、ビット1~6)、および小数406(例えば、ビット7~15)を含む。
NNP-データタイプ1のフォーマットの特性の例を以下に示す。
特性 NNP-データタイプ1
フォーマット長(ビット) 16ビット
バイアス付き指数長(ビット) 6ビット
小数長(ビット) 9ビット
精度(p) 10ビット
最大左単位表示(left-units-view)指数(Emax) 32
最小左単位表示指数(Emin) -31
左単位表示(LUV)バイアス 31
NNP-データタイプ1データタイプに関するさらなる詳細を以下に説明する。
バイアス付き指数(biased exponent):指数を符号なし数(unsigned numbers)として表現できるようにするために使用されるバイアスを上に示している。バイアス付き指数は、NNP-データタイプ1データタイプのクラスを参照して後述するように、すべての0とすべての1のバイアス付き指数に対して特別な意味が付されていないことを除いて、バイナリ浮動小数点フォーマットの特性に類似する。
仮数(significand):NNP-データタイプ1の数値の2進小数点(binary point)は、左端の小数ビットの左側にあるとみなされる。2進小数点の左側には暗黙の(implied)単位ビットが存在し、これは正規数(normal numbers)の場合は1、ゼロの場合は0とみなされる。左側に暗黙の単位ビットが付加された小数部(fraction)が、数値の仮数となる。
通常のNNP-データタイプ1の値は、仮数に基数2を乗じた値を非バイアス付き指数のべき乗にしたものである。
非ゼロ数(non-zero numbers)の値:非ゼロ数の値を以下に示す。
数値クラス 値
正規数 ±2e-31 x (1.f)
ここで、eは10進数で示されるバイアス付き指数であり、fは2進数で示される小数である。
一実施形態において、NNP-データタイプ1のデータには、数値エンティティおよび関連する非数値エンティティを含む3つのクラスがある。各データ項目は、符号、指数、および仮数を含む。指数は、すべてのバイアス付き指数が非負(non-negative)の符号なし数値となり、最小のバイアス付き指数が0であるようにバイアスが付いている。仮数は、明示的な小数部、および2進小数点の左側の暗黙的な単位ビットを含む。符号ビットは、プラスの場合が0、マイナスの場合が1である。
許容されるすべての非ゼロ有限数は、一意のNNP-データタイプ1表現を有する。同じ値に対して複数の表現を可能とする非正規(subnormal)数は存在せず、非正規の算術演算は存在しない。この3つのクラスには、例えば以下が含まれる。
データクラス 符号 バイアス付き指数 単位ビット* 小数部
ゼロ ± 0 0 0
正規数 ± 0 1 非0
正規数 ± 非0、すべて1ではない 1 いずれかの値
正規数 ± すべて1 - すべて1ではない
NINF ± すべて1 - すべて1
ここで、「-」は該当しないことを示し、「*」は暗黙の単位ビットを示し、NINFは数値または無限大ではないことを示す。
各クラスに関するさらなる詳細を以下に説明する。
ゼロ:ゼロは、ゼロのバイアス付き指数およびゼロの小数部を持つ。暗黙の単位ビットはゼロである。
正規数:正規数は任意の値のバイアス付き指数を持つことができる。バイアス付き指数が0の場合、小数部は非0となる。バイアス付き指数がすべて1の場合、小数部はすべて1にはならない。その他のバイアス付き指数値は、どのような小数値でもよい。暗黙の単位ビットは、すべての正規数に対して1である。
NINF:NINFは、すべての1のバイアス付き指数とすべての1の小数部で表される。NINFは、NNP-データタイプ1(すなわち、6つの指数ビットと9つの小数ビットを持つディープラーニング用に設計された16ビット浮動小数点)の表現可能な値の範囲にない値を表す。通常、NINFは演算中に伝搬されるだけなので、演算が終わっても表示されたままになる。
一例において、NNP-データタイプ1がサポートされているが、他のモデル依存(例えば、専用または非標準)データタイプ、および、1つ以上の標準データタイプ(例えば、IEEE754短精度(short precision)、バイナリ浮動小数点16ビット、IEEE半精度(half precision)浮動小数点、8ビット浮動小数点、4ビット整数フォーマット、もしくは8ビット整数フォーマットまたはその組み合わせなど)がサポートされてもよい。これらのデータフォーマットは、ニューラルネットワーク処理について異なる性質を有する。一例として、より小さいデータタイプ(例えば、より少ないビット)は、より高速に処理することができるとともに、キャッシュ/メモリの使用を少なくすることができる。より大きいデータタイプは、ニューラルネットワークにおいて結果の精度が高くなる。サポートされるデータタイプは、照会パラメータブロックにおいて(例えば、パラメータブロック330のインストール済みデータタイプフィールド336において)1つ以上の割り当てビットを有することができる。例えば、特定のプロセッサによってサポートされるモデル依存、専用、または非標準データタイプは、インストール済みデータタイプフィールドにおいて示されるが、標準データタイプは示されない。他の実施形態では、1つ以上の標準データタイプも示される。その他の変形も可能である。
一具体例において、インストール済みデータタイプフィールド336のビット0は、NNP-データタイプ1のデータタイプ用に予約され、例えば1に設定されると、プロセッサがNNP-データタイプ1をサポートすることを示す。一例において、インストール済みデータタイプのビットベクトルは、最大16のデータタイプを表すように構成され、各データタイプにビットが割り当てられる。ただし、他の実施形態において、ビットベクトルは、より多いデータタイプをサポートしてもよいし、より少ないデータタイプをサポートしてもよい。さらに、ベクトルは、1つ以上のビットが一のデータタイプに割り当てられるように構成されてもよい。多くの例が可能であり、かつ/または、追加のデータタイプ、より少ないデータタイプ、もしくは他のデータタイプ、もしくはその組み合わせがベクトルにおいてサポートもしくは表示もしくはその両方が行われてもよい。
一例において、クエリ関数は、モデル依存プロセッサにインストールされているデータタイプの表示を取得し、例えば、パラメータブロック330のインストール済みデータタイプフィールド336に1つ以上のビットを設定することによって、当該表示をパラメータブロックに配置する。さらに、一例において、クエリ関数は、インストール済みデータレイアウトフォーマット(別のデータ属性)の表示を取得し、例えば、インストール済みデータレイアウトフォーマットフィールド338に1つ以上のビットを設定することによって、当該情報をパラメータブロックに配置する。データレイアウトフォーマットの例としては、例えば、4次元特徴テンソルレイアウト(4D-feature tensor layout)および4次元カーネルテンソルレイアウト(4D-kernel tensor layout)が挙げられる。4次元特徴テンソルレイアウトは、一例において、本明細書で説明する関数によって使用され、一例において、畳み込み関数が4次元カーネルテンソルレイアウトを使用する。これらのデータレイアウトフォーマットは、ニューラルネットワーク処理アシスト命令の関数を実行する際の処理効率を向上させる方法で、ストレージ内のデータをテンソル用に配置する。例えば、ニューラルネットワーク処理アシスト命令は、効率的に動作するために、特定のデータレイアウトフォーマットで提供される入力テンソルを使用する。なお、例示的なレイアウトを提供したが、本明細書に記載の関数もしくは他の関数またはその両方について、追加のレイアウト、より少ないレイアウト、もしくは他のレイアウト、またはその組み合わせが提供されてもよい。
特定のプロセッサモデルに対するレイアウトの使用または利用可能性は、インストール済みデータレイアウトフォーマットのベクトル(たとえば、パラメータブロック330のフィールド338)によって提供される。このベクトルは、例えば、インストール済みデータレイアウトフォーマットのビットベクトルであり、CPUが、どのレイアウトがサポートされているかをアプリケーションに伝えることを可能にする。例えば、ビット0は4次元特徴テンソルレイアウト用に予約され、例えば1に設定されると、プロセッサが4次元特徴テンソルレイアウトをサポートしていることを示す。ビット1は4次元カーネルテンソルレイアウト用に予約され、例えば1に設定されると、プロセッサが4次元カーネルテンソルレイアウトをサポートしていることを示す。一例において、インストール済みデータレイアウトフォーマットのビットベクトルは、最大16個のデータレイアウトを表すように構成され、各データレイアウトにビットが割り当てられる。ただし、他の実施形態において、ビットベクトルは、これより多いまたはこれより少ないデータレイアウトをサポートしてもよい。さらに、1つ以上のビットがデータレイアウトに割り当てられるようにベクトルが構成されてもよい。多くの例が可能である。4次元特徴テンソルレイアウトと4次元カーネルテンソルレイアウトの詳細は後述する。繰り返しになるが、性能を最適化するために、現在または将来において他のレイアウトを使用してもよい。
一例において、ニューラルネットワーク処理アシスト命令は、4次元テンソル、すなわち4次元を有するテンソルで動作する。これらの4次元テンソルは、本明細書で説明する一般的な入力テンソルから、たとえば行優先(row-major)の方法で得られる。すなわち、テンソル要素をメモリアドレスの増加順に列挙するときに、E1と呼ばれる内部次元は、まず、0から始まりE1インデックスサイズ1までE1インデックスサイズの値をステップアップし、その後、E2次元のインデックスが増加し、E1次元のステッピングが繰り返される。最後に、E4次元と呼ばれる外部次元のインデックスが増加される。
より低い次元数を持つテンソル(例えば、3次元または1次元テンソル)は、4次元テンソルとして表現され、4次元テンソルのうち元のテンソルの次元を超える1つ以上の次元は1に設定される。
次元E4、E3、E2、E1を有する行優先汎用4次元テンソルの、4次元特徴テンソルレイアウト(本明細書において、NNPAデータレイアウトフォーマット0-4次元特徴テンソルとも呼ぶ)への変換について説明する。
結果として得られるテンソルは、例えば、64要素ベクトルの4次元テンソル、または以下の次元を有する5次元テンソルとして表すことができる。
汎用テンソル(generic tensor)の要素[e4][e3][e2][e1]は、結果として得られる5次元テンソルの以下の要素にマッピングされる。
結果として得られるテンソルは、汎用テンソルより大きくなる場合がある。結果として得られるテンソルの要素のうち、汎用テンソルに対応する要素がないものは、パッド要素(pad elements)と呼ばれる。
64要素ベクトルのNNPAデータレイアウトフォーマット0-4次元特徴テンソルの要素[fe4][fe1][fe3][fe2][fe0]、またはそれと同等の表現を、要素の5次元テンソルと考える。この要素は、パッド要素であるか、または次元E4、E3、E2、E1を持つ汎用4次元テンソルの対応する要素のいずれかであり、以下の式で決定することができる。
fe2 ≧ E2の場合、E2(またはページ)パッド要素である。
そうでなければ、fe1 * 64 + fe0 ≧ E1の場合、E1(または行)パッド要素である。
そうでなければ、汎用4次元テンソルの対応する要素は以下の通りになる。
[fe4][fe3][fe2][fe1 * 64 + fe0]
畳み込みニューラルネットワークベースの人工知能モデルの場合、特徴テンソルの4次元の意味は、一般的に以下のようにマッピングできる。
E4:N-ミニバッチ(mini-batch)のサイズ
E3:H-3次元テンソル/画像の高さ
E2:W-3次元テンソル/画像の幅
E1:C-3次元テンソルのチャンネルまたはクラス
機械学習またはリカレントニューラルネットワークベースの人工知能モデルの場合、4次元特徴テンソルの4次元の意味は、一般的に以下のようにマッピングできる。
E4:T-時間ステップまたはモデルの数
E3:予備。通常は1に設定
E2:Nmb-ミニバッチサイズ
E1:L-特長
NNPAデータレイアウトフォーマット0は、例えば、4kバイトのデータブロック(ページ)の2次元データ局所性と、生成テンソルの外部次元に対する4kバイトのブロックデータアライメントを提供する。
パッド要素バイトは入力テンソルでは無視され、出力テンソルでは予測不可能である。パッドバイト上のPERストレージの変更は予測不可能である。
次元E1、E2、E3、E4を有する4次元特徴テンソルレイアウトの入力データレイアウトの一例を図5の(A)~(C)に示し、4次元特徴テンソルレイアウトの出力例を図6の(A)~(C)に示す。図5の(A)を参照すると、次元E1、E2、E3を有する3次元テンソル500が示されている。一例において、各3次元テンソルは複数の2次元テンソル502を含む。各2次元テンソル502内の数値は、その各要素がメモリ内のどこに配置されるかのメモリオフセットを記述する。入力は、図5の(A)~(C)に対応する図6の(A)~(C)に示されるように、メモリ内の元のテンソル(例えば、図5の(A)~(C)の元の4次元テンソル)のデータをレイアウトするために使用される。
図6の(A)では、一例として、メモリ600のユニット(例えば、メモリページ)は、各々が、例えばe2_page_idxによって識別される、予め選択された数(例えば、32)の行602を含む。各行は、各々が、例えばe1_page_idxによって識別される、予め選択された数(例えば、64)の要素604を有する。ある行が、予め選択された数の要素を含まない場合、行パディングまたはE1パディングと呼ばれるパディング606が行われる。メモリユニットが、予め選択された数の行を持たない場合、ページパディングまたはE2パディングと呼ばれるパディング608が行われる。例として、行パディングは、例えば、0または他の値であり、ページパディングは、例えば、既存の値、0、または他の値である。
一例において、行の出力要素は、その対応する入力のE1方向における要素位置に基づいて、メモリ内(たとえばページ内)に提供される。例えば、図5の(A)を参照すると、図示の3つの行列の要素位置0、1および2(例えば、各行列の同じ位置における要素位置)は、図6の(A)のページ0の行0に示されている、などである。この例では、4次元テンソルは小さく、4次元テンソルを表す各2次元テンソルの要素のすべてが1ページに収まっている。ただし、これは一例に過ぎない。2次元テンソルは、1つ以上のページを含んでもよい。2次元テンソルが4次元テンソルの再編成(reformatting)に基づいて作成される場合、2次元テンソルのページ数は、4次元テンソルのサイズに基づく。一例において、1つ以上のceil関数を使用して、何ページ使用されるかを示す、2次元テンソルの行数および各行の要素数が決定される。他の変形も可能である。
一例において、4次元特徴テンソルレイアウトに加えて、ニューラルネットワークプロセッサは、畳み込みなどの特定の人工知能(例えば、ニューラルネットワーク処理アシスト)演算を実行する際に、メモリアクセスおよびデータ収集ステップの数を削減するために4次元テンソルの要素を再配置する、4次元カーネルテンソルをサポートしてもよい。一例において、次元E4、E3、E2、E1を持つ行優先汎用4Dテンソルは、本明細書で説明するように、NNPAデータレイアウトフォーマット1-4次元カーネルテンソル(4次元カーネルテンソル)に変換される。
結果として得られるテンソルは、例えば64要素ベクトルの4次元テンソル、または以下の次元を持つ5次元テンソルとして表すことができる。
汎用テンソル(generic tensor)の要素[e4][e3][e2][e1]は、結果として得られる5次元テンソルの以下の要素にマッピングされる。
結果として得られるテンソルは、汎用テンソルより大きくなる場合がある。結果として得られるテンソルの要素のうち、汎用テンソルに対応する要素がないものは、パッド要素と呼ばれる。
64要素ベクトルのNNPAデータレイアウトフォーマット1-4次元特徴テンソルの要素[fe4][fe1][fe3][fe2][fe0]、またはそれと同等の表現を、要素の5次元テンソルと考える。この要素は、パッド要素であるか、または次元E4、E3、E2、E1を持つ汎用4次元テンソルの対応する要素のいずれかであり、以下の式で決定することができる。
fe2 ≧ E2の場合、E2(またはページ)パッド要素である。
そうでなければ、fe1 * 64 + fe0 ≧ E1の場合、E1(または行)パッド要素である。
そうでなければ、汎用4次元テンソルの対応する要素は以下の通りになる。
[fe4][fe3][fe2][fe1 * 64 + fe0]
畳み込みニューラルネットワークベースの人工知能モデルの場合、カーネルテンソルの4次元の意味は、一般的に以下のようにマッピングできる。
E4:H-3次元テンソル/画像の高さ
E3:W-3次元テンソル/画像の幅
E2:C-3次元テンソルのチャンネル数
E1:K-カーネル数
NNPAデータレイアウトフォーマット1は、効率的な処理のために、例えば、4kバイトのデータブロック(ページ)内の2次元カーネル並列性(parallelism)と、生成テンソルの外部次元に対する4kバイトブロックデータアライメントを提供する。
パッドバイトは入力テンソルでは無視される。パッドバイト上のPERストレージの変更は予測不可能である。
繰り返しになるが、例示的なデータレイアウトフォーマットは4次元特徴テンソルレイアウトおよび4次元カーネルテンソルレイアウトを含むが、他のデータレイアウトフォーマットがプロセッサ(例えば、ニューラルネットワークプロセッサ105)によってサポートされてもよい。サポートされるデータレイアウトの表示は、例えば、フィールド338に1つ以上のビットを設定することによって取得され、クエリパラメータブロックに配置される。
照会パラメータブロックはまた、本発明の1つ以上の態様に従って、他のデータ属性情報を含む。他のデータ属性情報は、例えば、データのサポートサイズ情報(supported size information)を含む。ニューラルネットワークプロセッサなどのプロセッサは、通常、テンソルの次元の最大サイズもしくはテンソルの全体サイズまたはその両方を制限することができる内部バッファサイズ、処理ユニット、データバス構造、ファームウェア制限などに基づく制限を有する。したがって、クエリ関数はこれらの制限をアプリケーションに伝達するためのフィールドを提供する。例えば、プロセッサは、クエリ関数の実行に基づいて、最大次元インデックスサイズ(例えば、65,536要素)および最大テンソルサイズ(例えば、8GB)などの様々なデータサイズを取得し、この情報をパラメータブロック(例えば、パラメータブロック330)のフィールド340および342にそれぞれ含める。なお、追加のサイズ情報、より少ないサイズ情報、もしくは他のサイズ情報、またはその組み合わせがプロセッサ(例えば、ニューラルネットワークプロセッサ105)によってサポートされてもよく、したがって、取得され、パラメータブロック(例えば、フィールド340、342もしくは他のフィールドまたはその両方)に配置されてもよい。他の実施形態において、制限はより小さくてもより大きくてもよいし、もしくは、サイズは要素の代わりにバイト、バイトの代わりに要素など、他の単位であってもよいし、その両方であってもよい。さらに、他の実施形態において、すべての次元について同じ最大サイズではなく、各次元の最大サイズが異なっていてもよい。多くの変形が可能である。
本発明の1つ以上の態様に従って、選択されたプロセッサ(例えば、ニューラルネットワークプロセッサ105)の特定のモデルに関連する詳細情報を伝達するクエリ関数が提供される。詳細情報には、例えば、特定のプロセッサに関連するモデル依存情報が含まれる(プロセッサはまた、標準データタイプ、標準データレイアウトなどの標準データ属性をサポートしてもよく、これらは、クエリ関数によって暗示され、必ずしも提示はされない。ただし、他の実施形態において、クエリ関数は、データ属性のすべてまたは種々の選択されたサブセットなどを表示してもよい)。例示的な情報を提供しているが、他の実施形態において、他の情報が提供されてもよい。取得された情報(これは、一のプロセッサの異なるモデル、もしくは異なるプロセッサの異なるモデル、またはその両方において異なっていてもよい)は、人工知能処理もしくは他の処理またはその両方を実行するために使用される。人工知能処理もしくは他の処理またはその両方は、例えば、ニューラルネットワーク処理アシスト命令の1つ以上の非クエリ関数を採用してもよい。処理に採用される特定の非クエリ関数は、ニューラルネットワーク処理アシスト命令を1回以上実行し、特定の非クエリ関数を指定することによって実行される。
ニューラルネットワーク処理アシスト命令によってサポートされる非クエリ関数の例を以下に説明する(なお、他の実施形態において、追加の関数、より少ない関数、もしくは他の関数、またはその組み合わせがサポートされてもよい)。
関数コード16:NNPA-ADD(加算)
NNPA-ADD関数が指定されると、テンソル記述子1によって記述された入力テンソル1の各要素が、テンソル記述子2によって記述された入力テンソル2の対応する要素に加算され、その結果の和が、出力テンソル記述子によって記述された出力テンソルの対応する要素に配置される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1、入力テンソル2、および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外(general operand data exception)が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード17:NNPA-SUB(減算)
NNPA-SUB関数が指定されると、テンソル記述子2によって記述された入力テンソル2の各要素が、テンソル記述子1によって記述された入力テンソル1の対応する要素から減算され、その結果得られた差分が、出力テンソルの対応する要素に配置される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1、入力テンソル2、および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード18:NNPA-MUL(乗算)
NNPA-MUL関数が指定されると、テンソル記述子1によって記述された入力テンソル1の各要素(乗数)と、テンソル記述子2によって記述された入力テンソル2の対応する要素(被乗数)との積が、出力テンソルの対応する要素に配置される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1、入力テンソル2、および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード19:NNPA-DIV(除算)
NNPA-DIV関数が指定されると、テンソル記述子1によって記述された入力テンソル1の各要素(被除数)は、テンソル記述子2によって記述された入力テンソル2の対応する要素(除数)で除算され、その商が出力テンソルの対応する要素に配置される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1、入力テンソル2、および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード20:NNPA-MIN(最小)
NNPA-MIN関数が指定されると、テンソル記述子1によって記述された入力テンソル1の各要素が、テンソル記述子2によって記述された入力テンソル2の対応する要素と比較される。2つの値のうち小さい方が、出力テンソル記述子の対応する要素に配置される。両方の値が等しい場合、その値が出力テンソルの対応する要素に配置される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1、入力テンソル2、および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード21:NNPA-MAX(最大)
NNPA-MAX関数が指定されると、テンソル記述子1によって記述された入力テンソル1の各要素が、テンソル記述子2によって記述された入力テンソル2の対応する要素と比較される。2つの値のうち大きい方が、出力テンソル記述子の対応する要素に配置される。両方の値が等しい場合、その値が出力テンソルの対応する要素に配置される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1、入力テンソル2、および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード32:NNPA-LOG(自然対数)
NNPA-LOG関数が指定されると、テンソル記述子1によって記述された入力テンソルの各要素について、その要素が0より大きい場合、出力テンソル記述子によって記述された出力テンソルの対応する要素は、その要素の自然対数となる。そうでない場合、出力テンソルの対応する要素は数値表現できず、対象データタイプの負の無限大(negative infinity)に関連する値が記憶される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード33:NNPA-EXP(指数)
NNPA-EXP関数が指定されると、テンソル記述子1によって記述された入力テンソルの各要素について、出力テンソル記述子によって記述された出力テンソルの対応する要素が、その要素の指数となる。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード49:NNPA-RELU(正規化線形ユニット(Rectified Linear Unit))
NNPA-RELU関数が指定されると、テンソル記述子1によって記述された入力テンソルの各要素について、その要素が0以下の場合、出力テンソル記述子によって記述された出力テンソルの対応する要素は0である。そうでない場合、出力テンソルの対応する要素は、入力テンソルの要素と、関数固有パラメータ1で指定されたクリッピング値(clipping value)とのうちの最小値となる。
一例として、関数固有パラメータ1は、RELU操作のクリッピング値を定義する。例えば、クリッピング値は関数固有パラメータ1のビット16~31にある。クリッピング値は、例えば、NNPA-データタイプ1フォーマットで指定される。0のクリッピング値は、正の最大値が使用されること、言い換えると、クリッピングが行われないことを示す。負の値が指定された場合、一般オペランドデータ例外が認識される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、および関数固有セーブ領域アドレスフィールドは無視される。一例において、関数固有パラメータ2~5はゼロを含む。
関数コード50:NNPA-TANH
NNPA-TANH関数が指定されると、テンソル記述子1によって記述された入力テンソルの各要素について、出力テンソル記述子によって記述された出力テンソルの対応する要素値は、その要素の双曲線正接となる。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード51:NNPA-SIGMOID
NNPA-SIGMOID関数が指定されると、テンソル記述子1によって記述された入力テンソルの各要素について、出力テンソル記述子によって記述された出力テンソルの対応する要素は、その要素のS字形(sigmoidal)となる。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード52:NNPA-SOFTMAX
NNPA-SOFTMAX関数が指定されると、入力テンソル1の次元1の各ベクトルについて、以下に説明するように、出力テンソルの対応するベクトルが計算される。
* ベクトルの最大値が計算される。
* ベクトルの次元1の各要素と上記で計算された最大値との差の指数の和が計算される。入力ベクトルの次元1の要素と上記で計算された最大値の両方が数値であり、差が非数値である場合、その要素の指数の結果は強制的にゼロになる。
* ベクトルの各要素について、その要素と上記で計算された最大値との差の指数を上記で計算された和で割ることにより、中間商(intermediate quotient)が形成される。任意の活性化関数がこの中間商に適用され、出力ベクトルの対応する要素が形成される。
このプロセスは、例えば、次元1のすべての次元4インデックスサイズ×次元3インデックスサイズ×次元2インデックスサイズのベクトルについて繰り返される。
一例において、NNPA-SOFTMAX関数固有パラメータ1は、活性化関数を制御する。一例として、関数固有パラメータ1のACTフィールド(例えば、ビット28~31)が活性化関数を指定する。活性化関数の例には以下が含まれる。
ACT 活性化関数
0 活性化関数は実行しない
1 LOG
2~15 予備
ACTフィールドに予備の値が指定された場合、例えば16進数「F001」の応答コードが報告され、例えば「1」の条件コードで演算が完了する。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソルの次元3インデックスサイズが1に等しくない場合、例えば、16進数「F000」の応答コードが記憶され、命令は、例えば「1」の条件コードで完了する。
一例において、入力テンソル1および出力テンソルの形状、データレイアウト、およびデータタイプは同じである。そうでない場合、一般オペランドデータ例外が認識される。
一例において、出力テンソル記述子2、入力テンソル記述子2、および入力テンソル記述子3は無視される。一例において、関数固有パラメータ2~5はゼロを含む。
8Kバイトの関数固有セーブ領域が、この関数によって使用されてもよい。
一実施形態において、次元1のベクトルを取得する場合、指定されたデータレイアウトフォーマットによっては、メモリ内で要素が連続しない場合がある。入力テンソル1の次元1のベクトルのすべての要素が、指定されたデータタイプで表現可能な最大の大きさの負の数を含む場合、結果の精度が低下する可能性がある。
関数コード64:NNPA-BATCHNORM(バッチ正規化)
NNPA-BATCHNORM関数が指定されると、入力1テンソルの次元1の各ベクトルについて、そのベクトルの各要素に、入力2テンソルを構成する次元1ベクトルの対応する要素を乗算することによって、出力テンソルの次元1の対応するベクトルが計算される。そして、完全精度積(full precision product)が、入力3テンソルを構成する次元1ベクトルの対応する要素に加算され、出力テンソルの指定されたデータタイプの精度に丸められる。このプロセスは、例えば、次元1のすべての次元4インデックスサイズ×次元3インデックスサイズ×次元2インデックスサイズのベクトルについて繰り返される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、以下の条件が真となり、そうでない場合、一般オペランドデータ例外が認識される。
* 入力テンソル1と出力テンソルの形状およびデータレイアウトは同じである。
* 入力テンソルと出力テンソルのデータタイプは同じである。
* 入力テンソル1、2、3と出力テンソルの次元1インデックスサイズは同じである。
* 入力テンソル2および3の次元2、3、4インデックスサイズは1である。
一例において、出力テンソル記述子2および関数固有セーブ領域アドレスフィールドは無視される。一例において、関数固有パラメータ2~5はゼロを含む。
関数コード80:NNPA-MAXPOOL2D
関数コード81:NNPA-AVGPOOL2D
NNPA-MAXPOOL2D関数またはNNPA-AVGPOOL2D関数のいずれかが指定されると、入力テンソル1記述子によって記述された入力テンソル1が、指定された演算によって縮小し、入力ウィンドウ(windows of the input)を要約(summarize)する。入力ウィンドウは、次元インデックス2および3上で2次元スライディングウィンドウを移動することによって選択される。ウィンドウの要約は、出力テンソルの要素となる。スライディングウィンドウの次元は、例えば関数固有パラメータ4および関数固有パラメータ5によって記述される。隣接する出力テンソル要素を計算する際に、スライディングウィンドウが入力1テンソル上を移動する量をストライド(stride)と呼ぶ。スライディングウィンドウのストライドは、例えば関数固有パラメータ2および関数固有パラメータ3によって指定される。NNPA-MAXPOOL2D演算が指定された場合、以下に定義するMax演算がウィンドウに対して実行される。NNPA-AVGPOOL2D演算が指定された場合、以下に定義するAVG演算がウィンドウに対して実行される。指定されたパディングタイプが「Valid」の場合、ウィンドウ内のすべての要素が、出力要素の計算に使用される集合(collection)に追加される。指定されたパディングタイプが「Same」の場合、ウィンドウの位置に応じて、ウィンドウからの要素のサブセットのみが、出力要素の計算に使用される集合に追加されてもよい。
一例において、CollectElements演算は、要素の集合に一の要素を追加し、集合内の要素の数をインクリメントする。ウィンドウの開始位置が移動するたびに、集合は空になる。演算の実行に必要のない要素にアクセスするかどうかは予測不可能である。
Max演算:一例において、ウィンドウ内の要素の集合の最大値は、集合内のすべての要素を互いに比較し、最大の値を返すことによって計算される。
Avg(平均)演算:一例において、ウィンドウ内の要素の集合の平均値は、集合内のすべての要素の合計を集合内の要素の数で割ったものとして計算される。
一例において、フィールドは以下のように割り当てられる。
* プーリング関数固有パラメータ1は、パディングタイプを制御する。例えば、関数固有パラメータ1のビット29~31は、パディングタイプを指定するPADフィールドを含む。タイプの例には、例えば以下が含まれる。
PAD パディングタイプ
0 Valid
1 Same
2~7 予備
PADフィールドに予備の値が指定された場合、例えば16進数「F000」の応答コードが報告され、演算は、例えば「1」の条件コードで完了する。
一例において、関数固有パラメータ1のビット位置0~28は予備であり、ゼロを含む。
* 関数固有パラメータ2は、例えば、次元2でスライディングウィンドウが移動する要素数を指定する次元2ストライド(D2S:dimension-2-stride)を指定する32ビットの符号なし2進整数を含む。
* 関数固有パラメータ3は、例えば、次元3でスライディングウィンドウが移動する要素数を指定する次元3ストライド(D3S)を指定する32ビットの符号なし2進整数を含む。
* 関数固有パラメータ4は、例えば、スライディングウィンドウが含む次元2の要素数を指定する次元2ウィンドウサイズ(D2WS:dimension-2-window-size)を指定する32ビットの符号なし2進整数を含む。
* 関数固有パラメータ5は、例えば、スライディングウィンドウが含む次元3の要素数を指定する次元3ウィンドウサイズ(D3WS)を指定する32ビットの符号なし2進整数を含む。
一例において、関数固有パラメータ2~5の指定値は最大次元インデックスサイズ以下であり、関数固有パラメータ4~5の指定値はゼロより大きい。そうでない場合、例えば16進数「0012」の応答コードが報告され、演算は、例えば「1」の条件コードで完了する。
次元2ストライドおよび次元3ストライドがともに0であり、かつ次元2ウィンドウサイズまたは次元3ウィンドウサイズのいずれかが例えば1024より大きい場合、例えば16進数「F001」の応答コードが記憶される。次元2ストライドおよび次元3ストライドがともに例えば0より大きく、かつ次元2ウィンドウサイズまたは次元3ウィンドウサイズのいずれかが例えば64より大きい場合、例えば16進数「F002」の応答コードが記憶される。次元2ストライドおよび次元3ストライドがともに例えば0より大きく、かつ次元2ストライドまたは次元3ストライドのいずれかが例えば30より大きい場合、例えば16進数「F003」の応答コードが記憶される。次元2ストライドおよび次元3ストライドがともに例えば0より大きく、入力テンソル次元2インデックスサイズまたは入力テンソル次元3インデックスサイズのいずれかが例えば1024より大きい場合、例えば16進数「F004」の応答コードが記憶される。上記のすべての条件について、命令は、例えば「1」の条件コードで完了する。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一例において、以下の条件が真となり、そうでない場合、一般オペランドデータ例外が認識される。
* 入力テンソルと出力テンソルの次元4インデックスサイズおよび次元1インデックスサイズは同じである。
* 入力テンソルと出力テンソルのデータレイアウトおよびデータタイプは同じである。
* 次元2ストライドおよび次元3ストライドがともに0である場合、一例において以下の追加の条件が真となる。
* 入力テンソル次元2インデックスサイズは、次元2ウィンドウサイズと等しい。
* 入力テンソルの入力テンソル次元3インデックスサイズは、次元3ウィンドウサイズと等しい。
* 出力テンソルの次元2インデックスサイズと次元3インデックスサイズは1である。
* 指定されたパディングはValidである。
* 次元2ストライドまたは次元3ストライドのいずれかが非0である場合、一例において、両方のストライドが非0である。
* 次元2ストライドと次元3ストライドがともに0より大きい場合、一例において以下の追加の条件が真となる。
* 指定されたパディングがValidの場合、次元2ウィンドウサイズは、入力テンソルの次元2インデックスサイズ以下である。
* 指定されたパディングがValidの場合、次元3ウィンドウサイズは、入力テンソルの次元3インデックスサイズ以下である。
* 指定されたパディングがSameの場合、入力テンソルと出力テンソルの次元2インデックスサイズと次元3インデックスサイズとの間で以下の関係が満たされる(プーリングSameパディング)。
ここで、以下の通りである。
IxDyIS テンソル記述子xで定義される入力テンソルxの次元yインデックスサイズ
OxDyIS テンソル記述子xで定義される出力テンソルxの次元yインデックスサイズ
D2S 次元2ストライド
D3S 次元3ストライド
* 指定されたパディングがValidの場合、入力テンソルと出力テンソルの次元2インデックスサイズと次元3インデックスサイズとの間で以下の関係が満たされる(プーリングValidパディング)。
ここで、D2WSは次元2ウィンドウサイズであり、D3WSは次元3ウィンドウサイズである。
出力テンソル記述子2、入力テンソル記述子2、3、および関数固有セーブ領域アドレスフィールドは無視される。
関数コード96:NNPA-LSTMACT(長・短期記憶活性化(Long Short-Term Memory Activation))
NNPA-LSTMACT関数が指定されると、入力テンソル1記述子によって記述され、各次元4インデックス値について4つのサブテンソルに分割された入力テンソル1が、入力テンソル2記述子によって記述され、各次元4インデックス値について4つのサブテンソルに分割された入力テンソル2、および入力テンソル3記述子によって記述された入力テンソル3とともに、LSTMACT演算の入力となる。LSTMACT演算の終了時には、出力テンソル1記述子によって記述された出力テンソル1と、出力テンソル2記述子によって記述された出力テンソル2とに結果が書き込まれる。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、それぞれ16進数「0010」または16進数「0011」の応答コードが汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一実施形態において、以下の条件が真となり、そうでない場合、一般オペランドデータ例外が認識される。
* 入力テンソル3と出力テンソル1、2の次元4インデックスサイズは、例えば1に等しい。
* 入力テンソル1と入力テンソル2の次元4インデックスサイズは、例えば4に等しい。
* 例えば、すべての入力テンソルと2つの出力テンソルの次元3インデックスサイズは、例えば1に等しい。
* 例えば、すべての入力テンソルと2つの出力テンソルのデータレイアウトおよびデータタイプは同じである。
* 例えば、すべての入力テンソルと2つの出力テンソルの次元1インデックスサイズは同じである。
* 例えば、すべての入力テンソルと2つの出力テンソルの次元2インデックスサイズは同じである。
一例において、関数固有セーブ領域アドレスフィールドは無視される。関数固有パラメータ1~5は、一例において0を含む。
関数コード97:NNPA-GRUACT(ゲート付き再帰ユニット活性化(Gated Recurrent Unit Activation))
NNPA-GRUACT関数が指定されると、入力テンソル1記述子によって記述され、各次元4インデックス値について3つのサブテンソルに分割された入力テンソル1が、入力テンソル2記述子によって記述され、各次元4インデックス値について3つのサブテンソルに分割された入力テンソル2、および入力テンソル3記述子によって記述された入力テンソル3とともに、GRUACT演算の入力となる。GRUACT演算の終了時には、出力テンソル記述子によって記述された出力テンソルが記録される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一実施形態において、以下の条件が真となり、そうでない場合、一般オペランドデータ例外が認識される。
* 出力テンソルと入力テンソル3の次元4インデックスサイズは、例えば1に等しい。
* 例えば、入力テンソル1と入力テンソル2の次元4インデックスサイズは、例えば3に等しい。
* 例えば、すべての入力テンソルと出力テンソルの次元3インデックスサイズは、例えば1に等しい。
* 例えば、すべての入力テンソルと出力テンソルの次元1インデックスサイズは同じである。
* 例えば、すべての入力テンソルと出力テンソルの次元2インデックスサイズは同じである。
* 例えば、すべての入力テンソルと出力テンソルのデータレイアウトおよびデータタイプは同じである。
一例において、出力テンソル記述子2および関数固有セーブ領域アドレスフィールドは無視される。関数固有パラメータ2~5は、一例において0を含む。
関数コード112:NNPA-CONVOLUTION
NNPA-CONVOLUTION関数が指定されると、出力テンソル1記述子によって記述された出力テンソルの各出力要素について、次元インデックス3、2、1からなる3次元入力1ウィンドウが、入力テンソル1記述子によって記述された入力テンソル1から選択される。次元インデックス4、3、2からなる同じサイズの3次元入力2ウィンドウが、入力テンソル2記述子によって記述されたテンソル2から選択される。入力1ウィンドウの要素は、入力2ウィンドウの対応する要素と乗算され、すべての積が加算されて初期和(initial summation)が作成される。この初期和を入力テンソル3の対応する要素に加算し、中間和(intermediate summation)の値を計算する。出力テンソルの要素は、中間和に対して指定の活性化関数を実行した結果となる。活性化関数が指定されていない場合、出力要素は中間和に等しい。
指定されたパディングタイプがValidの場合、ウィンドウのすべての要素が、初期和を計算するために使用される。指定されたパディングタイプがSameの場合、ウィンドウの位置によっては、初期和を計算する際に、入力1ウィンドウの一部の要素が暗黙的に0となる場合がある。
演算の実行に必要でない要素がアクセスされるかどうかは予測不可能である。
一例において、畳み込み関数によって使用される関数固有パラメータのフィールドは、以下のように割り当てられる。
* NNPA-CONVOLUTION関数固有パラメータ1は、パディングタイプおよび活性化関数を制御する。一例において、関数固有パラメータ1のビット29~31は、パディングタイプを指定するPADフィールドを含む。以下にタイプの例を示す。
PAD パディングタイプ
0 Valid
1 Same
2~7 予備
PADフィールドに予備の値が指定された場合、例えば16進数「F000」の応答コードが報告され、例えば「1」の条件コードで動作が完了する。
さらに、一例において、NNPA-CONVOLUTION関数固有パラメータ1のビット24~27は、活性化関数を指定する活性化フィールドを含む。関数の例を以下に示す。
ACT 活性化関数
0 活性化関数は実行しない
1 RELU
2~15 予備
RELUの活性化関数が指定された場合、次のように出力要素値が決定される。中間和の値が0以下であれば、出力テンソルの対応する要素は0となる。そうでない場合、出力テンソルの対応する要素は、中間和の値と、関数固有パラメータ4で指定されたクリッピング値とのうちの最小値となる。
ACTフィールドに予備の値が指定された場合、例えば16進数「F001」の応答コードが報告され、例えば「1」の条件コードで動作が完了する。
* 関数固有パラメータ2は、例えば、次元2でスライディングウィンドウが移動する要素数を指定する次元2ストライド(D2S)を指定する32ビットの符号なし2進整数を含む。
* 関数固有パラメータ3は、例えば、次元3でスライディングウィンドウが移動する要素数を指定する次元3ストライド(D3S)を指定する32ビットの符号なし2進整数を含む。
関数固有パラメータ2~3の指定された値は、最大次元インデックスサイズよりも小さい。そうでない場合、例えば16進数「0012」の応答コードが報告され、演算は、例えば「1」の条件コードで完了する。
* 関数固有パラメータ4は、任意のRELU演算のクリッピング値を定義する。一例において、クリッピング値は関数固有パラメータ4のビット16~31にある。
一例において、ACTフィールドが0の場合、クリッピング値フィールドは無視される。ACTフィールドがRELUを指定する場合、クリッピング値はNNP-データタイプ1フォーマットで指定される。0のクリッピング値は、正の最大値が使用されること、言い換えると、クリッピングが行われないことを示す。非0が指定された場合、一般オペランドデータ例外が認識される。
一例において、入力テンソル2を除く指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、入力テンソル2の指定されたデータレイアウトが4次元カーネルテンソルを指定しない場合(例えば、データレイアウト=1)、例えば16進数「0010」の応答コードが汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。一例において、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、例えば16進数「0011」の応答コードが汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
次元2ストライドおよび次元3ストライドがともに0であり、かつ入力テンソル2の次元3インデックスサイズまたは次元4インデックスサイズが例えば448より大きい場合、例えば16進数「F002」の応答コードが記憶される。次元2ストライドおよび次元3ストライドがともに0より大きく、入力テンソル2の次元3インデックスサイズまたは次元4インデックスサイズのいずれかが例えば64より大きい場合、例えば16進数「F003」の応答コードが記憶され、演算は、例えば「1」の条件コードで完了する。次元2ストライドまたは次元3ストライドのいずれかが例えば13より大きい場合、例えば16進数「F004」の応答コードが記憶され、演算は、例えば「1」の条件コードで完了する。
一例において、以下の条件が真となり、そうでない場合、一般オペランドデータ例外が認識される。
* 入力テンソル1、入力テンソル3、および出力テンソルのデータレイアウトは同じである。
* すべての入力テンソルと出力テンソルのデータタイプは同じである。
* 入力3テンソルの次元2、次元3、次元4インデックスサイズは1である。
* 出力テンソルの次元4インデックスサイズは、入力1テンソルの次元4インデックスサイズに等しい。
* 出力テンソルの次元1インデックスサイズは、入力2テンソルの次元1インデックスサイズおよび入力3テンソルの次元1インデックスサイズに等しい。
* 入力1テンソルの次元1インデックスサイズは、入力2テンソルの次元2インデックスサイズに等しい。
* 次元2ストライドと次元3ストライドがともに0である場合、一例において以下の追加の条件が真となる。
* 入力1テンソルの次元2インデックスサイズは、入力2テンソルの次元3インデックスサイズに等しい。
* 入力1テンソルの次元3インデックスサイズは、入力2テンソルの次元4インデックスサイズに等しい。
* 出力テンソルの次元2インデックスサイズおよび次元3インデックスサイズは1である。
* 指定されたパディングはValidである。
* 次元2ストライドまたは次元3ストライドのいずれかが非0である場合、両方のストライドが非0である。
* 次元2ストライドと次元3ストライドがともに0より大きい場合、一例において以下の追加の条件が真となる。
* 指定されたパディングがValidの場合、入力1テンソルの次元2インデックスサイズは、入力テンソル2の次元3インデックスサイズ以上である。
* 指定されたパディングがValidの場合、入力1テンソルの次元3インデックスサイズは、入力2テンソルの次元4インデックスサイズ以上である。
* 指定されたパディングがSameの場合、一例において、入力1テンソルと出力テンソルの次元2インデックスサイズと次元3インデックスサイズとの間で以下の関係が満たされる(畳み込みSameパディング)。
ここで、以下の通りである。
O1D2IS 出力テンソルの次元2インデックスサイズ
O1D3IS 出力テンソルの次元3インデックスサイズ
I1D2IS 入力1テンソルの次元2インデックスサイズ
I1D3IS 入力1テンソルの次元3インデックスサイズ
D2S 次元2ストライド
D3S 次元3ストライド
* 指定されたパディングがValidの場合、一例において、入力1テンソルの次元2インデックスサイズおよび次元3インデックスサイズと、入力2テンソルの次元3インデックスサイズおよび次元4インデックスサイズと、出力テンソルとの間で以下の関係が満たされる(畳み込みValidパディング)。
ここで、以下の通りである。
O1D2IS 出力テンソルの次元2インデックスサイズ
O1D3IS 出力テンソルの次元3インデックスサイズ
I1D2IS 入力1テンソルの次元2インデックスサイズ
I1D3IS 入力1テンソルの次元3インデックスサイズ
I2D3IS 入力2テンソルの次元3インデックスサイズ
I2D4IS 入力2テンソルの次元4インデックスサイズ
D2S 次元2ストライド
D3S 次元3ストライド
一例において、出力テンソル記述子2および関数固有セーブ領域アドレスフィールドは無視される。関数固有パラメータ5は、一例において0を含む。
関数コード113:NNPA-MATMUL-OP(行列乗算演算(Matrix Multiplication Operation))
NNPA-MATMUL関数が指定された場合、出力テンソル記述子によって記述された出力テンソルの各要素は、一例において以下に説明するように計算される。
* 入力テンソル1記述子によって記述された入力テンソル1から、後述する次元1ベクトル取得演算(get-dimension-1-vector operation)を用いて、次元1ベクトルが選択される。
* 入力テンソル2記述子によって記述された入力テンソル2から、後述する次元2ベクトル取得演算(get-dimension-2-vector operation)を用いて、次元2ベクトルが選択される。
* 次元1ベクトルと次元2ベクトルの中間ドット積(intermediate dot product)は、後述するドット積演算を用いて計算される。
* 中間ドット積と、入力テンソル3記述子によって記述された、出力テンソル要素と同じ次元インデックス4および次元インデックス1の値を持つ入力テンソル3の要素とに対して演算が実行される。得られた要素は出力テンソルに記憶される。融合演算(fused operation)は関数固有パラメータ1によって決定され、以下に説明される。
次元1ベクトル取得演算:指定された出力要素について、入力1テンソルから次元1ベクトルが選択される。ここで、入力次元4インデックスが出力次元4インデックスであり、入力次元3インデックスが出力次元3インデックスであり、入力次元2インデックスが出力次元2インデックスである。
次元2ベクトル取得演算:指定された出力要素について、入力2テンソルから次元2ベクトルが選択される。ここで、入力次元4インデックスが出力次元4インデックスであり、入力次元3インデックスが出力次元3インデックスであり、入力次元1インデックスが出力次元1インデックスである。
ドット積演算:同じサイズおよびデータタイプの2つのベクトルの中間ドット積は、入力ベクトル1の各要素と入力ベクトル2の対応する要素の積の和として計算される。
融合演算:関数固有パラメータ1は、中間ドット積と入力テンソル3からの対応する要素とに対して実行される演算を制御する。一例において、NNPA-MATMUL-OP関数固有パラメータ1は、例えばビット24~31に演算フィールドを含む。演算フィールドは、実行される演算を指定する。演算の例を以下に示す。
演算 演算タイプ
0 加算
1 ドット積が高いか比較
2 ドット積が低くないか比較
3 ドット積と要素が等しいかどうか比較
4 ドット積と要素が等しくないか比較
5 ドット積が高くないか比較
6 ドット積が低いか比較
一例において、加算の演算タイプの場合、入力テンソル3要素が中間ドット積に加算される。比較の演算タイプの場合、中間ドット積が入力テンソル3要素と比較され、比較が真であれば、結果は例えば+1の値に設定され、そうでない場合、出力テンソルについて指定されたデータタイプにおいて、例えば+0の値に設定される。
一例において、OPERATIONフィールドの他の値はすべて予備である。OPERATIONフィールドに予備の値が指定された場合、例えば16進数「F000」の応答コードが報告され、演算は、例えば「1」の条件コードで完了する。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一実施形態において、以下の条件が真となり、そうでない場合、一般オペランドデータ例外が認識される。
* すべての入力テンソルと出力テンソルの次元4インデックスサイズは同じである。
* すべての入力テンソルと出力テンソルの次元3インデックスサイズは1に等しい。
* 入力テンソル3の次元2インデックスサイズは1に等しい。
* 入力テンソル1と出力テンソルの次元2インデックスサイズは同じである。
* 入力テンソル1の次元1インデックスサイズと入力テンソル2の次元2インデックスサイズは同じである。
* 入力テンソル2、入力テンソル3、および出力テンソルの次元1インデックスサイズは同じである。
* すべての入力テンソルと出力テンソルのデータレイアウトおよびデータタイプは同じである。
一実施形態において、出力テンソル記述子2および関数固有セーブ領域アドレスフィールドは無視される。関数固有パラメータ2~5は、一例において0を含む。
関数コード114:NNPA-MATMUL-OP-BCAST23(行列乗算演算-ブロードキャスト23)
NNPA-MATMUL-OP-BCAST23関数が指定されると、出力テンソル記述子によって記述された出力テンソルの各要素が、一例として以下に説明するように計算される。
* 入力テンソル1記述子によって記述された入力テンソル1から、後述する次元1ベクトル取得演算を用いて、次元1ベクトルが選択される。
* 入力テンソル2記述子によって記述された入力テンソル2から、後述する次元2ベクトル取得演算を用いて、次元2ベクトルが選択される。
* 次元1ベクトルと次元2ベクトルのドット積は、後述するドット積演算を用いて計算される。
* 入力テンソル3記述子によって記述された、出力テンソル要素と同じ次元インデックス1の値を持つ入力テンソル3の要素が、先に計算されたドット積に加算され、出力テンソルに記憶される。
次元1ベクトル取得演算:指定された出力要素について、入力1テンソルから次元1ベクトルが選択される。ここで、入力次元4インデックスが出力次元4インデックスであり、入力次元3インデックスが出力次元3インデックスであり、入力次元2インデックスが出力次元2インデックスである。
次元2ベクトル取得演算:指定された出力要素について、入力2テンソルから次元2ベクトルが選択される。ここで、入力次元4インデックスが1であり、入力次元3インデックスが出力次元3インデックスであり、入力次元1インデックスが出力次元1インデックスである。
ドット積演算:同じサイズおよびデータタイプの2つのベクトルの中間積は、入力ベクトル1の各要素と入力ベクトル2の対応する要素の積の和として計算される。
一例において、指定されたテンソル記述子のいずれかの指定されたデータレイアウトが4次元特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のデータタイプがNNP-データタイプ1を指定しない場合(例えば、データタイプ=0)、応答コード(例えば、それぞれ16進数「0010」または16進数「0011」)が汎用レジスタ0に設定され、命令は、例えば「1」の条件コードで完了する。
一実施形態において、以下の条件が真となり、そうでない場合、一般オペランドデータ例外が認識される。
* 入力テンソル1と出力テンソルの次元4インデックスサイズは同じである。
* 入力テンソル2と入力テンソル3の次元4インデックスサイズは1に等しい。
* すべての入力テンソルと出力テンソルの次元3インデックスサイズは1に等しい。
* 入力テンソル3の次元2インデックスサイズは1に等しい。
* 入力テンソル1と出力テンソルの次元2インデックスサイズは同じである。
* 入力テンソル1の次元1インデックスサイズと入力テンソル2の次元2インデックスサイズは同じである。
* 入力テンソル2、入力テンソル3、および出力テンソルの次元1インデックスサイズは同じである。
* すべての入力テンソルと出力テンソルのデータレイアウトおよびデータタイプは同じである。
一実施形態において、出力テンソル記述子2および関数固有セーブ領域アドレスフィールドは無視される。関数固有パラメータ1~5は、一例において0を含む。
ニューラルネットワーク処理アシスト命令について、一実施形態において、出力テンソルが入力テンソルのいずれかまたはパラメータブロックと重なる場合、結果は予測不可能である。
一例として、ニューラルネットワーク処理アシスト命令の実行が試行され、パラメータブロックが、例えばダブルワード境界上で指定されていない場合に、指定例外(specification exception)が認識される。
ニューラルネットワーク処理アシスト命令の実行が試行され、例えばテンソル記述子の不整合がある場合に、一般オペランドデータ例外が認識される。
ニューラルネットワーク処理アシスト命令に対する条件コードの結果は、例えば、以下を含む。0:正常終了、1:応答コードが設定される、2:-、3:CPUが決定したデータ処理量。
一実施形態において、ニューラルネットワーク処理アシスト命令に対する実行の優先順位は、例えば、以下を含む。
1.~7. 一般的な場合のプログラム割り込み条件の優先順位と同じ優先順位を有する例外
8.A 未割り当てまたは未インストールの関数コードが指定されたことによる条件コード1
8.B パラメータブロックがダブルワード境界上で指定されていないことによる指定例外
9. パラメータブロックへのアクセスのアクセス例外
10. パラメータブロックの指定されたフォーマットがモデルによってサポートされていないことによる条件コード1
11.A 指定されたテンソルデータレイアウトがサポートされていないことによる条件コード1
11.B テンソル記述子間のデータレイアウトが異なっていることによる一般オペランドデータ例外。
12.A 上記の8.A、10、11.A、および下記の12.B.1に含まれる条件以外の条件による条件コード1
12.B.1 NNPA-RELUおよびNNPA-CONVOLUTIONの出力テンソルのデータタイプが無効であることによる条件コード1
12.B.2 NNPA-RELU関数固有パラメータ1およびNNPA-CONVOLUTION関数固有パラメータ4の無効な値に対する一般オペランドデータ例外
13.A 出力テンソルへのアクセスのアクセス例外
13.B 入力テンソルへのアクセスのアクセス例外
13.C 関数固有セーブ領域へのアクセスのアクセス例外
14. 条件コード0
本明細書で説明するように、単一の命令(例えば、ニューラルネットワーク処理アシスト命令)は、クエリ関数を含む複数の関数を実行するように構成される。クエリ関数は、本発明の1つ以上の態様に従って、1つ以上の関数(例えば、テンソル計算に関連する関数)を実行する際にアプリケーションに有用な情報を提供する。この情報は、命令もしくはプロセッサまたはその両方によってサポートされる関数だけでなく、命令もしくはプロセッサまたはその両方によって使用されるデータに関連する情報など、命令もしくはプロセッサまたはその両方がどのように動作するかに関する追加情報も伝える。一例として、この情報には、プロセッサにインストールされているデータタイプやプロセッサがサポートする利用可能なデータレイアウトフォーマットなどのモデル依存データ属性、および最大テンソルサイズや最大次元インデックスサイズなどのデータサイズ情報が含まれる。クエリ関数により、アプリケーションは、非クエリ関数が実行される特定のモデルの属性とともに動作するように自身が設計されているかどうかを判断することができる。あるいは、アプリケーションは、クエリ命令によって決定されたモデルの正確な属性に応じて、異なるモデル上で動作するように動的に自身の動作を変更するように記述することもできる。アプリケーションが特定のモデルの扱い方を知らない場合、アクセラレータ関数を使用する代わりに、ソフトウェアでニューラルネットワークの計算を実行できる場合もある。
クエリ関数は、例えば、アプリケーションを実行するモデルに対してアプリケーションが自身の動作を最適化できるようにする仮想マシンのライブマイグレーション(live migration)を含む、様々なタスクで有用である。クエリ関数は、他の多くのタスクでも使用可能である。
一例として、クエリ関数をニューラルネットワーク処理アシスト命令の一部として提供しているが、クエリ関数を他の命令とともに使用して、プロセッサの機能、動作、および/もしくは属性、もしくはプロセッサに関連する動作、またはその組み合わせに関する詳細情報を提供してもよい。ニューラルネットワーク処理アシスト命令は一例に過ぎない。
本発明の1つ以上の態様は、コンピュータ技術と密接に結びついており、コンピュータ内の処理を容易にし、その性能を向上させる。クエリ関数を含む様々な関数を実行するように構成された単一のアーキテクチャ化された機械命令を使用することにより、複雑さを低減し、リソースの使用を低減し、処理速度を向上させることによって、コンピューティング環境内の性能を向上させる。クエリ関数を使用し、データ属性を含むプロセッサのモデル依存属性を記述する詳細情報を取得することによって、処理が向上する。一例として、非クエリ関数が実行される前に、プロセッサがサポートしている内容を判断することによって、性能が向上する。アプリケーションは、事前に何が起こるか分かっているので、実行時間だけでなく、アプリケーション処理の複雑さも低減される。データもしくは命令またはその両方は、コンピュータ処理、医療処理、工学、自動車技術、製造など、多くの技術分野で使用することができる。モデル依存のプロセッサ関連データの取得における最適化を実現することで、実行時間を短縮することにより、これらの技術分野が改善される。
本発明の1つ以上の態様に関連する、コンピューティング環境内の処理を容易にする一実施形態のさらなる詳細を、図7A~7Bを参照して説明する。
図7Aを参照すると、一実施形態において、クエリ関数を実行する命令が実行される(700)。実行は、例えば、プロセッサの選択されたモデルに関連する情報を取得することを含む(702)。一例として、情報は、プロセッサの選択されたモデルの少なくとも1つのモデル依存データ属性を含む(704)。情報は、1つ以上の関数を実行する際に少なくとも1つのアプリケーションが使用するために、選択された場所に配置される(706)。
クエリ関数は、マシンの特定のモデルに存在する機能にマシンを適応させ、より大きなデータを含む問題の解決を容易にする情報を提供する。これにより、コンピュータ処理を含む機械学習を使用した技術が向上する。
クエリ関数を実行することにより、少なくとも1つのデータ属性のモデル依存情報が取得され、この情報は、少なくとも1つのデータ属性を有するデータを使用して1つ以上の関数を実行する際に使用可能である。少なくとも1つのデータ属性を知ることにより、この少なくとも1つのデータ属性用にアプリケーションを準備することによって、実行時間を節約することができる。そして、これにより、アプリケーションをデータ、データレイアウト、もしくはデータサイズまたはその組み合わせに適合させ、例えばその特定のモデル上でニューラルネットワーク処理を実行できるようにすることができる。アプリケーションを準備することにより、エラーが減少し、実行時間が節約され、システム性能が向上する。
クエリ関数は、少なくとも1つのデータ属性がテンソルに関連する場合、もしくは処理がそのようなテンソルを使用する場合、またはその両方の場合に、テンソルの使用もしくはそのようなテンソルを使用した処理またはその両方における向上を実現する。
一例として、少なくとも1つのモデル依存データ属性は、プロセッサの選択されたモデルの1つ以上のサポートされるデータタイプ(710)、プロセッサの選択されたモデルの1つ以上のサポートされるデータレイアウトフォーマット(712)、もしくは、プロセッサの選択されたモデルの1つ以上のサポートされるデータサイズ(714)、またはその組み合わせを含む。サポートされるデータタイプ、データレイアウトフォーマット、もしくはデータサイズまたはその組み合わせを取得することによって、アプリケーションは、プロセッサの特定のモデルによってサポートされるデータタイプ、データレイアウトフォーマット、もしくはデータサイズに合わせて調整される。これにより、アプリケーションをデータ、データレイアウト、もしくはデータサイズまたはその組み合わせに適合させ、例えばその特定のモデル上でニューラルネットワーク処理を実行できるようにすることができる。アプリケーションを準備することにより、エラーが減少し、実行時間が節約され、システム性能が向上する。
一例では、選択された場所は、少なくとも1つのアプリケーションにアクセス可能なパラメータブロックを含む(720)。例として、1つ以上のサポートされるデータタイプが、パラメータブロックの1つ以上のフィールドに含まれる(722)、もしくは、1つ以上のサポートされるデータレイアウトフォーマットが、パラメータブロックの1つ以上のフィールドに含まれる(724)、もしくは、1つ以上のサポートされるデータサイズが、パラメータブロックの1つ以上のフィールドに含まれる(726)、またはこれらの組み合わせとなる。パラメータブロックが少なくとも1つのアプリケーションにアクセス可能であることによって、アプリケーションは、1つ以上のサポートされるデータタイプ、1つ以上のサポートされるデータレイアウトフォーマット、もしくは1つ以上のデータサイズ、またはその組み合わせを学習することができ、この知識を処理に使用することができる。これにより、アプリケーションをデータ、データレイアウト、もしくはデータサイズまたはその組み合わせに適合させ、例えばその特定のモデル上でニューラルネットワーク処理を実行できるようにすることができる。アプリケーションを準備することにより、エラーが減少し、実行時間が節約され、システム性能が向上する。
図7Bを参照すると、一例において、プロセッサの選択されたモデルの1つ以上のサポートされるデータサイズは、最大次元インデックスサイズおよび最大テンソルサイズを含む(730)。
一例において、パラメータブロックは、選択されたモデルの複数のモデル依存データ属性を記憶するための複数のフィールドを含む(740)。複数のフィールドは、例えば、プロセッサの選択されたモデルの1つ以上のサポートされるデータタイプを含むためのインストール済みデータタイプフィールドと、プロセッサの選択されたモデルの1つ以上のサポートされるデータレイアウトフォーマットを含むためのインストール済みデータレイアウトフォーマットフィールドと、プロセッサの選択されたモデルの1つ以上のサポートされるデータサイズを含むための1つ以上のフィールドとを含む(742)。
パラメータブロックは、例えば、インストール済み関数ベクトルフィールドおよびインストール済みパラメータブロックフォーマットフィールドのうちの少なくとも1つをさらに含む(750)。インストール済み関数ベクトルフィールドは、一例として、プロセッサの選択されたモデルの1つ以上のサポートされる関数を示す(752)。さらに、一例において、インストール済みパラメータブロックフォーマットフィールドは、パラメータブロックの1つ以上のサポートされるフォーマットを示す(754)。
クエリ関数を使用して、選択された関数が実行されるプロセッサのモデル依存属性を決定することによって、適切な情報を有することによりアプリケーションの複雑さを低減することができ、かつ/または、正しい属性(例えば、データタイプ、データレイアウトフォーマット、もしくはデータサイズもしくはその組み合わせ)を使用するようにアプリケーションを調整することができる。関数はより高速に実行され、実行時間が短縮され、プロセッサもしくはシステム全体またはその両方の性能が向上する。
他の変形および実施形態も可能である。
本発明の態様は、多くの種類のコンピューティング環境で使用することができる。本発明の1つ以上の態様を組み込んで使用するコンピューティング環境の別の例を、図8Aを参照して説明する。一例として、図8Aのコンピューティング環境は、インターナショナル・ビジネス・マシーンズ・コーポレーション(ニューヨーク州アーモンク)製のz/Architecture(登録商標)命令セットアーキテクチャに基づいている。ただし、z/Architecture命令セットアーキテクチャは、アーキテクチャの一例に過ぎない。繰り返しになるが、コンピューティング環境は、Intel(登録商標)x86アーキテクチャ、インターナショナル・ビジネス・マシーンズ・コーポレーションの他のアーキテクチャ、もしくは他社のアーキテクチャまたはその組み合わせを含む(ただし、これらに限定されない)他のアーキテクチャに基づいてもよい。なお、Intelは、インテル・コーポレーションまたはその子会社の米国およびその他の国における商標または登録商標である。
一例として、コンピューティング環境10は、中央電子処理装置(CEC:central electronics complex)11を含む。中央電子処理装置11は、複数のコンポーネントを含む。複数のコンポーネントは、例えば、1つ以上の汎用プロセッサ(別名、中央処理装置(CPU)13)および1つ以上の専用プロセッサ(例えば、ニューラルネットワークプロセッサ31)などの1つ以上のプロセッサと、入出力(I/O)サブシステム14とに結合されたメモリ12(別名、システムメモリ、メインメモリ、メインストレージ、中央ストレージ、ストレージ)を含む。
例として、1つ以上の専用プロセッサは、1つ以上の汎用プロセッサと別体に設けられてもよいし、少なくとも1つの専用プロセッサが、少なくとも1つの汎用プロセッサ内に組み込まれてもよいし、その両方であってもよい。他の変形も可能である。
I/Oサブシステム14は、中央電子処理装置の一部であってもよいし、そこから分離していてもよい。I/Oサブシステム14は、メインストレージ12と、中央電子処理装置に結合された入出力制御ユニット15および入出力(I/O)デバイス16との間の情報フローを指示する。
多くのタイプのI/Oデバイスを使用することができる。1つの特定のタイプとして、データストレージデバイス17が使用される。データストレージデバイス17は、1つ以上のプログラム18、1つ以上のコンピュータ可読プログラム命令19、もしくはデータまたはその組み合わせなどを記憶することができる。コンピュータ可読プログラム命令は、本発明の態様に係る実施形態の機能を実行するように構成することができる。
中央電子処理装置11は、取り外し可能/取り外し不可能な揮発性/不揮発性のコンピュータシステムストレージ媒体を含むことができ、もしくはこれに結合することができ、またはその両方とすることができる。例えば、中央電子処理装置11は、取り外し不可能な不揮発性磁気媒体(一般的に「ハードディスク」と呼ばれる)、取り外し可能な不揮発性磁気ディスク(例えば「フロッピーディスク」)に対して読み書きを行うための磁気ディスクドライブ、もしくは、CD-ROM、DVD-ROMや他の光学媒体など、取り外し可能な不揮発性の光ディスクに対して読み書きを行うための光ディスクドライブを含むことができ、もしくはこれに結合することができ、またはその両方とすることができる。なお、他のハードウェアもしくはソフトウェアまたはその両方のコンポーネントを中央電子処理装置11と組み合わせて使用してもよい。これらのコンポーネントの例としては、特に限定されないが、マイクロコードまたはミリコード、デバイスドライバ、冗長処理ユニット、外部ディスクドライブアレイ、RAIDシステム、テープドライブ、およびデータアーカイブストレージシステムなどが挙げられる。
さらに、中央電子処理装置11は、多くの他の汎用もしくは専用コンピューティングシステム環境または構成とともに動作可能である。中央電子処理装置11とともに使用するのに適した周知のコンピューティングシステム、環境、もしくは構成またはその組み合わせの例としては、特に限定されないが、パーソナルコンピュータ(PC)システム、サーバコンピュータシステム、シンクライアント、シッククライアント、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家電、ネットワークPC、ミニコンピュータシステム、メインフレームコンピュータシステム、および、これらのシステムまたはデバイスのいずれかを含む分散型クラウドコンピューティング環境などが挙げられる。
中央電子処理装置11は、1つ以上の実施形態において、論理パーティショニングもしくは仮想化サポートまたはその両方を提供する。一実施形態において、図8Bに示すように、メモリ12は、例えば、1つ以上の論理パーティション20、論理パーティションを管理するハイパーバイザ21、およびプロセッサファームウェア22を含む。ハイパーバイザ21の一例としては、インターナショナル・ビジネス・マシーンズ・コーポレーション(ニューヨーク州アーモンク)製のProcessor Resource/System Manager(PR/SMTM)が挙げられる。なお、PR/SMは、少なくとも1つの法域におけるインターナショナル・ビジネス・マシーンズ・コーポレーションの商標または登録商標である。
各論理パーティション20は、別個のシステムとして機能することができる。すなわち、各論理パーティションは、独立してリセットされ、ゲストオペレーティングシステム23(インターナショナル・ビジネス・マシーンズ・コーポレーション(ニューヨーク州アーモンク)製のz/OS(登録商標)オペレーティングシステムなど)、または他の制御コード24(結合ファシリティ制御コード(CFCC:coupling facility control code)など)を実行し、異なるプログラム25とともに動作することができる。論理パーティション内で実行されているオペレーティングシステムまたはアプリケーションプログラムは、全体の完全なシステムにアクセスできるように見えるが、実際には、その一部しか利用できない。なお、z/OSオペレーティングシステムを例示したが、インターナショナル・ビジネス・マシーンズ・コーポレーションもしくは他の企業またはその両方が提供する他のオペレーティングシステムを、本発明の1つ以上の態様に従って使用してもよい。
メモリ12は、例えば、CPU13(図8A)に結合される。CPU13は、論理パーティションに割り当てることができる物理プロセッサリソースである。例えば、論理パーティション20は、1つ以上の論理プロセッサを含んでもよく、その各々は、論理パーティションに動的に割り当てることができる物理プロセッサリソース13のすべてまたは割り当て分を表す。
さらなる一実施形態において、中央電子処理装置は、仮想マシンサポート(論理パーティショニングサポートを有するもの、または有しないものいずれか)を提供する。図8Cに示すように、中央電子処理装置11のメモリ12は、例えば、1つ以上の仮想マシン26と、仮想マシンを管理するハイパーバイザ27などの仮想マシンマネージャと、プロセッサファームウェア28とを含む。ハイパーバイザ27の一例としては、インターナショナル・ビジネス・マシーンズ・コーポレーション(ニューヨーク州アーモンク)製のz/VM(登録商標)ハイパーバイザが挙げられる。ハイパーバイザは、ホストと呼ばれることもある。なお、z/VMは、少なくとも1つの法域におけるインターナショナル・ビジネス・マシーンズ・コーポレーションの商標または登録商標である。
中央電子処理装置の仮想マシンサポートは、各々が異なるプログラム29とともに動作し、Linux(登録商標)オペレーティングシステムなどのゲストオペレーティングシステム30を実行することができる、多数の仮想マシン26を運用する能力を提供する。各仮想マシン26は、別個のシステムとして機能することができる。すなわち、各仮想マシンは、独立してリセットされ、ゲストオペレーティングシステムを実行し、異なるプログラムとともに動作することができる。仮想マシン内で実行されるオペレーティングシステムまたはアプリケーションプログラムは、全体の完全なシステムにアクセスできるように見えるが、実際には、その一部しか利用できない。なお、z/VMおよびLinuxを例示したが、他の仮想マシンマネージャもしくはオペレーティングシステムまたはその両方を、本発明の1つ以上の態様に従って使用してもよい。なお、登録商標Linuxは、世界規模での当該商標の所有者であるLinus Torvaldsの独占的ライセンシーであるLinux Foundationからのサブライセンスに従って使用される。
本発明の1つ以上の態様を組み込んで使用するコンピューティング環境の別の実施形態を、図9Aを参照して説明する。この例では、コンピューティング環境36は、例えば、ネイティブ中央処理装置(CPU)37と、メモリ38と、例えば1つ以上のバス40もしくは他の接続またはその両方介して互いに結合された1つ以上の入出力デバイス39もしくは入出力インタフェース39またはその両方と含む。一例として、コンピューティング環境36は、インターナショナル・ビジネス・マシーンズ・コーポレーション(ニューヨーク州アーモンク)製のPowerPC(登録商標)プロセッサ、ヒューレット・パッカード・カンパニー(カリフォルニア州パロアルト)製のIntel(登録商標)Itanium(登録商標)IIプロセッサ搭載HP Superdome、もしくは、インターナショナル・ビジネス・マシーンズ・コーポレーション、ヒューレット・パッカード、インテル・コーポレーション、オラクルもしくは他の企業またはその組み合わせが提供するアーキテクチャに基づく他のマシン、またはその組み合わせを含むことができる。なお、PowerPCは、少なくとも1つの法域におけるインターナショナル・ビジネス・マシーンズ・コーポレーションの商標または登録商標である。Itaniumは、インテル・コーポレーションまたはその子会社の米国およびその他の国における商標または登録商標である。
ネイティブ中央処理装置37は、環境内での処理中に使用される1つ以上の汎用レジスタもしくは1つ以上の専用レジスタまたはその両方などの、1つ以上のネイティブレジスタ41を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
さらに、ネイティブ中央処理装置37は、メモリ38に記憶されている命令およびコードを実行する。1つの具体例では、中央処理装置は、メモリ38に記憶されているエミュレータコード42を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が別のアーキテクチャをエミュレートすることを可能にする。例えば、エミュレータコード42は、z/Architecture命令セットアーキテクチャ以外のアーキテクチャ(PowerPCプロセッサ、HP Superdomeサーバなど)に基づくマシンが、z/Architecture命令セットアーキテクチャをエミュレートし、z/Architecture命令セットアーキテクチャに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。
エミュレータコード42に関連するさらなる詳細を、図9Bを参照して説明する。メモリ38に記憶されたゲスト命令(guest instructions)43は、ネイティブCPU37のアーキテクチャ以外のアーキテクチャで実行されるように開発されたソフトウェア命令(例えば、マシン命令と相互に関連付けられた)を含む。例えば、ゲスト命令43は、z/Architecture命令セットアーキテクチャに基づくプロセッサ上で実行されるように設計されていた可能性があるが、その代わりに、ネイティブCPU37(例えばIntel Itanium IIプロセッサであってもよい)上でエミュレートされている。一例として、エミュレータコード42は、メモリ38から1つ以上のゲスト命令43を取得し、取得した命令に対して必要に応じてローカルバッファを提供するための命令フェッチルーチン(instruction fetching routine)44を含む。また、エミュレータコード42は、取得したゲスト命令のタイプを決定し、ゲスト命令を1つ以上の対応するネイティブ命令(native instructions)46に変換するための命令変換ルーチン(instruction translation routine)45を含む。この変換は、例えば、ゲスト命令によって実行される機能を特定することと、当該機能を実行するためのネイティブ命令を選択することとを含む。
さらに、エミュレータコード42は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン(emulation control routine)47を含む。エミュレーション制御ルーチン47は、ネイティブCPU37に、1つ以上の以前に取得したゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、このような実行の終了時に、次のゲスト命令またはゲスト命令グループの取得をエミュレートするために、制御を命令フェッチルーチンに戻させてもよい。ネイティブ命令46の実行は、メモリ38からレジスタにデータをロードすること、レジスタからメモリにデータを戻して記憶すること、または、変換ルーチンによって決定される何らかのタイプの算術演算または論理演算を実行することを含んでもよい。
各ルーチンは、例えば、メモリに記憶されかつネイティブ中央処理装置37によって実行されるソフトウェアにおいて実装される。他の例において、ルーチンまたは操作のうちの1つ以上は、ファームウェア、ハードウェア、ソフトウェアまたはそれらの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ41を使用してエミュレートされてもよいし、メモリ38内の位置を使用してエミュレートされてもよい。実施形態において、ゲスト命令43、ネイティブ命令46およびエミュレータコード42は、同じメモリに存在してもよいし、異なるメモリデバイス間に分散されてもよい。
エミュレート可能な命令は、本発明の1つ以上の態様に従って、本明細書に記載のニューラルネットワークアシスト処理命令を含む。さらに、本発明の1つ以上の態様に従って、他の命令もしくはクエリ関数自体またはその両方がエミュレートされてもよい。
上述したコンピューティング環境は、使用可能なコンピューティング環境の例に過ぎない。他の環境(特に限定されないが、非パーティション化環境、パーティション化環境、クラウド環境もしくはエミュレートされた環境またはその組み合わせを含む)を使用してもよく、実施形態はいずれか1つの環境に限定されない。本明細書では、コンピューティング環境の様々な例を説明しているが、本発明の1つ以上の態様は、多くのタイプの環境とともに使用することができる。本明細書で提供されるコンピューティング環境は、例示に過ぎない。
各コンピューティング環境は、本発明の1つ以上の態様を含むように構成することができる。
1つ以上の態様は、クラウドコンピューティングに関係してもよい。
本開示は、クラウドコンピューティングに関する詳細な説明を含むが、本明細書に記載された教示の実装形態は、クラウドコンピューティング環境に限定されないことを理解されたい。むしろ、本発明の実施形態は、現在公知のまたは後に開発される任意の他のタイプのコンピューティング環境と組み合わせて実施することが可能である。
クラウドコンピューティングは、設定可能なコンピューティングリソース(例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシンおよびサービス)の共有プールへの簡便かつオンデマンドのネットワークアクセスを可能にするためのサービス提供のモデルであり、リソースは、最小限の管理労力または最小限のサービスプロバイダとのやり取りによって速やかに準備(provision)およびリリースできるものである。このクラウドモデルは、少なくとも5つの特性、少なくとも3つのサービスモデル、および少なくとも4つの展開モデルを含むことができる。
特性は以下の通りである。
オンデマンド・セルフサービス:クラウドの消費者は、サービスプロバイダとの人的な対話を必要することなく、必要に応じて自動的に、サーバ時間やネットワークストレージなどのコンピューティング能力を一方的に準備することができる。
ブロード・ネットワークアクセス:コンピューティング能力はネットワーク経由で利用可能であり、また、標準的なメカニズムを介してアクセスできる。それにより、異種のシンまたはシッククライアントプラットフォーム(例えば、携帯電話、ラップトップ、PDA)による利用が促進される。
リソースプーリング:プロバイダのコンピューティングリソースはプールされ、マルチテナントモデルを利用して複数の消費者に提供される。様々な物理リソースおよび仮想リソースが、需要に応じて動的に割り当ておよび再割り当てされる。一般に消費者は、提供されたリソースの正確な位置を管理または把握していないため、位置非依存(location independence)の感覚がある。ただし消費者は、より高い抽象レベル(例えば、国、州、データセンタ)では場所を特定可能な場合がある。
迅速な柔軟性(elasticity):コンピューティング能力は、迅速かつ柔軟に準備することができるため、場合によっては自動的に、直ちにスケールアウトし、また、速やかにリリースされて直ちにスケールインすることができる。消費者にとって、準備に利用可能なコンピューティング能力は無制限に見える場合が多く、任意の時間に任意の数量で購入することができる。
サービスの測定:クラウドシステムは、サービスの種類(例えば、ストレージ、処理、帯域幅、アクティブユーザアカウント)に適したある程度の抽象化レベルでの計量機能(metering capability)を活用して、リソースの使用を自動的に制御し最適化する。リソース使用量を監視、制御、および報告して、利用されるサービスのプロバイダおよび消費者の両方に透明性を提供することができる。
サービスモデルは以下の通りである。
サービスとしてのソフトウェア(SaaS):消費者に提供される機能は、クラウドインフラストラクチャ上で動作するプロバイダのアプリケーションを利用できることである。当該そのアプリケーションは、ウェブブラウザ(例えばウェブメール)などのシンクライアントインタフェースを介して、各種のクライアント装置からアクセスできる。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージや、個別のアプリケーション機能さえも含めて、基礎となるクラウドインフラストラクチャの管理や制御は行わない。ただし、ユーザ固有の限られたアプリケーション構成の設定はその限りではない。
サービスとしてのプラットフォーム(PaaS):消費者に提供される機能は、プロバイダによってサポートされるプログラム言語およびツールを用いて、消費者が作成または取得したアプリケーションを、クラウドインフラストラクチャに展開(deploy)することである。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージを含む、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、展開されたアプリケーションを制御でき、かつ場合によってはそのホスティング環境の構成も制御できる。
サービスとしてのインフラストラクチャ(IaaS):消費者に提供される機能は、オペレーティングシステムやアプリケーションを含む任意のソフトウェアを消費者が展開および実行可能な、プロセッサ、ストレージ、ネットワーク、および他の基本的なコンピューティングリソースを準備することである。消費者は、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、オペレーティングシステム、ストレージ、および展開されたアプリケーションを制御でき、かつ場合によっては一部のネットワークコンポーネント(例えばホストファイアウォール)を部分的に制御できる。
展開モデルは以下の通りである。
プライベートクラウド:このクラウドインフラストラクチャは、特定の組織専用で運用される。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
コミュニティクラウド:このクラウドインフラストラクチャは、複数の組織によって共有され、共通の関心事(例えば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンス)を持つ特定のコミュニティをサポートする。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
パブリッククラウド:このクラウドインフラストラクチャは、不特定多数の人々や大規模な業界団体に提供され、クラウドサービスを販売する組織によって所有される。
ハイブリッドクラウド:このクラウドインフラストラクチャは、2つ以上のクラウドモデル(プライベート、コミュニティまたはパブリック)を組み合わせたものとなる。それぞれのモデル固有の実体は保持するが、標準または個別の技術によってバインドされ、データとアプリケーションの可搬性(例えば、クラウド間の負荷分散のためのクラウドバースティング)を実現する。
クラウドコンピューティング環境は、ステートレス性(statelessness)、低結合性(low coupling)、モジュール性(modularity)および意味論的相互運用性(semantic interoperability)に重点を置いたサービス指向型環境である。クラウドコンピューティングの中核にあるのは、相互接続されたノードのネットワークを含むインフラストラクチャである。
ここで、図10に例示的なクラウドコンピューティング環境50を示す。図示するように、クラウドコンピューティング環境50は1つ以上のクラウドコンピューティングノード52を含む。これらに対して、クラウド消費者が使用するローカルコンピュータ装置(例えば、PDAもしくは携帯電話54A、デスクトップコンピュータ54B、ラップトップコンピュータ54C、もしくは自動車コンピュータシステム54Nまたはこれらの組み合わせなど)は通信を行うことができる。ノード52は互いに通信することができる。ノード52は、例えば、上述のプライベート、コミュニティ、パブリックもしくはハイブリッドクラウドまたはこれらの組み合わせなど、1つ以上のネットワークにおいて、物理的または仮想的にグループ化(不図示)することができる。これにより、クラウドコンピューティング環境50は、サービスとしてのインフラストラクチャ、プラットフォームもしくはソフトウェアまたはこれらの組み合わせを提供することができ、クラウド消費者はこれらについて、ローカルコンピュータ装置上にリソースを維持する必要がない。なお、図10に示すコンピュータ装置54A~Nの種類は例示に過ぎず、コンピューティングノード52およびクラウドコンピューティング環境50は、任意の種類のネットワークもしくはネットワークアドレス指定可能接続(例えば、ウェブブラウザの使用)またはその両方を介して、任意の種類の電子装置と通信可能であることを理解されたい。
ここで、クラウドコンピューティング環境50(図10)によって提供される機能的抽象化レイヤのセットを図11に示す。なお、図11に示すコンポーネント、レイヤおよび機能は例示に過ぎず、本発明の実施形態はこれらに限定されないことをあらかじめ理解されたい。図示するように、以下のレイヤおよび対応する機能が提供される。
ハードウェアおよびソフトウェアレイヤ60は、ハードウェアコンポーネントおよびソフトウェアコンポーネントを含む。ハードウェアコンポーネントの例には、メインフレーム61、縮小命令セットコンピュータ(RISC)アーキテクチャベースのサーバ62、サーバ63、ブレードサーバ64、記憶装置65、ならびにネットワークおよびネットワークコンポーネント66が含まれる。いくつかの実施形態において、ソフトウェアコンポーネントは、ネットワークアプリケーションサーバソフトウェア67およびデータベースソフトウェア68を含む。
仮想化レイヤ70は、抽象化レイヤを提供する。当該レイヤから、例えば、仮想サーバ71、仮想ストレージ72、仮想プライベートネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティングシステム74、ならびに仮想クライアント75などの仮想エンティティを提供することができる。
一例として、管理レイヤ80は以下の機能を提供することができる。リソース準備81は、クラウドコンピューティング環境内でタスクを実行するために利用されるコンピューティングリソースおよび他のリソースの動的な調達を可能にする。計量および価格設定82は、クラウドコンピューティング環境内でリソースが利用される際のコスト追跡、およびこれらのリソースの消費に対する請求またはインボイス送付を可能にする。一例として、これらのリソースはアプリケーションソフトウェアのライセンスを含んでもよい。セキュリティは、データおよび他のリソースに対する保護のみならず、クラウド消費者およびタスクの識別確認を可能にする。ユーザポータル83は、消費者およびシステム管理者にクラウドコンピューティング環境へのアクセスを提供する。サービスレベル管理84は、要求されたサービスレベルが満たされるように、クラウドコンピューティングリソースの割り当ておよび管理を可能にする。サービス品質保証(SLA)の計画および履行85は、SLAに従って将来必要になると予想されるクラウドコンピューティングリソースの事前手配および調達を可能にする。
ワークロードレイヤ90は、クラウドコンピューティング環境の利用が可能な機能の例を提供する。このレイヤから提供可能なワークロードおよび機能の例には、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育の配信93、データ分析処理94、取引処理95、クエリもしくはニューラルネットワーク処理アシスト処理またはその両方96が含まれる。
本発明の態様は、任意の可能な技術詳細レベルで統合されたシステム、方法もしくはコンピュータプログラム製品またはそれらの組み合わせとすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を記憶したコンピュータ可読記憶媒体を含んでもよい。
コンピュータ可読記憶媒体は、命令実行デバイスによって使用される命令を保持し、記憶することができる有形のデバイスとすることができる。コンピュータ可読記憶媒体は、一例として、電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイスまたはこれらの適切な組み合わせであってもよい。コンピュータ可読記憶媒体のより具体的な一例としては、ポータブルコンピュータディスケット、ハードディスク、RAM、ROM、消去可能プログラマブルROM(EPROMまたはフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、CD-ROM、DVD、メモリスティック、フロッピーディスク、パンチカードまたは溝内の隆起構造などに命令を記録した機械的に符号化されたデバイス、およびこれらの適切な組み合せが挙げられる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波管もしくは他の伝送媒体を介して伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号のような、一過性の信号それ自体として解釈されるべきではない。
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティングデバイス/処理デバイスへダウンロードすることができる。あるいは、ネットワーク(例えばインターネット、LAN、WANもしくは無線ネットワークまたはこれらの組み合わせ)を介して、外部コンピュータまたは外部ストレージデバイスへダウンロード可能である。ネットワークは、銅製伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータもしくはエッジサーバまたはこれらの組み合わせを備えることができる。各コンピューティングデバイス/処理デバイス内のネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、当該コンピュータ可読プログラム命令を、各々のコンピューティングデバイス/処理デバイスにおけるコンピュータ可読記憶媒体に記憶するために転送する。
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用構成データ、または、スモールトークやC++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語や類似のプログラミング言語などの手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述されたソースコードもしくはオブジェクトコードのいずれかとすることができる。コンピュータ可読プログラム命令は、スタンドアロン型ソフトウェアパッケージとして完全にユーザのコンピュータ上で、または部分的にユーザのコンピュータ上で実行可能である。あるいは、部分的にユーザのコンピュータ上でかつ部分的にリモートコンピュータ上で、または、完全にリモートコンピュータもしくはサーバ上で実行可能である。後者の場合、リモートコンピュータは、LANやWANを含む任意の種類のネットワークを介してユーザのコンピュータに接続してもよいし、外部コンピュータに(例えば、インターネットサービスプロバイダを使用してインターネットを介して)接続してもよい。いくつかの実施形態において、例えばプログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理アレイ(PLA)を含む電子回路は、本発明の態様を実行する目的で当該電子回路をカスタマイズするために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
本発明の態様は、本明細書において、本発明の実施形態に係る方法、装置(システム)、およびコンピュータプログラム製品のフローチャートもしくはブロック図またはその両方を参照して説明されている。フローチャートもしくはブロック図またはその両方における各ブロック、および、フローチャートもしくはブロック図またはその両方における複数のブロックの組み合わせは、コンピュータ可読プログラム命令によって実行可能である。
これらのコンピュータ可読プログラム命令は、機械を生産するために、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサに提供することができる。これにより、このようなコンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作を実行するための手段を創出する。これらのコンピュータ可読プログラム命令はさらに、コンピュータ、プログラマブルデータ処理装置もしくは他のデバイスまたはこれらの組み合わせに対して特定の態様で機能するよう命令可能なコンピュータ可読記憶媒体に記憶することができる。これにより、命令が記憶された当該コンピュータ可読記憶媒体は、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作の態様を実行するための命令を含む製品を構成する。
また、コンピュータ可読プログラム命令を、コンピュータ、他のプログラマブル装置、または他のデバイスにロードし、一連の動作ステップを当該コンピュータ、他のプログラマブル装置、または他のデバイス上で実行させることにより、コンピュータ実行プロセスを生成してもよい。これにより、当該コンピュータ、他のプログラマブル装置、または他のデバイス上で実行される命令が、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作を実行する。
図面におけるフローチャートおよびブロック図は、本発明の種々の実施形態に係るシステム、方法およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示している。この点に関して、フローチャートまたはブロック図における各ブロックは、特定の論理機能を実行するための1つ以上の実行可能な命令を含む、命令のモジュール、セグメント、または部分を表すことができる。他の一部の実装形態において、ブロック内に示した機能は、各図に示す順序とは異なる順序で実行されてもよい。例えば、関係する機能に応じて、連続して示される2つのブロックが、実際には、1つの工程として達成されてもよいし、同時もしくは略同時に実行されてもよいし、部分的もしくは全体的に時間的に重複した態様で実行されてもよいし、ブロックが場合により逆順で実行されてもよい。なお、ブロック図もしくはフローチャートまたはその両方における各ブロック、および、ブロック図もしくはフローチャートまたはその両方における複数のブロックの組み合わせは、特定の機能もしくは動作を行う、または専用ハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェアベースのシステムによって実行可能である。
上記に加えて、1つ以上の態様は、顧客環境の管理を提供するサービスプロバイダによって供与、提供、展開、管理、サービスなどが行われてもよい。例えば、サービスプロバイダは、1つ以上の顧客のために1つ以上の態様を実施するコンピュータコードもしくはコンピュータインフラストラクチャまたはその両方の作成、保守、サポートなどを行うことができる。見返りに、サービスプロバイダは、例えば、サブスクリプションもしくは料金契約またはその両方に基づいて、顧客から支払いを受けることができる。これに加えて、またはこれに代えて、サービスプロバイダは、1つ以上の第三者に対する広告コンテンツの販売から支払いを受けてもよい。
一態様において、1つ以上の実施形態を実施するために、アプリケーションを展開してもよい。一例として、アプリケーションの展開は、1つ以上の実施形態を実施するように動作可能なコンピュータインフラストラクチャを提供することを含む。
さらなる態様として、コンピュータ可読コードをコンピューティングシステムに統合することを含む、コンピューティングインフラを展開してもよい。この場合、コンピューティングシステムと組み合わせたコードは、1つ以上の実施形態を実施することができる。
さらに別の態様として、コンピュータ可読コードをコンピュータシステムに統合することを含む、コンピューティングインフラを統合するためのプロセスを提供してもよい。コンピュータシステムは、コンピュータ可読媒体を含む。コンピュータ媒体は、1つ以上の実施形態を含む。コンピュータシステムと組み合わせたコードは、1つ以上の実施形態を実施することができる。
様々な実施形態を上述したが、これらは一例に過ぎない。例えば、他のアーキテクチャのコンピューティング環境を使用して、1つ以上の態様を組み込む、もしくは使用する、またはその両方を行うことができる。さらに、異なる命令または操作を使用してもよい。さらに、異なるタイプのレジスタもしくは異なるレジスタまたはその両方を使用してもよい。さらに、他のデータフォーマット、データレイアウト、もしくはデータサイズまたはその組み合わせがサポートされてもよい。1つ以上の実施形態において、1つ以上の汎用プロセッサ、1つ以上の専用プロセッサ、または汎用プロセッサと専用プロセッサの組み合わせが使用されてもよい。多くの変形が可能である。
本明細書では、様々な態様を説明している。さらに、本発明の態様の主旨から逸脱することなく、多くの変形が可能である。特に矛盾しない限り、本明細書に記載の各態様または特徴、およびその変形は、任意の他の態様または特徴と組み合わせてもよい。
さらに、他のタイプのコンピューティング環境も本発明の恩恵を受け、使用することができる。一例として、システムバスを介してメモリ要素に直接的または間接的に結合された少なくとも2つのプロセッサを含む、プログラムコードの記憶もしくは実行またはその両方に適したデータ処理システムを使用することができる。メモリ要素には、例えば、プログラムコードの実際の実行中に使用されるローカルメモリ、バルクストレージ、および、実行中にバルクストレージからコードを取得する回数を減らすために少なくとも一部のプログラムコードの一時的なストレージを提供するキャッシュメモリがある。
入出力またはI/Oデバイス(特に限定されないが、キーボード、ディスプレイ、ポインティングデバイス、DASD、テープ、CD、DVD、サムドライブおよび他のメモリ媒体など)は、直接的に、またはI/Oコントローラを間に介してシステムに結合することができる。また、ネットワークアダプタをシステムに結合して、データ処理システムを、プライベートネットワークまたはパブリックネットワークを間に介して他のデータ処理システム、リモートプリンタまたはストレージデバイスに結合できるようにしてもよい。利用可能なネットワークアダプタを数種類挙げると、モデム、ケーブルモデム、イーサネットカードなどがある。
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、種々の実施形態を限定することを意図するものではない。本明細書において、単数形「ある(a)」、「ある(an)」および「その(the)」は、文脈上そうではないことが明らかでない限り、複数形も含むことを意図している。さらに、本明細書において、「含む(comprises)」もしくは「含んでいる(comprising)」またはその両方の用語が用いられる場合、記載された特徴、整数、ステップ、操作、要素、もしくは構成要素またはその組み合わせが存在することを規定するが、1つ以上の他の特徴、整数、ステップ、操作、要素、構成要素、もしくはそれらのグループまたはその組み合わせが存在したり、追加されたりすることを排除するものではない。
以下の特許請求の範囲に存在する場合、すべてのミーンズプラスファンクション要素またはステッププラスファンクション要素の対応する構造、材料、動作、および均等物は、具体的に特許請求された他の特許請求要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことを意図している。1つ以上の実施形態の記載は、例示および説明を目的として提示されたものであり、網羅的であることや、開示した形態に限定することを意図したものではない。多くの変更および変形が当業者には明らかである。本実施形態は、様々な態様および実際の応用例を最もよく説明するために、かつ他の当業者が、企図している特定の用途に適した各種の変更を伴う各種の実施形態を理解できるように選択され記載されたものである。