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

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

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

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