(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-07-07
(45)【発行日】2022-07-15
(54)【発明の名称】行列入力を行列プロセッサ用のベクトル化入力に変換するためのシステムおよび方法
(51)【国際特許分類】
G06F 17/16 20060101AFI20220708BHJP
G06F 17/10 20060101ALI20220708BHJP
【FI】
G06F17/16 M
G06F17/10 A
G06F17/16 C
(21)【出願番号】P 2020529454
(86)(22)【出願日】2018-12-11
(86)【国際出願番号】 US2018065036
(87)【国際公開番号】W WO2019118517
(87)【国際公開日】2019-06-20
【審査請求日】2020-07-28
(32)【優先日】2017-12-12
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】510192916
【氏名又は名称】テスラ,インコーポレイテッド
(74)【代理人】
【識別番号】110000659
【氏名又は名称】弁理士法人広江アソシエイツ特許事務所
(72)【発明者】
【氏名】バノン,ピーター ジョセフ
(72)【発明者】
【氏名】マギー,ウィリアム エー.
(72)【発明者】
【氏名】タルペス,エミル
【審査官】久保 光宏
(56)【参考文献】
【文献】米国特許出願公開第2016/0342893(US,A1)
【文献】米国特許出願公開第2016/0379109(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F17/10-17/16
G06N3/02-3/10
G06F9/38
G06F15/16-15/177
CSDB(日本国特許庁)
IEEEXplore(IEEE)
(57)【特許請求の範囲】
【請求項1】
行列乗算システムに含まれる行列データを行列プロセッサの入力にマッピングするための方法であって、
前記行列乗算システムに含まれるシーケンサを介して、フィルタサイズまたはストライドの1つまたは複数を示す1つまたは複数のフィルタパラメータを受け取るステップであって、前記シーケンサは、第1の行列データおよび第2の行列データを含む複数の入力データを識別し、前記第1の行列データおよび前記第2の行列データはベクトル化され、前記行列プロセッサの入力列として使用されて前記シーケンサは、前記フィルタパラメータに従ってメモリの位置から前記入力データを選択することで、前記入力データが前記行列プロセッサ内の予想される位置に一致するようにフォーマットされる、ステップと、
前記行列プロセッサによって処理されるべき
前記第1の行列データを受け取るステップ
であって、前記行列プロセッサは、M×N行列として配置された複数のハードウェア要素を備える、ステップと、
前記行列プロセッサに関連付けられた入力ベクトルの長さを識別するステップと、
第1の要素ごとのシーケンス演算を使用して、前記第1の行列データを前記入力ベクトルにマッピングするステップ
であって、第1のデータ要素が、前記第1の行列データを含む畳み込み演算の第1のサイクルに従って、前記入力ベクトル内に配置され、前記入力ベクトルが前記行列プロセッサに整列される、ステップと、
前記行列プロセッサによって処理されるべき
前記第2の行列データと、冗長である前記第1の行列データ内の少なくとも1つの
冗長要素を識別するステップと、
前記少なくとも1つの冗長要素が、キャッシュ内に記憶されたローカルコピーからロードされるように構成されるように、前記少なくとも1つの冗長要素を
前記キャッシュ内に記憶するステップと、
第2の要素ごとのシーケンス演算を使用して、前記第2の行列データを前記入力ベクトルにマッピングするステップ
であって、第2のデータ要素が、前記畳み込み演算の第2のサイクルに従って、前記入力ベクトル内に配置される、ステップと、
前記キャッシュから前記少なくとも1つの冗長要素を取得するステップと、を含む、方法。
【請求項2】
前記第1の行列データおよび前記第2の行列データが、1つまたは複数の畳み込み演算に関連する、請求項1に記載の方法。
【請求項3】
前記キャッシュから前記少なくとも1つの冗長要素を検索することが、
メモリの外部から前記少なくとも1つの冗長要素を検索することを必要としないように、前記キャッシュがローカルな記憶位置である、請求項1に記載の方法。
【請求項4】
前記入力ベクトルの長さを識別する前記ステップに関連する前記行列プロセッサの少なくとも1つのハードウェア構成を識別するステップをさらに含む、請求項1に記載の方法。
【請求項5】
前記入力ベクトルの長さが、畳み込みパラメータ
に基づいている、請求項
4に記載の方法。
【請求項6】
前記畳み込みパラメータが、3次元データ行列を表す1つまたは複数のアドレスを含む、請求項
5に記載の方法。
【請求項7】
前記畳み込みパラメータが、フィルタサイズ、重みの数、およびストライドのうちの少なくとも1つを含む、請求項
6に記載の方法。
【請求項8】
前記第1の行列データを前記入力ベクトルにマッピングするステップが、前記行列プロセッサのハードウェア構成に少なくとも部分的に基づいて、前記第1の行列データを前記入力ベクトルに整列させるステップを含む、請求項1に記載の方法。
【請求項9】
前記冗長要素を決定するためにフィルタサイズおよびストライドのうちの少なくとも1つを使用する状態機械をさらに備える、請求項1に記載の方法。
【請求項10】
前記第1の行列データおよび前記第2の行列データは、入力画像
のそれぞれの部分を形成する、請求項1に記載の方法。
【請求項11】
畳み込みデータを行列
プロセッサにマッピングして計算速度を高めるためのシステムであって、
画像データを保持するメモリデバイスと、
制御ロジックと、
シーケンサであって、前記シーケンサは、フィルタサイズまたはストライドの1つまたは複数を示す1つまたは複数のフィルタパラメータを受け取るように構成され、前記シーケンサは、第1の行列データおよび第2の行列データを含む複数の入力データを識別し、前記第1の行列データおよび前記第2の行列データはベクトル化されて前記行列プロセッサの入力列として使用され、前記シーケンサが前記フィルタパラメータに従ってメモリの位置から前記入力データを選択することで、前記入力データが前記行列プロセッサ内の予想される位置に一致するようにフォーマットされる、シーケンサと、
前記制御ロジックおよび前記メモリデバイスに結合されたデータフォーマッタと、
を備え、前記データフォーマッタが、
畳み込み命令を受け取ることに応答して、畳み込み演算に関連付けられた
前記第1
の行列データおよび
前記第2の行列データを識別するステップと、
前記行列プロセッサに関連付けられた入力ベクトルの長さを識別するステップと、
要素ごとのシーケンス演算を使用して、前記第1の行列データを前記入力ベクトルにマッピングするステップ
であって、第1のデータ要素が、前記第1の行列データを含む畳み込み演算の第1のサイクルに従って、前記入力ベクトル内に配置され、前記入力ベクトルが前記行列プロセッサに整列される、ステップと、
前記行列プロセッサによって処理されるべき第2の行列データと、冗長である前記第1の行列データ内の少なくとも1つの
冗長要素を識別するステップと、
前記少なくとも1つの冗長要素が、キャッシュ内に記憶されたローカルコピーからロードされるように構成されるように、前記少なくとも1つの冗長要素をキャッシュ内に記憶するステップと、
前記要素ごとのシーケンス演算を使用して、前記第2の行列データを前記入力ベクトルにマッピングするステップ
であって、第2のデータ要素が、前記畳み込み演算の第2のサイクルに従って、前記入力ベクトル内に配置される、ステップと、
前記キャッシュから前記少なくとも1つの冗長要素を取得するステップと、を実行するように構成される、システム。
【請求項12】
前記入力ベクトルを生成するために論理回路をさらに備える、請求項
11に記載のシステム。
【請求項13】
前記行列プロセッサが、ドット積を生成して畳み込み結果を出力するために、前記第1および第2の行列データを使用してドット乗算を実行する複数のサブ回路を備える、請求項
11に記載のシステム。
【請求項14】
前記畳み込み結果が、画像の領域へのフィルタの適用に対応する出力行列である、請求項
13に記載のシステム。
【請求項15】
前記
マッピングを実行するシーケンサをさらに備える、請求項
11に記載のシステム。
【請求項16】
前記データフォーマッタが、前記冗長要素を決定するためにフィルタサイズおよびストライドのうちの少なくとも1つを使用する状態機械を備える、請求項
11に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の相互参照]
本出願は、発明者としてPeter Joseph Bannon、William A.McGee、およびEmil Talpesを列挙する、2017年12月12日に出願され、「SYSTEMS AND METHODS FOR CONVERTING A MATRIX INPUT TO A VECTORIZED INPUT FOR A MATRIX PROCESSOR」と題する、共同所有の米国特許出願第15/839,234号(整理番号20150-2166)の優先権を主張する。前述の特許文書の各々は、その全体が参照により本明細書に組み込まれる。
【0002】
本開示は、高性能行列プロセッサ用のベクトル化入力へのM×Nデータ行列の変換に関し、より詳細には、大規模な2次元および3次元の行列に対して複雑な数学演算が実行されることを可能にするために、M×N行列(マトリクス)を行列プロセッサに整列した1次元ベクトルにマッピングするための方法およびシステムに関する。
【背景技術】
【0003】
当業者は、時間的制約がある複雑な数学演算を実施するために使用される一般的なプロセッサおよびシステムに対する速度および性能のますます増大する要求を認識されよう。これらの一般的なシステムは、大量のデータを処理し、複雑な数学演算を実行するために使用されるので、計算リソースおよび計算速度は、それらの計算を実行する既存の一般的なハードウェア設計の機能によって制限される。たとえば、行列演算を実行する汎用コンピューティングデバイスおよびプロセッサは、特定の状況下でこれらの演算をタイムリーに実行することができない場合がある。デジタル信号処理演算を実行する多くの従来の乗算器は、一連のソフトウェアおよびハードウェアの行列演算ステップに依存し、時間的制約があるシステム内のボトルネックを表す可能性がある。しばしば、これらのステップは、様々な位置から中間結果を記憶およびフェッチして演算を完了する追加のステップに起因して、計算時間の浪費を犠牲にして中間結果を生成するプロセッサの算術機能を含む。一例では、入力行列は、しばしば、処理要素に入力されるために異なるフォーマットまたはアーキテクチャに変換される必要がある。この変換プロセスは、入力が特定の構造にフォーマットされて、その後計算プロセッサまたは他の算術ロジックによって処理される必要があるので、システム内で有意の遅延を引き起こす可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【0004】
図1は、従来の行列乗算システムの一例を示す。システム100は、計算ユニット102、レジスタ104、キャッシュ106、およびメモリ108を備えるスカラーマシンである。演算中、計算ユニット102は、レジスタ104およびキャッシュ106を使用して、メモリ108に記憶されたデータを処理する。処理されるデータは、たとえば、画像データ、および画像を処理するために畳み込み演算に使用される重みである。通常、計算ユニット102は、たとえば、乗算を加算に変換し、その結果を何らかの内部レジスタに出力することにより、入力行列に対して行列乗算を実行して結果の行列を取得することが可能な、CPUまたはGPUなどのマイクロプロセッサである。
【0005】
たとえば、画像の出力ピクセルを表すドット積は、通常、部分的な結果を取得するために2つの行列からの個々の行列要素をドット乗算することによって生成され、次いで、それらは最終的なドット積を取得するために加算される。個々の行列要素の乗算、すなわち、スカラー乗算は、通常、ドット乗算を一連の個々のサブ演算に分割することにより、個々のデータ要素に対して実行される。結果として、単一の算術演算を完了するために、部分積が、レジスタ104、キャッシュ106、およびメモリ108のうちの1つまたは複数から記憶およびフェッチされる必要がある。
【0006】
畳み込みなどの計算上要求が厳しいアプリケーションは、しばしば、ソフトウェア機能が計算ユニット102に組み込まれ、畳み込み演算を代替の行列乗算演算に変換するために使用されることを要求する。これは、次いで、画像データおよび重みデータを生の行列乗算され得る2つの行列に再配置および再フォーマットすることによって達成される。しかしながら、スカラーマシン100においてデータを効率的に共有または再利用するメカニズムは存在せず、その結果、各スカラー演算を実行するために必要なデータは、毎回レジスタから再フェッチされる必要がある。これらの演算の複雑さは、畳み込み演算の対象となる画像データの量が増えるにつれて著しく大きくなる。
【0007】
算術演算を完了するために、レジスタ104、キャッシュ106、およびメモリ108から中間結果を記憶およびフェッチする追加のステップと結合されたスカラーマシン100内のデータの多くを再利用できないことは、乗算器システム100などの既存システムの欠点のうちのいくつかにすぎない。
【0008】
したがって、必要なものは、行列乗算演算を実行することができる高計算スループットシステムおよび方法のための適切な入力構造に行列を変換する効率的な変換方法およびデバイスである。
【0009】
本発明の実施形態が参照され、それらの例が添付の図に示されてよい。これらの図は、限定ではなく例示を意図したものである。本発明は、一般に、これらの実施形態の文脈で記載されているが、本発明の範囲をこれらの特定の実施形態に限定するものではないことを理解されたい。
【図面の簡単な説明】
【0010】
【
図1】従来の行列乗算システムの一例を示す図である。
【0011】
【
図2】本開示の様々な実施形態による、畳み込みを行列乗算回路にマッピングするための例示的なプロセスのフローチャートである。
【0012】
【
図3】本開示の様々な実施形態による、畳み込みを乗算回路にマッピングするためにデータフォーマッタを利用する例示的な行列乗算システムを示す図である。
【0013】
【
図4】本開示の様々な実施形態による、畳み込みを行列乗算回路にマッピングするためのプロセスを示す例示的な図である。
【発明を実施するための形態】
【0014】
以下の記載では、説明の目的で、本発明を理解するために具体的な詳細が記載されている。しかしながら、本発明はこれらの詳細なしに実践され得ることが当業者には明らかであろう。さらに、当業者は、以下に記載される本発明の実施形態が、有形のコンピュータ可読媒体上のプロセス、装置、システム、デバイス、または方法などの様々な方法で実装され得ることを認識されよう。
【0015】
図に示された構成要素またはモジュールは、本発明の例示的な実施形態の例示であり、本発明を不明瞭にすることを回避するはずである。この説明全体を通して、構成要素はサブユニットを含んでよい別個の機能ユニットとして記載されてよいことも理解されるべきであるが、当業者は、様々な構成要素またはそれらの一部が別個の構成要素に分割されてよいか、または単一のシステムもしくは構成要素内に統合されることを含め、一緒に統合されてよいことを認識されよう。本明細書で説明される機能または動作は、構成要素として実装されてよいことに留意されたい。構成要素は、ソフトウェア、ハードウェア、またはそれらの組合せに実装されてよい。
【0016】
さらに、図内の構成要素またはシステム間の接続は、直接接続に限定されるものではない。むしろ、これらの構成要素間のデータは、中間構成要素によって修正、再フォーマット、またはそうでない場合変更されてよい。また、追加の、またはより少ない接続が使用されてよい。また、「結合された」、「接続された」、または「通信可能に結合された」という用語は、直接接続、1つまたは複数の中間デバイスを介した間接接続、およびワイヤレス接続を含むと理解されるべきである。
【0017】
本明細書における「1つの実施形態」、「好ましい実施形態」、「一実施形態」、または「複数の実施形態」への言及は、実施形態に関連して記載される特定の特徴、構造、特性、または機能が、本発明の少なくとも1つの実施形態に含まれるか、または2つ以上の実施形態内であってよいことを意味する。また、本明細書の様々な場所における上述された句の出現は、必ずしもすべて同じ実施形態を参照しているとは限らない。
【0018】
本明細書の様々な場所における特定の用語の使用は、例示のためであり、限定として解釈されるべきではない。サービス、機能、またはリソースは、単一のサービス、機能、またはリソースに限定されず、これらの用語の使用は、関連するサービス、機能、またはリソースのグループを指してよく、それらは分散または集約されてよい。さらに、メモリ、データベース、情報ベース、データストア、テーブル、ハードウェアなどの使用は、本明細書では、情報が入力されるか、またはそうでない場合記録されてよいシステム構成要素を指すために使用されてよい。
【0019】
さらに、(1)特定のステップは任意選択で実行されてよく、(2)ステップは本明細書に記載された特定の順序に限定されなくてよく、(3)特定のステップは異なる順序で実行されてよく、(4)特定のステップは同時に行われてよいことに留意されたい。
【0020】
さらに、当業者は、(1)特定のステップは任意選択で実行されてよく、(2)ステップは本明細書に記載された特定の順序に限定されなくてよく、(3)特定のステップは異なる順序で実行されてよく、(4)特定のステップは同時に行われてよいことを認識するべきである。
【0021】
本明細書の実施形態は主に畳み込みの文脈で説明されているが、当業者は、逆畳み込みも行列-行列タイプの乗算演算として構成することができ、したがって、本発明の原理が逆畳み込みに等しく適用可能であることを了解されよう。さらに、本開示の様々な実施形態に従って、他のタイプの数学演算が実装されてよい。
【0022】
説明は、畳み込み行列乗算回路用のベクトル化入力への少なくとも1つの入力行列の変換を記載するが、当業者は、記載された方法および構造が、広範囲の入力データタイプをあるフォーマットから別のフォーマットに変換するために使用されてよいことを認識されよう。これらの異なる入力データ構造のすべては本説明の範囲内に入る。
図2は、本開示の様々な実施形態による、畳み込みを行列乗算回路にマッピングするための例示的なプロセスのフローチャートである。プロセス200は、たとえば、データフォーマッティングデバイスにおいて、畳み込みパラメータを含む畳み込み命令が受け取られるステップ202において始まる。畳み込み命令またはパラメータは、たとえば、フィルタ次元、ストライド、入力のアドレス、または特定の数の出力チャネルであってよい。
【0023】
ステップ204において、畳み込みパラメータに基づいて、畳み込み演算の入力が識別される。実施形態では、入力は、実施形態では3次元データ行列を表すことができる異なるアドレスにある1つまたは複数の記憶位置に記憶される。実施形態では、行列は、所与の出力チャネルに対して並行して計算されるピクセルの数に対応する第1の次元、並行して動作する出力チャネルの数に対応する第2の次元、およびピクセルごとの異なる色に対応する第3の次元を有する。
【0024】
ステップ206において、重複する/冗長な入力データが、たとえば、状態機械によって識別される。実施形態では、状態機械は、フィルタサイズおよびストライドなどのフィルタパラメータを使用して、再利用可能なオペランドを決定する。
【0025】
ステップ208において、計算時間および電力消費を削減するために、重複する入力データのローカルコピーがキャッシュまたはバッファから検索されて、たとえば、SRAMから同じデータを再びフェッチする必要性を回避することができる。
【0026】
ステップ210において、畳み込み演算ごとに、行列プロセッサが高性能算術演算、たとえば、大規模な行列乗算を実行することができるように、たとえば、行列プロセッサの所定の入力フォーマットに基づいて、行列プロセッサ内の位置に従って入力を配置するために、シーケンサが使用されてよい。実施形態では、シーケンサは、畳み込み演算のサイクルごとに入力を配置する。特定の実施形態では、シーケンサは、データを行列プロセッサに入力するために使用されるベクトルに2次元行列間のデータをマッピングする。たとえば、シーケンサは、2次元行列内のその位置に基づいてデータ/オペランドをベクトル内の対応する場所に効率的に移動させる、要素ごと(たとえば、ビットごとまたはバイトごと)のマッピングを実行することができる。入力が配置されると、実施形態では、アライナは、配置されたデータを整列させ、既定のシーケンスに従ってそれを行列プロセッサに供給することができる。
【0027】
ステップ212において、入力フォーマットに基づいて、行列プロセッサのハードウェア要素は、行列乗算を実行するように動的に構成されてよい。実施形態では、行列プロセッサ入力は、データ入力行列に従ってフォーマットされたオペランドを含む第1のベクトル、および重み入力行列に従ってフォーマットされたオペランドを含む第2のベクトルに適応する。
【0028】
最後に、ステップ214において、たとえば、入力画像をフィルタで畳み込んで畳み込み結果を生成するために、行列乗算結果が使用されてよい。実施形態では、畳み込み結果は、非線形関数、正規化演算、および/またはプーリング演算を使用することにより、たとえば、画像出力を向上させるためにさらに処理されてよい。
【0029】
本明細書で開示されたプロセスおよびシステムは、畳み込み方法およびシステムの文脈で記載されるが、これは、本開示の教示が逆畳み込み方法およびシステムに等しく適用することができるので、本開示の範囲に対する制限として意図されないことに留意されたい。
【0030】
図3は、本開示の様々な実施形態による、畳み込みを乗算回路にマッピングするためにデータフォーマッタを利用する例示的な行列乗算システムを示す図である。システム300は、メモリデバイス302、データフォーマッタ306、制御ロジック308、キャッシュ(またはバッファ)312、論理回路314、および行列プロセッサ316、ならびにシーケンサ310を備える。
図3の1つまたは複数の構成要素、たとえば、データフォーマッタ306およびシーケンサ310は、各個々の統合構成要素に関連付けられた少なくともいくつかの機能を実行する統合構成要素として実装されてよいことが理解されよう。
【0031】
データフォーマッタ306はインラインフォーマッタとして実装されてよく、実施形態では、行列プロセッサ316によって効率的に処理することができるベクトルフォーマットにデータ入力行列を変換するために使用される。
【0032】
図3のメモリデバイス302は、当技術分野で知られている任意のメモリデバイスであり、オーディオデータ、センサデータ、および超音波データなどの任意のタイプのデータを含んでよい。実施形態では、メモリ302は、1つまたは複数の位置および異なるアドレスに記憶された画像データ304を含む。実施形態では、アドレスは多次元データ行列を表すことができる。
【0033】
実施形態では、制御ロジック308は、行列乗算システム300内のシーケンサ310および他の構成要素を管理することができる。制御ロジック308は、データフォーマッタ306またはシーケンサ310に組み込まれてよく、実施形態では、データフォーマッタ306が行列乗算器316内の予想される位置に一致するようにデータをフォーマットすることができるように、フィルタパラメータ、たとえば、ストライドに従ってメモリ302の位置からデータを選択することができる。キャッシュ/バッファ312は、実施形態では、メモリ302からのデータに再アクセスし再読込みする必要性を回避するために、畳み込みによる再利用のためのデータのローカルコピーを記憶するために使用されてよいローカルバッファである。
【0034】
論理回路314は、任意の数の入力演算子およびデータレジスタを表す回路を備えてよい。実施形態では、論理回路314は、M個の重みオペランドおよびN個の画像データオペランドを行列プロセッサ316に入力する回路を備えてよい。重みデータおよび画像データ304は、様々なタイプのメモリ302(たとえば、SRAM)に記憶されてよい。
【0035】
行列プロセッサ316は、乗算、累算、およびシフト演算を同時に実行することができる任意の数の回路およびサブサーキット回路(たとえば、算術論理ユニット、レジスタ、エンコーダなど)を備えてよい。各サブサーキット回路は、算術演算を実行することが可能なセルであってよい。実施形態では、行列プロセッサ316は、たとえば、データ行列および事前にフォーマットされた重み行列を受け取り、乗算して、畳み込み演算用の乗算積を生成する乗加算回路を備える。
【0036】
畳み込み演算は、画像データに、一組の個別のフィルタ、すなわち、異なるセットの情報を含む可能性があるいくつかの入力チャネルに対して、事前にフォーマットされ、メモリ302に記憶された一組の重みを加えることができる。これにより、入力画像内の様々な特徴を検出することが可能になる。
【0037】
加えて、一連の異なる特徴を異なる順序で分析することにより、画像内でマクロ特徴が識別されてよい。実施形態では、畳み込みは、(たとえば、加算器によって)合計された部分ドット積を取得して、出力画像内の出力ピクセルを表す累積ドット積(すなわち、整数)を生成するために、長方形の入力行列の長方形の重み行列との乗算を含む。
【0038】
実施形態では、算術演算は、行列プロセッサ316の複数の行および列を利用して、N×Nのタイル出力を生成することによって並列化される。たとえば、96の所与の行サイズ、および96の対応する列サイズは、9216個のピクセルの出力を容易にする。行列プロセッサ316は、各軸上の任意のベクトル長に適応することができ、実施形態では、行列フォーマットで配置されたPxQのタイルを備えるM×Nの行列プロセッサとして寸法付けられる。
【0039】
実施形態では、シーケンサ310は、たとえば、制御ロジック308から、任意の数の畳み込みパラメータを含む畳み込み命令を受け取る。実施形態では、畳み込み命令は、フィルタパラメータ(たとえば、フィルタサイズ)、出力チャネルの数などを含んでよい。実施形態では、シーケンサ310は、畳み込みパラメータを使用して畳み込み演算の入力または入力のアドレスを識別し、それらの入力をメモリ302内の対応するアドレス位置から受け取るか、またはフェッチする。
【0040】
実施形態では、データフォーマッタ306は、画像情報を含む2次元または3次元のデータを、行または列によって表されてよい単一のベクトルまたは文字列に変換し、このように、画像データが線形化またはベクトル化される。実施形態では、フォーマッタ306は、畳み込みパラメータに従って、画像データ304を行列プロセッサ316のハードウェア要件による適切なフォーマットにマッピングすることにより、画像データ304を行列プロセッサ316による処理に向けて準備し、その結果、行列プロセッサ316は、たとえば、出力ピクセルを生成するために、畳み込み計算の一部として行列乗算を実行することができる。
【0041】
実施形態では、ベクトル化画像データのサイズは、オペランドが行列プロセッサ316への入力と整列するように、行列プロセッサ316への入力の数に直接関係する。
【0042】
実施形態では、データフォーマッタ306は、たとえば、状態機械を介して、重複する、すなわち、同一または冗長であり、所与の畳み込み演算のために2回以上アクセスされる必要がある1つまたは複数の位置に存在してよい入力を識別する。状態機械は、重複するデータを再利用可能なデータとして識別するために、フィルタサイズおよびストライドなどのフィルタパラメータを使用するように構成されてよく、その結果、行列プロセッサ316は、メモリ302からデータに再アクセスし転送する必要なく、オペランドを再利用することができる。代わりに、実施形態では、再利用可能なデータは、たとえば、キャッシュ312に記憶されたローカルコピーからロードされてよく、それにより、計算の労力、時間、および電力消費が削減される。
【0043】
実施形態では、データシーケンサ310は、たとえば、畳み込み演算ごとに、畳み込み演算の各サイクル内で行列プロセッサ316によって予想される場所に従って、たとえば、ドット乗算を実行するときに行列プロセッサ316の所与の入力フォーマットと一致するように、検索された入力を配置することができる。シーケンサ310は、データを読み取るためのアドレスを生成し、結果を書き込み、畳み込み演算を実行するときにシステム300の状態を追跡することができる。実施形態では、シーケンサ310は、この情報の一部またはすべてを使用して、メモリ302内のどのアドレスからデータを取得するか、および、たとえば、後続の畳み込みステップで行列プロセッサ316によってそれが適切に使用され得るように、それを処理する方法を決定する。実施形態では、シーケンサ310は、データフォーマッタ306に結合され、データフォーマッタ306は、所与の入力フォーマットに従って既定の順序で、検索および同期された画像データを行列プロセッサ316と整列させるために使用されてよい。
【0044】
実施形態では、様々な入力パラメータまたは構成によって決定されるような入力フォーマットに基づいて、行列プロセッサ316のハードウェア要素は、任意のタイプの算術演算(たとえば、乗累算乗加算)を実行するように動的に構成されてよい。実施形態では、行列プロセッサ316への入力は、データ入力行列に従ってフォーマットされたベクトルを含む。実施形態では、入力は、たとえば、行列乗算がニューラルネットワーク向けの画像データ304を畳み込むために使用されてよいように、重み入力行列に従ってフォーマットされた第2のベクトルを含む。
【0045】
実施形態では、フォーマット化は、異なる入力サイズを有する行列の処理に適応するために動的に実行される。実施形態では、入力チャネルを含む再フォーマットされた行列は、キャッシュ/バッファ312に供給される。実施形態では、キャッシュ/バッファ312は、データを読み取るためにメモリ302に再アクセスする必要なく、メモリ302からデータをフェッチし、畳み込みによって再利用され得るデータのローカルコピーを記憶する。
【0046】
高速行列乗算に適した代替フォーマットにデータを再配置することにより、畳み込み演算を行列乗算演算に変換するために、CPUまたはGPUによって実行されるフォーマッティング関数の一般的なソフトウェア実装形態とは異なり、本開示の様々なハードウェア実装形態は、データをその場で再フォーマットし、たとえば、サイクルごとに96個のデータを効果的に実行に使用できるようにし、行列の比較的多数の要素が並行して処理されることが可能になり、こうして、畳み込みが行列演算に効率的にマッピングされる。実施形態では、2N個のフェッチされた入力データに対して、N2個の計算データが取得されてよい。
【0047】
システム300は、本開示の範囲内に入る追加の構成要素、たとえば、ハードウェア加速プーリングユニット、メモリ302からデータを検索し、データ(たとえば、重みおよび結果)をSRAMに記憶するDMAの一部であり得るDRAM、ならびに当技術分野で知られている他の後処理要素などの後処理要素を備えてよいことが理解されよう。
【0048】
図4は、本開示の様々な実施形態による、畳み込みを行列乗算回路にマッピングするためのプロセスを示す例示的な図である。
図400では、各行列402A、402Bは、サブ行列406、408、たとえば、特定の色に関連付けられた入力チャネル用のサブ行列406を含む、強調表示されたセクションで描写されている。行列418は、重みデータ行列などの1つまたは複数の入力行列を表す。行列プロセッサ316は、好ましくは、
図3を参照して説明された種類のプロセッサである。
【0049】
実施形態では、データ行列402A、402Bは、3つの異なる色についての画像データなどの入力データを保持することができる任意の数の行、列、およびチャネルを含む、3次元データ行列の一部を形成する。同様に、行列418は、3つの異なる色についての重みデータを保持するために任意の数の行および列を含むことができる長方形の入力重みデータ行列である。当業者は、入力行列のサイズおよび入力チャネルの数が、異なるアプリケーションに対して異なってよいことを認識されよう。
【0050】
図4はさらに、実施形態では、それぞれのデータサブ行列406、408を線形化してその線形化バージョンを生成することによって取得され得るアレイ410、412を描写する。逆に、重みデータ行列418は、アレイ414を取得するためにベクトル化されてよい。一例として、実施形態では、第1の色に関連付けられた第1の入力チャネル用の3×3サブ行列406、第2の色に関連付けられた第2の入力チャネル用の3×3サブ行列406、および第3の色に関連付けられた第3の入力チャネル用の第3の3×3サブ行列406は、アレイ410を形成するように組み立てられる。2のストライドを想定すると、行列プロセッサ316のすべての入力列が入力データで満たされ得るまで、別の3×3サブ行列408への位置がデータ行列402B内で識別されて配列412を形成し、以下同様である。同様に、入力重みデータは、アレイ414と同様の追加の出力チャネルを形成するために再フォーマットすることができる。
【0051】
実施形態では、3つの別個の入力チャネルを表すことができる3つの3×3重みデータ行列418は、(たとえば、
図3を参照して説明されたフォーマッタによって)、合計27要素を含むベクトルに再フォーマットされてよく、それらから、27要素アレイ(たとえば、アレイ414)は、行列プロセッサ316によって実行される畳み込み演算で使用するために生成されてよい。
【0052】
詳細には、データ行列402A、402Bは、たとえば、重み行列418の3×3×3要素に対応するアレイまたは行414内の各要素を、たとえば、サブ行列406の3×3×3要素に対応するアレイまたは列410内の各要素とドット乗算して、たとえば、出力画像内の出力ピクセルを表すことができる累積ドット積430を生成するために行列プロセッサアーキテクチャ316によって累積され得る部分ドット積を生成することにより、畳み込み演算の一部として重みデータ行列418と乗算されてよい。次のドット積は、行414を列412に対応するベクトルとドット乗算することによって取得されてよく、そのような部分ドット積の値は、入力データ行列402A、402Bに対する重み行列418の適用に対応し、アキュムレータ出力は畳み込み全体を表す。実施形態では、行列プロセッサは96×96のサイズであり、これにより、9216個の乗累算演算が、並行して、たとえば、単一のクロックサイクル内で実行されることが可能になる。
【0053】
実施形態では、出力チャネルの計算において、行列プロセッサは、一度に入力データを読み込むことにより、多くの出力チャネルが一度に生成することができるように、行列402A、402Bからの同じセットの入力データを使用して、行列418からの異なるセットの重み(すなわち、フィルタ)を使用して、同じ出力ピクセルを生成することができる。1つまたは複数の入力チャネル、たとえば、色(たとえば、RGB)ごとに1つが使用されてよい。たとえば、各畳み込みは、色ごとに1つ、3つの異なる行列を表す重み418を使用することができる。
【0054】
各出力チャネル436は、入力データ内の異なる特徴を表す異なるフィルタまたは重み418を使用して生成されてよい。出力チャネルの数は特徴の数に依存してよい。実施形態では、畳み込みの数は、入力チャネルの数の出力チャネル436の数倍に等しく、各畳み込みは入力チャネルごとにN個の畳み込みを有してよい。
【0055】
入力データ行列402A、402B、重みデータ行列418、およびアレイ410~414は、
図4に示されたものとは異なる数の列および行を有してよいことが理解されよう。正確に示されたように、入力チャネルおよび出力チャネルの数は任意に選択されてよい。実施形態では、重みデータ行列418が既知であるとき、アレイ414は、フォーマッタを使用することなく、ベクトル化フォーマットで生成および記憶されてよい。実施形態では、ドット乗算は、ワンショット行列-行列乗算演算を生成するために同時に実行されてよい。
【0056】
本発明の実施形態は、1つまたは複数のプロセッサまたは処理ユニットがステップを実行させるための命令を用いて、1つまたは複数の非一時的コンピュータ可読媒体上に符号化されてよい。1つまたは複数の非一時的コンピュータ可読媒体は、揮発性メモリおよび不揮発性メモリを含むことに留意されたい。ハードウェア実装形態またはソフトウェア/ハードウェア実装形態を含む代替の実装形態が可能であることに留意されたい。ハードウェア実装機能は、ASIC、プログラマブルアレイ、デジタル信号処理回路などを使用して実現されてよい。したがって、任意の請求項内の「手段」という用語は、ソフトウェアとハードウェアの両方の実装形態をカバーするものである。同様に、本明細書で使用される「コンピュータ可読媒体」という用語は、その上に具現化された命令のプログラムを有するソフトウェアおよび/もしくはハードウェア、またはそれらの組合せを含む。これらの代替実施形態を念頭に置いて、図および付随する説明は、当業者がプログラムコード(すなわち、ソフトウェア)を記述し、かつ/または回路(すなわち、ハードウェア)を組み立てて、必要な処理を実行するために必要とする機能情報を提供することを理解されたい。
【0057】
本発明の実施形態は、様々なコンピュータ実装演算を実行するためのコンピュータコードを有する非一時的で有形のコンピュータ可読媒体を有するコンピュータ製品にさらに関連してよいことに留意されたい。媒体およびコンピュータコードは、本発明の目的のために特別に設計および構築されたものであってよく、またはそれらは、関連分野の当業者に知られているかもしくは利用可能な種類のものであってよい。有形のコンピュータ可読媒体の例には、限定はしないが、ハードディスク、フロッピーディスク、および磁気テープなどの磁気媒体、CD-ROMおよびホログラフィックデバイスなどの光学媒体、光磁気媒体、ならびに特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フラッシュメモリデバイス、ROMデバイス、およびRAMデバイスなどのプログラムコードを記憶または記憶し実行するように特別に構成されたハードウェアデバイスが含まれる。コンピュータコードの例には、コンパイラによって生成されるものなどの機械コード、およびインタプリタを使用してコンピュータによって実行されるより高いレベルのコードを含むファイルが含まれる。本発明の実施形態は、処理デバイスによって実行されるプログラムモジュール内にあり得る機械実行可能命令として、全体的または部分的に実装されてよい。プログラムモジュールの例には、ライブラリ、プログラム、ルーチン、オブジェクト、構成要素、およびデータ構造が含まれる。分散コンピューティング環境では、プログラムモジュールは、ローカル、リモート、または両方の設定で物理的に配置されてよい。
【0058】
当業者は、本発明の実践にとってコンピューティングシステムまたはプログラミング言語が不可欠でないことを認識されよう。当業者はまた、上述されたいくつかの要素が物理的および/または機能的にサブモジュールに分離されるか、または一緒に組み合わされてよいことを認識されよう。
【0059】
以下の特許請求の範囲の要素は、複数の依存関係、構成、および組合せを有することを含めて、異なって配置されてよいことに留意されたい。たとえば、実施形態では、様々な請求項の主題は、他の請求項と組み合わされてよい。
【0060】
前述の例および実施形態は例示的であり、本発明の範囲を限定するものではないことが当業者には了解されよう。明細書を読み、図面を検討すると当業者には明らかである、それに対するすべての置換、拡張、等価物、組合せ、および改善は、本発明の真の趣旨および範囲内に含まれることが意図されている。