IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特表2024-522737行列乗算演算とバイアス加算演算を組み合わせて実行する単一関数
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-21
(54)【発明の名称】行列乗算演算とバイアス加算演算を組み合わせて実行する単一関数
(51)【国際特許分類】
   G06F 17/16 20060101AFI20240614BHJP
【FI】
G06F17/16 M
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023577466
(86)(22)【出願日】2022-06-09
(85)【翻訳文提出日】2023-12-14
(86)【国際出願番号】 EP2022065662
(87)【国際公開番号】W WO2022263278
(87)【国際公開日】2022-12-22
(31)【優先権主張番号】17/350,665
(32)【優先日】2021-06-17
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
(74)【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
(72)【発明者】
【氏名】リヒテナウ、セドリック
(72)【発明者】
【氏名】ゴパラクリシュナン、カイラシュ
(72)【発明者】
【氏名】スリニヴァサン、ヴィジャヤラクシュミ
(72)【発明者】
【氏名】シュクラ、スニル
(72)【発明者】
【氏名】ヴェンカタラマニ、スワガス
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA01
5B056AA04
5B056AA06
5B056BB26
5B056BB31
5B056BB37
5B056BB71
5B056CC01
5B056DD11
5B056FF01
5B056HH03
(57)【要約】
命令によって指定された複合関数が実行される。複合関数は、複合関数の1つの呼び出しの一部として実行される複数の演算を含む。複合関数を実行することは、1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することを含む。第2のテンソルは乗数を使用して作成された調整された重みテンソルを含む。複合関数の1または複数の結果を得るために、バイアステンソルの値が1または複数の中間結果に加算される。1または複数の結果は、出力テンソルの少なくとも一部である。
【選択図】図2B
【特許請求の範囲】
【請求項1】
コンピューティング環境内の処理を容易にするためのコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
1または複数のコンピュータ可読記憶媒体と、前記1または複数のコンピュータ可読記憶媒体に集合的に記憶されたプログラム命令と、を含み、前記命令は、
命令によって指定された複合関数を実行することであって、前記複合関数は、前記複合関数の1つの呼び出しの一部として実行される複数の演算を含む、実行することを含む方法を実行させ、前記複合関数を前記実行することは、
1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することであって、前記第2のテンソルは乗数を使用して作成された調整された重みテンソルを含む、実行することと、
前記複合関数の1または複数の結果を得るために、バイアステンソルの値を前記1または複数の中間結果に加算することであって、前記1または複数の結果は、出力テンソルの少なくとも一部である、加算することと、
を含む、コンピュータプログラム製品。
【請求項2】
前記複合関数は、別々に起動された複数の演算を置き換えるものであり、前記別々に起動された複数の演算は、少なくとも、入力テンソルと重みテンソルの行列乗算とそれに続くバッチ正規化を含む、請求項1に記載のコンピュータプログラム製品
【請求項3】
前記バッチ正規化が、前記入力テンソルと前記重みテンソルの前記行列乗算の少なくとも1つの結果と、選択乗数と、1または複数の選択バイアス値とを含む複数の入力を受け取り、前記バッチ正規化の少なくとも1つの結果を得るために、バッチ正規化で前記複数の入力を使用する、請求項2に記載のコンピュータプログラム製品。
【請求項4】
前記方法は、前記調整された重みテンソルを作成することをさらに含み、前記作成することは、前記調整された重みテンソルを提供するために、重みテンソルを前記乗数で乗じることをさらに含む、先行する請求項のいずれか1項に記載のコンピュータプログラム製品。
【請求項5】
前記乗数は、前記重みテンソルを正規化するために使用される、請求項4に記載のコンピュータプログラム製品。
【請求項6】
前記1または複数の中間結果は、1または複数のプロセッサが外部からアクセス可能な場所に前記1または複数の中間結果を格納し、再ロードすること無く前記加算に入力される、先行する請求項のいずれか1項に記載のコンピュータプログラム製品。
【請求項7】
前記第1のテンソルは、分類に使用されるニューラルネットワークの1または複数の特徴を含み、前記調整された重みテンソルは、前記ニューラルネットワークの1または複数の学習可能パラメータを表す、先行する請求項のいずれか1項に記載のコンピュータプログラム製品。
【請求項8】
前記行列乗算を前記実行することは、
入力テンソルの1または複数のベクトルから第1のベクトルを選択し、前記調整された重みテンソルの1または複数のベクトルから第2のベクトルを選択することと、
前記出力テンソルの要素の中間値を得るために、前記第1のベクトルと前記第2のベクトルのドット積を実行することであって、前記ドット積は、前記第1のベクトルの1または複数の要素と前記第2のベクトルの1または複数の対応する要素の積の合計を含む、実行することと、
を含む、先行する請求項のいずれか1項に記載のコンピュータプログラム製品。
【請求項9】
前記バイアステンソルの前記値を前記加算することは、前記出力テンソルの前記要素の結果の値を提供するために、前記バイアステンソルの要素の値を前記出力テンソルの前記要素の前記中間値に加算することを含む、請求項8に記載のコンピュータプログラム製品。
【請求項10】
前記行列乗算を前記実行することは、1または複数の結果の値を得るために、前記値を前記選択することと、前記値を実行することと、前記値を加算することとを1または複数回繰り返すことを含む、請求項9に記載のコンピュータプログラム製品。
【請求項11】
コンピューティング環境内の処理を容易にするためのコンピュータシステムであって、前記コンピュータシステムは、
メモリと、
前記メモリと通信する少なくとも1つのプロセッサとを含み、前記コンピュータシステムは、方法を実行するように構成され、前記方法は、
命令によって指定された複合関数を実行することであって、前記複合関数は、前記複合関数の1つの呼び出しの一部として実行される複数の演算を含む、実行することを含み、前記複合関数を前記実行することは、
1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することであって、前記第2のテンソルは乗数を使用して作成された調整された重みテンソルを含む、実行することと、
前記複合関数の1または複数の結果を得るために、バイアステンソルの値を前記1または複数の中間結果に加算することであって、前記1または複数の結果は、出力テンソルの少なくとも一部である、加算することと、
を含む、コンピュータシステム。
【請求項12】
前記複合関数は、別々に起動された複数の演算を置き換えるものであり、前記別々に起動された複数の演算は、少なくとも、入力テンソルと重みテンソルの行列乗算とそれに続くバッチ正規化を含む、請求項11に記載のコンピュータシステム。
【請求項13】
前記方法は、前記調整された重みテンソルを作成することをさらに含み、前記作成することは、前記調整された重みテンソルを提供するために、重みテンソルを前記乗数で乗じることをさらに含む、請求項11または12のいずれか1項に記載のコンピュータシステム。
【請求項14】
前記行列乗算を前記実行することは、
入力テンソルの1または複数のベクトルから第1のベクトルを選択し、前記調整された重みテンソルの1または複数のベクトルから第2のベクトルを選択することと、
前記出力テンソルの要素の中間値を得るために、前記第1のベクトルと前記第2のベクトルのドット積を実行することであって、前記ドット積は、前記第1のベクトルの1または複数の要素と前記第2のベクトルの1または複数の対応する要素の積の合計を含む、実行することと、
を含む、請求項11から13のいずれか1項に記載のコンピュータシステム。
【請求項15】
前記バイアステンソルの前記値を前記加算することは、前記出力テンソルの前記要素の結果の値を提供するために、前記バイアステンソルの要素の値を前記出力テンソルの前記要素の前記中間値に加算することを含む、請求項14に記載のコンピュータシステム。
【請求項16】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、前記コンピュータ実装方法は、
命令によって指定された複合関数を実行することであって、前記複合関数は、前記複合関数の1つの呼び出しの一部として実行される複数の演算を含む、実行することを含み、前記複合関数を前記実行することは、
1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することであって、前記第2のテンソルは乗数を使用して作成された調整された重みテンソルを含む、実行することと、
前記複合関数の1または複数の結果を得るために、バイアステンソルの値を前記1または複数の中間結果に加算することであって、前記1または複数の結果は、出力テンソルの少なくとも一部である、加算することと、
を含む、コンピュータ実装方法。
【請求項17】
前記複合関数は、別々に起動された複数の演算を置き換えるものであり、前記別々に起動された複数の演算は、少なくとも、入力テンソルと重みテンソルの行列乗算とそれに続くバッチ正規化を含む、請求項16に記載のコンピュータ実装方法。
【請求項18】
前記調整された重みテンソルを作成することをさらに含み、前記作成することは、前記調整された重みテンソルを提供するために、重みテンソルを前記乗数で乗じることをさらに含む、請求項16または17のいずれか1項に記載のコンピュータ実装方法。
【請求項19】
前記行列乗算を前記実行することは、
前記入力テンソルの1または複数のベクトルから第1のベクトルを選択し、前記調整された重みテンソルの1または複数のベクトルから第2のベクトルを選択することと、
前記出力テンソルの要素の中間値を得るために、前記第1のベクトルと前記第2のベクトルのドット積を実行することであって、前記ドット積は、前記第1のベクトルの1または複数の要素と前記第2のベクトルの1または複数の対応する要素の積の合計を含む、実行することと、
を含む、請求項16から18のいずれか1項に記載のコンピュータ実装方法。
【請求項20】
前記バイアステンソルの前記値を前記加算することは、前記出力テンソルの前記要素の結果の値を提供するために、前記バイアステンソルの要素の値を前記出力テンソルの前記要素の前記中間値に加算することを含む、請求項19に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【0001】
1または複数の態様は、一般に、コンピューティング環境内の処理を容易にすること、特に、かかる処理を改善することに関する。
【背景技術】
【0002】
データもしくは計算またはその両方が集中するコンピューティング環境での処理を強化するために、人工知能アクセラレータ(ニューラルネットワークプロセッサまたはニューラルネットワークアクセラレータとも呼ばれる)などのコプロセッサが利用される。かかるアクセラレータは、例えば、行列やテンソルの計算など、複雑な計算を実行する際に使用される大量の計算能力を提供する。
【0003】
テンソル計算は、一例として、機械学習のサブセットである深層学習を含む複雑な処理に使用される。人工知能の一態様である深層学習や機械学習は、工学、製造、医療技術、自動車技術、コンピュータ処理などを含むが、これらに限定されない様々な技術で使用されている。
【0004】
深層学習は、テンソルデータを操作する様々な演算のシーケンスを使用する。演算の各シーケンスでは、アクセラレータや他のプロセッサを複数回呼び出す必要があり、膨大な時間と計算能力を使用する。そのため、かかる演算のシーケンスの実行に関する改善が求められている。
【発明の概要】
【0005】
従来技術の欠点は克服され、さらなる利点は、コンピューティング環境内の処理を容易にするためのコンピュータプログラム製品の提供を通じて提供される。コンピュータプログラム製品は、1または複数のコンピュータ可読記憶媒体と、1または複数のコンピュータ可読記憶媒体に集合的に記憶され、方法を実行するプログラム命令とを含む。方法は、命令によって指定された複合関数を実行することを含む。複合関数は、複合関数の1つの呼び出しの一部として実行される複数の演算を含む。複合関数を実行することは、1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することを含む。第2のテンソルは乗数を使用して作成された調整された重みテンソルを含む。バイアステンソルの値は、複合関数の1または複数の結果を得るために、1または複数の中間結果に加算される。1または複数の結果は、出力テンソルの少なくとも一部である。
【0006】
複数の演算を1つの関数にまとめることで、演算を実行するためにプロセッサが呼び出される回数が減る。さらに、中間結果をメモリ、あるいは1または複数のプロセッサが外部からアクセス可能な別の場所に記憶し、そこから再ロードすることが回避される。これにより、処理速度が向上し、システムリソースの使用が削減され、性能が向上する。
【0007】
一例として、複合関数は、別々に起動された複数の演算を置き換える。別々に起動された複数の演算は、例えば、少なくとも、入力テンソルと重みテンソルの行列乗算とそれに続くバッチ正規化を含む。バッチ正規化が、一例として、入力テンソルと重みテンソルの行列乗算の少なくとも1つの結果と、選択乗数と、1または複数の選択バイアス値とを含む複数の入力を受け取り、バッチ正規化の少なくとも1つの結果を得るために、バッチ正規化で複数の入力を使用する。
【0008】
一例では、調整された重みテンソルが作成され、作成することは、調整された重みテンソルを提供するために、重みテンソルを乗数で乗じることを含む。乗数は、例えば重みテンソルを正規化するために使用される。
【0009】
一例として、1または複数の中間結果は、1または複数のプロセッサが外部からアクセス可能な場所に1または複数の中間結果を格納し、再ロードすること無く加算に入力される。
【0010】
一例では、第1のテンソルは、分類に使用されるニューラルネットワークの1または複数の特徴を含み、調整された重みテンソルは、ニューラルネットワークの1または複数の学習可能パラメータを表す。
【0011】
一例では、行列乗算を実行することは、入力テンソルの1または複数のベクトルから第1のベクトルを選択し、調整された重みテンソルの1または複数のベクトルから第2のベクトルを選択することと、出力テンソルの要素の中間値を得るために、第1のベクトルと第2のベクトルのドット積を実行することと、を含む。ドット積は、例えば、第1のベクトルの1または複数の要素と第2のベクトルの1または複数の対応する要素の積の合計を含む。
【0012】
一例として、バイアステンソルの値を加算することは、出力テンソルの要素の結果の値を提供するために、バイアステンソルの要素の値を出力テンソルの要素の中間値に加算することを含む。
【0013】
一例では、行列乗算を実行することは、1または複数の結果の値を得るために、値を選択することと、値を実行することと、値を加算することとを1または複数回繰り返すことを含む。
【0014】
1または複数の態様に関連するコンピュータ実装方法およびシステムもまた、本明細書において説明され、主張される。さらに、1または複数の態様に関連するサービスもまた、本明細書において説明され、主張され得る。
【0015】
さらなる特徴および利点は、本明細書に記載される技術を通じて実現される。他の実施形態および態様は、本明細書において詳細に説明され、特許請求される態様の一部とみなされる。
【0016】
1または複数の態様は、本明細書の末尾の特許請求の範囲において、実施例として特に指摘され、明確に主張されている。前述および1または複数の態様の目的、特徴、および利点は、添付の図面と併せて取られる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【0017】
図1A】本発明の1または複数の態様を組み込んで使用するためのコンピューティング環境の一例を示している。
図1B】本発明の1または複数の態様による、図1Aのプロセッサのさらなる詳細を示す図である。
図2A】本発明の1または複数の態様による、ニューラルネットワーク処理支援命令に関連する処理の一例を示す図である。
図2B】本発明の1または複数の態様による、演算のシーケンスをニューラルネットワーク処理支援命令の1つの関数に組み込む一例を示す図である。
図2C】本発明の1または複数の態様による、演算のシーケンスをニューラルネットワーク処理支援命令の1つの関数に組み込む別の例を示す図である。
図3A】本発明の1または複数の態様による、ニューラルネットワーク処理支援命令のフォーマットの一例を示す図である。
図3B】本発明の1または複数の態様による、ニューラルネットワーク処理支援命令によって使用される汎用レジスタの一例を示す図である。
図3C】本発明の1または複数の態様による、ニューラルネットワーク処理支援命令によってサポートされるファンクションコードの例を示す図である。
図3D】本発明の1または複数の態様による、ニューラルネットワーク処理支援命令によって使用される別の汎用レジスタの一例を示す図である。
図3E】本発明の1または複数の態様による、ニューラルネットワーク処理支援命令のクエリ関数によって使用されるパラメータブロックの一例を示す図である。
図3F】本発明の1または複数の態様による、ニューラルネットワーク処理支援命令の1または複数の非クエリ関数によって使用されるパラメータブロックの一例を示す図である。
図3G】本発明の1または複数の態様による、ニューラルネットワーク処理支援命令によって使用されるテンソル記述子の一例を示す。
図4】本発明の1または複数の態様による、ニューラルネットワーク処理(NNP)データ型1データ型のフォーマットの一例を示す図である。
図5】(A)~(C)は、本発明の1または複数の態様による、ニューラルネットワーク処理支援命令によって使用される入力データレイアウトの例を示す図である。
図6】(A)~(C)は、本発明の1または複数の態様による、図5(A)~(C)の入力データレイアウトに対応する出力例を示す図である。
図7A】本発明の1または複数の態様による、コンピューティング環境内の処理を容易にする一例を示す図である。
図7B】本発明の1または複数の態様による、コンピューティング環境内の処理を容易にする一例を示す図である。
図8A】本発明の1または複数の態様を組み込んで使用するコンピューティング環境の別の例を示している。
図8B】本発明の1または複数の態様による、図8Aのメモリのさらなる詳細の一例を示す図である。
図8C】本発明の1または複数の態様による、図8Aのメモリのさらなる詳細の別の例を示す図である。
図9A】本発明の1または複数の態様を組み込んで使用するコンピューティング環境のさらに別の例を示している。
図9B】本発明の1または複数の態様による、図9Aのメモリのさらなる詳細を示す図である。
図10】本発明の1または複数の態様による、クラウドコンピューティング環境の一実施形態を示す。
図11】本発明の1または複数の態様による、抽象化モデルレイヤの一例を示す図である。
【発明を実施するための形態】
【0018】
本発明の1または複数の態様に従って、コンピューティング環境内の処理を容易にする機能が提供される。一例として、複数の関数を実装するように構成された命令が提供され、少なくとも1つの関数は、別々に呼び出された演算のシーケンスを1つの関数にまとめ、その関数の1つの呼び出しの一部として実行するように構成される。複数の演算を1つの関数にまとめることで、演算を実行するためにプロセッサが呼び出される回数が減る。さらに、中間結果をメモリ、あるいは1または複数のプロセッサが外部からアクセス可能な別の場所に記憶し、そこから再ロードすることが回避される。これにより、処理速度が向上し、システムリソースの使用が削減され、性能が向上する。
【0019】
深層学習ネットワークで使用される一般的な演算のシーケンスの1つは、所定の入力から1または複数の特徴(例えば、特定の画像の一部)を抽出するための抽出シーケンスである。一例では、抽出シーケンスは、例えば、畳み込み、バッチ正規化、スケーリング、アクティベーション(例えば、整流化線形ユニット、ゲート付き回帰型ユニット、tanh、シグモイドなど)が続くなど、複数の別個の演算を実行することを含む。深層学習ネットワークで使用されるもう1つの一般的な演算シーケンスは、分類シーケンスであり、これには、完全連結ネットワークの行列乗算とそれに続くバッチ正規化を実行し、任意でスケーリング演算を実行することが含まれる。
【0020】
本発明の1または複数の態様に従って、上記の演算のシーケンスの各々は、単一の関数に組み合わされてもよい。例えば、抽出シーケンスは畳み込み関数によって実行され、分類シーケンスは行列乗算演算(matmul-op)関数によって実行される。これらの例は、本明細書で説明される。
【0021】
単一の関数を使用して演算のシーケンスを実行することで、プロセッサを呼び出す回数を減らし、中間値の記憶と再ロードも減らすことができる。これにより、実行時間が短縮され、システムリソースの使用が減り、処理速度が向上する。
【0022】
一例では、演算のシーケンスを実行するように構成された関数は、命令によって開始される。一例として、命令はニューラルネットワーク処理支援命令であり、複数の関数を実行するように構成された単一の命令(例えば、ハードウェア/ソフトウェアインタフェースにおける単一のアーキテクチャ化されたハードウェアマシン命令)である。各関数は、単一命令(例えば、単一のアーキテクチャ化された命令)の一部として構成され、システムリソースの使用と複雑さを低減し、システム性能を向上させる。さらに、関数の1または複数は、本明細書で説明するように、関数の単一の呼び出しの一部として演算のシーケンスを実行するように構成される。
【0023】
命令は、汎用プロセッサなどのプロセッサ上のプログラムによってディスパッチされる汎用プロセッサ命令セットアーキテクチャ(ISA)の一部であってもよい。この命令は、汎用プロセッサによって実行されてもよいし、もしくは、汎用プロセッサに結合された、または汎用プロセッサの一部である、特定の関数のために構成されたコプロセッサなどの特殊用途プロセッサによって、命令の1または複数の関数が実行されてもよいし、またはその両方であってよい。他の変形も可能である。
【0024】
本発明の1または複数の態様を組み込んで使用するコンピューティング環境の一実施形態を、図1Aを参照して説明する。一例として、コンピューティング環境は、ニューヨーク州アーモンクのInternational Business Machines Corporationが提供するz/Architecture(登録商標)命令セットアーキテクチャに基づく。z/Architecture命令セットアーキテクチャの一実施形態は、「z/Architecture Principles of Operation」と題された刊行物、IBM刊行物番号SA22-7832-12、第13版、2019年9月に記載されており、その全体が参照により本明細書に組み込まれる。しかしながら、z/Architecture命令セットアーキテクチャは、アーキテクチャの一例に過ぎず、International Business Machines Corporationもしくは他の事業体またはその両方の他のアーキテクチャもしくは他のタイプのコンピューティング環境またはその両方は、本発明の1または複数の態様を含むことができる、もしくは使用することができる、またはその両方である。z/ArchitectureおよびIBMは、少なくとも1つの法域におけるInternational Business Machines Corporationの商標または登録商標である。
【0025】
図1Aを参照すると、コンピューティング環境100は、例えば、汎用コンピューティングデバイスの形態で示されたコンピュータシステム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を介して互いに結合される。
【0026】
バス111は、例えば、メモリまたはキャッシュコヒーレンスバスであり、バス110は、例えば、メモリバスまたはメモリコントローラ、周辺バス、アクセラレーテッドグラフィックスポート、および様々なバスアーキテクチャのいずれかを使用するプロセッサまたはローカルバスを含む、いくつかのタイプのバス構造のいずれか1または複数を表す。例として、限定するものではないが、かかるアーキテクチャには、業界標準アーキテクチャ(ISA)、マイクロチャネルアーキテクチャ(MCA)、拡張ISA(EISA)、VESA(Video Electronics Standards Association)ローカルバス、およびPCI(Peripheral Component Interconnect)が含まれる。
【0027】
例として、1または複数の特殊目的プロセッサ(例えば、ニューラルネットワークプロセッサ)は、1または複数の汎用プロセッサとは別個であるが、1または複数の汎用プロセッサに結合されていてもよく、もしくは、1または複数の汎用プロセッサ内に組み込まれていてもよく、またはその両方であってよい。多くの変形が可能である。
【0028】
メモリ106は、例えば、共有キャッシュなどのキャッシュ112を含むことができ、このキャッシュ112は、例えば、1または複数のバス111を介して、プロセッサ104のローカルキャッシュ114もしくはニューラルネットワークプロセッサ105またはその両方に結合されることができる。さらに、メモリ106は、1または複数のプログラムまたはアプリケーションプログラム116および少なくとも1つのオペレーティングシステム118を含み得る。例示的なオペレーティングシステムは、ニューヨーク州アーモンクのInternational Business Machines Corporationが提供するz/OS(登録商標)オペレーティングシステムを含む。z/OSは、少なくとも1つの法域におけるInternational Business Machines Corporationの商標または登録商標である。International Business Machines Corporationもしくは他の事業体またはその両方によって提供される他のオペレーティングシステムを使用することもできる。メモリ106はまた、本発明の態様の実施形態の機能を実行するように構成され得る、1または複数のコンピュータ可読プログラム命令120を含み得る。
【0029】
さらに、1または複数の実施形態では、メモリ106は、プロセッサファームウェア122を含む。プロセッサファームウェアは、例えば、プロセッサのマイクロコードまたはミリコードを含む。プロセッサファームウェアは、例えば、上位レベルのマシンコードの実装に使用されるハードウェアレベルの命令もしくはデータ構造またはその両方を含む。一実施形態では、例えば、プロセッサファームウェアは、信頼されたソフトウェア、基礎となるハードウェアに固有のマイクロコードまたはミリコードを含み、システムハードウェアへのオペレーティングシステムのアクセスを制御するマイクロコードまたはミリコードとして一般的に配信される専有コードを含む。
【0030】
コンピュータシステム102は、例えば、I/Oインタフェース108を介して、ユーザ端末、テープドライブ、ポインティングデバイス、ディスプレイ、および1または複数のデータ記憶装置134などの1または複数の外部装置130と通信することができる。データ記憶装置134は、1または複数のプログラム136、1または複数のコンピュータ可読プログラム命令138、もしくはデータまたはその組み合わせなどを記憶することができる。コンピュータ可読プログラム命令138は、本発明の態様の実施形態の機能を実行するように構成されてもよい。
【0031】
コンピュータシステム102は、例えば、I/Oインタフェース108を介してネットワークインタフェース132と通信することもでき、これにより、コンピュータシステム102は、ローカルエリアネットワーク(LAN)、一般的なワイドエリアネットワーク(WAN)、もしくはパブリックネットワーク(例えば、インターネット)またはその組み合わせなどの1または複数のネットワークと通信することができ、他のコンピューティングデバイスまたはシステムとの通信を提供する。
【0032】
コンピュータシステム102は、取外し可能/取外し不可能、揮発性/不揮発性のコンピュータシステム記憶媒体を含むことができる、もしくはこれと結合することができる、またはその両方である。例えば、取外し不可能の不揮発性磁気媒体(典型的には「ハードドライブ」と呼ばれる)、取外し可能の不揮発性磁気ディスク(例えば「フロッピーディスク」)から読み出し、それに書き込むための磁気ディスクドライブ、もしくは、CD-ROM、DVD-ROMまたは他の光学媒体などの取外し可能の不揮発性光ディスクから読み出し、それに書き込むための光ディスクドライブ、またはその組み合わせを含むことができる、もしくはそれらと結合することができる、またはその両方である。他のハードウェアコンポーネントもしくはソフトウェアコンポーネントまたはその両方が、コンピュータシステム102と共に使用され得ることが理解されるべきである。例としては、マイクロコードまたはミリコード、デバイスドライバ、冗長処理ユニット、外部ディスクドライブアレイ、RAIDシステム、テープドライブ、およびデータアーカイバルストレージシステムなどが挙げられるが、これらに限定されない。
【0033】
コンピュータシステム102は、多数の他の汎用または特殊目的のコンピューティングシステム環境または構成で動作可能であり得る。コンピュータシステム102と共に使用するのに適し得る周知のコンピューティングシステム、環境、もしくは構成、またはその組み合わせの例としては、パーソナルコンピュータ(PC)システム、サーバコンピュータシステム、シンクライアント、シッククライアント、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家電、ネットワークPC、ミニコンピュータシステム、メインフレームコンピュータシステム、および上記のシステムまたはデバイスのいずれかを含む分散型クラウドコンピューティング環境などが挙げられるが、これらに限定されない。
【0034】
一例では、プロセッサ(例えば、プロセッサ104もしくはプロセッサ105またはその両方)は、命令を実行するために使用される複数の機能コンポーネント(またはそのサブセット)を含む。図1Bに描かれているように、これらの機能コンポーネントは、例えば、実行される命令をフェッチする命令フェッチコンポーネント150と、フェッチされた命令をデコードし、デコードされた命令のオペランドを取得する命令デコードユニット152と、デコードされた命令を実行する1または複数の命令実行コンポーネント154と、必要に応じて、命令実行のためにメモリにアクセスするメモリアクセスコンポーネント156と、実行された命令の結果を提供するライトバックコンポーネント158とを含む。1または複数のコンポーネントは、命令処理において1または複数のレジスタ160にアクセスする、もしくは使用する、またはその両方を行うことができる。さらに、1または複数のコンポーネントは、本発明の1または複数の態様に従って、本明細書で説明するように、単一の関数の呼び出しの一部として複数の演算を実行する際に、もしくは、例えば、ニューラルネットワーク処理支援命令(または本発明の1または複数の態様を使用し得る他の処理)のニューラルネットワーク処理支援処理を実行する際に、またはその両方で使用される1または複数の他のコンポーネントの少なくとも一部を含むか、または1または複数の他のコンポーネントにアクセスすることができる。1または複数の他のコンポーネントは、例えば、ニューラルネットワーク処理支援コンポーネント172(もしくは1または複数の他のコンポーネントまたはその両方)を含み得る。
【0035】
本発明の1または複数の態様に従って、ニューラルネットワーク処理支援命令は汎用プロセッサ(例えば、プロセッサ104)上で開始され、命令によって指定された関数は、関数に応じて汎用プロセッサもしくは特殊用途プロセッサ(例えば、ニューラルネットワークプロセッサ105)またはその両方のいずれかで実行される。その後、命令は汎用プロセッサ上で完了する。他の例では、命令は、1または複数の汎用プロセッサまたは1または複数の特殊目的プロセッサ上で開始、実行、完了される。他の変形も可能である。
【0036】
図2Aを参照して、ニューラルネットワーク処理支援命令の実行に関するさらなる詳細を説明する。図2Aを参照すると、一例において、ニューラルネットワーク処理支援命令は、汎用プロセッサ(例えば、プロセッサ104)などのプロセッサによって取得され、デコードされる(200)。デコードされた命令は、例えば、汎用プロセッサ上で発行される(202)。実行されるべき関数についての決定が行われる(204)。一例では、この決定は、命令のファンクションコードフィールドをチェックすることによって行われ、その例を以下に説明する。関数が実行される(210)。
【0037】
関数を実行するための一実施形態では、関数を特殊目的プロセッサ(例えば、ニューラルネットワークプロセッサ105)で実行するかどうかの決定が行われる(212)。例えば、一例では、ニューラルネットワーク処理支援命令のクエリ関数が汎用プロセッサ上で実行され、非クエリ関数が特殊目的プロセッサ上で実行される。しかし、他の変形も可能である。関数が特殊目的プロセッサ上で実行されない場合(例えば、クエリ関数、別の例では、1または複数の選択された関数)、一例では、汎用プロセッサ上で実行される(214)。しかし、関数が特殊目的プロセッサ上で実行される場合(例えば、それが非クエリ関数、または別の例では、1または複数の選択された関数)、例えば、ニューラルネットワーク計算で使用されるテンソルデータに関連するメモリアドレス情報など、関数を実行する際に使用するための情報が、汎用プロセッサによって特殊目的プロセッサに提供される(216)。特殊目的プロセッサはその情報を取得し、関数を実行する(218)。関数の実行が完了すると、処理は汎用プロセッサに戻り(220)、汎用プロセッサは命令を完了する(222)。(他の例では、命令は、1または複数の汎用プロセッサまたは1または複数の特殊目的プロセッサで開始、実行、完了することができる。他の変形も可能である)。
【0038】
実行される関数の例は、行列乗算演算関数および畳み込み関数であり、これらの各関数については本明細書で説明する。一実施例では、これらの関数は、ニューラルネットワークプロセッサ105のような特殊目的プロセッサによって実行される。しかしながら、別の実施例では、1または複数の関数は、汎用プロセッサまたは他のプロセッサによって実行されてもよい。他の変形も可能である。
【0039】
これらの関数の各々は、図2B~2Cを参照してさらに説明するように、演算のシーケンスを実行する。最初に図2Bを参照すると、一例では、行列乗算演算関数230(例えば、NNPA-MATMUL-OP。その一例が本明細書で説明される)は、入力テンソル232、調整された重みテンソル234およびバイアステンソル236を入力として受け取る。ニューラルネットワークにおいて、重みは、例えば、学習可能なパラメータであり、バイアスは、例として、オフセットである。入力テンソル232は、例えば、分類に使用される1または複数の特徴を含む。特徴は分類されるもの(例えば画像)を記述する。一例では、調整された重みテンソルは、重みテンソル238に乗算テンソルm240を乗算した結果である。乗数は重みテンソルを正規化して、条件の良い人工知能モデルのための結合演算の結果を生成し、-3から+3などの選択範囲の値である。特定の例として、値は、例えば、2.5である。他の範囲もしくは値またはその両方も可能である。入力を用いて、出力テンソル242の少なくとも一部を生成する関数が実行される。
【0040】
関数を実行する際、一例では、入力テンソルと調整された重みテンソルの行列乗算が実行され、プロセッサを再度起動することなく、1または複数のバイアス値が加算された1または複数の中間結果を提供する。これらの演算(例えば、行列の乗算とバイアスの加算)は、単一の関数の実行の一部として実行され、少なくともニューラルネットワークプロセッサが呼び出される回数を減らす。さらに、関数は、中間結果(例えば、入力テンソルと重みテンソルの乗算結果)をメモリまたはプロセッサが外部からアクセス可能な別の場所に記憶すること、および、その後、さらなる処理で使用するためにそれらの結果を再ロードすることなく実行される。その代わりに、中間結果は、ニューラルネットワークプロセッサだけが見えるスクラッチパッド(例えば、内部レジスタ)に一時的に記憶される。これは、246で示される演算のシーケンスの以前の実装とは対照的である。実装246では、各演算が独立して実行され、その結果、プロセッサ(例えば、ニューラルネットワークプロセッサ105)の個別の呼び出しが発生し、重大なオーバーヘッドが追加される。さらに、別々の演算が実行されるため、各演算の中間結果がメモリまたは外部から見える別の場所に記憶され、次の演算のためにそこから再ロードされ、オーバーヘッドおよびシステムリソースの使用が増加する。
【0041】
一例として、実装246では、行列乗算248が、1または複数の中間結果254を提供する入力テンソル250と重みテンソル252で実行される。各中間結果254はメモリに記憶され、その後、別の演算であるバッチ正規化操作255への入力として再ロードされ、バイアステンソル256と乗算テンソルm258も入力として受け取る。バッチ正規化の間、中間結果は正規化され、学習プロセスの安定化を提供する。バッチ正規化操作255の結果は、出力テンソル259の少なくとも一部である。ここでも、実装246は、分類シーケンスの複数の演算を実行するために単一の関数230を使用するよりもオーバーヘッド集約的である。一例として、独立して呼び出され実行される行列乗算およびバッチ正規化演算は、重みテンソルおよびバイアス加算を使用して行列乗算を実行する関数の単一の呼び出しによって置き換えられる。これにより、システム性能を向上させる、もしくはシステムリソースの使用を削減する、またはその両方である。
【0042】
複数の演算を1つの関数に結合し、オーバーヘッド、システムリソースの使用、および性能を改善する別の関数は、図2Cを参照して説明するような畳み込み関数である。図2Cを参照すると、一例では、畳み込み関数260(例えば、NNPA-CONVOLUTION。その一例が本明細書で説明される)は、入力テンソル262、調整された重みテンソル264、クリッピング値265(本明細書で説明される)、およびテンソルバイアス266を入力として受け取る。一例では、調整された重みテンソルは、重みテンソル268に第1の乗算テンソルm270と第2の乗算テンソルm272を乗算した結果である。一例では、m270は-3から+3の範囲の値、例えば2.5を有し、m272は-3から+3の範囲の値、例えば3.0を有する。乗算器の各々について他の範囲もしくは値またはその両方が可能であり、範囲もしくは値またはその両方は、乗算器の各々について同じ、もしくは異なる、またはその両方であってよい。入力を用いて、出力テンソル274の少なくとも一部を生成する関数が実行される。
【0043】
関数を実行する際、一例として、入力テンソルと調整された重みテンソルの畳み込みが実行され、プロセッサを再度起動することなく、1または複数のバイアス値が追加された1または複数の中間結果を提供する。これらの演算は、単一の関数の実行の一部として実行され、少なくともニューラルネットワークプロセッサが呼び出される回数を減らす。さらに、この関数は、中間結果(例えば、入力テンソルと重みテンソルを使用した畳み込みの結果)をメモリまたはプロセッサに外部からアクセス可能な別の場所に記憶すること、およびそれらの結果を再ロードすることなく実行される。これは、280で示した演算のシーケンスの以前の実装とは対照的である。実装280では、各演算は独立して実行され、その結果、プロセッサ(例えば、ニューラルネットワークプロセッサ105)の個別の呼び出しが発生し、重大なオーバーヘッドが追加される。さらに、別々の演算が実行されるため、各演算の中間結果がメモリまたは外部から見える別の場所に記憶され、次の演算の入力として再ロードされ、オーバーヘッドおよびシステムリソースの使用が増加する。
【0044】
一例として、実装280では、畳み込み282が入力テンソル284と重みテンソル286で実行され、1または複数の中間結果288を生成する。各中間結果288は、メモリに記憶され、その後、別の演算であるバッチ正規化演算289への入力として再ロードされる。バッチ正規化演算289は、バイアステンソル290と乗算テンソルm292も入力として受け取り、1または複数の他の中間結果294を生成し、各中間結果294は、メモリまたは他の外部から見える場所に記憶される。バッチ正規化演算289の各中間結果294は、別の乗算テンソルm296とともに、別の別個に呼び出される演算であるスケール演算295に入力される。スケール演算が実行され、スケール演算の各中間結果は、例えばメモリに記憶され、その後、さらに別の演算である活性化演算298に入力されるように再ロードされる。活性化(例えば、整流化線形ユニット、ゲート付き回帰型ユニット、tanh、シグモイドなど)が実行され、出力テンソル299の少なくとも一部が生成される。一実施例では、活性化演算は、本明細書で説明するように、クリッピング演算297を含む。ここでも、実装280は、抽出シーケンスの複数の演算を実行するために単一の関数260を使用するよりもオーバーヘッド集約的である。一例として、単一の呼び出しにおいて重みテンソルおよびバイアス加算演算を使用して実行される畳み込み関数は、独立して呼び出されて実行される畳み込み、バッチ正規化、スケールおよび活性化演算を置き換える。これにより、システム性能を向上させる、もしくはシステムリソースの使用を削減する、またはその両方である。
【0045】
示されるように、一例では、行列乗算演算および畳み込み関数は、ニューラルネットワーク処理支援(NNPA)命令などの命令の一部として実装される。NNPA-MATMUL-OP関数およびNNPA-CONVOLUTION関数を含む、ニューラルネットワーク処理支援命令に関するさらなる詳細が、図3A~3Gを参照して説明される。最初に図3Aを参照すると、一例では、ニューラルネットワーク処理支援命令300は、拡張オペレーションコード(オペコード)を有するレジスタおよびレジスタ演算を示すRREフォーマットを有する。一例では、ニューラルネットワーク処理支援命令300は、ニューラルネットワーク処理支援演算を示す演算コード(オペコード)フィールド302(例えば、ビット0~15)を含む。一例では、命令のビット16~31は予約されており、ゼロを含むようになっている。命令、命令の関数もしくは演算またはその両方に関する本明細書の説明において、特定の位置、特定のフィールドもしくはフィールドの特定のサイズまたはその組み合わせが示される(例えば、特定のバイトもしくはビットまたはその両方)。しかしながら、他の位置、フィールドもしくはサイズまたはその組み合わせが提供されてもよい。さらに、ビットを特定の値、例えば1または0に設定することが指定されることがあるが、これは例示に過ぎない。ビットが設定される場合、他の例では、反対の値や別の値など、異なる値に設定されてもよい。多くの変更が可能である。
【0046】
一例では、命令は、命令によって暗黙的に指定された複数の汎用レジスタを使用する。例えば、ニューラルネットワーク処理支援命令300は、暗黙のレジスタ汎用レジスタ0および汎用レジスタ1を使用し、その例は、それぞれ図3Bおよび図3Dを参照して説明される。
【0047】
図3Bを参照すると、一例として、汎用レジスタ0は、ファンクションコードフィールドと、命令の完了時に更新され得るステータスフィールドとを含む。一例として、汎用レジスタ0は、応答コードフィールド310(例えば、ビット0~15)、例外フラグフィールド312(例えば、ビット24~31)、およびファンクションコードフィールド314(例えば、ビット56~63)を含む。さらに、一例では、汎用レジスタ0のビット16~23とビット32~55は予約されており、ゼロを含むことになっている。1または複数のフィールドは、命令によって実行される特定の関数によって使用される。一例では、すべてのフィールドがすべての関数で使用されるわけではない。各フィールドについて以下に説明する。
【0048】
応答コード(RC)310:このフィールド(例えばビット位置0~15)には応答コードが記憶される。ニューラルネットワーク処理支援命令の実行が、例えば1の条件コードで完了すると、応答コードが記憶される。無効な入力条件に遭遇すると、実行中に認識された無効な入力条件の原因を示す0以外の値が応答コードフィールドに記憶され、選択された条件コード、例えば1が設定される。応答コードフィールドに記憶されるコードは、一例として以下のように定義される。
【0049】
応答コード 意味
【0050】
0001 パラメータブロックのバージョン番号で指定されるパラメータブロックのフォーマットは、モデルによってサポートされていない。
【0051】
0002 指定された関数は定義されていないか、マシンにインストールされていない。
【0052】
0010 指定されたテンソルデータレイアウトフォーマットはサポートされていない。
【0053】
0011 指定されたテンソルデータ型はサポートされていない。
【0054】
0012 指定されたテンソルの単一次元が、最大次元インデックスサイズより大きい。
【0055】
0013 指定されたテンソルのサイズが最大テンソルサイズより大きい。
【0056】
0014 指定されたテンソルアドレスが4Kバイト境界に配置されていない。
【0057】
0015 関数固有の保存領域アドレスが4Kバイト境界に配置されていない。
【0058】
F000-FFFF 関数固有の応答コード。これらの応答コードは特定の関数に対して定義されている。
【0059】
例外フラグ(EF)312:このフィールド(例えば、ビット位置24~31)には、例外フラグが含まれる。命令の実行中に例外状態が検出されると、対応する例外フラグ制御(例えばビット)が例えば1に設定され、そうでなければ制御は変更されないままである。例外フラグフィールドは、命令の最初の呼び出しの前にゼロに初期化される。予約フラグは、命令の実行中は変更されない。例外フラグフィールドに記憶されるフラグは、一例として以下のように定義されている。
【0060】
EF(ビット) 意味
【0061】
0 範囲違反。このフラグは、非数値が入力テンソルで検出されたか、出力テンソルに記憶されたときに設定される。このフラグは、例えば、命令が条件コード、例えば、0で完了したときのみ有効である。
【0062】
1~7 予約済み。
【0063】
ファンクションコード(FC)314:このフィールド(例えば、ビット位置56~63)にはファンクションコードが含まれる。図3Cに、ニューラルネットワーク処理支援命令に割り当てられたファンクションコードの例を示す。他のすべてのファンクションコードは未割り当てである。未割り当てまたは未インストールのファンクションコードが指定された場合、例えば16進数で0002の応答コードと、例えば1の選択条件コードが設定される。このフィールドは実行中に変更されることはない。
【0064】
示されているように、汎用レジスタ0に加えて、ニューラルネットワーク処理支援命令は汎用レジスタ1も使用し、その例は図3Dに描かれている。例として、24ビットアドレス指定モードのビット40~63、31ビットアドレス指定モードのビット33~63、または64ビットアドレス指定モードのビット0~63は、パラメータブロック320のアドレスを含む。汎用レジスタ1の内容は、例えば、ストレージ内のパラメータブロックの左端バイトの論理アドレスを指定する。パラメータブロックはダブルワード境界で指定され、そうでなければ仕様例外が認識される。すべての関数について、汎用レジスタ1の内容は変更されない。
【0065】
アクセスレジスタモードでは、アクセスレジスタ1は、一例として、パラメータブロック、入力テンソル、出力テンソル、関数固有保存領域を含むアドレス空間を指定する。
【0066】
一例では、パラメータブロックは、実行される命令によって指定された関数に応じて異なるフォーマットを有することができる。例えば、命令のクエリ関数は1つのフォーマットのパラメータブロックを持ち、命令の他の関数は別のフォーマットのパラメータブロックを持つ。別の例では、すべての関数が同じパラメータブロックフォーマットを使用する。その他の変更も可能である。
【0067】
例として、パラメータブロックもしくはパラメータブロック内の情報またはその両方は、メモリ、ハードウェアレジスタ、もしくは、メモリもしくはレジスタまたはその両方の組み合わせ、またはその組み合わせに記憶される。他の例も可能である。
【0068】
図3Eを参照して、NNPA-Query Available Functions(QAF)演算などのクエリ関数によって使用されるパラメータブロックの一例について説明する。示されるように、一例では、NNPA-Query Available Functionsパラメータブロック330は、例えば以下を含む。
【0069】
インストールされた関数ベクトル332:パラメータブロックのこのフィールド(例えば、バイト0~31)には、インストールされた関数ベクトルが含まれる。一例では、インストールされた関数ベクトルのビット0~255は、ニューラルネットワーク処理支援命令のファンクションコード0~255にそれぞれ対応する。ビットが例えば1である場合、対応する関数がインストールされ、そうでない場合、関数はインストールされない。
【0070】
インストールされたパラメータブロックフォーマットベクトル334:パラメータブロックのこのフィールド(例えば、バイト32~47)は、インストールされたパラメータブロックフォーマットベクトルを含む。一例では、インストールされたパラメータブロックフォーマットベクトルのビット0~127は、ニューラルネットワーク処理支援命令の非クエリ関数のパラメータブロックフォーマット0~127に対応する。ビットが例えば1である場合、対応するパラメータブロックフォーマットがインストールされ、そうでない場合、パラメータブロックフォーマットはインストールされない。
【0071】
インストールされたデータ型336:パラメータブロックのこのフィールド(例えば、バイト48~49)には、インストールされたデータ型ベクトルが含まれる。一例では、インストールされたデータ型ベクトルのビット0~15は、インストールされるデータ型に対応する。ビットが例えば1である場合、対応するデータ型がインストールされ、そうでない場合、データ型はインストールされない。データ型の例としては、以下のようなものがある(追加のデータ型、より少ないデータ型、もしくは他のデータ型、またはその組み合わせも可能である)。
【0072】
ビット データ型
【0073】
0 NNPデータ型1
【0074】
1~15 予約済み
【0075】
インストールされたデータレイアウトフォーマット338:パラメータブロックのこのフィールド(例えば、バイト52~55)は、インストールされたデータレイアウトフォーマットベクトルを含む。一例では、インストールされたデータレイアウトフォーマットベクトルのビット0~31は、インストールされるデータレイアウトフォーマットに対応する。ビットが例えば1である場合、対応するデータレイアウトフォーマットがインストールされ、そうでない場合、データレイアウトフォーマットはインストールされない。データレイアウトフォーマットの例には以下が含まれる(追加のデータ型、より少ないデータ型、もしくは他のデータ型、またはその組み合わせも可能である)。
【0076】
ビット データレイアウトフォーマット
【0077】
0 4D特徴テンソル
【0078】
1 4Dカーネルテンソル
【0079】
2~31 予約済み
【0080】
最大次元インデックスサイズ340:パラメータブロックのこのフィールド(例えば、バイト60~63)は、例えば、任意の指定されたテンソルの指定された次元インデックスサイズ内の要素の最大数を指定する32ビットの符号なしバイナリ整数を含む。別の例では、最大次元インデックスサイズは、指定されたテンソルの指定された次元インデックスサイズ内の最大バイト数を指定する。他の例も可能である。
【0081】
最大テンソルサイズ342:パラメータブロックのこのフィールド(例えば、バイト64~71)は、例えば、32ビットの符号なしバイナリ整数を含み、テンソルフォーマットによって要求されるパッドバイトを含む、指定されたテンソルの最大バイト数を指定する。別の例では、最大テンソルサイズは、テンソルフォーマットによって要求される任意のパディングを含む、任意の指定されたテンソルの最大総要素数を指定する。他の例も可能である。
【0082】
インストールされたNNPデータ型1変換ベクトル344:パラメータブロックのこのフィールド(例えば、バイト72~73)は、インストールされたNNPデータ型1変換ベクトルを含む。一例では、インストールされたNNPデータ型1変換ベクトルのビット 0~15は、NNPデータ型1フォーマットとの間のインストールされたデータ型変換に対応する。ビットが1であるとき、対応する変換はインストールされ、そうでない場合、変換はインストールされない。追加の変換、より少ない変換、もしくは他の変換、またはその組み合わせを指定することもできる。
【0083】
ビット データタイプ
【0084】
0 予約済み
【0085】
1 BFPタイニーフォーマット
【0086】
2 BFPショートフォーマット
【0087】
3~15 予約済み
【0088】
図3Eを参照してクエリ関数のパラメータブロックの一例を説明したが、NNPA-Query Available Functions演算を含む、クエリ関数のパラメータブロックの他のフォーマットが使用されてもよい。フォーマットは、一例として、実行されるクエリ関数の型に依存する場合がある。さらに、パラメータブロックもしくはパラメータブロックの各フィールドまたはその両方は、追加の情報、より少ない情報、もしくは他の情報、またはその組み合わせを含むことができる。
【0089】
クエリ関数のパラメータブロックに加えて、一例では、ニューラルネットワーク処理支援命令の非クエリ関数などの非クエリ関数のパラメータブロックフォーマットがある。ニューラルネットワーク処理支援命令のMATMUL-OP関数やCONVOLUTION関数などの非クエリ関数で使用されるパラメータブロックの一例を、図3Fを参照して説明する。
【0090】
示されるように、一例では、例えばニューラルネットワーク処理支援命令の非クエリ関数によって採用されるパラメータブロック350は、例えば以下を含む。
【0091】
パラメータブロックバージョン番号352:パラメータブロックのこのフィールド(例えば、バイト0~1)は、パラメータブロックのバージョンとサイズを指定する。一例では、パラメータブロックバージョン番号のビット0~8は予約済みでゼロを含み、パラメータブロックバージョン番号のビット9~15は、パラメータブロックのフォーマットを指定する符号なしバイナリ整数を含む。クエリ関数は、使用可能なパラメータブロックフォーマットを示すメカニズムを提供する。指定されたパラメータブロックのサイズまたはフォーマットがモデルによってサポートされていない場合、例えば16進数で0001の応答コードが汎用レジスタ0に記憶され、例えば条件コード1のような条件コードを設定して命令が完了する。パラメータブロックのバージョン番号はプログラムによって指定され、命令の実行中に変更されることはない。
【0092】
モデルバージョン番号354:パラメータブロックのこのフィールド(例えば、バイト2)は、命令(例えば、特定の非クエリ関数)を実行したモデルを識別する符号なしバイナリ整数である。継続フラグ(後述)が1である場合、モデルバージョン番号は、パラメータブロックの継続状態バッファフィールド(後述)の内容を解釈して演算を再開する目的で、演算への入力となる可能性がある。
【0093】
継続フラグ356:パラメータブロックのこのフィールド(例えばビット63)は、例えば1の場合、演算が部分的に完了したことを示し、継続状態バッファの内容を使用して演算を再開することができる。プログラムは、継続フラグをゼロに初期化し、演算を再開する目的で命令が再実行される場合に継続フラグを修正しない。そうでなければ、結果は予測不可能である。
【0094】
演算の開始時に継続フラグがセットされ、最初の呼び出しからパラメータブロックの内容が変更された場合、結果は予測不可能である。
【0095】
関数固有保存領域アドレス358:パラメータブロックのこのフィールド(例えば、バイト56~63)には、関数固有保存領域の論理アドレスが含まれる。一例では、関数固有保存領域アドレスは、4Kバイト境界に配置される。それ以外の場合、例えば、16進数で0015の応答コードが汎用レジスタ0に設定され、命令は例えば、1の条件コードで完了する。アドレスは現在のアドレス指定モードに従う。関数固有保存領域のサイズは、ファンクションコードに依存する。
【0096】
関数固有保存領域全体がプログラム事象記録(PER)保存領域指定と重なる場合、該当する場合、関数固有保存領域について、PERのストレージ変更イベントが認識される。関数固有保存領域の一部のみがPER保存領域指定と重なる場合、以下のいずれが発生するかはモデルに依存する。
【0097】
*PERのストレージ変更イベントは、該当する場合、関数固有保存域全体に対して認識される。
【0098】
*PERのストレージ変更イベントは、該当する場合、保存されている関数固有保存域の部分に対して認識される。
【0099】
パラメータブロック全体がPER保存領域指定に重なるとき、PERのストレージ変更イベントは、該当する場合、パラメータブロックに対して認識される。パラメータブロックの一部だけがPER保存領域指定と重なるとき、以下のいずれが発生するかはモデルに依存する。
【0100】
*PERのストレージ変更イベントは、該当する場合、パラメータブロック全体に対して認識される。
【0101】
*PERのストレージ変更イベントは、該当する場合、パラメータブロックが保存されている部分について認識される。
【0102】
PERゼロアドレス検出イベントは、該当する場合、パラメータブロックについて認識される。ゼロアドレス検出は、一例として、テンソルアドレスや関数固有保存領域アドレスには適用されない。
【0103】
出力テンソル記述子(例えば、1~2)360/入力テンソル記述子(例えば、1~3)365:テンソル記述子の一例を、図3Gを参照して説明する。一例では、テンソル記述子360、365が含まれる。
【0104】
データレイアウトフォーマット382:テンソル記述子のこのフィールド(例えばバイト0)はデータレイアウトフォーマットを指定する。有効なデータレイアウトフォーマットには、例えば以下のものがある(追加のデータレイアウトフォーマット、より少ないデータレイアウトフォーマット、もしくは他のデータレイアウトフォーマット、またはその組み合わせも可能である)。
【0105】
フォーマット 説明 アライメント(バイト)
【0106】
0 4D特徴テンソル 4096
【0107】
1 4Dカーネルテンソル 4096
【0108】
2~255 予約済み --
【0109】
サポートされていない、または予約済みのデータレイアウトフォーマットが指定された場合、例えば16進数で0010の応答コードが汎用レジスタ0に記憶され、例えば1の条件コードを設定することで命令が完了する。
【0110】
データ型384:このフィールド(例えばバイト1)はテンソルのデータ型を指定する。サポートされるデータ型の例を以下に示す(追加のデータ型、より少ないデータ型、もしくは他のデータ型、またはその組み合わせも可能である)。
【0111】
値 データ型 データサイズ(ビット)
【0112】
0 NNPデータ型1 16
【0113】
1~255 予約済み --
【0114】
サポートされていない、または予約されたデータ型が指定された場合、例えば16進数で0011の応答コードが汎用レジスタ0に記憶され、例えば1の条件コードを設定することで命令が完了する。
【0115】
次元1~4インデックスサイズ386:総称して、次元インデックスサイズ1から4は、4Dテンソルの形状を指定する。各次元インデックスサイズは、ゼロより大きく、最大次元インデックスサイズ(図3Eの340)以下でなければならず、そうでなければ、例えば16進数で0012の応答コードが汎用レジスタ0に記憶され、条件コードを例えば1に設定することで命令が完了する。総テンソルサイズが最大テンソルサイズ以下でなければならず(図3Eの342)そうでなければ、応答コード、例えば16進数で0013が汎用レジスタ0に記憶され、条件コード、例えば1を設定することで命令が完了する。
【0116】
一例では、NNPAデータ型1の要素を持つ4D特徴テンソルのバイト数(すなわち、総テンソルサイズ)を決定するために、以下が使用される:次元インデックス4*次元インデックス3*ceil(次元インデックス2/32)*32*ceil(次元インデックス1/64)*64*2。
【0117】
テンソルアドレス388:テンソル記述子のこのフィールド(例えばバイト24~31)は、テンソルの左端バイトの論理アドレスを含む。アドレスは現在のアドレス指定モードに従う。
【0118】
アドレスが関連するデータレイアウトフォーマットの境界にアライメントされていない場合、例えば16進数で0014の応答コードが汎用レジスタ0に記憶され、例えば1の条件コードを設定することで命令が完了する。
【0119】
アクセスレジスタモードでは、アクセスレジスタ1は、ストレージ内のすべてのアクティブな入力および出力テンソルを含むアドレス空間を指定する。
【0120】
図3Fに戻ると、パラメータブロック350は、一例として、本明細書で説明するように、特定の関数によって使用され得る関数固有パラメータ1~5(370)をさらに含む。
【0121】
さらに、パラメータブロック350は、一例では、この命令の演算が再開される場合に使用されるデータ(またはデータの場所)を含む継続状態バッファフィールド375を含む。
【0122】
演算の入力として、パラメータブロックの予約フィールドはゼロを含むべきである。演算が終了すると、予約フィールドはゼロとして記憶されるか、変更されずに残る。
【0123】
図3Fを参照して、非クエリ関数のパラメータブロックの一例を説明したが、ニューラルネットワーク処理支援命令の非クエリ関数を含む、非クエリ関数のパラメータブロックの他のフォーマットを使用してもよい。フォーマットは、一例として、実行される関数の型に依存してもよい。さらに、テンソル記述子の一例を図3Gを参照して説明したが、他のフォーマットを使用してもよい。さらに、入力テンソルと出力テンソルに異なるフォーマットを用いてもよい。他の変形も可能である。
【0124】
ニューラルネットワーク処理支援命令の一実施形態によってサポートされる様々な関数に関するさらなる詳細を以下に説明する。
【0125】
ファンクションコード0:NNPA-QAF(Query Available Functions)
【0126】
ニューラルネットワーク処理支援(NNPA)クエリ関数は、例えば、インストールされた関数の可用性、インストールされたパラメータブロックフォーマット、インストールされたデータ型、インストールされたデータレイアウトフォーマット、最大次元インデックスサイズ、最大テンソルサイズなどの選択された情報を示すメカニズムを提供する。情報は取得され、パラメータブロック(例えば、パラメータブロック330)などの選択された場所に配置される。演算が終了すると、パラメータブロックの予約フィールドはゼロとして記憶されるか、変更されないままである。
【0127】
クエリ関数の一実施形態の実行において、汎用プロセッサ104などのプロセッサは、ニューラルネットワークプロセッサ105などのニューラルネットワークプロセッサの特定のモデルなどの特定のプロセッサに関連する情報を取得する。プロセッサまたはマシンの特定のモデルは、特定の機能を有する。プロセッサまたはマシンの別のモデルは、追加の機能、より少ない機能、もしくは異なる機能、またはその組み合わせを有してよく、もしくは、異なる世代(例えば、追加の機能、より少ない機能、もしくは異なる機能、またはその組み合わせを有する現在または将来の世代)であってよい。得られた情報は、パラメータブロック(例えば、パラメータブロック330)、または、さらなる処理においてこの情報を使用し得る1または複数のアプリケーションにアクセス可能であり、もしくは、それで使用するための、またはその両方である他の構造に配置される。一例では、パラメータブロックもしくはパラメータブロックの情報またはその両方は、メモリに保持される。他の実施形態では、パラメータブロックもしくは情報またはその両方は、1または複数のハードウェアレジスタに保持されてもよい。別の例として、クエリ関数は、この情報をアプリケーションまたは非特権プログラムが利用できるようにするためのアプリケーションプログラミングインタフェースを利用可能にする演算システムによって実行される特権演算であってもよい。さらに別の例では、クエリ関数は、ニューラルネットワークプロセッサ105などの特殊目的プロセッサによって実行される。他の変形も可能である。
【0128】
この情報は、例えば、クエリ関数を実行するプロセッサのファームウェアによって取得される。ファームウェアは、特定のプロセッサ(例えば、ニューラルネットワークプロセッサ)の特定のモデルの属性に関する知識を有する。この情報は、例えば、制御ブロック、レジスタ、もしくはメモリ、またはその組み合わせに記憶されてもよく、もしくはそうでなければ、クエリ関数を実行するプロセッサにアクセス可能であってもよく、またはその両方であってよい。
【0129】
取得された情報には、例えば、特定のプロセッサの選択されたモデルの1または複数のインストールまたはサポートされているデータ型、1または複数のインストールまたはサポートされているデータレイアウトフォーマット、もしくは1または複数のインストールまたはサポートされているデータサイズ、またはその組み合わせを含む、特定のプロセッサの少なくとも1または複数のデータ属性に関するモデル依存の詳細情報が含まれる。この情報は、他のモデル(例えば、以前のモデルもしくは将来のモデルまたはその両方)が同じデータ型、データサイズもしくはデータレイアウトフォーマットまたはその組み合わせなどの同じデータ属性をサポートしない可能性があるという点で、モデル依存である。クエリ関数(例えば、NNPA-QAF関数)の実行が完了すると、一例として条件コード0が設定される。条件コード1、2および3は、一例として、クエリ関数には適用されない。以下に、取得された情報に関連するさらなる情報を説明する。
【0130】
示されるように、一例では、取得された情報は、例えば、ニューラルネットワークプロセッサの特定のモデルの1または複数のデータ属性に関するモデル依存情報を含む。データ属性の一例は、ニューラルネットワークプロセッサのインストールされたデータ型である。例えば、ニューラルネットワークプロセッサ(または他のプロセッサ)の特定のモデルは、例として、NNPデータ型1データ型(ニューラルネットワーク処理データ型1データ型とも呼ばれる)もしくは他のデータ型、またはその両方などの1または複数のデータ型をサポートし得る。NNPデータ型1データ型は、16ビット浮動小数点フォーマットであり、例えば、深層学習ネットワークの精度を維持する、丸めモードとコーナーケースの取り扱いを簡素化するサブノーマルフォーマットを排除する、算術演算で最も近い値に自動的に丸める、無限大とNot-a-Number(NaN)の特別なエンティティを1つの値(NINF)にまとめ、算術演算で受け入れられ、取り扱われるなど、深層学習の訓練と推論計算に多くの利点を提供する。NINFは、指数オーバーフローや無効な演算(ゼロによる除算など)に対するより良いデフォルトを提供する。これにより、多くのプログラムはそのようなエラーを隠すことなく、また特別な例外ハンドラを使用することなく実行を続けることができる。その他のモデル依存のデータ型も可能である。
【0131】
NNPデータ型1データ型のフォーマットの一例が図4に描かれている。描かれているように、一例では、NNPデータ型1のデータは、例えば、符号402(例えば、ビット0)、指数+31 404(例えば、ビット1~6)、および分数406(例えば、ビット7~15)を含むフォーマット400で表されることがある。
【0132】
NNPデータ型1フォーマットのプロパティの例を以下に示す
【0133】
プロパティ NNPデータ型1
【0134】
フォーマット長(ビット) 16ビット
【0135】
バイアス指数長(ビット) 6ビット
【0136】
端数長(ビット) 9ビット
【0137】
精度(p) 10ビット
【0138】
左単位ビューの最大指数(Emax) 32
【0139】
最小左単位ビュー指数(Emin) -31
【0140】
左単位ビュー(LUV)バイアス 31
【0141】
Nmax (1-2-9)x233≒8.6x10
【0142】
Nmin (1+2-9)x2-31≒4.6x10-10
【0143】
Dmin ---
ここで、≒は値が近似値であることを示し、Nmaxは表現可能な最大(大きさ)の有限数であり、Nminは表現可能な最小(大きさ)の数である。
【0144】
NNPデータ型1データ型に関する詳細は後述する。
【0145】
バイアス化された指数:指数を符号なし数値として表現できるようにするために使用されるバイアスを上に示す。バイアス化された指数は、NNPデータ型1データ型のクラスを参照して後述するように、すべての0とすべての1のバイアス化された指数に特別な意味が付されていないことを除いて、バイナリ浮動小数点フォーマットの特性に似ている。
【0146】
仮数:NNPデータ型1数値のバイナリ点は、左端の分数ビットの左側にあるとみなされる。バイナリ点の左側には暗黙の単位ビットがあり、これは正規数では1、ゼロでは0とみなされる。左側の暗黙の単位ビットが付加された分数は、数値の仮数となる。
【0147】
通常のNNPデータ型1の値は、仮数に基数2を掛けたものにバイアス化されていない指数の累乗を掛けたものである。
【0148】
ゼロでない数の値:非ゼロ数の値を以下に示す。
【0149】
番号クラス 値
【0150】
正規数 ±2e-31x(1.f)
ここで、eは10進数で示されるバイアス化された指数、fは2進数で示される分数である。
【0151】
一実施形態では、NNPデータ型1データには、数値および関連する非数値エンティティを含む3つのクラスがある。各データ項目は、符号、指数、および仮数を含む。指数は、すべてのバイアス化された指数が負でない符号なし数であり、最小のバイアス化された指数がゼロであるように偏る。仮数は、明示的な分数と2進数の左側の暗黙的な単位ビットを含む。符号ビットはプラスは0、マイナスは1である。
【0152】
許可されるすべての非ゼロ有限数は一意なNNPデータ型1表現を持つ。サブノーマル数は存在せず、同じ値に対して複数の表現が可能であり、サブノーマルな算術演算は存在しない。この3つのクラスには例えば以下が挙げられる。
【0153】
データクラス 符号 バイアス指数 単位ビット* 分数
【0154】
ゼロ ± 0 0 0
【0155】
正規数 ± 0 1 0ではない
【0156】
正規数 ± 0ではない、すべてが1ではない 1 いずれか
【0157】
正規数 ± すべて1 - すべてが1ではない
【0158】
NINF ± すべて1 - すべて1
ここで-は適用されないことを示し、*は単位ビットが示され、NINFは数値でも無限大でもないことを示す。
【0159】
各クラスの詳細については後述する。
【0160】
ゼロ:ゼロには、バイアス化されたゼロの指数とゼロの分数がある。暗黙の単位ビットはゼロである。
【0161】
正規数:正規数は任意の値のバイアス化された指数を持つことができる。バイアス化された指数が0の場合、分数は0でない。バイアス化された指数がすべて1の場合、分数はすべてが1であってはならない。その他のバイアス化された指数値は、どのような分数値でもよい。暗黙の単位ビットは、すべての正規数に対して1である。
【0162】
NINF:NINFは、すべての1とすべての1の分数のバイアス化された指数で表される。NINFは、NNPデータ型1(すなわち、6つの指数ビットと9つの分数ビットを持つ深層学習のために設計された16ビット浮動小数点)で表現可能な値の範囲にない値を表す。通常、NINFは計算中に伝搬されるだけで、最後には表示されたままになる。
【0163】
一例ではNNPデータ型1データ型がサポートされているが、他のモデル依存の、特殊な、または非標準のデータ型(IEEE754短精度、バイナリ浮動小数点16ビット、IEEE半精度浮動小数点、8ビット浮動小数点、4ビット整数フォーマットもしくは8ビット整数フォーマット、またはその組み合わせなどを含むが、これらに限定されない)も、1または複数の標準データ型と同様にサポートされてもよい。これらのデータフォーマットは、ニューラルネットワークの処理に適した性質が異なる。一例として、より小さいデータ型(例えば、より少ないビット)は、より高速に処理され、より少ないキャッシュ/メモリを使用することができ、より大きいデータ型は、ニューラルネットワークにおいてより高い結果精度を提供する。サポートされるデータ型は、クエリパラメータブロックにおいて(例えば、パラメータブロック330のインストールされたデータ型フィールド336において)1または複数の割り当てられたビットを有することができる。例えば、特定のプロセッサによってサポートされる特殊なデータ型または非標準的なデータ型は、インストールされたデータ型フィールドに示されるが、標準的なデータ型は示されない。他の実施形態では、1または複数の標準データ型も示される。他の変形も可能である。
【0164】
ある特定の例では、インストールされたデータ型フィールド336のビット0は、NNPデータ型1データ型のために予約されており、それが例えば1に設定されると、プロセッサがNNPデータ型1をサポートすることを示す。一例として、インストールされたデータ型のビットベクトルは、最大16のデータ型を表すように構成され、各データ型にビットが割り当てられている。しかし、他の実施形態におけるビットベクトルは、より多いまたはより少ないデータ型をサポートしてもよい。さらに、ベクトルは、1または複数のビットがデータ型に割り当てられるように構成されてもよい。多くの例が可能であり、もしくは追加のデータ型、より少ないデータ型、もしくは他のデータ型、またはその組み合わせが、ベクトルにおいてサポートされてよく、もしくは示されてよく、またはその両方であってよい、またはその両方である。
【0165】
一例では、クエリ関数は、モデル依存プロセッサにインストールされているデータ型の指示を取得し、例えば、パラメータブロック330のインストールされたデータ型フィールド336に1または複数のビットを設定することによって、その指示をパラメータブロックに配置する。さらに、一例では、クエリ関数は、インストールされたデータレイアウトフォーマット(別のデータ属性)の指示を取得し、例えば、インストールされたデータレイアウトフォーマットフィールド338に1または複数のビットを設定することによって、その情報をパラメータブロックに配置する。データレイアウトフォーマットの例には、例えば、4D特徴テンソルレイアウトと4Dカーネルテンソルレイアウトが含まれる。4D特徴テンソルレイアウトは、一例では、本明細書に示される関数によって使用され、一例では、畳み込み関数は4Dカーネルテンソルレイアウトを使用する。これらのデータレイアウトフォーマットは、ニューラルネットワーク処理支援命令の関数を実行する際の処理効率を向上させる方法で、テンソルのストレージにデータを配置する。例えば、ニューラルネットワーク処理支援命令は、効率的に動作するために、特定のデータレイアウトフォーマットで提供される入力テンソルを使用する。例示的なレイアウトが提供されているが、本明細書で説明される関数もしくは他の関数またはその両方に対して、追加のレイアウト、より少ないレイアウト、もしくは他のレイアウト、またはその組み合わせが提供されてもよい。
【0166】
特定のプロセッサモデルに対するレイアウトの使用または利用可能性は、インストールされたデータレイアウトフォーマットのベクトル(例えば、パラメータブロック330のフィールド338)によって提供される。このベクトルは、例えば、インストールされたデータレイアウトフォーマットのビットベクトルであり、CPUが、どのレイアウトがサポートされているかをアプリケーションに伝えることを可能にする。例えば、ビット0は4D特徴テンソルレイアウトのために予約され、それが例えば1に設定されると、プロセッサが4D特徴テンソルレイアウトをサポートすることを示し、ビット1は4Dカーネルテンソルレイアウトのために予約され、それが例えば1に設定されると、プロセッサが4Dカーネルテンソルレイアウトをサポートすることを示す。一例では、インストールされたデータレイアウトフォーマットのビットベクトルは、各データレイアウトにビットが割り当てられる最大16個のデータレイアウトを表すように構成される。しかしながら、他の実施形態におけるビットベクトルは、より多くのまたはより少ないデータレイアウトをサポートしてもよい。さらに、1または複数のビットがデータレイアウトに割り当てられるベクトルが構成されてもよい。多くの例が可能である。4D特徴テンソルレイアウトと4Dカーネルテンソルレイアウトの詳細は後述する。繰り返しになるが、性能を最適化するために、現在または将来、他のレイアウトを使用してもよい。
【0167】
一例として、ニューラルネットワーク処理支援命令は、4Dテンソル、すなわち4次元のテンソルで動作する。これらの4Dテンソルは、本明細書で説明される一般的な入力テンソルから、例えば、行優先で得られる。すなわち、テンソル要素をメモリアドレスの増加順に列挙する場合、E2次元のインデックスが増加し、E1次元のインデックスが繰り返される前に、E1と呼ばれる内側の次元が、0から始まるE1インデックスサイズの値を通して、E1インデックスサイズ1で最初にステップアップされる。E4次元と呼ばれる外側の次元のインデックスが最後に増加する。
【0168】
より低い次元数を持つテンソル(例えば、3Dテンソルや1Dテンソル)は、4Dテンソルとして表現され、4Dテンソルの1または複数の次元が、元のテンソルの次元を越えて1に設定される。
【0169】
次元E4、E3、E2、E1を持つ行優先汎用4Dテンソルの4D特徴テンソルレイアウト(本明細書では、NNPAデータレイアウトフォーマット0 4D特徴テンソルとも呼ぶ)への変換について説明する。
【0170】
結果として得られるテンソルは、例えば64要素のベクトルの4Dテンソルや、次元の5Dテンソルとして表すことができる。
【0171】
【0172】
一般的なテンソルの要素[e4][e3][e2][e1]は、結果として得られる5Dテンソルの以下の要素にマッピングすることができる。
【0173】
【0174】
結果として得られるテンソルは一般的なテンソルより大きくなることがある。結果として得られるテンソルの要素で、一般的なテンソルに対応する要素がないものはPAD要素と呼ばれる。
【0175】
NNPAデータレイアウトフォーマット0の64要素ベクトルの4D特徴テンソルまたは要素の5Dテンソルとして等価な表現の要素[fe4][fe1][fe3][fe2][fe0]を考える。この要素は、PAD要素であるか、次元E4、E3、E2、E1を持つ一般的な4Dテンソルの対応する要素であるかは、以下の式で求めることができる。
【0176】
・fe2≧E2ならば、これはE2(またはページ)PAD要素である。
【0177】
・fe1*64+fe0≧E1なら、これはE1(または行)PAD要素である。
【0178】
・それ以外の4Dテンソルに対応する要素は次のとおりである。
【0179】
[fe4][fe3][fe2][fe1*64+fe0]
【0180】
畳み込みニューラルネットワークベースの人工知能モデルの場合、特徴テンソルの4次元の意味は一般的に次のようにマッピングできる。
【0181】
・E4:N-ミニバッチのサイズ
【0182】
・E3:H-3Dテンソル/画像の高さ
【0183】
・E2:W-3Dテンソル/画像の幅
【0184】
・E1:C-3Dテンソルのチャネルまたはクラス
【0185】
機械学習や再帰型ニューラルネットワークベースの人工知能モデルの場合、4D特徴テンソルの4次元の意味は一般的に次のようにマッピングされる。
【0186】
・E4:T-時間ステップまたはモデルの数
【0187】
・E3:予約済み、通常1に設定
【0188】
・E2:Nmb-ミニバッチサイズ
【0189】
・E1:L-特徴
【0190】
NNPAデータレイアウトフォーマット0は、生成されたテンソルの外側の次元に対して4kバイトのブロックデータ(ページ)と4kバイトのブロックデータアライメントによる2次元データローカリティを提供する。
【0191】
PAD要素バイトは入力テンソルでは無視され、出力テンソルでは予測できない。PADバイトに対するPERのストレージ変更は予測できない。
【0192】
次元E1、E2、E3、E4を有する4D特徴テンソルレイアウトの入力データレイアウトの一例が図5(A)~(C)に示され、4D特徴テンソルレイアウトの出力例が図6(A)~(C)に描かれている。図5(A)を参照すると、次元E1、E2、E3を有する3Dテンソル500が示されている。一例では、各3Dテンソルは複数の2Dテンソル502を含む。各2Dテンソル502の数字は、その各要素がメモリ内のどこにあるかのメモリオフセットを表す。入力は、図5(A)~(C)に対応する図6(A)~(C)に示されるように、メモリ内の元のテンソル(例えば、図5(A)~(C)の元の4Dテンソル)のデータをレイアウトするために使用される。
【0193】
図6(A)では、一例として、メモリの単位600(例えば、メモリページ)は、予め選択された数(例えば、32)の行602を含み、各行は、例えば、e2_page_idxによって識別され、各行は、予め選択された数(例えば、64)の要素604を有し、各要素は、例えば、e1_page_idxによって識別される。行が事前に選択された数の要素を含まない場合、行またはE1パディングと呼ばれるパディング606が行われ、メモリユニットが事前に選択された数の行を持たない場合、ページまたはE2パディングと呼ばれるパディング608が行われる。例として、行パディングは、例えば、ゼロまたは他の値であり、ページパディングは、例えば、既存の値、ゼロ、または他の値である。
【0194】
一例では、行の出力要素は、対応する入力のE1方向の要素位置に基づいて、メモリ内(例えば、ページ内)に提供される。例えば、図5(A)を参照すると、示されている3つの行列の要素位置0、1、2(例えば、各行列の同じ位置の要素位置)は、図6(A)のページ0の行0などに示されている。この例では、4Dテンソルは小さく、4Dテンソルを表す各2Dテンソルの要素のすべてが1ページに収まる。しかし、これは一例に過ぎない。2Dテンソルには、1または複数のページが含まれることがある。2Dテンソルが4Dテンソルの再フォーマットに基づいて作成される場合、2Dテンソルのページ数は4Dテンソルのサイズに基づく。1つの例では、1または複数のceil関数を使用して、2Dテンソルの行数と各行の要素数を決定し、それは、使用されるページ数を表す。他の変更も可能である。
【0195】
4D特徴テンソルレイアウトに加えて、一例では、ニューラルネットワークプロセッサは、畳み込みなどの特定の人工知能(例えば、ニューラルネットワーク処理支援)演算を実行するときに、メモリアクセスおよびデータ収集ステップの数を減らすために4Dテンソルの要素を再配置する4Dカーネルテンソルをサポートすることができる。一例として、次元E4、E3、E2、E1を持つ行優先汎用4Dテンソルは、本明細書で説明するように、NNPAデータレイアウトフォーマット1 4Dカーネルテンソル(4D-kernel tensor)に変換される。
【0196】
結果として得られるテンソルは、例えば64要素のベクトルの4Dテンソル、または次元を持つ5Dテンソルとして表すことができる。
【0197】
【0198】
一般的なテンソルの要素[e4][e3][e2][e1]は、結果として得られる5Dテンソルの以下の要素にマッピングすることができる。
【0199】
【0200】
結果として得られるテンソルは一般的なテンソルより大きくなることがある。結果として得られるテンソルの要素で、一般的なテンソルに対応する要素がないものはPAD要素と呼ばれる。
【0201】
64要素ベクトルのNNPAデータレイアウトフォーマット1の4D特徴テンソル、または要素の5Dテンソルとして等価な表現の要素[fe1][fe4][fe3][fe2][fe0]を考える。この要素は、PAD要素であるか、次元E4,E3,E2,E1を持つ一般的な4Dテンソルの対応する要素であるかは、以下の式で求めることができる。
【0202】
・fe2≧E2ならば、これはE2(またはページ)PAD要素である。
【0203】
・fe1*64+fe0≧E1なら、これはE1(または行)PAD要素である。
【0204】
・それ以外の一般的な4Dテンソルの対応する要素は次のとおりである。
【0205】
[fe4][fe3][fe2][fe1*64+fe0]
【0206】
畳み込みニューラルネットワークベースの人工知能モデルの場合、カーネルテンソルの4次元の意味は一般的に次のようにマッピングできる。
【0207】
・E4:H-3Dテンソル/画像の高さ
【0208】
・E3:W-3Dテンソル/画像の幅
【0209】
・E2:C-3Dテンソルのチャネル数
【0210】
・E1:K-カーネルの数
【0211】
NNPAデータレイアウトフォーマット1は、例えば、4kバイトのデータブロック(ページ)内の2次元カーネル並列性と、効率的な処理のために生成テンソルの外側の次元のための4kバイトブロックデータアライメントを提供する。
【0212】
PADバイトは入力テンソルでは無視される。PADバイトに対するPERのストレージ変更は予測できない。
【0213】
ここでも、例示的なデータレイアウトフォーマットは、4D特徴テンソルレイアウトおよび4Dカーネルテンソルレイアウトを含むが、他のデータレイアウトフォーマットがプロセッサ(例えば、ニューラルネットワークプロセッサ105)によってサポートされてもよい。サポートされるデータレイアウトの指示は、例えば、フィールド338に1または複数のビットを設定することによって取得され、クエリパラメータブロックに配置される。
【0214】
クエリパラメータブロックはまた、本発明の1または複数の態様に従って、他のデータ属性情報を含み、これは例えば、データのサポートされるサイズ情報を含む。ニューラルネットワークプロセッサのようなプロセッサは、典型的には、テンソル次元の最大サイズ、もしくはテンソルの全体サイズ、またはその両方を制限することができる内部バッファサイズ、処理ユニット、データバス構造、ファームウェアの制限などに基づく制限を有する。そのため、クエリ関数はこれらの制限をアプリケーションに伝えるためのフィールドを提供する。例えば、プロセッサは、クエリ関数の実行に基づいて、最大次元インデックスサイズ(例えば、65,536要素)および最大テンソルサイズ(例えば、8GB)のような様々なデータサイズを取得し、この情報をパラメータブロック(例えば、パラメータブロック330)のフィールド340および342にそれぞれ含める。追加のサイズ情報、より少ないサイズ情報、もしくは他のサイズ情報、またはその組み合わせもまた、プロセッサ(例えば、ニューラルネットワークプロセッサ105)によってサポートされることがあり、したがって、取得され、パラメータブロック、例えば、フィールド340、342もしくは他のフィールドまたはその組み合わせに配置される。他の実施形態では、制限は、より小さくても大きくてもよく、もしくはサイズは、要素の代わりにバイト、バイトの代わりに要素など、他の単位であってもよく、またはその両方であってよい。さらに、他の実施形態では、すべての次元について同じ最大サイズではなく、各次元の異なる最大サイズを許容する。多くの変更が可能である。
【0215】
本発明の1または複数の態様に従って、選択されたプロセッサ(例えば、ニューラルネットワークプロセッサ105)の特定のモデルに関連する詳細情報を伝達するクエリ関数が提供される。詳細情報には、例えば、特定のプロセッサに関連するモデル依存情報が含まれる。(プロセッサはまた、標準データ型、標準データレイアウトなどの標準データ属性をサポートしてもよく、これらは、クエリ関数によって暗示され、必ずしも提示されないが、他の実施形態では、クエリ関数は、データ属性のすべてまたは様々な選択されたサブセットなどを示してもよい。)例示的な情報が提供されるが、他の実施形態では、他の情報が提供されてもよい。プロセッサもしくは異なるプロセッサまたはその両方の異なるモデルで異なってもよい得られた情報は、人工知能もしくは他の処理またはその両方を実行するために使用される。人工知能もしくは他の処理またはその両方は、例えば、ニューラルネットワーク処理支援命令の1または複数の非クエリ関数を採用してもよい。処理に採用される特定の非クエリ関数は、ニューラルネットワーク処理支援命令を1または複数回実行し、非クエリ特定関数を指定することによって実行される。
【0216】
ニューラルネットワーク処理支援命令によってサポートされる例示的な非クエリ関数のさらなる詳細を以下に説明する(他の実施形態では、追加の関数、より少ない関数、もしくは他の関数、またはその組み合わせがサポートされる可能性がある)。
【0217】
ファンクションコード16:NNPA-ADD(Addition)
【0218】
NNPA-ADD関数が指定された場合、テンソル記述子1で記述された入力テンソル1の各要素は、テンソル記述子2で記述された入力テンソル2の対応する要素に加算され、その結果得られる和は、出力テンソル記述子で記述された出力テンソルの対応する要素に配置される。
【0219】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のいずれかに指定されたデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0220】
入力テンソル1、入力テンソル2、出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0221】
一例では、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0222】
ファンクションコード17:NNPA-SUB(Subtraction)
【0223】
NNPA-SUB関数が指定された場合、テンソル記述子2が記述する入力テンソル2の各要素は、テンソル記述子1が記述する入力テンソル1の対応する要素から減算され、その結果得られる差分が出力テンソルの対応する要素に配置される。
【0224】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかに指定されたデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、汎用レジスタ0に応答コード、例えばそれぞれ16進数で0010または0011が設定され、命令は条件コード、例えば1で完了する。
【0225】
入力テンソル1、入力テンソル2、出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0226】
一例では、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0227】
ファンクションコード18:NNPA-MUL(Multiplication)
【0228】
NNPA-MUL関数が指定されると、テンソル記述子1で記述された入力テンソル1の各要素(乗算子)と、テンソル記述子2で記述された入力テンソル2の対応する要素(乗算子)との積が、出力テンソルの対応する要素に配置される。
【0229】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかに指定されたデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、汎用レジスタ0に応答コード、例えばそれぞれ16進数で0010または0011が設定され、命令は条件コード、例えば1で完了する。
【0230】
入力テンソル1、入力テンソル2、出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0231】
一例では、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0232】
ファンクションコード19:NNPA-DIV(Division)
【0233】
NNPA-DIV関数が指定されると、テンソル記述子1で記述された入力テンソル1の各要素(被除数)は、テンソル記述子2で記述された入力テンソル2の対応する要素(除数)で除算され、その商が出力テンソルの対応する要素に配置される。
【0234】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかに指定されたデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、汎用レジスタ0に応答コード、例えばそれぞれ16進数で0010または0011が設定され、命令は条件コード、例えば1で完了する。
【0235】
入力テンソル1、入力テンソル2、出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0236】
一例では、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0237】
ファンクションコード20:NNPA-MIN(Minimum)
【0238】
NNPA-MIN関数が指定されると、テンソル記述子1で記述された入力テンソル1の各要素は、テンソル記述子2で記述された入力テンソル2の対応する要素と比較される。2つの値のうち小さい方が、出力テンソル記述子の対応する要素に配置される。両方の値が等しい場合、その値は出力テンソルの対応する要素に配置される。
【0239】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかに指定されたデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0240】
入力テンソル1、入力テンソル2、出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0241】
一例では、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0242】
ファンクションコード21:NNPA-MAX(Maximum)
【0243】
NNPA-MAX関数が指定されると、テンソル記述子1で記述された入力テンソル1の各要素は、テンソル記述子2で記述された入力テンソル2の対応する要素と比較される。2つの値のうち大きい方が、出力テンソル記述子の対応する要素に配置される。両方の値が同じである場合は、その値は出力テンソルの対応する要素に配置される。
【0244】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかに指定されたデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0245】
入力テンソル1、入力テンソル2、出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0246】
一例では、出力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0247】
ファンクションコード32:NNPA-LOG(Natural Logarithm)
【0248】
NNPA-LOG関数が指定されると、テンソル記述子1で記述された入力テンソルの各要素について、その要素が0より大きい場合、出力テンソル記述子で記述された出力テンソルの対応する要素は、その要素の自然対数となる。そうでない場合、出力テンソルの対応する要素は数値表現できず、ターゲットデータ型の負の無限大に関連する値が記憶される。
【0249】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかに指定されたデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば1で完了する。
【0250】
入力テンソル1と出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0251】
一例では、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0252】
ファンクションコード33:NNPA-EXP(Exponential)
【0253】
NNPA-EXP関数が指定された場合、テンソル記述子1で記述された入力テンソルの各要素に対して、出力テンソル記述子で記述された出力テンソルの対応する要素は、その要素の指数となる。
【0254】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0255】
入力テンソル1と出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0256】
一例では、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0257】
ファンクションコード49:NNPA-RELU(Rectified Linear Unit)
【0258】
NNPA-RELU関数が指定された場合、テンソル記述子1で記述された入力テンソルの各要素について、その要素が0以下の場合、出力テンソル記述子で記述された出力テンソルの対応する要素は0である。そうでない場合、出力テンソルの対応する要素は、入力テンソルの要素と関数固有パラメータ1で指定されたクリッピング値の最小値となる。
【0259】
一例として、関数固有パラメータ1はRELU演算のクリッピング値を定義する。例えば、クリッピング値は関数固有パラメータ1のビット16~31である。クリッピング値は、例えば、NNPAデータ型1フォーマットで指定される。ゼロのクリッピング値は、正の最大値を使用することを示し、言い換えると、クリッピングは実行されない。負の値が指定された場合、汎用オペランドデータの例外が認識される。
【0260】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のいずれかに指定されたデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0261】
入力テンソル1と出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0262】
一例では、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、および関数固有保存領域アドレスフィールドは無視される。一例では、関数固有パラメータ2~5はゼロを含む。
【0263】
ファンクションコード50:NNPA-TANH
【0264】
NNPA-TANH関数が指定されると、テンソル記述子1で記述された入力テンソルの各要素に対して、出力テンソル記述子で記述された出力テンソルの対応する要素の値は、その要素の双曲線正接となる。
【0265】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0266】
入力テンソル1と出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0267】
一例では、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0268】
ファンクションコード51:NNPA-SIGMOID
【0269】
NNPA-SIGMOID関数が指定されると、テンソル記述子1で記述される入力テンソルの各要素に対して、出力テンソル記述子で記述される出力テンソルの対応する要素は、その要素のシグモイドとなる。
【0270】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、汎用レジスタ0に応答コード、例えばそれぞれ16進数で0010または0011が設定され、命令は条件コード、例えば1で完了する。
【0271】
入力テンソル1と出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0272】
一例では、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3、関数固有パラメータ1~5、関数固有保存領域アドレスフィールドは無視される。
【0273】
ファンクションコード52:NNPA-SOFTMAX
【0274】
NNPA?SOFTMAX関数が指定されると、入力テンソル1の次元1のベクトルごとに、以下で説明するように、出力テンソルの対応するベクトルが計算される。
【0275】
*ベクトルの最大値が計算される。
【0276】
*ベクトルの次元1の各要素と上記で計算された最大値との差の指数関数の合計が計算される。入力ベクトルの次元1の要素と上記で計算された最大値の両方が数値であり、その差が数値以外の場合、その要素の指数の結果は強制的にゼロになる。
【0277】
*ベクトル内の各要素について、その要素と上記で計算された最大値との差の指数を、上記で計算された和で割った中間商が形成される。オプションの活性化関数は、出力ベクトルの対応する要素を形成するために、この中間商に適用される。
【0278】
このプロセスは、例えば、次元1における次元4インデックスサイズ×次元3インデックスサイズ×次元2インデックスサイズのすべてのベクトルに対して繰り返される。
【0279】
一例として、NNPA-SOFTMAXの関数固有パラメータ1が活性化関数を制御する。一例として、関数固有パラメータ1のACTフィールド(例えば、ビット28~31)は活性化関数を指定する。活性化関数の例には以下が含まれる。
【0280】
ACT 活性化関数
【0281】
0 活性化関数を実行しない
【0282】
1 LOG
【0283】
2~15 予約済み
【0284】
ACTフィールドに予約値が指定された場合、例えば16進数でF001の応答コードが報告され、例えば1の条件コードで演算が完了する。
【0285】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0286】
一例では、入力テンソルの次元3インデックスサイズが1に等しくない場合、例えば16進数でF000の応答コードが記憶され、命令は例えば1の条件コードで完了する。
【0287】
入力テンソル1と出力テンソルの形状、データレイアウト、データ型は、一例では同じであるが、汎用オペランドデータの例外が認識される。
【0288】
一例では、出力テンソル記述子2、入力テンソル記述子2、入力テンソル記述子3は無視される。一例では、関数固有パラメータ2~5はゼロを含む。
【0289】
この関数では、8Kバイトの関数固有保存領域を使用することができる。
【0290】
一実施形態では、次元1のベクトルを得るとき、指定されたデータレイアウトフォーマットによっては、メモリ上で要素が連続しないことがある。入力テンソル1の次元1ベクトルのすべての要素が、指定されたデータ型で表現可能な最大の負の数を含む場合、結果の精度が低下する可能性がある。
【0291】
ファンクションコード64:NNPA-BATCHNORM(Batch Normalization)
【0292】
NNPA-BATCHNORM関数が指定されると、入力1テンソルの次元1の各ベクトルに対して、出力テンソルの次元1の対応するベクトルが、そのベクトルの各要素に入力2テンソルを構成する次元1のベクトルの対応する要素を乗算することによって計算される。そして、全精度積は入力3テンソルを構成する次元1ベクトルの対応する要素に加えられ、出力テンソルの指定されたデータ型の精度に丸められる。この処理は、例えば、次元1のすべての次元4インデックスサイズx次元3インデックスサイズx次元2インデックスサイズのベクトルに対して繰り返される。
【0293】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または、指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0294】
ある例では、以下の条件が真でなければならず、そうでなければ汎用オペランドデータの例外が認識される。
【0295】
*入力テンソル1と出力テンソルの形状、データレイアウトは同一とする。
【0296】
*入力テンソルと出力テンソルのデータ型は同じでなければならない。
【0297】
*入力テンソル1、2、3と出力テンソルの次元1インデックスサイズは同じでなければならない。
【0298】
*入力テンソル2と3の次元2、3、4のインデックスサイズは1である。
【0299】
一例では、出力テンソル記述子2と関数固有保存領域アドレスフィールドは無視される。一例では、関数固有パラメータ2~5には0が含まれる。
【0300】
ファンクションコード80:NNPA-MAXPOOL2D
ファンクションコード81:NNPA-AVGPOOL2D
【0301】
NNPA-MAXPOOL2DまたはNNPA-AVGPOOL2D関数のいずれかが指定されると、入力テンソル1記述子によって記述された入力テンソル1が、指定された演算によって縮小され、入力のウィンドウが要約される。入力のウィンドウは、次元インデックス2および3上で2Dスライディングウィンドウを移動することによって選択される。ウィンドウの要約は出力テンソルの要素である。スライディングウィンドウの次元は、例えば関数固有パラメータ4と関数固有パラメータ5によって記述される。隣接する出力テンソル要素を計算する際に、入力1テンソル上をスライディングウィンドウが移動する量をストライドと呼ぶ。スライディングウィンドウのストライドは、関数固有パラメータ2や関数固有パラメータ3などによって指定される。NNPA-MAXPOOL2D演算が指定された場合、以下に定義するMax演算がウィンドウに対して実行される。NNPA-AVGPOOL2D演算が指定された場合、以下に定義されるAVG演算がウィンドウに対して実行される。指定されたパディングタイプが有効な場合、ウィンドウ内のすべての要素が、結果として得られる出力要素を計算するために使用されるコレクションに追加される。指定されたパディングタイプが同じである場合、ウィンドウの位置によって、ウィンドウからの要素のサブセットだけが、結果として得られる出力要素を計算するために使用されるコレクションに追加されてよい。
【0302】
一例では、CollectElements演算は要素のコレクションに要素を追加し、コレクション内の要素数をインクリメントする。ウィンドウの開始位置が移動するたびに、コレクションは空になる。演算の実行に必要でない要素がアクセスされるかどうかは予測できない。
【0303】
Max演算:一例では、ウィンドウ内の要素のコレクションの最大値は、コレクション内のすべての要素を互いに比較し、最大の値を返すことによって計算される。
【0304】
AVG(Average)演算:一例では、ウィンドウ内の要素のコレクションの平均値は、コレクション内のすべての要素の合計をコレクション内の要素の数で割ったものとして計算される。
【0305】
一例では、フィールドは以下のように割り当てられる。
【0306】
*プーリング関数固有パラメータ1は、パディングタイプを制御する。例えば、関数固有パラメータ1のビット29~31は、パディングタイプを指定するPADフィールドを含む。タイプの例としては、例えば以下のようなものがある。
【0307】
PAD パディングタイプ
【0308】
0 有効
【0309】
1 同じ
【0310】
2~7 予約済み
【0311】
PADフィールドに予約された値が指定された場合、例えば16進数でF000の応答コードが報告され、条件コード、例えば1で演算は完了する。
【0312】
一例では、関数固有パラメータ1のビット位置0~28は予約済みであり、ゼロを含むことになっている。
【0313】
*関数固有パラメータ2には、例えば32ビットの符号なしバイナリ整数が含まれ、次元2におけるスライディングウィンドウの移動要素数を指定する次元2ストライド(D2S)を指定する。
【0314】
*関数固有パラメータ3は、例えば、次元3ストライド(D3S)を指定する32ビットの符号なしバイナリ整数を含み、これはスライディングウィンドウが次元3で移動する要素数を指定する。
【0315】
*関数固有パラメータ4は、例えば、スライディングウィンドウが含む次元2の要素数を指定する次元2ウィンドウサイズ(D2WS)を指定する32ビットの符号なしバイナリ整数を含む。
【0316】
*関数固有パラメータ5は、例えば、スライディングウィンドウが含む次元3の要素数を指定する次元3ウィンドウサイズ(D3WS)を指定する32ビットの符号なしバイナリ整数を含む。
【0317】
一例では、関数固有パラメータ2~5の指定値は最大次元インデックスサイズ以下であり、関数固有パラメータ4~5の指定値はゼロより大きい。そうでない場合は、応答コード例えば、16進数で0012が報告され、演算は条件コード例えば1で完了する。
【0318】
次元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ストライドの両方が例えばゼロより大きく、入力テンソルの次元2インデックスサイズまたは入力テンソルの次元3インデックスサイズのいずれかが例えば1024より大きい場合、応答コード、例えば16進数でF004が記憶される。上記のすべての条件では、命令は条件コード、例えば、1で完了する。
【0319】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0320】
一例では、以下の条件が真であること、そうでなければ汎用オペランドデータの例外が認識される。
【0321】
*入力テンソルと出力テンソルの次元4インデックスサイズと次元1インデックスサイズは同じでなければならない。
【0322】
*入力テンソルと出力テンソルのデータレイアウトとデータ型は同じでなければならない。
【0323】
*次元2ストライドと次元3ストライドがともにゼロの場合、一例として以下の追加条件が成立する。
【0324】
*入力テンソルの次元2インデックスサイズは、次元2ウィンドウサイズと等しくなければならない。
【0325】
*入力テンソルの次元3インデックスサイズは、次元3ウィンドウサイズと等しくなければならない。
【0326】
*出力テンソルの次元2インデックスサイズと次元3インデックスサイズは1でなければならない。
【0327】
*指定されたパディングが有効でなければならない。
【0328】
*次元2ストライドか次元3ストライドのどちらかが0でない場合、両方のストライドが0以外になる。
【0329】
*次元2ストライドと次元3ストライドがともに0より大きい場合、一例として以下の追加条件が成立する。
【0330】
*指定されたパディングが有効である場合、次元2ウィンドウサイズは入力テンソルの次元2インデックスサイズ以下になる。
【0331】
*指定されたパディングが有効である場合、次元3ウィンドウサイズは入力テンソルの次元3インデックスサイズ以下になる。
【0332】
*指定されたパディングが同じの場合、入力テンソルと出力テンソルの次元2インデックスサイズと次元3インデックスサイズは以下の関係を満たす(同じパディングをプーリング)。
【0333】
【0334】
【0335】
ここで、
【0336】
IxDyIS テンソル記述子xで定義される入力テンソルxの次元yインデックスサイズ
【0337】
OxDyIS テンソル記述子xで定義される出力テンソルxの次元yインデックスサイズ
【0338】
D2S 次元2ストライド
【0339】
D3S 次元3ストライド
【0340】
*指定されたパディングが有効である場合、入力テンソルと出力テンソルの次元2インデックスサイズおよび次元3インデックスサイズは以下の関係を満たす(有効なパディングをプーリング)。
【0341】
【0342】
【0343】
ここで、D2WSは次元2のウィンドウサイズ、D3WSは次元3のウィンドウサイズである。
【0344】
出力テンソル記述子2、入力テンソル記述子2と3、および関数固有保存領域アドレスフィールドは無視される。
【0345】
ファンクションコード96:NNPA-LSTMACT(Long Short-Term Memory Activation)
【0346】
NNPA-LSTMACT関数が指定されると、次元4のインデックス値ごとに4つのサブテンソルに分割された入力テンソル1記述子で記述された入力テンソル1と、次元4のインデックス値ごとに4つのサブテンソルに分割された入力テンソル2記述子で記述された入力テンソル2、および入力テンソル3記述子で記述された入力テンソル3が、LSTMACT演算の入力となる。LSTMACT演算の最後には、出力テンソル1記述子によって記述された出力テンソル1と、出力テンソル2記述子によって記述された出力テンソル2に結果が書き込まれる。
【0347】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、それぞれ応答コード16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード例えば1で完了する。
【0348】
一実施形態では、以下の条件が真であることが必要であり、そうでなければ汎用オペランドデータの例外が認識される。
【0349】
*入力テンソル3、出力テンソル1、2の次元4インデックスサイズは、例えば1に等しくする。
【0350】
*入力テンソル1と入力テンソル2の次元4インデックスサイズは、例えば4に等しくする。
【0351】
*例えば、すべての入力テンソルと2つの出力テンソルの次元3インデックスサイズは、例えば1に等しくする。
【0352】
*例えば、すべての入力テンソルと2つの出力テンソルのデータレイアウトとデータ型は同じでなければならない。
【0353】
*例えば、すべての入力テンソルと2つの出力テンソルの次元1インデックスサイズは同じでなければならない。
【0354】
*例えば、すべての入力テンソルと2つの出力テンソルの次元2インデックスサイズは同じでなければならない。
【0355】
一例では、関数固有保存領域アドレスフィールドは無視される。一例では、関数固有パラメータ1~5にはゼロが含まれる。
【0356】
ファンクションコード97:NNPA-GRUACT(Gated Recurrent Unit Activation)
【0357】
NNPA-GRUACT関数が指定されると、次元4インデックス値ごとに3つのサブテンソルに分割された入力テンソル1記述子で記述された入力テンソル1と、次元4インデックス値ごとに3つのサブテンソルに分割された入力テンソル2記述子で記述された入力テンソル2、および入力テンソル3記述子で記述された入力テンソル3が、GRUACT演算の入力となる。GRUACT演算の最後に、出力テンソル記述子で記述された出力テンソルが記憶される。
【0358】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ、16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0359】
一実施形態では、以下の条件が正であることが必要であり、そうでなければ汎用オペランドデータの例外が認識される。
【0360】
*出力テンソルと入力テンソル3の次元4インデックスサイズは、例えば1に等しくする。
【0361】
*入力テンソル1と入力テンソル2の次元4インデックスサイズは、例えば3に等しくする。
【0362】
*例えば、すべての入力テンソルと出力テンソルの次元3インデックスサイズは、例えば1に等しくする。
【0363】
*例えば、すべての入力テンソルと出力テンソルの次元1インデックスサイズは同じでなければならない。
【0364】
*例えば、すべての入力テンソルと出力テンソルの次元2インデックスサイズは同じでなければならない。
【0365】
*例えば、すべての入力テンソルと出力テンソルのデータレイアウトとデータ型は同じでなければならない。
【0366】
一例では、出力テンソル記述子2と関数固有保存領域アドレスフィールドは無視される。一例では、関数固有パラメータ2~5はゼロを含む。
【0367】
ファンクションコード112:NNPA-CONVOLUTION
【0368】
NNPA-CONVOLUTION関数が指定されると、出力テンソル1記述子で記述された出力テンソルの各出力要素に対して、入力テンソル1記述子で記述された入力テンソル1から、次元インデックス3、2、1からなる3次元入力1ウィンドウが選択される。入力テンソル2記述子によって記述されたテンソル2から、次元インデックス4、3、2からなる同じサイズの3次元入力2ウィンドウが選択される。入力1ウィンドウの要素は、入力2ウィンドウの対応する要素と乗算され、すべての積が加算されて初期和が作成される。この初期和が入力テンソル3の対応する要素に加算され、中間和が計算される。出力テンソルの要素は、指定された活性化関数が中間和に適用された結果である。活性化関数が指定されていない場合、出力要素は中間和に等しい。
【0369】
指定されたパディングタイプが有効である場合、ウィンドウのすべての要素が、結果の初期和を計算するために使用される。指定されたパディングタイプが同じである場合、ウィンドウの位置によっては、結果として得られる初期和を計算する際に、入力1ウィンドウのいくつかの要素がゼロとみなされることがある。
【0370】
演算を実行するのに必要でない要素にアクセスするかどうかは予測できない。
【0371】
一例では、畳み込み関数が使用する関数固有パラメータのフィールドが、以下のように割り当てられる。
【0372】
*NNPA-CONVOLUTION関数固有パラメータ1は、パディングタイプと活性化関数を制御する。一例として、関数固有パラメータ1のビット29~31は、パディングタイプを指定するPADフィールドを含む。以下にタイプ例を示す。
【0373】
パッド パディングタイプ
【0374】
0 有効
【0375】
1 同じ
【0376】
2~7 予約済み
【0377】
PADフィールドに予約値が指定された場合、例えば16進数でF000の応答コードが報告され、条件コード例えば1で演算は完了する。
【0378】
さらに、一例では、NNPA-CONVOLUTION関数固有パラメータ1のビット24~27は、活性化関数を指定する活性化フィールドを含む。関数の例を以下に示す。
【0379】
ACT 活性化関数
【0380】
0 活性化関数を実行しない
【0381】
1 RELU
【0382】
2~15 予約済み
【0383】
RELUの活性化関数が指定された場合、結果として得られる出力要素値は以下のように決定される:中間和が0以下であれば、出力テンソルの対応する要素は0となり、そうでなければ、出力テンソルの対応する要素は、中間和と関数固有パラメータ4で指定されたクリッピング値の最小値となる。
【0384】
ACTフィールドに予約値が指定された場合、例えば16進数でF001の応答コードが報告され、例えば1の条件コードで演算が完了する。
【0385】
*関数固有パラメータ2は、例えば32ビットの符号なしバイナリ整数を含み、次元2(D2S)ストライドを指定する。次元2(D2S)ストライドは、例えば、スライディングウィンドウが次元2で移動する要素の数を指定する。
【0386】
*関数固有パラメータ3は、例えば、次元3(D3S)ストライドを指定する32ビットの符号なしバイナリ整数を含み、これはスライディングウィンドウが次元3で移動する要素数を指定する。
【0387】
関数固有パラメータ2~3で指定された値は、最大次元インデックスサイズ未満でなければならない。そうでない場合、例えば16進数で0012のような応答コードが報告され、例えば1のような条件コードで動作が完了する。
【0388】
*関数固有パラメータ4は、オプションのRELU演算のクリッピング値を定義する。一例では、クリッピング値は関数固有パラメータ4のビット16~31にある。
【0389】
一例では、ACTフィールドがゼロの場合、このフィールドは無視される。ACTフィールドがRELUを指定する場合、クリッピング値はNNPデータ型1フォーマットで指定される。ゼロのクリッピング値は、正の最大値を使用することを示し、言い換えると、クリッピングは実行されない。ゼロ以外が指定された場合、汎用オペランドデータの例外が認識される。
【0390】
一例では、入力テンソル2以外の指定されたテンソル記述子の指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えばデータレイアウト=0)、または入力テンソル2の指定されたデータレイアウトが4Dカーネルテンソルを指定しない場合(例えばデータレイアウト=1)、汎用レジスタ0に応答コード、例えば16進数で0010が設定され、命令は条件コード、例えば1で完了する。ある例では、指定されたテンソル記述子のデータ型がNNPデータ型1を指定しない場合(例えばデータ型=0)、応答コード、例えば16進数で0011が汎用レジスタ0に設定され、命令は条件コード、例えば1で完了する。
【0391】
次元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で完了する。
【0392】
一例では、以下の条件が真であること、そうでなければ汎用オペランドデータの例外が認識される。
【0393】
*入力テンソル1、入力テンソル3、出力テンソルのデータレイアウトは同一とする。
【0394】
*すべての入力テンソルと出力テンソルのデータ型は同じでなければならない。
【0395】
*入力3テンソルの次元2、次元3、次元4のインデックスサイズは1である。
【0396】
*出力テンソルの次元4インデックスサイズは、入力1テンソルの次元4インデックスサイズに等しい。
【0397】
*出力テンソルの次元1インデックスサイズは、入力2テンソルの次元1インデックスサイズと入力3テンソルの次元1インデックスサイズに等しい。
【0398】
*入力1テンソルの次元1インデックスサイズは、入力2テンソルの次元2インデックスサイズと等しくなければならない。
【0399】
*次元2ストライドと次元3ストライドがともにゼロの場合、一例として以下の追加条件が成立する。
【0400】
*入力1テンソル次元2インデックスサイズは、入力2テンソルの次元3インデックスサイズと等しくなければならない。
【0401】
*入力テンソルの入力1テンソル次元3インデックスサイズは、入力2テンソルの次元4インデックスサイズに等しい。
【0402】
*出力テンソルの次元2インデックスサイズと次元3インデックスサイズは1である。
【0403】
*指定されたパディングは有効である。
【0404】
*次元2ストライドか次元3ストライドのどちらかが0でない場合、両方のストライドは0でないものとする。
【0405】
*次元2ストライドと次元3ストライドがともに0より大きい場合、一例として以下の追加条件が成立する。
【0406】
*指定されたパディングが有効である場合、入力テンソル1の次元2インデックスサイズは、入力テンソル2の次元3インデックスサイズ以上でなければならない。
【0407】
*指定されたパディングが有効である場合、入力1テンソルの次元3インデックスサイズは、入力2テンソルの次元4インデックスサイズ以上でなければならない。
【0408】
*指定されたパディングが同じである場合、入力1テンソルと出力テンソルの次元2インデックスサイズおよび次元3インデックスサイズは、一例として以下の関係を満たす(同じパディングの畳み込み)。
【0409】
【0410】
【0411】
ここで、
【0412】
O1D2IS 出力テンソルの次元2インデックスサイズ
【0413】
O1D3IS 出力テンソルの次元3インデックスサイズ
【0414】
I1D2IS 入力1テンソルの次元2インデックスサイズ
【0415】
I1D3IS 入力1テンソルの次元3インデックスサイズ
【0416】
D2S 次元2ストライド
【0417】
D3S 次元3ストライド
【0418】
*指定されたパディングが有効である場合、入力1テンソルの次元2インデックスサイズおよび次元3インデックスサイズ、入力2テンソルの次元3インデックスサイズおよび次元4インデックスサイズ、および出力テンソルの関係は、一例として以下のようになる(有効なパディングの畳み込み)。
【0419】
【0420】
【0421】
ここで、
【0422】
O1D2IS 出力テンソルの次元2インデックスサイズ
【0423】
O1D3IS 出力テンソルの次元3インデックスサイズ
【0424】
I1D2IS 入力1テンソルの次元2インデックスサイズ
【0425】
I1D3IS 入力1テンソルの次元3インデックスサイズ
【0426】
I2D3IS 入力2テンソルの次元3インデックスサイズ
【0427】
I2D4IS 入力2テンソルの次元4インデックスサイズ
【0428】
D2S 次元2ストライド
【0429】
D3S 次元3ストライド
【0430】
一例では、出力テンソル記述子2、関数固有保存領域とアドレス領域は無視される。一例では、関数固有パラメータ5はゼロを含む。
【0431】
ファンクションコード 113:NNPA-MATMUL-OP(Matrix Multiplication)
【0432】
NNPA-MATMUL-OP関数が指定されると、出力テンソル記述子によって記述された出力テンソルの各要素は、一例として以下のように計算される。
【0433】
*入力テンソル1記述子で記述された入力テンソル1から、後述するget-dimension-1-vector演算を用いて次元1ベクトルが選択される。
【0434】
*入力テンソル2記述子によって記述された入力テンソル2から、後述するget-dimension-2-vector演算を用いて次元2ベクトルが選択される。
【0435】
*次元1ベクトルと次元2ベクトルの中間のドット積は、後述するドット積演算を用いて計算される。
【0436】
*演算は、出力テンソル要素と同じ次元インデックス4および次元インデックス1の値を用いて、中間のドット積と、入力テンソル3記述子によって記述される入力テンソル3の要素に対して実行される。結果として得られる要素は出力テンソルに格納される。融合演算は関数固有パラメータ1によって決定され、以下に説明される。
【0437】
Get-dimension-1-vector演算:指定された出力要素に対して、入力次元4インデックスが出力次元4インデックス、入力次元3インデックスが出力次元3インデックス、入力次元2インデックスが出力次元2インデックスである入力1テンソルから次元1ベクトルが選択される。
【0438】
Get-dimension-2-vector演算:指定された出力要素に対して、入力次元4インデックスが出力次元4インデックス、入力次元3インデックスが出力次元3インデックス、入力次元1インデックスが出力次元1インデックスである入力2テンソルから次元2ベクトルが選択される。
【0439】
ドット積演算:同じサイズとデータ型の2つのベクトルの中間のドット積は、入力ベクトル1の各要素と入力ベクトル2の対応する要素の積の和として計算される。
【0440】
融合演算:関数固有パラメータ1は、中間のドット積と入力テンソル3からの対応する要素に対して実行される演算を制御する。一例では、NNPA-MATMUL-OPの関数固有パラメータ1は、例えばビット24~31に演算フィールドを含む。演算フィールドは、実行される演算を指定する。以下に演算例を示す。
【0441】
演算 演算タイプ
【0442】
0 追加
【0443】
1 ドット積が高い場合に比較する
【0444】
2 ドット積が低くない場合に比較する
【0445】
3 ドット積と要素が等しければ比較する
【0446】
4 ドット積と要素が等しくない場合に比較する
【0447】
5 ドット積が高くない場合に比較する
【0448】
6 ドット積が低い場合に比較する
【0449】
一例では、加算の演算タイプでは、入力テンソル3要素が中間のドット積に加算される。比較の演算タイプでは、入力テンソル3要素と中間のドット積が比較され、比較が真であれば、結果は例えば+1の値に設定され、そうでなければ、出力テンソルに指定されたデータ型で、例えば+0の値に設定される。
【0450】
一例では、OPERATIONフィールドの他の値はすべて予約済みである。OPERATIONフィールドに予約値が指定された場合、例えば16進数でF000の応答コードが報告され、演算は例えば1の条件コードで完了する。
【0451】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のいずれかのデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えば、それぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば、1で完了する。
【0452】
一実施形態では、以下の条件が真であることが必要であり、そうでなければ汎用オペランドデータの例外が認識される。
【0453】
*すべての入力テンソルと出力テンソルの次元4インデックスサイズは同じでなければならない。
【0454】
*すべての入力テンソルと出力テンソルの次元3インデックスサイズは1に等しい。
【0455】
*入力テンソル3の次元2インデックスサイズは1に等しい。
【0456】
*入力テンソル1と出力テンソルの次元2インデックスサイズは同じでなければならない。
【0457】
*入力テンソル1の次元1インデックスサイズと入力テンソル2の次元2インデックスサイズは同じでなければならない。
【0458】
*入力テンソル2、入力テンソル3、出力テンソルの次元1インデックスサイズは同じでなければならない。
【0459】
*すべての入力テンソルと出力テンソルのデータレイアウトとデータ型は同じでなければならない。
【0460】
一実施形態では、出力テンソル記述子2と関数固有保存領域アドレスフィールドは無視される。関数固有パラメータ2~5は、一例としてゼロを含む。
【0461】
ファンクションコード114:NNPA-MATMUL-OP-BCAST23(Matrix Multiplication Operation - Broadcast23)
【0462】
NNPA-MATMUL-OP-BCAST23関数が指定されると、出力テンソル記述子によって記述された出力テンソルの各要素が、一例として以下に説明するように計算される。
【0463】
*入力テンソル1記述子により記述された入力テンソル1から、後述するget-dimension-1-vector演算により次元1ベクトルが選択される。
【0464】
*入力テンソル2記述子によって記述された入力テンソル2から、後述するget-dimension-2-vector演算によって次元2ベクトルが選択される。
【0465】
*次元1ベクトルと次元2ベクトルのドット積は、後述のドット積演算を用いて計算される。
【0466】
*入力テンソル3の記述子によって記述された、出力テンソルの要素と同じ次元インデックス1の値を持つ入力テンソル3の要素は、先に計算されたドット積に加算され、出力テンソルに格納される。
【0467】
Get-dimension-1-vector演算:指定された出力要素に対して、入力次元4インデックスが出力次元4インデックス、入力次元3インデックスが出力次元3インデックス、入力次元2インデックスが出力次元2インデックスである入力1テンソルから次元1ベクトルが選択される。
【0468】
Get-dimension-2-vector演算:指定された出力要素に対して、入力次元4インデックスが1、入力次元3インデックスが出力次元3インデックス、入力次元1インデックスが出力次元1インデックスである入力2テンソルから次元2ベクトルが選択される。
【0469】
ドット積演算:同じサイズとデータ型の2つのベクトルの中間積は、入力ベクトル1の各要素と入力ベクトル2の対応する要素の積の和として計算される。
【0470】
一例では、指定されたテンソル記述子のいずれかに指定されたデータレイアウトが4D特徴テンソルを指定しない場合(例えば、データレイアウト=0)、または指定されたテンソル記述子のデータ型がNNPデータ型1を指定しない場合(例えば、データ型=0)、応答コード、例えばそれぞれ16進数で0010または0011が汎用レジスタ0に設定され、命令は条件コード、例えば1で完了する。
【0471】
一実施形態では、以下の条件が真であることが必要であり、そうでなければ汎用オペランドデータの例外が認識される。
【0472】
*入力テンソル1と出力テンソルの次元4インデックスサイズは同じでなければならない。
【0473】
*入力テンソル2と入力テンソル3の次元4インデックスサイズは1に等しい。
【0474】
*すべての入力テンソルと出力テンソルの次元3インデックスサイズは1に等しい。
【0475】
*入力テンソル3の次元2インデックスサイズは1に等しい。
【0476】
*入力テンソル1と出力テンソルの次元2インデックスサイズは同じでなければならない。
【0477】
*入力テンソル1の次元1インデックスサイズと入力テンソル2の次元2インデックスサイズは同じである。
【0478】
*入力テンソル2、入力テンソル3、出力テンソルの次元1インデックスサイズは同じでなければならない。
【0479】
*すべての入力テンソルと出力テンソルのデータレイアウトとデータ型は同じでなければならない。
【0480】
一実施形態では、出力テンソル記述子2と関数固有保存領域アドレスフィールドは無視される。一例では、関数固有パラメータ1~5はゼロを含む。
【0481】
ニューラルネットワーク処理支援命令では、一実施形態では、出力テンソルが入力テンソルやパラメータブロックと重なる場合、結果は予測できない。
【0482】
仕様例外は、ニューラルネットワーク処理支援命令を実行しようとしたときに、パラメータブロックが例えばダブルワード境界で指定されていない場合に認識される。
【0483】
汎用オペランドデータの例外は、ニューラルネットワーク処理支援命令を実行しようとしたときに、例えばテンソル記述子の不整合があった場合に認識される。
【0484】
ニューラルネットワーク処理支援命令の結果得られる条件コードには、例えば以下のものがある:0-正常終了;1-応答コードが設定されている;2--;3-CPUが決定した処理データ量。
【0485】
一実施形態では、ニューラルネットワーク処理支援命令の実行優先順位は、例えば、以下を含む。
【0486】
1.-7. 一般的な場合のプログラム中断条件の優先順位と同じ優先順位の例外。
【0487】
8.A 指定されたファンクションコードが未割り当てまたは未インストールであることによる条件コード1。
【0488】
8.B パラメータブロックがダブルワード境界で指定されていないことによる仕様例外。
【0489】
9. パラメータブロックへのアクセスに対するアクセス例外。
【0490】
10. パラメータブロックの指定されたフォーマットがモデルでサポートされていないことによる条件コード1。
【0491】
11.A 指定されたテンソルデータレイアウトがサポートされていないことによる条件コード1。
【0492】
11.B テンソル記述子間のデータレイアウトの違いによる汎用オペランドデータの例外。
【0493】
12.A 上記8.A、10、11.Aおよび下記12.B.1に含まれる条件以外の条件による条件コード1。
【0494】
12.B.1 NNPA-RELUおよびNNPA-CONVOLUTIONの無効な出力テンソルデータ型による条件コード1。
【0495】
12.B.2 NNPA-RELU関数固有パラメータ1およびNNPA-CONVOLUTION関数固有パラメータ4の値が無効な場合の汎用オペランドデータの例外。
【0496】
13.A 出力テンソルへのアクセスに対するアクセス例外。
【0497】
13.B 入力テンソルへのアクセスに対するアクセス例外。
【0498】
13.C 関数固有保存領域へのアクセスに対するアクセス例外。
【0499】
14. 条件コード0。
【0500】
本明細書で説明するように、単一の命令(例えば、ニューラルネットワーク処理支援命令)は、クエリ関数および複数の非クエリ関数を含む複数の関数を実行するように構成される。NNPA-MATMUL-OP関数やNNPA-CONVOLUTION関数などの選択された非クエリ関数は、単一関数の呼び出しの一部として演算のシーケンスを実行することができ、演算のシーケンスの各演算に対してニューラルネットワークプロセッサ105などのプロセッサを呼び出すことに関連するオーバーヘッドを低減し、各演算の中間結果をプロセッサの外部に格納し、それらの結果を次の演算の入力として再ロードする必要性を排除することによって性能を向上させる。
【0501】
一例では、完全に接続された層+バッチノルム/スケールは、matmul+biasadd複合関数にマッピングすることができる。バッチノルムのスケーリングと乗算は行列乗算の重みで行われ、バッチノルムの加算部分は、biasaddを介して実行される。これは、バッチノルムの加算部分が、例えば、matmulの結果に対して直接実行できる要素演算であるため、中間データの保存/再ロードの必要性をなくす。最後の2つのステップの実行時間がなくなり、例えば、これらの各演算の間にデータを保存/再ロードする必要があるアクセラレータの速度が向上する。
【0502】
さらに、一例では、Conv+BatchNorm+Scale+Activationは、例えば、Convolution+Biasadd+Activationの複合関数にマッピングすることができ、Batchnormのスケーリングと乗算はConvolutionの重みに対して行われ、Batchnormの加算部分はBiasaddを介して実行される。これにより、Batchnormの加算部分は、例えば、活性化関数(例えば、Relu)を適用する前に、畳み込み結果に対して直接実行できる要素演算であるため、中間データの保存/再ロードの必要性がなくなる。最後の3つのステップの実行時間がなくなり、例えば、これらの各演算の間にデータを保存/再ロードする必要があるアクセラレータの速度が向上する。
【0503】
本発明の1または複数の態様は、コンピュータ技術と密接に結びついており、コンピュータ内の処理を容易にし、その性能を向上させる。様々な関数を実行するように構成された単一のアーキテクト機械命令の使用は、複雑さを低減し、リソースの使用を低減し、処理速度を向上させることにより、コンピューティング環境内の性能を向上させる。演算のシーケンスを実装するための単一の関数の使用は、オーバーヘッドとリソースの使用を削減し、システム性能を向上させる。命令、関数、もしくは演算、またはその組み合わせは、コンピュータ処理、医療処理、工学、自動車技術、製造などの多くの技術分野で使用される可能性がある。最適化を提供することによって、これらの技術分野は、例えば、オーバーヘッドもしくは実行時間またはその両方を削減することによって改善される。
【0504】
本発明の1または複数の態様に関連する、コンピューティング環境内での処理を容易にする一実施形態のさらなる詳細が、図7A~7Bを参照して説明される。
【0505】
図7Aを参照すると、命令によって指定された複合関数が実行される(700)。複合関数は、複合関数の1つの呼び出しの一部として実行される複数の演算を含む(702)。複合関数を実行することは、例えば、1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することを含む(704)。第2のテンソルは、一例として、乗算を使用して作成された調整された重みテンソルを含む(706)。バイアステンソルの値は、複合関数の1または複数の結果を得るために、1または複数の中間結果に加算される(708)。1または複数の結果は、少なくとも出力テンソルの一部である(710)。
【0506】
複数の演算を1つの関数にまとめることで、演算を実行するためにプロセッサが呼び出される回数が減る。さらに、中間結果をメモリまたは1または複数のプロセッサが外部からアクセス可能な別の場所に保存し、そこから再ロードすることが回避される。これにより、処理速度が向上し、システムリソースの使用が削減され、性能が向上する。
【0507】
一例として、結合された関数は、別々に起動された複数の演算を置き換える(712)。別々に起動された複数の演算は、例えば、少なくとも、入力テンソルと重みテンソルの行列乗算に続くバッチ正規化を含む(714)。バッチ正規化は、一例では、入力テンソルと重みテンソルの行列乗算の少なくとも1つの結果と、選択乗算と、1または複数の選択バイアス値とを含む複数の入力を受け取り(716)、バッチ正規化の少なくとも1つの結果を得るために、バッチ正規化で複数の入力を使用する(718)。
【0508】
別の例では、別々に呼び出される複数の演算は、行列乗算と未調整重みテンソルの後に続くバイアス加算を含む。さらなる変形も可能である。
【0509】
一例では、調整された重みテンソルが作成される。作成には、例えば調整された重みテンソルを提供するために、重みテンソルを乗数で乗じることが含まれる(720)。乗数は、例えば、重みテンソルを正規化するために使用される(722)。
【0510】
一例として、図7Bを参照すると、1または複数の中間結果は、1または複数のプロセッサが外部からアクセス可能な場所に1または複数の中間結果を格納し、再ロードすること無く加算に入力される(730)。
【0511】
一例では、第1のテンソルは、分類に使用されるニューラルネットワークの1または複数の特徴を含み(732)、調整された重みテンソルは、ニューラルネットワークの1または複数の学習可能パラメータを表す(734)。
【0512】
一例では、行列乗算を実行することは、入力テンソルの1または複数のベクトルから第1のベクトルを選択することと、調整された重みテンソルの1または複数のベクトルから第2のベクトルを選択することと(736)、出力テンソルの要素の中間値を得るために、第1のベクトルと第2のベクトルのドット積を実行することと(738)を含む。ドット積は、一例として、第1のベクトルの1または複数の要素と第2のベクトルの1または複数の対応する要素の積の合計を含む(740)。
【0513】
一例として、バイアステンソルの値を加算することは、出力テンソルの要素の結果の値を提供するために、バイアステンソルの要素の値を出力テンソルの要素の中間値に加算することを含む(742)。
【0514】
一例では、行列乗算を実行することは、1または複数の結果の値を得るために、値を選択することと、値を実行することと、値を加算することとを1または複数回繰り返すことを含む(744)。
【0515】
その他の変形や実施形態も可能である。
【0516】
本発明の態様は、多くのタイプのコンピューティング環境で使用することができる。本発明の1または複数の態様を組み込んで使用するコンピューティング環境の別の例を、図8Aを参照して説明する。一例として、図8Aのコンピューティング環境は、ニューヨーク州アーモンクのInternational Business Machines Corporationが提供するz/Architecture(登録商標)命令セットアーキテクチャに基づいている。しかし、z/Architecture命令セットアーキテクチャは、アーキテクチャの一例に過ぎない。ここでも、コンピューティング環境は、Intel(登録商標)x86アーキテクチャ、International Business Machines Corporationの他のアーキテクチャ、もしくは他社のアーキテクチャ、またはその組み合わせを含むが、これらに限定されない他のアーキテクチャに基づいていてもよい。Intelは、米国およびその他の国におけるIntel Corporationまたはその子会社の商標または登録商標である。
【0517】
一例では、コンピューティング環境10は、中央電子機器複合体(CEC)11を含む。中央電子機器複合体11は、例えば、1または複数の汎用プロセッサ(別名、中央処理装置(CPU)13)および1または複数の特殊目的プロセッサ(例えば、ニューラルネットワークプロセッサ31)などの1または複数のプロセッサに結合されたメモリ12(別名、システムメモリ、メインメモリ、主記憶装置、中央記憶装置、ストレージ)などの複数のコンポーネント、および入力/出力(I/O)サブシステム14を含む。
【0518】
例として、1または複数の特殊目的プロセッサは、1または複数の汎用プロセッサとは別個であってもよく、もしくは、少なくとも1つの特殊目的プロセッサは、少なくとも1つの汎用プロセッサ内に組み込まれてもよく、またはその両方であってよい。他の変形も可能である。
【0519】
I/Oサブシステム14は、中央電子機器複合体の一部であることも、それとは別個のものであることもできる。I/Oサブシステム14は、主記憶装置12と、入力/出力制御ユニット15および中央電子機器複合体に結合された入力/出力(I/O)装置16との間の情報の流れを指示する。
【0520】
多くのタイプのI/O装置が使用できる。特定のタイプの1つは、データ記憶装置17である。データ記憶装置17は、1または複数のプログラム18、1または複数のコンピュータ可読プログラム命令19、もしくはデータ、またはその組み合わせなどを記憶することができる。コンピュータ可読プログラム命令は、本発明の態様の実施形態の機能を実行するように構成することができる。
【0521】
中央電子機器複合体11は、取外し可能/取外し不可能、揮発性/不揮発性のコンピュータシステムの記憶媒体を含むことができ、もしくはこれと結合することができ、またはその両方であることができる。例えば、取外し不可能の不揮発性磁気媒体(典型的には、「ハードドライブ」と呼ばれる)、取外し可能の不揮発性磁気ディスク(例えば、「フロッピーディスク」)から読み出し、それに書き込むための磁気ディスクドライブ、もしくは、CD-ROM、DVD-ROMや他の光学媒体などの取外し可能の不揮発性光ディスクから読み出し、それに書き込むための光ディスクドライブ、またはその組み合わせを含むことができる、もしくはこれらに結合されることができる、またはその両方である。他のハードウェアコンポーネントもしくはソフトウェアコンポーネントまたはその両方が、中央電子機器複合体11と共に使用され得ることが理解されるべきである。例えば、マイクロコードまたはミリコード、デバイスドライバ、冗長処理ユニット、外部ディスクドライブアレイ、RAIDシステム、テープドライブ、およびデータアーカイバルストレージシステムなどが挙げられるが、これらに限定されない。
【0522】
さらに、中央電子機器複合体11は、多数の他の汎用または特殊目的のコンピューティングシステム環境または構成で動作可能である。中央電子機器複合体11と共に使用するのに適した周知のコンピューティングシステム、環境、もしくは構成、またはその組み合わせの例としては、パーソナルコンピュータ(PC)システム、サーバコンピュータシステム、シンクライアント、シッククライアント、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースシステム、セットトップボックス、プログラマブル家電、ネットワークPC、ミニコンピュータシステム、メインフレームコンピュータシステム、および上記のシステムまたはデバイスのいずれかを含む分散型クラウドコンピューティング環境などが挙げられるが、これらに限定されない。
【0523】
中央電子機器複合体11は、1または複数の実施形態において、論理パーティショニングもしくは仮想化サポートまたはその両方を提供する。一実施形態では、図8Bに示すように、メモリ12は、例えば、1または複数の論理パーティション20、論理パーティションを管理するハイパーバイザー21、およびプロセッサファームウェア22を含む。ハイパーバイザー21の一例は、ニューヨーク州アーモンクのInternational Business Machines Corporationが提供するProcessor Resource/System Manager(PR/SM(商標))である。PR/SMは、少なくとも1つの法域におけるInternational Business Machines Corporation の商標または登録商標である。
【0524】
各論理パーティション20は、別個のシステムとして機能することができる。すなわち、各論理パーティションは、独立してリセットされ、ニューヨーク州アーモンクのInternational Business Machines Corporationが提供するz/OS(登録商標)オペレーティングシステムなどのゲストオペレーティングシステム23、またはカップリングファシリティ制御コード(CFCC)などの他の制御コード24を実行し、異なるプログラム25で動作することができる。論理パーティションで動作するオペレーティング・システムまたはアプリケーションプログラムは、完全で完璧なシステムにアクセスできるように見えるが、実際にはその一部しか利用できない。z/OSオペレーティングシステムは例として提供されているが、International Business Machines Corporationもしくは他の企業またはその両方によって提供される他のオペレーティングシステムを、本発明の1または複数の態様に従って使用することができる。
【0525】
メモリ12は、例えば、論理パーティションに割り当て可能な物理プロセッサリソースであるCPU13(図8A)に結合される。例えば、論理パーティション20は、1または複数の論理プロセッサを含むことができ、各論理プロセッサは、論理パーティションに動的に割り当てることができる物理プロセッサリソース13のすべてまたはシェアを表す。
【0526】
さらに別の実施形態では、中央電子機器複合体は、仮想マシンサポートを提供する(論理パーティショニングサポートの有無は問わない)。図8Cに示すように、中央電子機器複合体11のメモリ12は、例えば、1または複数の仮想マシン26、仮想マシンを管理するハイパーバイザー27などの仮想マシンマネージャ、およびプロセッサファームウェア28を含む。ハイパーバイザー27の一例は、ニューヨーク州アーモンクのInternational Business Machines Corporationが提供するz/VM(登録商標)ハイパーバイザーである。ハイパーバイザーはホストと呼ばれることもある。z/VMは、少なくとも1つの法域におけるInternational Business Machines Corporationの商標または登録商標である。
【0527】
中央電子機器複合体の仮想マシンサポートは、多数の仮想マシン26を操作する能力を提供し、各仮想マシン26は、異なるプログラム29で動作し、Linux(登録商標)オペレーティングシステムなどのゲストオペレーティングシステム30を実行することができる。各仮想マシン26は、独立したシステムとして機能することができる。すなわち、各仮想マシンは、独立してリセットされ、ゲストオペレーティングシステムを実行し、異なるプログラムで動作することができる。仮想マシン内で実行されるオペレーティングシステムまたはアプリケーションプログラムは、完全かつ完璧なシステムにアクセスできるように見えるが、実際にはその一部しか利用できない。z/VMおよびLinuxは例として提供されているが、他の仮想マシンマネージャもしくはオペレーティングシステムまたはその両方を、本発明の1または複数の態様に従って使用することもできる。登録商標Linux(登録商標)は、世界的な商標権者であるLinus Torvaldsの独占的ライセンシーであるLinux Foundationからのサブライセンスに従って使用されている。
【0528】
本発明の1または複数の態様を組み込んで使用するコンピューティング環境の別の実施形態を、図9Aを参照して説明する。この例では、コンピューティング環境36は、例えば、ネイティブ中央処理ユニット(CPU)37と、メモリ38と、例えば、1または複数のバス40もしくは他の接続またはその両方を介して互いに結合された1または複数の入力/出力装置もしくはインタフェース39またはその両方とを含む。例として、コンピューティング環境36は、ニューヨーク州アーモンクのInternational Business Machines Corporationが提供するPowerPC(登録商標)プロセッサ、カリフォルニア州パロアルトのHewlett Packard Co.が提供するIntel(登録商標)Itanium(登録商標)IIプロセッサを搭載したHP Superdome、もしくは、International Business Machines Corporation、Hewlett Packard、Intel Corporation、Oracleもしくはその他またはその組み合わせが提供するアーキテクチャに基づく他のマシン、またはその組み合わせを含むことができる。PowerPCは、少なくとも1つの法域におけるInternational Business Machines Corporationの商標または登録商標である。Itaniumは、米国およびその他の国におけるIntel Corporationまたはその子会社の商標または登録商標である。
【0529】
ネイティブ中央処理ユニット37は、環境内の処理中に使用される1または複数の汎用レジスタもしくは1または複数の特殊目的レジスタまたはその両方などの1または複数のネイティブレジスタ41を含む。これらのレジスタは、任意の特定の時点における環境の状態を表す情報を含む。
【0530】
さらに、ネイティブ中央処理ユニット37は、メモリ38に格納されている命令とコードを実行する。ある特定の例では、中央処理ユニットは、メモリ38に格納されたエミュレータコード42を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が別のアーキテクチャをエミュレートすることを可能にする。例えば、エミュレータコード42は、PowerPCプロセッサ、HP Superdomeサーバなど、z/Architecture命令セットアーキテクチャ以外のアーキテクチャに基づくマシンが、z/Architecture命令セットアーキテクチャをエミュレートし、z/Architecture命令セットアーキテクチャに基づいて開発されたソフトウェアおよび命令を実行することを可能にする。
【0531】
エミュレータコード42に関するさらなる詳細は、図9Bを参照して説明する。メモリ38に格納されたゲスト命令43は、ネイティブCPU37のアーキテクチャ以外のアーキテクチャで実行されるように開発されたソフトウェア命令(例えば、マシン命令に相関する)を含む。例えば、ゲスト命令43は、z/Architecture命令セットアーキテクチャに基づくプロセッサ上で実行されるように設計されているかもしれないが、その代わりに、例えば、Intel Itanium IIプロセッサであるかもしれないネイティブCPU37上でエミュレートされている。一例では、エミュレータコード42は、メモリ38から1または複数のゲスト命令43を取得し、任意で取得した命令にローカルバッファリングを提供する命令フェッチルーチン44を含む。また、取得されたゲスト命令のタイプを決定し、ゲスト命令を1または複数の対応するネイティブ命令46に変換する命令変換ルーチン45も含まれる。この変換には、例えば、ゲスト命令によって実行される機能を特定し、その機能を実行するネイティブ命令を選択することが含まれる。
【0532】
さらに、エミュレータコード42は、ネイティブ命令を実行させるためのエミュレーション制御ルーチン47を含む。エミュレーション制御ルーチン47は、ネイティブCPU37に、1または複数の以前に取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令群の取得をエミュレートする命令フェッチルーチンに制御を戻すことができる。ネイティブ命令46の実行には、データをメモリ38からレジスタにロードすること、データをレジスタからメモリにストアバックすること、または翻訳ルーチンによって決定される何らかのタイプの算術演算または論理演算を実行することが含まれる。
【0533】
各ルーチンは、例えば、ソフトウェアで実装され、メモリに格納され、ネイティブ中央処理ユニット37によって実行される。他の例では、1または複数のルーチンまたはオペレーションが、ファームウェア、ハードウェア、ソフトウェア、またはそれらの組み合わせで実装される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ41を使用して、またはメモリ38内の位置を使用してエミュレートすることができる。実施形態では、ゲスト命令43、ネイティブ命令46、およびエミュレータコード42は、同じメモリに存在してもよいし、異なるメモリデバイス間に分散されていてもよい。
【0534】
エミュレートされ得る命令には、本発明の1または複数の態様に従って、本明細書で説明されるニューラルネットワーク支援処理命令が含まれる。さらに、本発明の1または複数の態様に従って、ニューラルネットワーク処理の他の命令、機能、操作、もしくは1または複数の態様、またはその組み合わせがエミュレートされてもよい。
【0535】
上述したコンピューティング環境は、使用可能なコンピューティング環境の一例に過ぎない。非パーティション化環境、パーティション化環境、クラウド環境、もしくはエミュレートされた環境、またはその組み合わせを含むがこれらに限定されない他の環境を使用することができ、実施形態はいずれか1つの環境に限定されない。コンピューティング環境の様々な例が本明細書に記載されているが、本発明の1つまたは複数の態様は、多くのタイプの環境で使用され得る。本明細書で提供されるコンピューティング環境は、例示に過ぎない。
【0536】
各コンピューティング環境は、本発明の1または複数の態様を含むように構成することが可能である。
【0537】
1または複数の態様は、クラウドコンピューティングに関するものである。
【0538】
本開示はクラウドコンピューティングに関する詳細な説明を含むが、本明細書に記載した教示の実装形態はクラウドコンピューティング環境に限定されない。むしろ、本発明の実施形態は、現在公知のまたは将来開発される他の任意の種類のコンピュータ環境と共に実施することができる。
【0539】
クラウドコンピューティングは、設定可能なコンピューティングリソースの共有プール(例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシンおよびサービス)へ、簡便かつオンデマンドのネットワークアクセスを可能にするためのサービス提供のモデルであり、リソースは、最小限の管理労力または最小限のサービスプロバイダとのやり取りによって速やかに準備(provision)およびリリースできるものである。このクラウドモデルは、少なくとも5つの特性、少なくとも3つのサービスモデル、および少なくとも4つの実装モデルを含むことがある。
【0540】
特性は以下の通りである。
【0541】
オンデマンド・セルフサービス:クラウドの消費者は、サービスプロバイダとの人的な対話を必要することなく、必要に応じて自動的に、サーバ時間やネットワークストレージなどのコンピューティング能力を一方的に準備することができる。
【0542】
ブロード・ネットワークアクセス:コンピューティング能力はネットワーク経由で利用可能であり、また、標準的なメカニズムを介してアクセスできる。それにより、異種のシンまたはシッククライアントプラットフォーム(例えば、携帯電話、ラップトップ、パーソナルデジタルアシスタント(PDA))による利用が促進される。
【0543】
リソースプーリング:プロバイダのコンピューティングリソースはプールされ、マルチテナントモデルを利用して複数の消費者に提供される。様々な物理リソースおよび仮想リソースが、需要に応じて動的に割り当ておよび再割り当てされる。一般に消費者は、提供されたリソースの正確な位置を管理または把握していないため、位置非依存(location independence)の感覚がある。ただし消費者は、より高い抽象レベル(例えば、国、州、データセンタ)では場所を特定可能な場合がある。
【0544】
迅速な柔軟性(elasticity):コンピューティング能力は、迅速かつ柔軟に準備することができるため、場合によっては自動的に、直ちにスケールアウトし、また、速やかにリリースされて直ちにスケールインすることができる。消費者にとって、準備に利用可能なコンピューティング能力は無制限に見える場合が多く、任意の時間に任意の数量で購入することができる。
【0545】
測定されるサービス:クラウドシステムは、サービスの種類(例えば、ストレージ、処理、帯域幅、アクティブユーザアカウント)に適したある程度の抽象化レベルでの測定機能を活用して、リソースの使用を自動的に制御し最適化する。リソース使用量を監視、制御、および報告して、利用されるサービスのプロバイダおよび消費者の両方に透明性を提供することができる。
【0546】
サービスモデルは以下の通りである。
【0547】
サービスとしてのソフトウェア(SaaS):消費者に提供される機能は、クラウドインフラストラクチャ上で動作するプロバイダのアプリケーションを利用できることである。当該そのアプリケーションは、ウェブブラウザ(例えばウェブメール)などのシンクライアントインタフェースを介して、各種のクライアント装置からアクセスできる。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージや、個別のアプリケーション機能さえも含めて、基礎となるクラウドインフラストラクチャの管理や制御は行わない。ただし、ユーザ固有の限られたアプリケーション構成の設定はその限りではない。
【0548】
サービスとしてのプラットフォーム(PaaS):消費者に提供される機能は、プロバイダによってサポートされるプログラム言語およびツールを用いて、消費者が作成または取得したアプリケーションを、クラウドインフラストラクチャに展開(deploy)することである。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージを含む、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、展開されたアプリケーションを制御でき、かつ場合によってはそのホスティング環境の構成も制御できる。
【0549】
サービスとしてのインフラストラクチャ(IaaS):消費者に提供される機能は、オペレーティングシステムやアプリケーションを含み得る任意のソフトウェアを消費者が展開および実行可能な、プロセッサ、ストレージ、ネットワーク、および他の基本的なコンピューティングリソースを準備することである。消費者は、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、オペレーティングシステム、ストレージ、および展開されたアプリケーションを制御でき、かつ場合によっては一部のネットワークコンポーネント(例えばホストファイアウォール)を部分的に制御できる。
【0550】
展開モデルは以下の通りである。
【0551】
プライベートクラウド:このクラウドインフラストラクチャは、特定の組織専用で運用される。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
【0552】
コミュニティクラウド:このクラウドインフラストラクチャは、複数の組織によって共有され、共通の関心事(例えば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンス)を持つ特定のコミュニティをサポートする。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
【0553】
パブリッククラウド:このクラウドインフラストラクチャは、不特定多数の人々や大規模な業界団体に提供され、クラウドサービスを販売する組織によって所有される。
【0554】
ハイブリッドクラウド:このクラウドインフラストラクチャは、2つ以上のクラウドモデル(プライベート、コミュニティまたはパブリック)を組み合わせたものとなる。それぞれのモデル固有の実体は保持するが、標準または個別の技術によってバインドされ、データとアプリケーションの可搬性(例えば、クラウド間の負荷分散のためのクラウドバースティング)を実現する。
【0555】
クラウドコンピューティング環境は、ステートレス性(statelessness)、低結合性(low coupling)、モジュール性(modularity)および意味論的相互運用性(semantic interoperability)に重点を置いたサービス指向型環境である。クラウドコンピューティングの中核にあるのは、相互接続されたノードのネットワークを含むインフラストラクチャである。
【0556】
図10を参照すると、例示的なクラウドコンピューティング環境50が示されている。図示するように、クラウドコンピューティング環境50は1つまたは複数のクラウドコンピューティングノード52を含む。これらに対して、クラウド消費者が使用するローカルコンピュータ装置(例えば、パーソナルデジタルアシスタント(PDA)もしくは携帯電話54A、デスクトップコンピュータ54B、ラップトップコンピュータ54C、もしくは自動車コンピュータシステム54Nまたはこれらの組み合わせなど)は通信を行うことができる。ノード52は互いに通信することができる。ノード52は、例えば、上述のプライベート、コミュニティ、パブリックもしくはハイブリッドクラウドまたはこれらの組み合わせなど、1つまたは複数のネットワークにおいて、物理的または仮想的にグループ化(不図示)することができる。これにより、クラウドコンピューティング環境50は、サービスとしてのインフラストラクチャ、プラットフォームもしくはソフトウェアまたはこれらの組み合わせを提供することができ、クラウド消費者はこれらについて、ローカルコンピュータ装置上にリソースを維持する必要がない。なお、図10に示すコンピュータ装置54A~Nの種類は例示に過ぎず、コンピューティングノード52およびクラウドコンピューティング環境50は、任意の種類のネットワークもしくはネットワークアドレス指定可能接続(例えば、ウェブブラウザの使用)またはその両方を介して、任意の種類の電子装置と通信可能であることを理解されたい。
【0557】
図11を参照すると、クラウドコンピューティング環境50(図10)によって提供される機能的抽象化レイヤのセットが示されている。なお、図11に示すコンポーネント、レイヤおよび機能は例示に過ぎず、本発明の実施形態はこれらに限定されないことをあらかじめ理解されたい。図示するように、以下のレイヤおよび対応する機能が提供される。
【0558】
ハードウェアおよびソフトウェアレイヤ60は、ハードウェアコンポーネントおよびソフトウェアコンポーネントを含む。ハードウェアコンポーネントの例には、メインフレーム61、縮小命令セットコンピュータ(RISC)アーキテクチャベースのサーバ62、サーバ63、ブレードサーバ64、記憶装置65、ならびにネットワークおよびネットワークコンポーネント66が含まれる。いくつかの実施形態において、ソフトウェアコンポーネントは、ネットワークアプリケーションサーバソフトウェア67およびデータベースソフトウェア68を含む。
【0559】
仮想化レイヤ70は、抽象化レイヤを提供する。当該レイヤから、例えば以下の仮想エンティティを提供することができる:仮想サーバ71、仮想ストレージ72、仮想プライベートネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティングシステム74、ならびに仮想クライアント75。
【0560】
一例として、管理レイヤ80は以下の機能を提供することができる。リソース準備81は、クラウドコンピューティング環境内でタスクを実行するために利用されるコンピューティングリソースおよび他のリソースの動的な調達を可能にする。計量および価格設定82は、クラウドコンピューティング環境内でリソースが利用される際のコスト追跡、およびこれらのリソースの消費に対する請求またはインボイス送付を可能にする。一例として、これらのリソースはアプリケーションソフトウェアのライセンスを含んでよい。セキュリティは、データおよび他のリソースに対する保護のみならず、クラウドコンシューマおよびタスクの識別確認を可能にする。ユーザポータル83は、コンシューマおよびシステム管理者にクラウドコンピューティング環境へのアクセスを提供する。サービスレベル管理84は、要求されたサービスレベルが満たされるように、クラウドコンピューティングリソースの割り当ておよび管理を可能にする。サービス品質保証(SLA)の計画および履行85は、SLAに従って将来必要になると予想されるクラウドコンピューティングリソースの事前手配および調達を可能にする。
【0561】
ワークロードレイヤ90は、クラウドコンピューティング環境が利用可能な機能の例を提供する。このレイヤから提供可能なワークロードおよび機能の例には、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想教室教育の配信93、データ分析処理94、取引処理95、ならびに、ニューラルネットワーク処理支援処理96が含まれる。
【0562】
本発明は、任意の可能な技術詳細レベルで統合されたシステム、方法もしくはコンピュータプログラム製品またはそれらの組み合せとすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を記憶したコンピュータ可読記憶媒体を含んでよい。
【0563】
コンピュータ可読記憶媒体は、命令実行装置によって使用される命令を保持し、記憶することができる有形の装置とすることができる。コンピュータ可読記憶媒体は、一例として、電子記憶装置、磁気記憶装置、光学記憶装置、電磁記憶装置、半導体記憶装置またはこれらの適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な一例としては、ポータブルコンピュータディスケット、ハードディスク、RAM、ROM、EPROM(またはフラッシュメモリ)、SRAM、CD-ROM、DVD、メモリスティック、フロッピーディスク、パンチカードまたは溝内の隆起構造などに命令を記録した機械的に符号化された装置、およびこれらの適切な組み合せが挙げられる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波管もしくは他の伝送媒体を介して伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号のような、一過性の信号それ自体として解釈されるべきではない。
【0564】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理装置に、または、ネットワーク(例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、もしくはワイヤレスネットワークまたはその組み合わせ)を介して外部コンピュータまたは外部記憶装置にダウンロードすることができる。ネットワークは、銅線伝送ケーブル、光伝送ファイバー、無線伝送、ルーター、ファイアウォール、スイッチ、ゲートウェイコンピュータ、もしくはエッジサーバーまたはその組み合わせで構成される。各コンピューティング/処理装置のネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理装置内のコンピュータ可読記憶媒体に格納するためにコンピュータ可読プログラム命令を転送する。
【0565】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、統合回路のための構成データ、またはSmalltalk、C++などのオブジェクト指向プログラミング言語と「C」プログラミング言語や類似のプログラミング言語などの手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述されたソースコードまたはオブジェクトコードのいずれかであってよい。コンピュータ可読プログラム命令は、スタンドアロンソフトウェアパッケージとして、完全にユーザのコンピュータ上で、または部分的にユーザのコンピュータ上で実行可能である。あるいは、部分的にユーザのコンピュータ上でかつ部分的にリモートコンピュータ上で、または完全にリモートコンピュータまたはサーバ上で実行可能である。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され、または(例えば、インターネットサービスプロバイダーを使用したインターネット経由で)外部コンピュータに接続されてよい。いくつかの実施形態では、例えば、プログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)、またはプログラマブルロジックアレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用してパーソナライズすることにより、コンピュータ可読プログラム命令を実行することができる。
【0566】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図もしくはブロック図またはその両方を参照して本明細書に記載されている。フローチャート図もしくはブロック図またはその両方の各ブロック、およびフローチャート図もしくはブロック図またはその両方のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できることが理解されよう。
【0567】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令がフローチャートもしくはブロック図またはその両方の1つまたは複数のブロックで指定された機能/動作を実装するための手段を生成するように、機械を生成するためにコンピュータのプロセッサまたは他のプログラム可能なデータ処理装置に提供されることができる。これらのコンピュータ可読プログラム命令はまた、フローチャートもしくはブロック図またはその両方の1つまたは複数のブロックで指定された機能/行為の態様を実装する命令を含む生成品の1つを命令が記憶されたコンピュータ可読記憶媒体が構成するように、コンピュータ、プログラム可能なデータ処理装置、もしくは特定の方法で機能する他のデバイスまたはその組み合わせに接続可能なコンピュータ可読記憶媒体の中に記憶されることができる。
【0568】
コンピュータ、他のプログラム可能な装置、または他のデバイス上でフローチャートもしくはブロック図またはその両方の1つまたは複数のブロックで指定された機能/行為を実行する命令のように、コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能な装置、または他のデバイス上で一連の操作ステップを実行し、コンピュータ実装された過程を生成することができる。
【0569】
図中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータプログラム製品が実行可能な実装の構成、機能、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、モジュール、セグメント、または命令の一部を表してよく、これは、指定された論理機能を実装するための1つまたは複数の実行可能命令を構成する。いくつかの代替の実施形態では、ブロックに示されている機能は、図に示されている順序とは異なる場合がある。例えば、連続して示される2つのブロックは、実際には、1つのステップとして達成される場合があり、同時に、実質的に同時に、部分的または全体的に時間的に重複する方法で実行されるか、またはブロックは、関係する機能に応じて逆の順序で実行される場合がある。ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方のブロックの組み合わせは、指定された機能または動作を実行する、または特別な目的のハードウェアとコンピュータ命令の組み合わせを実行する特別な目的のハードウェアベースのシステムによって実装できることにも留意されたい。
【0570】
上記に加えて、1または複数の態様は、顧客環境の管理を提供するサービスプロバイダによって提供(provide)、提供(offer)、配備、管理、サービスなどされ得る。例えば、サービスプロバイダは、1または複数の顧客のために1または複数の態様を実行するコンピュータコードもしくはコンピュータインフラストラクチャまたはその両方を作成、維持、サポートなどすることができる。その見返りとして、サービスプロバイダは、例として、サブスクリプションもしくは料金契約またはその両方に基づいて顧客から支払いを受け取ることができる。さらに、または代替的に、サービスプロバイダは、1または複数の第三者への広告コンテンツの販売から支払いを受け取ることができる。
【0571】
一態様において、アプリケーションは、1または複数の実施形態を実行するために配備され得る。一例として、アプリケーションの配備は、1または複数の実施形態を実行するように動作可能なコンピュータインフラストラクチャを提供することを含む。
【0572】
さらなる態様として、コンピューティングインフラストラクチャは、コンピュータ可読コードをコンピューティングシステムに統合することを含んで展開されることができ、このコードは、コンピューティングシステムと組み合わされて、1または複数の実施形態を実行することが可能である。
【0573】
さらに別の態様として、コンピュータ可読コードをコンピュータシステムに統合することを含む、コンピューティングインフラストラクチャを統合するためのプロセスが提供され得る。コンピュータシステムは、コンピュータ可読媒体を含み、コンピュータ媒体は、1または複数の実施形態を含む。コンピュータシステムと組み合わせたコードは、1または複数の実施形態を実行することができる。
【0574】
以上、様々な実施形態を説明したが、これらは例示に過ぎない。例えば、他のアーキテクチャのコンピューティング環境を使用して、1または複数の態様を組み込み、もしくは使用、またはその両方を行うことができる。さらに、異なる命令、関数、もしくは操作、またはその組み合わせが使用され得る。さらに、異なるタイプのレジスタもしくは異なるレジスタまたはその両方が使用されてもよい。さらに、他のデータフォーマット、データレイアウト、もしくはデータサイズ、またはその組み合わせがサポートされてもよい。1または複数の実施形態において、1または複数の汎用プロセッサ、1または複数の特殊用途プロセッサ、または汎用プロセッサと特殊用途プロセッサの組み合わせが使用されてもよい。多くの変更が可能である。
【0575】
本明細書には様々な態様が記載されている。さらに、本発明の態様の精神から逸脱することなく、多くの変形が可能である。特に矛盾しない限り、本明細書に記載された各態様または特徴、およびその変形は、他の任意の態様または特徴と組み合わせ可能であることに留意すべきである。
【0576】
さらに、他のタイプのコンピューティング環境も恩恵を受け、使用することができる。一例として、システムバスを介してメモリ要素に直接または間接的に結合された少なくとも2つのプロセッサを含む、プログラムコードの格納もしくは実行またはその両方に適したデータ処理システムが使用可能である。メモリ要素には、例えば、プログラムコードの実際の実行中に採用されるローカルメモリ、バルクストレージ、および実行中にバルクストレージからコードを取り出す回数を減らすために少なくとも一部のプログラムコードの一時的なストレージを提供するキャッシュメモリが含まれる。
【0577】
入力/出力またはI/Oデバイス(キーボード、ディスプレイ、ポインティングデバイス、DASD、テープ、CD、DVD、サムドライブおよび他のメモリ媒体などを含むが、これらに限定されない)は、直接または介在するI/Oコントローラを介してシステムに結合することができる。また、データ処理システムが、介在するプライベートまたはパブリックネットワークを介して、他のデータ処理システムまたはリモートプリンタまたはストレージデバイスと結合できるように、ネットワークアダプタをシステムに結合することもできる。モデム、ケーブルモデム、およびイーサネットカードは、ネットワークアダプタの利用可能なタイプのほんの一部である。
【0578】
本明細書で使用される用語は、特定の実施形態を説明するためだけのものであり、限定することを意図するものではない。本明細書で使用される場合、単数形「ある/1つの/一の(a)」、「ある/1つの/一の(an)」および「その/当該(the)」は、文脈からそうではないことが明らかでない限り、複数形を含むことが意図される。本明細書で使用される場合、用語「含む(comprises)」、「含む(comprising)」、またはその両方は、記載された特徴、整数、ステップ、動作、要素、もしくはコンポーネントまたはその組み合わせの存在を指定するが、1つ以上の他の特徴、整数、ステップ、動作、要素、コンポーネント、もしくはそれらのグループまたはその組み合わせの存在または追加を排除するものではないことがさらに理解されたい。
【0579】
以下の特許請求の範囲におけるすべての手段またはステッププラスファンクションの対応する構造、材料、動作、および等価物は、具体的に請求された他の請求項の要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことを意図している。1または複数の実施形態の説明は、例示および説明の目的で提示されたが、網羅的であること、または開示された形態に限定されることを意図していない。多くの修正および変形が、当業者には明らかであろう。実施形態は、様々な態様および実用化を最もよく説明するために、また、当業者が、企図される特定の用途に適するように種々の変更を伴う種々の実施形態を理解できるように、選択および説明されたものである。
図1A
図1B
図2A
図2B
図2C
図3A
図3B
図3C
図3D
図3E
図3F
図3G
図4
図5
図6
図7A
図7B
図8A
図8B
図8C
図9A
図9B
図10
図11
【手続補正書】
【提出日】2024-01-26
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピューティング環境内の処理を容易にするためのコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
1または複数のコンピュータ可読記憶媒体と、前記1または複数のコンピュータ可読記憶媒体に集合的に記憶されたプログラム命令と、を含み、前記命令は、
命令によって指定された複合関数を実行することであって、前記複合関数は、前記複合関数の1つの呼び出しの一部として実行される複数の演算を含む、実行することを含む方法を実行させ、前記複合関数を前記実行することは、
1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することであって、前記第2のテンソルは乗数を使用して作成された調整された重みテンソルを含む、実行することと、
前記複合関数の1または複数の結果を得るために、バイアステンソルの値を前記1または複数の中間結果に加算することであって、前記1または複数の結果は、出力テンソルの少なくとも一部である、加算することと、
を含む、コンピュータプログラム製品。
【請求項2】
前記複合関数は、別々に起動された複数の演算を置き換えるものであり、前記別々に起動された複数の演算は、少なくとも、入力テンソルと重みテンソルの行列乗算とそれに続くバッチ正規化を含む、請求項1に記載のコンピュータプログラム製品
【請求項3】
前記バッチ正規化が、前記入力テンソルと前記重みテンソルの前記行列乗算の少なくとも1つの結果と、選択乗数と、1または複数の選択バイアス値とを含む複数の入力を受け取り、前記バッチ正規化の少なくとも1つの結果を得るために、バッチ正規化で前記複数の入力を使用する、請求項2に記載のコンピュータプログラム製品。
【請求項4】
前記方法は、前記調整された重みテンソルを作成することをさらに含み、前記作成することは、前記調整された重みテンソルを提供するために、重みテンソルを前記乗数で乗じることをさらに含む、請求項1乃至3のいずれか1項に記載のコンピュータプログラム製品。
【請求項5】
前記乗数は、前記重みテンソルを正規化するために使用される、請求項4に記載のコンピュータプログラム製品。
【請求項6】
前記1または複数の中間結果は、1または複数のプロセッサが外部からアクセス可能な場所に前記1または複数の中間結果を格納し、再ロードすること無く前記加算に入力される、請求項1に記載のコンピュータプログラム製品。
【請求項7】
前記第1のテンソルは、分類に使用されるニューラルネットワークの1または複数の特徴を含み、前記調整された重みテンソルは、前記ニューラルネットワークの1または複数の学習可能パラメータを表す、請求項1に記載のコンピュータプログラム製品。
【請求項8】
前記行列乗算を前記実行することは、
入力テンソルの1または複数のベクトルから第1のベクトルを選択し、前記調整された重みテンソルの1または複数のベクトルから第2のベクトルを選択することと、
前記出力テンソルの要素の中間値を得るために、前記第1のベクトルと前記第2のベクトルのドット積を実行することであって、前記ドット積は、前記第1のベクトルの1または複数の要素と前記第2のベクトルの1または複数の対応する要素の積の合計を含む、実行することと、
を含む、請求項1に記載のコンピュータプログラム製品。
【請求項9】
前記バイアステンソルの前記値を前記加算することは、前記出力テンソルの前記要素の結果の値を提供するために、前記バイアステンソルの要素の値を前記出力テンソルの前記要素の前記中間値に加算することを含む、請求項8に記載のコンピュータプログラム製品。
【請求項10】
前記行列乗算を前記実行することは、1または複数の結果の値を得るために、前記値を前記選択することと、前記値を実行することと、前記値を加算することとを1または複数回繰り返すことを含む、請求項9に記載のコンピュータプログラム製品。
【請求項11】
コンピューティング環境内の処理を容易にするためのコンピュータシステムであって、前記コンピュータシステムは、
メモリと、
前記メモリと通信する少なくとも1つのプロセッサとを含み、前記コンピュータシステムは、方法を実行するように構成され、前記方法は、
命令によって指定された複合関数を実行することであって、前記複合関数は、前記複合関数の1つの呼び出しの一部として実行される複数の演算を含む、実行することを含み、前記複合関数を前記実行することは、
1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することであって、前記第2のテンソルは乗数を使用して作成された調整された重みテンソルを含む、実行することと、
前記複合関数の1または複数の結果を得るために、バイアステンソルの値を前記1または複数の中間結果に加算することであって、前記1または複数の結果は、出力テンソルの少なくとも一部である、加算することと、
を含む、コンピュータシステム。
【請求項12】
前記複合関数は、別々に起動された複数の演算を置き換えるものであり、前記別々に起動された複数の演算は、少なくとも、入力テンソルと重みテンソルの行列乗算とそれに続くバッチ正規化を含む、請求項11に記載のコンピュータシステム。
【請求項13】
前記方法は、前記調整された重みテンソルを作成することをさらに含み、前記作成することは、前記調整された重みテンソルを提供するために、重みテンソルを前記乗数で乗じることをさらに含む、請求項11または12のいずれか1項に記載のコンピュータシステム。
【請求項14】
前記行列乗算を前記実行することは、
入力テンソルの1または複数のベクトルから第1のベクトルを選択し、前記調整された重みテンソルの1または複数のベクトルから第2のベクトルを選択することと、
前記出力テンソルの要素の中間値を得るために、前記第1のベクトルと前記第2のベクトルのドット積を実行することであって、前記ドット積は、前記第1のベクトルの1または複数の要素と前記第2のベクトルの1または複数の対応する要素の積の合計を含む、実行することと、
を含む、請求項11または12のいずれか1項に記載のコンピュータシステム。
【請求項15】
前記バイアステンソルの前記値を前記加算することは、前記出力テンソルの前記要素の結果の値を提供するために、前記バイアステンソルの要素の値を前記出力テンソルの前記要素の前記中間値に加算することを含む、請求項14に記載のコンピュータシステム。
【請求項16】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、前記コンピュータ実装方法は、
命令によって指定された複合関数を実行することであって、前記複合関数は、前記複合関数の1つの呼び出しの一部として実行される複数の演算を含む、実行することを含み、前記複合関数を前記実行することは、
1または複数の中間結果を得るために、第1のテンソルと第2のテンソルの行列乗算を実行することであって、前記第2のテンソルは乗数を使用して作成された調整された重みテンソルを含む、実行することと、
前記複合関数の1または複数の結果を得るために、バイアステンソルの値を前記1または複数の中間結果に加算することであって、前記1または複数の結果は、出力テンソルの少なくとも一部である、加算することと、
を含む、コンピュータ実装方法。
【請求項17】
前記複合関数は、別々に起動された複数の演算を置き換えるものであり、前記別々に起動された複数の演算は、少なくとも、入力テンソルと重みテンソルの行列乗算とそれに続くバッチ正規化を含む、請求項16に記載のコンピュータ実装方法。
【請求項18】
前記調整された重みテンソルを作成することをさらに含み、前記作成することは、前記調整された重みテンソルを提供するために、重みテンソルを前記乗数で乗じることをさらに含む、請求項16または17のいずれか1項に記載のコンピュータ実装方法。
【請求項19】
前記行列乗算を前記実行することは、
力テンソルの1または複数のベクトルから第1のベクトルを選択し、前記調整された重みテンソルの1または複数のベクトルから第2のベクトルを選択することと、
前記出力テンソルの要素の中間値を得るために、前記第1のベクトルと前記第2のベクトルのドット積を実行することであって、前記ドット積は、前記第1のベクトルの1または複数の要素と前記第2のベクトルの1または複数の対応する要素の積の合計を含む、実行することと、
を含む、請求項16または17のいずれか1項に記載のコンピュータ実装方法。
【請求項20】
前記バイアステンソルの前記値を前記加算することは、前記出力テンソルの前記要素の結果の値を提供するために、前記バイアステンソルの要素の値を前記出力テンソルの前記要素の前記中間値に加算することを含む、請求項19に記載のコンピュータ実装方法。
【国際調査報告】