(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-03-08
(54)【発明の名称】行列乗算演算のための行列の近似のためのデータ圧縮器
(51)【国際特許分類】
G06F 17/16 20060101AFI20240301BHJP
【FI】
G06F17/16 M
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023556919
(86)(22)【出願日】2022-03-11
(85)【翻訳文提出日】2023-10-02
(86)【国際出願番号】 US2022020071
(87)【国際公開番号】W WO2022203884
(87)【国際公開日】2022-09-29
(32)【優先日】2021-03-26
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】スワプニール ピー. サカルシート
(72)【発明者】
【氏名】ピラモド バサント アーゲイド
(72)【発明者】
【氏名】マキシム ヴィー. カザコフ
(72)【発明者】
【氏名】アレクサンダー エム. ポタポフ
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB26
5B056BB71
5B056BB82
5B056CC01
5B056FF01
5B056FF02
(57)【要約】
データを記憶するように構成されたメモリとプロセッサとを備える処理デバイスが提供される。プロセッサは、第1の行列の要素と第2の行列の要素との行列乗算を実行するように構成された複数のMACを備える。また、プロセッサは、第1の行列及び第2の行列の要素の積指数値のビットの値を合計し、行列乗算のために維持される積指数値のための維持ビット値を決定するように構成された複数の論理デバイスを備える。また、プロセッサは、複数のマルチプレクサアレイを備え、各マルチプレクサアレイは、第1の行列及び第2の行列の要素のビットと維持ビット値とを受信し、第1の行列及び第2の行列の何れの要素が行列乗算のためにMACに提供されるかを選択するためのデータを提供するように構成されている。
【選択図】
図3
【特許請求の範囲】
【請求項1】
処理デバイスであって、
データを記憶するように構成されたメモリと、
プロセッサと、を備え、
前記プロセッサは、
第1の行列の要素と第2の行列の要素との行列乗算を実行するように構成された複数の乗算器アキュムレータ(MAC)と、
前記第1の行列及び前記第2の行列の要素の積指数値のビットの値を合計し、行列乗算のために維持される積指数値のための維持ビット値を決定するように構成された複数の論理デバイスと、
複数のマルチプレクサアレイと、を備え、
前記複数のマルチプレクサアレイの各々は、
前記第1の行列及び前記第2の行列の要素のビットと前記維持ビット値とを受信することと、
前記第1の行列及び前記第2の行列の何れの要素が行列乗算のために前記MACに提供されるかを選択するためのデータを提供することと、
を行うように構成されている、
処理デバイス。
【請求項2】
前記複数の論理デバイスは、前記積指数値の対応する重要度のビットの値を合計するように構成されている、
請求項1の処理デバイス。
【請求項3】
前記複数の論理デバイスは、前記積指数値の最上位ビットを合計することから開始し、前記合計の各々を、行列乗算のために維持され前記MACに提供される前記第1の行列及び前記第2の行列の要素の目標数と比較することによって、前記ビットの値を合計するように構成されている、
請求項2の処理デバイス。
【請求項4】
前記第1の行列及び前記第2の行列の要素の目標数が行列乗算のために維持されるように決定され、
前記複数の論理デバイスは、前記積指数値の残りのビットがゼロである場合に、維持される前記第1の行列及び前記第2の行列の要素の目標数のうち何れかを決定するように構成されている、
請求項2の処理デバイス。
【請求項5】
前記複数のマルチプレクサアレイの各々は、
マルチプレクサの第1のアレイであって、各マルチプレクサは、
前記第1の行列及び前記第2の行列のうち何れかの2つの要素と、
前記2つの要素のうち何れを出力するかを選択するための選択値と、
を受信するように構成されている、マルチプレクサの第1のアレイと、
マルチプレクサの第2のアレイであって、各マルチプレクサは、
前記第1の行列及び前記第2の行列のうち何れかの前記2つの要素とは異なる残りの要素と、
前記第1のアレイ内の何れかのマルチプレクサから出力される要素と前記残りの要素とのうち何れを出力するかを選択するための何れかの前記維持ビット値と、
を受信するように構成されている、マルチプレクサの第2のアレイと、を備える、
請求項1の処理デバイス。
【請求項6】
前記マルチプレクサアレイの数は、前記第1の行列及び前記第2の行列の要素の値を表すビットの数に基づいている、
請求項1の処理デバイス。
【請求項7】
前記マルチプレクサアレイは、前記第1の行列の要素を受信するように構成された第1の組のアレイと、前記第2の行列の要素を受信するように構成された第2の組のアレイと、を備える、
請求項1の処理デバイス。
【請求項8】
表示デバイスを更に備え、
前記行列乗算から生成された情報は、前記表示デバイスに表示される、
請求項1の処理デバイス。
【請求項9】
処理デバイスであって、
データを記憶するように構成されたメモリと、
互いに通信する複数のプロセッサコアと、を備え
前記複数のプロセッサコアの各々は、
第1の行列の要素と第2の行列の要素との行列乗算を実行するように構成された複数の乗算器アキュムレータ(MAC)と、
前記第1の行列及び前記第2の行列の要素の積指数値のビットの値を合計し、行列乗算のために維持される積指数値のための維持ビット値を決定するように構成された複数の論理デバイスと、
複数のマルチプレクサアレイと、を備え、
前記複数のマルチプレクサアレイの各々は、
前記第1の行列及び前記第2の行列の要素のビットと前記維持ビット値とを受信することと、
前記第1の行列及び前記第2の行列の何れの要素が行列乗算のために前記MACに提供されるかを選択するためのデータを提供することと、
を行うように構成されている、
処理デバイス。
【請求項10】
前記複数の論理デバイスは、前記積指数値の対応する重要度のビットの値を合計するように構成されている、
請求項9の処理デバイス。
【請求項11】
前記複数の論理デバイスは、前記積指数値の最上位ビットを合計することから開始し、前記合計の各々を、行列乗算のために維持され前記MACに提供される前記第1の行列及び前記第2の行列の要素の目標数と比較することによって、前記ビットの値を合計するように構成されている、
請求項10の処理デバイス。
【請求項12】
前記第1の行列及び前記第2の行列の要素の目標数が行列乗算のために維持されるように決定され、
前記複数の論理デバイスは、前記積指数値の残りのビットがゼロである場合に、維持される前記第1の行列及び前記第2の行列の要素の目標数のうち何れかを決定するように構成されている、
請求項10の処理デバイス。
【請求項13】
前記複数のマルチプレクサアレイの各々は、
マルチプレクサの第1のアレイであって、各マルチプレクサは、
前記第1の行列及び前記第2の行列のうち何れかの2つの要素と、
前記2つの要素のうち何れを出力するかを選択するための選択値と、
を受信するように構成されている、マルチプレクサの第1のアレイと、
マルチプレクサの第2のアレイであって、各マルチプレクサは、
前記第1の行列及び前記第2の行列のうち何れかの前記2つの要素とは異なる残りの要素と、
前記第1のアレイ内の何れかのマルチプレクサから出力される要素と前記残りの要素とのうち何れを出力するかを選択するための何れかの前記維持ビット値と、
を受信するように構成されている、マルチプレクサの第2のアレイと、を備える、
請求項9の処理デバイス。
【請求項14】
前記マルチプレクサアレイの数は、前記第1の行列及び前記第2の行列の要素の値を表すビットの数に基づいている、
請求項9の処理デバイス。
【請求項15】
前記マルチプレクサアレイは、前記第1の行列の要素に対する前記積指数値を受信するように構成された第1の組のアレイと、前記第2の行列の要素に対する前記積指数値を受信するように構成された第2の組のアレイと、を備える、
請求項9の処理デバイス。
【請求項16】
行列乗算とともに使用するための処理デバイスであって、
第1の行列の要素と第2の行列の要素との行列乗算を実行するように構成された複数の乗算器アキュムレータ(MAC)と、
前記第1の行列及び前記第2の行列の要素の積指数値のビットの値を合計し、行列乗算のために維持される積指数値のための維持ビット値を決定するように構成された複数の論理デバイスと、
複数のマルチプレクサアレイと、を備え、
前記複数のマルチプレクサアレイの各々は、
前記第1の行列及び前記第2の行列の要素のビットと前記維持ビット値とを受信することと、
前記第1の行列及び前記第2の行列の何れの要素が行列乗算のために前記MACに提供されるかを選択するためのデータを提供することと、
を行うように構成されている、
処理デバイス。
【請求項17】
前記複数の論理デバイスは、前記積指数値の対応する重要度のビットの値を合計するように構成されている、
請求項16の処理デバイス。
【請求項18】
前記複数の論理デバイスは、前記積指数値の最上位ビットを合計することから開始し、前記合計の各々を、行列乗算のために維持され前記MACに提供される前記第1の行列及び前記第2の行列の要素の目標数と比較することによって、前記ビットの値を合計するように構成されている、
請求項17の処理デバイス。
【請求項19】
前記第1の行列及び前記第2の行列の要素の目標数が行列乗算のために維持されるように決定され、
前記複数の論理デバイスは、前記積指数値の残りのビットがゼロである場合に、維持される前記第1の行列及び前記第2の行列の要素の目標数のうち何れかを決定するように構成されている、
請求項17の処理デバイス。
【請求項20】
前記複数のマルチプレクサアレイの各々は、
マルチプレクサの第1のアレイであって、各マルチプレクサは、
前記第1の行列及び前記第2の行列のうち何れかの2つの要素と、
前記2つの要素のうち何れを出力するかを選択するための選択値と、
を受信するように構成されている、マルチプレクサの第1のアレイと、
マルチプレクサの第2のアレイであって、各マルチプレクサは、
前記第1の行列及び前記第2の行列のうち何れかの前記2つの要素とは異なる残りの要素と、
前記第1のアレイ内の何れかのマルチプレクサから出力される要素と前記残りの要素とのうち何れを出力するかを選択するための何れかの前記維持ビット値と、
を受信するように構成されている、マルチプレクサの第2のアレイと、を備える、
請求項16の処理デバイス。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年3月26日に出願された「DATA COMPRESSOR FOR APPROXIMATION OF MATRICES FOR MATRIX MULTIPLY OPERATIONS」と題する係属中の米国特許出願第17/214,779号の利益を主張し、その全体が参照により本明細書に組み込まれる。本願は、2021年3月26日に出願された「APPROXIMATION OF MATRICES FOR MATRIX MULTIPLY OPERATIONS」と題する特許出願第17/214,784号に関連しており、この出願は、完全に記載されているかのように参照により本明細書に組み込まれる。
【背景技術】
【0002】
行列乗算は、高性能コンピューティング(HPC)及び機械学習における使用を含む、いくつかのアプリケーション領域にわたる重要な構成要素である。また、行列乗算は、畳み込みニューラルネットワーク、リカレントニューラルネットワーク、及び、他の形態の人工ニューラルネットワークにおいて使用される。
【0003】
行列乗算技術は、行列乗算の効率を高めるために並列化を採用する。例えば、2つの行列は、典型的には、より小さい部分(例えば、列、行、並びに、列及び行の一部)に分割され、2つの行列の行列乗算演算は、各々が1つの行列の一部と別の行列の一部との乗算を含む複数の行列乗算計算を実行することによって行われる。行列乗算計算は、行列乗算演算を実行するために、プロセッサネットワークの異なるプロセッサコアにマッピングされ、異なるプロセッサコアによって実行される。
【0004】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0005】
【
図1】本開示の1つ以上の特徴が実装され得る例示的なデバイスのブロック図である。
【
図2】本開示の1つ以上の特徴を実装することができるプロセッサの例示的な構成要素を示すブロック図である。
【
図3】本開示の1つ以上の特徴を実装するための、
図2に示されるデータ圧縮器及びMACの例示的な構成要素を示す図である。
【
図4】本開示の特徴に従って行列乗算のためのデータを選択する例示的な方法を示すフロー図である。
【
図5A】本開示の特徴による近似された積指数値のアレイの第1の例を示す図である。
【
図5B】本開示の特徴による近似された積指数値のアレイの第2の例を示す図である。
【
図5C】本開示の特徴による近似された積指数値のアレイの第3の例を示す図である。
【
図5D】本開示の特徴による近似された積指数値のアレイの第4の例を示す図である。
【
図6】本開示の特徴による、2つの行列A及びBと出力行列Cとの部分行列乗算の一例を示す図である。
【発明を実施するための形態】
【0006】
本明細書で使用される場合、プログラムは、プロシージャ又はルーチン(例えば、演算、計算、機能、プロセス、ジョブ)を実行するために1つ以上のプロセッサを使用して実行される命令のシーケンスを含む。プログラムされた命令及びデータの処理は、これらに限定されないが、プログラムされた命令及びデータのフェッチ、復号、実行のためのスケジューリング、実行及び復号等の複数の処理段階のうち1つ以上を含む。プログラムされた命令は、例えば、オペレーティングシステム等のアプリケーション及び制御プログラムを含む。プロセッサは、例えば、複数の処理コア(例えば、計算ユニット(CU))を含み、それらの各々は、行列乗算を実行する命令等のプログラム命令を読み出して実行するように構成される。
【0007】
行列乗算は、第1の行列及び第2の行列のデータのサブ部分のドット積を計算することを含む。行列乗算演算は、計算C=A×Bを含み、式中、A、B、Cは、それぞれサイズM×K、K×N及びM×Nの行列である。行列C内の各要素は、行列Aの行と行列Bの列とのドット積である。例えば、乗算累算演算は、各値が行列の一部分(例えば、行、列、行若しくは列の一部、又は、複数の行若しくは列)の要素に対応する、値の対の積を計算し、乗算器アキュムレータ(MAC)として知られるハードウェア構成要素を使用して、その積をアキュムレータに加算する。例えば、64×64の積は、4つの16×16のMAC又は8個の8×8のMACとして実装することができる。行列乗算は、通常、多くの計算を必要とし、これは時間がかかり、高価である。
【0008】
本願は、行列乗算の近似を効率的に実行するためのデバイス及び方法を提供する。本開示の特徴は、入力行列の行列乗算のドット積計算のために使用される積から、2つの行列の共通次元Kに沿って、いくつかの積(すなわち、2つの入力行列の要素の対の積)をドロップすることによって、出力行列を動的に決定するように構成されたデータ圧縮ハードウェアを含む。ドロップされた積は、ドット積計算に使用される積の中で最小の指数合計を有するものとして近似された積である。
【0009】
データ圧縮ハードウェアは、維持論理及びマルチプレクサアレイのセットを含む。維持論理は、近似された積指数値に基づいて維持ビット値を決定し、2つの行列のデータ要素のアレイの中で何れの要素が維持され(すなわち、ドロップされない)、行列乗算のためにMACに提供されるかを決定するために、マルチプレクサアレイのセットに維持ビット値を提供するように構成されている。維持論理は、積指数値の最上位ビット(MSB)を合計することから開始し、対応する次の上位ビットの各セットを通して継続して、近似された積指数値の各々について同じ重要度のビット値を合計し、合計を目標数(例えば、6)と比較することによって、各行列の要素値のアレイの中から、維持される要素値の目標数を決定する。本開示の特徴は、入力アレイの要素をそれらの値に従って最初にソートすることなく、積の数を低減することであり、そうでなければ、ハードウェアで実装するのに費用がかかる。
【0010】
例えば、64×64の積は、64×64の積値の中で最大の近似された48個の積値を維持する(すなわち、最小の16個の近似値をドロップする)ことによって、48×48の積に減らされる。例として、64×64の積が16×16のMACとして実装される場合、4つの16×16のMACが3つの16×16のMACに削減され、その結果、タスクを実行するための時間が25%削減され、タスクを実行するためのエネルギーコストが削減される。同様に、64×64の積が8×8のMACとして実装される場合、8個の8×8のMACが6個の8×8のMACに削減され、これも25%の削減時間をもたらす。行列乗算を実行するために維持され、MACに提供される要素値の目標数、又は、積値からドロップされる積値(すなわち、ドロップされた積値)の目標数は、任意の数であってもよく、特定のタスク又はアプリケーションのための近似によって許容され得る結果誤差の量等のように、ランタイム中の様々な要因に基づいて決定される。例えば、機械学習訓練のために使用される場合、ドロップされると決定される積の目標数は、結果として生じるネットワークの精度に近似が及ぼす影響に基づく。また、ドロップされる積値の目標数は、共通次元Kのサイズに基づいて決定され得る。例えば、ヒューリスティックに基づいて、Kのより大きい値に対して追加の積値がドロップされ、Kのより低い値に対して追加の積値が維持されMACに提供され得る。
【0011】
本開示の特徴は、floatデータタイプ(例えば、FP32、FP16及びBF16フォーマット)及び整数データタイプ(例えば、int8フォーマット)等の様々な異なるデータタイプに対して行列乗算を実行することを含む。
【0012】
データを記憶するように構成されたメモリとプロセッサとを備える処理デバイスが提供される。プロセッサは、第1の行列の要素と第2の行列の要素との行列乗算を実行するように構成された複数のMACを備える。また、プロセッサは、第1の行列及び第2の行列の要素の積指数値のビットの値を合計し、行列乗算のために維持される積指数値のための維持ビット値を決定するように構成された複数の論理デバイスを備える。また、プロセッサは、複数のマルチプレクサアレイを備え、各マルチプレクサアレイは、第1の行列及び第2の行列の要素のビットと維持ビット値とを受信し、第1の行列及び第2の行列の何れの要素が行列乗算のためにMACに提供されるかを選択するためのデータを提供するように構成されている。
【0013】
データを記憶するように構成されたメモリと、互いに通信する複数のプロセッサコアと、を備える処理デバイスが提供される。各プロセッサコアは、第1の行列の要素と第2の行列の要素との行列乗算を実行するように構成された複数のMACと、第1の行列及び第2の行列の要素の近似された積指数のビットの値を合計し、維持ビット値を生成するように構成された複数の論理デバイスと、複数のマルチプレクサアレイであって、各々が、積指数及び維持ビット値を受信し、積指数のうちのどれが行列乗算のためにMACに提供されるかを選択するためのデータを提供するように構成された、複数のマルチプレクサアレイと、を備える。
【0014】
第1の行列の要素と第2の行列の要素との行列乗算を実行するように構成された複数のMACを備える行列乗算に使用される処理デバイスが提供される。また、処理デバイスは、第1の行列及び第2の行列の要素の積指数値のビットの値を合計し、行列乗算のために維持される積指数値のための維持ビット値を決定するように構成された複数の論理デバイスを備える。処理デバイスは、複数のマルチプレクサアレイを更に備え、各々は、積指数値のビット及び維持ビット値を受信し、行列乗算のために積指数のうち何れがMACに提供されるかを選択するためのデータを提供するように構成されている。
【0015】
図1は、本開示の1つ以上の特徴が実装され得る例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス100は、プロセッサ102、メモリ104、記憶装置106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含む。デバイス100は、
図1に示されていない追加の構成要素を含み得ることを理解されたい。
【0016】
様々な代替例では、プロセッサ102は、中央処理ユニット(central processing unit、CPU)、グラフィックス処理ユニット(GPU)、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコア等の任意の高速処理デバイスを含み、各プロセッサコアは、CPU又はGPUとすることができる。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置するか、又は、プロセッサ102とは別に位置する。メモリ104は、揮発性又は不揮発性メモリ(例えば、ダイナミックRAM(DRAM)及びスタティックRAM(SRAM)を含むランダムアクセスメモリ(random access memory、RAM))を含む。RAMは、例えば、キャッシュメモリ、スクラッチパッドメモリ及びレジスタを含む。
【0017】
記憶装置106は、固定又はリムーバブル記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0018】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信できるようにする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信できるようにする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であること、並びに、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合に、同じ方式で動作することに留意されたい。
【0019】
本開示の特徴は、プロセッサコアの一例としてCUを使用して本明細書で説明される。CUは、SIMDパラダイムに従って並列方式でプロセッサ102の要求時に演算を実行するように構成された1つ以上の単一命令複数データ(SIMD)ユニットを含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。一例では、各SIMDユニットは、16個のレーンを含み、各レーンは、SIMDユニット内の他のレーンと同時に同じ命令を実行するが、その命令を異なるデータで実行することができる。レーンは、全てのレーンが所定の命令を実行する必要がない場合、予測でオフに切り替えることができる。また、予測は、分岐制御フローを有するプログラムを実行するために使用することができる。より具体的には、制御フローが個々のレーンによって行われる計算に基づいている条件付き枝又は他の命令を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスのシリアル実行が、任意の制御フローを可能にする。CUによって与えられる並列性は、例えば、ピクセル値計算、頂点変換及び他のグラフィックス演算等のグラフィックス関連演算において使用される行列乗算等の行列乗算に適している。
【0020】
図2は、本開示の1つ以上の特徴を実施することができる、
図1に示すプロセッサ102の一例を示すブロック図である。
図2に示すように、プロセッサ102は、複数のCU202を含む。各CU202は、対応するレベルNキャッシュ204と通信し、対応するレベルNキャッシュ204を使用してデータを処理するように構成されたレベルN(例えば、レベル1)キャッシュコントローラ208を含む。代替的に、複数のレベルNキャッシュコントローラ208(例えば、各CU202のためのキャッシュコントローラ208、各々がCU202のグループと通信する複数のキャッシュコントローラ208)が、データを処理するために使用される。
【0021】
図2に示すように、プロセッサ102は、レベルN+1キャッシュ206と通信するレベルN+1(例えば、レベル2)キャッシュコントローラ210を含み、レベルN+1キャッシュ206を使用してデータを処理するように構成されている。あるいは、1つ以上の対応するレベルN+1キャッシュと通信する複数のレベルN+1キャッシュコントローラが、データを処理するために使用される。
図2に示されるように、キャッシュコントローラ210は、次のキャッシュレベル(例えば、レベル3)及び各レベルNキャッシュコントローラ208とも通信する。加えて又は代わりに、各CU202は、レジスタ及びスクラッチパッドメモリ等の異なるタイプのメモリ104と通信する。
【0022】
図2に示されるように、各CU202は、MAC212と、MAC212と通信するデータ圧縮器214と、を含む。MAC212は、行列の部分の要素対の積(例えば、近似積指数値)を計算し、行列乗算演算を実行するために積を累積する(例えば、記憶する)ように構成されている。
【0023】
例えば、2つの行列は、典型的には、より小さい部分(例えば、列、行、並びに、列及び行の一部)に分割され、2つの行列の行列乗算演算は、各々が1つの行列の一部と別の行列の一部との乗算を含む複数の行列乗算計算を実行することによって行われる。行列乗算計算は、行列乗算演算を実行するために、異なるプロセッサコア(例えば、CU202)にマッピングされ、異なるプロセッサコアによって実行される。
【0024】
2つの行列A及びBと出力行列Cとの部分行列乗算の一例が
図6に示されている。行列乗算演算は、計算C=A×Bを含み、式中、A、B、Cは、それぞれサイズM×K、K×N、M×Nの行列である。行列Cの各要素は、行列Aの行と行列Bの列とのドット積である。行列A及び行列Bは、
図6の上部に示されている。例えば、行列A及びBの行列乗算の一部は、本開示の特徴によれば、行列Bの要素アレイ602の4つの要素602(1)~602(4)と、行列Bのアレイ604の4つの対応する要素604(1)~604(4)との積値を近似して、行列Cの部分1(P1)における結果を生成することによって実行される。
【0025】
図6では、行列Aと行列Bのサイズが異なるが、一方の行列の列数と他方の行列の行数とが同じであれば、行列同士の行列乗算演算を行うことができる。
図6に示す例では、行列Aは8個の列を含み、行列Bは8個の行を含む。行列A及びBにおける列及び行の数は、単なる例である。行列乗算は、本開示の特徴に従って、行列乗算のための一般規則を満たす任意のサイズの行列に対して実行される(例えば、行列Aにおける列の数は、行列Bにおける行の数に等しい)。
【0026】
図3に関して以下でより詳細に説明するように、データ圧縮器214は、入力行列の行列乗算のドット積計算のために使用される積から、2つの行列の共通次元Kに沿って、いくつかの積(すなわち、2つの入力行列の要素の対の積)をドロップすることによって、出力行列Cを動的に決定するように構成されたハードウェア回路を含む。ドロップされた積は、ドット積計算に使用される積の中で最小の指数合計を有するものとして近似された積である。
【0027】
図3は、本開示の1つ以上の特徴を実装するための、
図2に示されるデータ圧縮器214及びMAC212の例示的な構成要素を示す図である。
図3に示すように、データ圧縮器214は、各々が6個のマルチプレクサを有するマルチプレクサアレイ300の維持論理306セットを含む。
図3に示されるマルチプレクサの数は、8個のデータ要素のアレイから6個の要素を選択するための例として使用される。本開示の特徴は、行列の部分のサイズ及び行列乗算のために維持されるターゲット積の数に応じて、異なる数のマルチプレクサを含むことができる。
【0028】
維持論理306は、近似された積値に対して異なる計算を実行するように構成された、例えば、固定関数論理デバイス、算術回路、シーケンシャル論理デバイス(例えば、フリップフロップ、カウンタ及びレジスタ)及びプログラマブル論理デバイス等の論理回路を含む。維持論理306は、マルチプレクサアレイ300のセットに供給される維持信号を生成し、8個のデータ要素のアレイから何れの6個の要素が維持され、行列乗算のためにMAC212に供給されるかを決定する。例えば、以下でより詳細に説明するように、維持論理306は、積指数値の最上位ビットから開始して、積指数の対応する重要度のビットの値を合計し、積指数値の目標数が決定されるまで、合計の各々を積指数値の目標数(例えば、6)と比較するために使用される。
【0029】
図3に示されるマルチプレクサアレイ300の各セットは、行列Aの対応する8個の要素値(すなわち、A0~A7)の各々について同じ重要度のビットを受信するように構成され、維持論理306によって決定される維持信号(K0~K7)を受信するように構成される。マルチプレクサアレイ300によって提供される出力値(例えば、A’0、A’1、A’2、A’3、A’4及びA’5)は、行列乗算のためにMAC212に提供されるように選択される8個の要素のうち6個に対応する。維持されるように選択された6個の要素は、第2の行列Bからの6個の対応する要素と乗算された場合に、8個の積値のうち6個の最大積値を生成するように決定される要素である。
【0030】
積値は、オペランドA及びBの指数の合計に累乗された2によって近似される。しかしながら、MACユニット212が正確な乗算を行う場合、仮数値も乗算され、値が丸められる。結果として、A及びBのドロップされた値の正確な積のうち1つ以上は、維持された値よりも大きい可能性があり、これは、機械学習等のアプリケーションの場合、ネットワークの精度の小さいが許容可能な低下をもたらす可能性がある。加えて、精度のわずかな低下の可能性は、行列乗算演算を実行する時間の短縮(例えば、上記のような時間の25%の短縮)が重要である。
【0031】
図3に示すように、N個のアレイを使用して、行列Aの8個の要素値(A0~A7)のそれぞれについて同じ重要度のビットを受信し、ここでNは各要素値のビット数である。例えば、行列Aの要素値の各々が4ビットを含む場合、4組のマルチプレクサアレイ300が行列Aに使用される。マルチプレクサアレイ300の各組は、要素の重要度の対応するビットと、維持論理306からの維持信号と、を並列に受信する。すなわち、マルチプレクサアレイの第1のセットは、行列Aの8個の要素値の最上位ビット(すなわち、第1のビット)を受け取り、マルチプレクサアレイの第2のセット300は、行列Aの8個の要素値の次に最上位のビット(すなわち、第2のビット)を受け取り、マルチプレクサアレイの第3のセット300は、行列Aの8個の要素値の第3のビットを受け取り、マルチプレクサアレイの第4のセット300は、行列Aの8個の要素値の最下位ビットを受け取る。
【0032】
加えて、データ圧縮器214は、維持論理306から要素値及び維持信号の重要度の対応するビットを並列に受信するように構成されたマルチプレクサアレイ300の組も含む。したがって、要素値(B0~B7)の各々が4ビットを含む例では、4組のマルチプレクサアレイ300も行列Bに使用される。行列Bに使用されるマルチプレクサアレイ300の組のアーキテクチャ及び行列Bに使用されるマルチプレクサアレイ300の組の機能は、行列Aに関して図示及び説明されたマルチプレクサアレイ300の組と同じである(行列Bに使用されるマルチプレクサアレイ300がビットを受信し、行列Bに関連付けられた信号を維持することを除く)。したがって、行列Bに使用されるマルチプレクサアレイの組の詳細な説明及び図示は、不要であるので省略する。
【0033】
図3に示されるように、マルチプレクサアレイ300の各組は、マルチプレクサ302の第1のアレイ及びマルチプレクサ304の第2のアレイを含む。マルチプレクサの第1のアレイ302は、6個のマルチプレクサ302(1)、302(2)、302(3)、302(4)、302(5)、302(6)を含む。マルチプレクサの第2のアレイ304は、6個のマルチプレクサ304(1)、304(2)、304(3)、304(4)、304(5)、304(6)を含む。
図3に示される第1及び第2のアレイ302及び304内のマルチプレクサの数は、行列の8個の入力要素が6個に削減される場合の例として使用されるに過ぎない。本開示の特徴は、任意の数のマルチプレクサを有するマルチプレクサアレイを使用して実装され得る。
【0034】
図3に示されるように、マルチプレクサアレイ300の第1のセットの第1のアレイ302内の各マルチプレクサ302(1)~302(6)は、行列Aの第7の要素値(A6)からビット値を受け取り、行列Aの第8の要素値(A7)からビット値を受け取る。第1のアレイ302内の各マルチプレクサ302(1)~302(6)は、対応するU値(すなわち、U0、U1、U2、U3、U4、U5)を受信し、ここで、U0=K6(要素値A6の維持信号値)、U1=K0&&U0(すなわち、K0及びK6が両方とも1である場合のU1=1の値)、U2=K1&&K0&&U0、U3=K2&&K1&&K0&&U0、U4=K3&&K2&&K1&&K0&&U0、及びU5=K4&&K3&&K2&&K1&&K0&&U0である。
【0035】
第2のアレイ304内の各マルチプレクサ304(1)~304(6)は、行列A(A0~A5)の対応する要素値からのビット値、及び、対応する維持ビット値(すなわち、K0~K5)を受信する。マルチプレクサアレイ302及び304の機能の例は、
図4のブロック412~420に関して以下で説明される。
【0036】
図4は、本開示の特徴に従って行列乗算のためのデータを選択する例示的な方法400を示すフロー図である。上述したように、2つの行列は、典型的には、より小さい部分(例えば、列、行、並びに、列及び行の一部)に分割され、2つの行列の行列乗算演算は、各々が1つの行列の一部と別の行列の一部との乗算を含む複数の行列乗算計算を実行することによって行われる。
【0037】
2つの行列A及びBと出力行列Cとの部分行列乗算の一例が
図6に示されている。行列乗算演算は、計算C=A×Bを含み、式中、A、B、Cは、それぞれサイズM×K、K×N、M×Nの行列である。行列Cの各要素は、行列Aの行と行列Bの列とのドット積である。行列A及び行列Bは、
図6の上部に示されている。例えば、行列A及びBの行列乗算の一部は、本開示の特徴によれば、行列Bの要素アレイ602の4つの要素602(1)~602(4)と、行列Bのアレイ604の4つの対応する要素604(1)~604(4)と、の積値を近似して、行列Cの部分1(P1)における結果を生成することによって実行される。
【0038】
図6では、行列Aと行列Bのサイズが異なるが、一方の行列の列数と他方の行列の行数とが同じであれば、行列同士の行列乗算演算を行うことができる。
図6に示す例では、行列Aは8個の列を含み、行列Bは8個の行を含む。行列A及びBにおける列及び行の数は、単なる例である。行列乗算は、本開示の特徴に従って、行列乗算のための一般規則を満たす任意のサイズの行列に対して実行される(例えば、行列Aにおける列の数は、行列Bにおける行の数に等しい)。
【0039】
再び
図4を参照すると、ブロック402及び404に示されるように、方法500は、第1の行列Aのデータの一部(データA[8])及び第2の行列Bのデータの一部(データB[8])を(例えば、CU202のデータ圧縮器214によって)受信することを含む。
図4に示される例では、データの各部分は8個の要素(すなわち、値)を含む。すなわち、行列Aの8要素のデータは、
図4においてDataA[8]として表され、行列Bの8要素のデータは、
図4においてDataB[8]として表される。ただし、
図4に示す要素の数は一例に過ぎない。データの部分は、行列乗算を実行するためにMAC212に提供される任意の数の要素を含むことができる。
【0040】
第1の行列及び第2の行列のデータの部分は、例えば、整数データタイプ(例えば、int8フォーマット)及びfloatデータタイプ(例えば、BF16フォーマット)等、複数のデータタイプのうち何れか1つであり得る。各要素を表すビット数は、使用されるfloatフォーマット(例えば、FP32、FP16、BF16)及び整数フォーマット(例えば、int8、int16、int32)に依存する。例えば、floatフォーマットBF16の場合、各要素は16ビットで表され、各指数は8ビットで表される。
【0041】
ブロック406及び408に示されるように、方法300は、第1の行列A及び第2の行列Bのデータの部分内の要素から指数を抽出することを含む。すなわち、指数は、第1の行列Aの8個の要素のそれぞれから抽出され(ブロック406において「EA[8]=指数抽出(A[8])」として示される)、指数は、第2の行列Bの8個の要素の各々から抽出される(ブロック408において「EB[8]=指数抽出(B[8])」として示される)。
【0042】
第1及び第2の行列のデータの部分の要素がfloatデータタイプである場合、指数値は、単に各要素の指数ビットから抽出することができる。例えば、要素がBF16フォーマットである場合、第1のビットは符号ビットであり、ビット2~9は指数ビットであり、ビット10~16は仮数ビットである。したがって、ビット2~9の値から指数値を抽出することができる。
【0043】
第1の行列A及び第2の行列Bのデータの部分の要素が整数データタイプ(int8)である場合、指数は、データの各サブ部分の要素(Aa[8]、Ba[8])の絶対値を決定し、各要素についてドロップされる先行するゼロの数を決定し、各要素を1として表すことによって、抽出される。M*2e(ここで、Mは要素値の仮数であり、eは要素値の指数である)、各要素の指数値を[ビット数-1]-LAとして近似する(ここで、LAは要素の先行するゼロの数である)。
【0044】
例として、第1の行列(Aa[1])の第1の要素の絶対値が00001011である場合、4つの先行するゼロがドロップされると決定される。要素は1.011*2eとして表され、A[1]に対する指数値(e)は、[ビット数-1]-LA=7-4=3として計算される。第2の行列(Ba[1])の第1の要素の絶対値が00101111である場合、2つの先行するゼロがドロップされると決定される。要素は1.01111*2eとして表され、A[1]に対する指数値(e)は、[ビット数-1]-LB=7-2=5として計算される。したがって、A[1]とB[1]の近似積(P)の指数は、14-(LA+LB)=14-8=6と求められる。
【0045】
同じプロセスが実行されて、第1の行列Aのサブ部分の残りの7つの要素(A[2-8])と、第2の行列Bのサブ部分の対応する残りの7つの要素(B[2-8])と、の近似積が求められる。
【0046】
ブロック410において、第1及び第2の行列の8個の対応する要素対の積値(すなわち、積)が近似される。すなわち、第1の対応する要素対の積は、行列Aの第1の要素及び行列Bの第1の要素の抽出された指数の合計(すなわち、EA[1]+EB[1])として近似され、第2の要素対の積は、行列Aの第2の要素及び行列Bの第2の要素の抽出された指数の合計(すなわち、EA[2]+EB[2])として近似され、8個の対応する要素対の各々の積が近似される(ブロック410においてEP[8]=EA[8]+EB[8]として示される)まで、以下同様である。
【0047】
ブロック412に示すように、近似積値EP[8]は、維持論理306を使用して分析され、分析に基づいて、維持信号K[8]が生成される。維持信号K[0]~K[5]がマルチプレクサ302に提供され、維持信号K[6]がマルチプレクサ304に提供され(ここで、維持信号K7の値はK0~K6の値から推測される)、何れの6個の要素が行列A及び行列Bの両方から選択され、行列乗算のためにMAC212に提供されるかを決定する。ブロック414及び416に示すように、行列Aからの8個のデータ要素(データA[8])及び8個のデータ要素(データB[8])が再び受信される。行列Aからの6個の要素(A’[6])及び行列Bからの6個の要素(B’[6])は、ブロック418及び420に示されるように、マルチプレクサアレイ302及び304の出力に基づいて、MAC212に提供される8個のデータ要素(すなわち、dataSelect(A[8]及びdataSelect(B[8])))の中から選択される。
【0048】
次に、近似積値E
P[8]を分析し、維持信号(K[8])を生成する例を、
図5A~
図5Dに示す積指数値の4つの異なるアレイの例を使用して説明する。簡略化のために、
図5A~
図5Dに示す積指数値は4ビット値である。しかしながら、本開示の特徴は、任意の数のビットを有する積指数値に対して実装され得る。更に、以下で説明する例では、8個の積指数値のアレイが使用され、維持ビット値が、対応する積指数値ごとに決定される。維持論理306は、維持されると決定された8個の積指数値のうち6個に対応する6個の維持ビットに対して真の値(例えば、1の値)が生成され、ドロップされると決定された積指数値の残りの2つの目標数に対応する2つの維持ビット値に対して偽の値(例えば、0の値)が生成されるように構成される。しかしながら、本開示の特徴は、積指数値の任意の数及びドロップされる積指数値の任意の目標数に対して実装され得る。例えば、A及びBの8個の積指数値のうち5つの積指数値が維持されるべきである場合、維持論理306は、維持されると決定された8個の積指数値のうち5つに対応する5つの維持ビットについて真の値を生成するように構成され、ドロップされると決定された積指数値の残りの3つの目標数に対応する3つの維持ビット値について偽の値が生成される。
【0049】
図5Aから
図5Dに示されるアレイの各々について、何れの維持信号が真であり、何れの維持値が偽であるかの決定は、積指数値の最上位ビットから開始して、積指数の対応する重要度のビットの値を合計することと、維持ビット値の目標数が真であると決定されるまで、合計の各々を積指数値の目標数(例えば、A及びBの8個の値のうち6個が維持されるべきである場合、6)と比較することと、を含む。
【0050】
例えば、
図5Aに示される8個の積指数値のアレイに対して、8個の積指数値のMSBが合計される。この場合、8個の積指数値のMSBの合計は6であり、これは、維持される6個の積指数値の目標数に等しい。MSBが1である6個の積指数値は、維持される積指数値として決定され、維持ビットは、MSBが1である積指数値に対して1に設定される。すなわち、第1の積指数値E
p[0]、第2の積指数値E
p[1]、第3の積指数値E
p[2]、第5の積指数値E
p[4]、第6の積指数値E
p[5]、第8の積指数値E
p[7]については、MSBが1であるので、対応する維持ビット値K0、K1、K2、K4、K5を1に設定し、K0~K6の値からK7の維持ビット値を1と推定する。MSBが0である2つの積指数値は、ドロップされる積指数値として決定され、維持ビット値K3及びK6は、0に設定される。
【0051】
図5Bに示されている8個の積指数値のアレイの場合、8個の積指数値のMSBの合計は8であり、これは、維持されるA及びBの6個の値の目標数よりも大きい。MSBの合計が6より大きい場合、8個の積指数値の次に低い重要度のビットが合計される。この場合、「11」で始まる8個の積指数値の次に低い重要度のビット(すなわち、第2のビット)の合計は4に等しい。したがって、「11」で始まる積指数値は、4つの最大積指数値として識別され、対応する維持ビットは、「11」で始まる積指数値に対して1に設定される。すなわち、第1の積指数値E
p[0]、第2の積指数値E
p[1]、第4の積指数値E
p[3]及び第8の積指数値E
p[7]の各々は「11」で始まるので、対応する維持ビット値K0、K1、K3は1に設定され、K7の維持ビット値はK0~K6の値から1と推定される。しかしながら、4つの最大積指数値は目標数6より2小さいので、「101」で始まる積指数値が識別され、「101」で始まる積指数値の次の最下位ビット(すなわち、第3のビット)が合計され、その結果が前の合計に加算される。この場合、「101」で始まる積指数値の第3のビットの合計は2に等しく、これは、前の合計4に加算されると、目標数6に等しい。したがって、「101」で始まる2つの積指数値も、維持される積指数値として識別される。すなわち、第5の積指数値E
p[4]及び第6の積指数値E
p[5]は、各々「101」で始まるので、対応する維持ビット値K4及びK5も1に設定され、ドロップされる残りの2つの積指数値に対応する維持ビット値K2及びK6は、0に設定される。
【0052】
図5Cに示されている8個の積指数値のアレイの場合、8個の積指数値のMSBの合計は8であり、これは、維持される入力行列A及びBの6個の値の目標数よりも大きい。上述したように、MSBの合計が6より大きい場合、8個の積指数値の次に低い重要度のビットが合計される。この場合(
図5Bに示す積指数値について上述した場合と同じ)、8個の積指数値の次に低い重要度のビット(すなわち、第2のビット)の合計は4に等しい。したがって、「11」で始まる積指数値は、維持される4つの値として識別される。したがって、K0、K1、K3及びK7に対する維持ビット値は、積指数値に対して「11」から開始して1に設定される。しかし、4つの最大積指数値は目標数6より2小さいので、「101」で始まる積指数値が識別され、「101」で始まる積指数値の次の最下位ビット(すなわち、第3のビット)が合計され、前の合計4に加算される。この場合、「101」で始まる積指数値の第3のビットの合計は3に等しく、これは、前の合計4に加算されると、7に等しい。7の合計は6の目標数より大きいので、「1011」で始まる8個の積指数値の最下位ビット(すなわち、第4のビット)が合計され、これは再び3に等しく、4の前の合計に加算されると再び6の目標数より大きい。この場合、加算されるビットがなくなり、前の合計の総数が目標数より大きいので、「1011」で始まる最初の2つの積指数値(E
p[4]及びE
p[5])も維持される。したがって、維持ビット値K4及びK5は1に設定され、ドロップされる残りの2つの積指数値に対応する維持ビット値K2及びK6は0に設定される。
【0053】
図5Dに示される8個の積指数値のアレイに関して、8個の積指数値のMSBの合計は8であり、これは、維持される6個の積指数値の目標数よりも大きい(これは、
図5B及び
図5Cに示される積指数値に関して上述した場合と同じである)。ただし、この場合、残りの各ビットはゼロである。この場合、アレイ内の最初の6個の積指数値が維持される。すなわち、維持ビットは、目標数の積指数値(例えば、アレイ中の最初の6つの値)の何れかについて1に設定される。
【0054】
第Nのビット位置(例えば、
図5-5Cに示される値の第1、第2、第3又は第4のビットに対応する位置)に対する維持論理306のハードウェア実装の一例は、以下の通りである:
データ入力(Data Input)I
i
N、第Nビットに入力される第iデータ、i=0,1,...7
合計(Total)T
N=合計(Sum)(I
i
N&&Q
i
N+1)
累積合計(Accumulated Sum)A
N=C
N+1+(D
N+1?0:T
N)
イネーブル(Enable)E
N=(T
N!=0)&&(A
N<=(8-2))
//コメント:8の2つの値がドロップされる
反転(Invert)V
N={(T
N!=0)&&(A
N<(8-2))}||(T
N==0)
品質(Qualify)Q
i
N=Q
i
N+1&&(V
N?!I
i
N:I
i
N)
【0055】
第Nの位置のビットを選択するための維持論理306のハードウェア実装の一例は、以下の通りである:
Done DN=DN+1
カウント(Count)CN=CN+1
i=0~7の場合
{
維持(Keep)Ki
N=Ii
N&&Qi
N+1&&EN&&!DN
CN=CN+Ki
N
DN=(CN==(8-2))
}
【0056】
第-1の位置(
図5C及び
図5Dにおける最下位ビットの右側のビット位置)におけるビットを選択するための維持論理306のハードウェア実装の一例は、以下の通りである:
Done D
N=D
N+1
カウント(Count)C
N=C
N+1
I=0~7の場合
{
K
i
N=Q
i
N+1&&!D
N
C
N=C
N+K
iN
D
N=(C
N==(8-2))
}
維持(Keep)i=ΣK
i
Nであり、式中、sumは、Kの全ての値にわたるORを表す
【0057】
次いで、行列乗算が、行列Aから選択された6つのデータ要素及び行列Bから選択された6つのデータ要素に対して実行される。加えて、行列乗算演算によって生成された情報は、表示デバイス(例えば、
図1の出力デバイス110)上に表示され得る。
【0058】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上に説明されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
【0059】
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実装することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後半導体製造プロセスにおいて使用して、本開示の特徴を実装するプロセッサを製造する。
【0060】
本明細書に提供される方法又はフロー図は、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実装することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。
【国際調査報告】