(57)【要約】多数の演算が大量のデータセットにわたって並行して実行されることを可能にするハードウェア固有回路を利用することにより、画像の畳み込みおよび同様の算術演算を加速するシステムおよび方法が提示される。様々な実施形態では、算術演算は、データを再利用し、算術演算を実行するときにレジスタおよびメモリから中間結果を記憶およびフェッチする冗長ステップを排除することによってさらに強化される。【選択図】図３
2021507335.tif 000002
【特許請求の範囲】
【請求項１】
行列データを行列プロセッサの入力にマッピングするための方法であって、
前記行列プロセッサによって処理されるべき第１の行列データを受け取るステップと、
前記行列プロセッサに関連付けられた入力ベクトルの長さを識別するステップと、
第１の要素ごとのシーケンス演算を使用して、前記第１の行列データを前記入力ベクトルにマッピングするステップと、
前記行列プロセッサによって処理されるべき第２の行列データと、冗長である前記第１の行列データ内の少なくとも１つの要素を識別するステップと、
前記少なくとも１つの冗長要素をキャッシュ内に記憶するステップと、
前記少なくとも１つの冗長要素が前記キャッシュから検索されるように、第２の要素ごとのシーケンス演算を使用して、前記第２の行列データを前記入力ベクトルにマッピングするステップと、を含む、方法。
【請求項２】
前記第１の行列データおよび前記第２の行列データが、１つまたは複数の畳み込み演算に関連する、請求項１に記載の方法。
【請求項３】
前記第１の要素ごとのシーケンス演算が、前記第２の要素ごとのシーケンス演算と同等である、請求項１に記載の方法。
【請求項４】
前記キャッシュから前記少なくとも１つの冗長要素を検索することが、ＳＲＡＭからデータを検索するための時間より短い計算時間しか必要としないように、前記キャッシュがローカルな記憶位置である、請求項１に記載の方法。
【請求項５】
前記入力ベクトルの長さを識別する前記ステップに関連する前記行列プロセッサの少なくとも１つのハードウェア構成を識別するステップをさらに含む、請求項１に記載の方法。
【請求項６】
前記行列プロセッサの前記少なくとも１つのハードウェア構成が、畳み込みパラメータを含む、請求項５に記載の方法。
【請求項７】
前記畳み込みパラメータが、３次元データ行列を表す１つまたは複数のアドレスを含む、請求項６に記載の方法。
【請求項８】
前記畳み込みパラメータが、フィルタサイズ、重みの数、およびストライドのうちの少なくとも１つを含む、請求項７に記載の方法。
【請求項９】
前記第１の行列データを前記入力ベクトルにマッピングするステップが、前記行列プロセッサのハードウェア構成に少なくとも部分的に基づいて、前記第１の行列データを前記入力ベクトルに整列させるステップを含む、請求項１に記載の方法。
【請求項１０】
前記入力ベクトルの要素が、畳み込み演算の各サイクルおよび前記行列プロセッサ内の各位置のうちの少なくとも１つについて識別される、請求項１に記載の方法。
【請求項１１】
前記要素ごとのシーケンス演算が、畳み込み演算ごとに１回実行される、請求項１に記載の方法。
【請求項１２】
前記冗長要素を決定するためにフィルタサイズおよびストライドのうちの少なくとも１つを使用する状態機械をさらに備える、請求項１に記載の方法。
【請求項１３】
入力画像を畳み込むためにマッピングするための前記方法を使用するステップをさらに含む、請求項１に記載の方法。
【請求項１４】
前記行列プロセッサの第１の次元が、所与の出力チャネルについて並行して計算されるピクセルの数に対応する、請求項１に記載の方法。
【請求項１５】
前記行列プロセッサの第２の次元が、並行して動作する出力チャネルの数に対応する、請求項１に記載の方法。
【請求項１６】
畳み込みデータを行列乗算回路にマッピングして計算速度を高めるためのシステムであって、
画像データを保持するメモリデバイスと、
制御ロジックと、
前記制御ロジックおよび前記メモリデバイスに結合されたデータフォーマッタと、
を備え、前記データフォーマッタが、
畳み込み命令を受け取ることに応答して、畳み込み演算に関連付けられた第１および第２の行列データを識別するステップと、
前記行列プロセッサに関連付けられた入力ベクトルの長さを識別するステップと、
要素ごとのシーケンス演算を使用して、前記第１の行列データを前記入力ベクトルにマッピングするステップと、
前記行列プロセッサによって処理されるべき第２の行列データと、冗長である前記第１の行列データ内の少なくとも１つの要素を識別するステップと、
前記少なくとも１つの冗長要素をキャッシュ内に記憶するステップと、
前記少なくとも１つの冗長要素が前記キャッシュから検索されるように、前記要素ごとのシーケンス演算を使用して、前記第２の行列データを前記入力ベクトルにマッピングするステップと、を実行するように構成される、システム。
【請求項１７】
前記入力ベクトルを生成するために論理回路をさらに備える、請求項１６に記載のシステム。
【請求項１８】
前記行列プロセッサが、ドット積を生成して畳み込み結果を出力するために、前記第１および第２の行列データを使用してドット乗算を実行する複数のサブ回路を備える、請求項１６に記載のシステム。
【請求項１９】
前記畳み込み結果が、画像の領域へのフィルタの適用に対応する出力行列である、請求項１８に記載のシステム。
【請求項２０】
前記シーケンス演算を実行するシーケンサをさらに備える、請求項１６に記載のシステム。
【請求項２１】
前記データフォーマッタが、前記冗長要素を決定するためにフィルタサイズおよびストライドのうちの少なくとも１つを使用する状態機械を備える、請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、発明者としてＰｅｔｅｒ  Ｊｏｓｅｐｈ  Ｂａｎｎｏｎ、Ｗｉｌｌｉａｍ  Ａ．ＭｃＧｅｅ、およびＥｍｉｌ  Ｔａｌｐｅｓを列挙する、２０１７年１２月１２日に出願され、「ＳＹＳＴＥＭＳ  ＡＮＤ  ＭＥＴＨＯＤＳ  ＦＯＲ  ＣＯＮＶＥＲＴＩＮＧ  Ａ  ＭＡＴＲＩＸ  ＩＮＰＵＴ  ＴＯ  Ａ  ＶＥＣＴＯＲＩＺＥＤ  ＩＮＰＵＴ  ＦＯＲ  Ａ  ＭＡＴＲＩＸ  ＰＲＯＣＥＳＳＯＲ」と題する、共同所有の米国特許出願第１５／８３９，２３４号（整理番号２０１５０−２１６６）の優先権を主張する。前述の特許文書の各々は、その全体が参照により本明細書に組み込まれる。
【０００２】
本開示は、高性能行列プロセッサ用のベクトル化入力へのＭ×Ｎデータ行列の変換に関し、より詳細には、大規模な２次元および３次元の行列に対して複雑な数学演算が実行されることを可能にするために、Ｍ×Ｎ行列（マトリクス）を行列プロセッサに整列した１次元ベクトルにマッピングするための方法およびシステムに関する。
【背景技術】
【０００３】
当業者は、時間的制約がある複雑な数学演算を実施するために使用される一般的なプロセッサおよびシステムに対する速度および性能のますます増大する要求を認識されよう。これらの一般的なシステムは、大量のデータを処理し、複雑な数学演算を実行するために使用されるので、計算リソースおよび計算速度は、それらの計算を実行する既存の一般的なハードウェア設計の機能によって制限される。たとえば、行列演算を実行する汎用コンピューティングデバイスおよびプロセッサは、特定の状況下でこれらの演算をタイムリーに実行することができない場合がある。デジタル信号処理演算を実行する多くの従来の乗算器は、一連のソフトウェアおよびハードウェアの行列演算ステップに依存し、時間的制約があるシステム内のボトルネックを表す可能性がある。しばしば、これらのステップは、様々な位置から中間結果を記憶およびフェッチして演算を完了する追加のステップに起因して、計算時間の浪費を犠牲にして中間結果を生成するプロセッサの算術機能を含む。一例では、入力行列は、しばしば、処理要素に入力されるために異なるフォーマットまたはアーキテクチャに変換される必要がある。この変換プロセスは、入力が特定の構造にフォーマットされて、その後計算プロセッサまたは他の算術ロジックによって処理される必要があるので、システム内で有意の遅延を引き起こす可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
図１は、従来の行列乗算システムの一例を示す。システム１００は、計算ユニット１０２、レジスタ１０４、キャッシュ１０６、およびメモリ１０８を備えるスカラーマシンである。演算中、計算ユニット１０２は、レジスタ１０４およびキャッシュ１０６を使用して、メモリ１０８に記憶されたデータを処理する。処理されるデータは、たとえば、画像データ、および画像を処理するために畳み込み演算に使用される重みである。通常、計算ユニット１０２は、たとえば、乗算を加算に変換し、その結果を何らかの内部レジスタに出力することにより、入力行列に対して行列乗算を実行して結果の行列を取得することが可能な、ＣＰＵまたはＧＰＵなどのマイクロプロセッサである。
【０００５】
たとえば、画像の出力ピクセルを表すドット積は、通常、部分的な結果を取得するために２つの行列からの個々の行列要素をドット乗算することによって生成され、次いで、それらは最終的なドット積を取得するために加算される。個々の行列要素の乗算、すなわち、スカラー乗算は、通常、ドット乗算を一連の個々のサブ演算に分割することにより、個々のデータ要素に対して実行される。結果として、単一の算術演算を完了するために、部分積が、レジスタ１０４、キャッシュ１０６、およびメモリ１０８のうちの１つまたは複数から記憶およびフェッチされる必要がある。
【０００６】
畳み込みなどの計算上要求が厳しいアプリケーションは、しばしば、ソフトウェア機能が計算ユニット１０２に組み込まれ、畳み込み演算を代替の行列乗算演算に変換するために使用されることを要求する。これは、次いで、画像データおよび重みデータを生の行列乗算され得る２つの行列に再配置および再フォーマットすることによって達成される。しかしながら、スカラーマシン１００においてデータを効率的に共有または再利用するメカニズムは存在せず、その結果、各スカラー演算を実行するために必要なデータは、毎回レジスタから再フェッチされる必要がある。これらの演算の複雑さは、畳み込み演算の対象となる画像データの量が増えるにつれて著しく大きくなる。
【０００７】
算術演算を完了するために、レジスタ１０４、キャッシュ１０６、およびメモリ１０８から中間結果を記憶およびフェッチする追加のステップと結合されたスカラーマシン１００内のデータの多くを再利用できないことは、乗算器システム１００などの既存システムの欠点のうちのいくつかにすぎない。
【０００８】
したがって、必要なものは、行列乗算演算を実行することができる高計算スループットシステムおよび方法のための適切な入力構造に行列を変換する効率的な変換方法およびデバイスである。
【０００９】
本発明の実施形態が参照され、それらの例が添付の図に示されてよい。これらの図は、限定ではなく例示を意図したものである。本発明は、一般に、これらの実施形態の文脈で記載されているが、本発明の範囲をこれらの特定の実施形態に限定するものではないことを理解されたい。
【図面の簡単な説明】
【００１０】
【図１】従来の行列乗算システムの一例を示す図である。
【００１１】
【図２】本開示の様々な実施形態による、畳み込みを行列乗算回路にマッピングするための例示的なプロセスのフローチャートである。
【００１２】
【図３】本開示の様々な実施形態による、畳み込みを乗算回路にマッピングするためにデータフォーマッタを利用する例示的な行列乗算システムを示す図である。
【００１３】
【図４】本開示の様々な実施形態による、畳み込みを行列乗算回路にマッピングするためのプロセスを示す例示的な図である。
【発明を実施するための形態】
【００１４】
以下の記載では、説明の目的で、本発明を理解するために具体的な詳細が記載されている。しかしながら、本発明はこれらの詳細なしに実践され得ることが当業者には明らかであろう。さらに、当業者は、以下に記載される本発明の実施形態が、有形のコンピュータ可読媒体上のプロセス、装置、システム、デバイス、または方法などの様々な方法で実装され得ることを認識されよう。
【００１５】
図に示された構成要素またはモジュールは、本発明の例示的な実施形態の例示であり、本発明を不明瞭にすることを回避するはずである。この説明全体を通して、構成要素はサブユニットを含んでよい別個の機能ユニットとして記載されてよいことも理解されるべきであるが、当業者は、様々な構成要素またはそれらの一部が別個の構成要素に分割されてよいか、または単一のシステムもしくは構成要素内に統合されることを含め、一緒に統合されてよいことを認識されよう。本明細書で説明される機能または動作は、構成要素として実装されてよいことに留意されたい。構成要素は、ソフトウェア、ハードウェア、またはそれらの組合せに実装されてよい。
【００１６】
さらに、図内の構成要素またはシステム間の接続は、直接接続に限定されるものではない。むしろ、これらの構成要素間のデータは、中間構成要素によって修正、再フォーマット、またはそうでない場合変更されてよい。また、追加の、またはより少ない接続が使用されてよい。また、「結合された」、「接続された」、または「通信可能に結合された」という用語は、直接接続、１つまたは複数の中間デバイスを介した間接接続、およびワイヤレス接続を含むと理解されるべきである。
【００１７】
本明細書における「１つの実施形態」、「好ましい実施形態」、「一実施形態」、または「複数の実施形態」への言及は、実施形態に関連して記載される特定の特徴、構造、特性、または機能が、本発明の少なくとも１つの実施形態に含まれるか、または２つ以上の実施形態内であってよいことを意味する。また、本明細書の様々な場所における上述された句の出現は、必ずしもすべて同じ実施形態を参照しているとは限らない。
【００１８】
本明細書の様々な場所における特定の用語の使用は、例示のためであり、限定として解釈されるべきではない。サービス、機能、またはリソースは、単一のサービス、機能、またはリソースに限定されず、これらの用語の使用は、関連するサービス、機能、またはリソースのグループを指してよく、それらは分散または集約されてよい。さらに、メモリ、データベース、情報ベース、データストア、テーブル、ハードウェアなどの使用は、本明細書では、情報が入力されるか、またはそうでない場合記録されてよいシステム構成要素を指すために使用されてよい。
【００１９】
さらに、（１）特定のステップは任意選択で実行されてよく、（２）ステップは本明細書に記載された特定の順序に限定されなくてよく、（３）特定のステップは異なる順序で実行されてよく、（４）特定のステップは同時に行われてよいことに留意されたい。
【００２０】
さらに、当業者は、（１）特定のステップは任意選択で実行されてよく、（２）ステップは本明細書に記載された特定の順序に限定されなくてよく、（３）特定のステップは異なる順序で実行されてよく、（４）特定のステップは同時に行われてよいことを認識するべきである。
【００２１】
本明細書の実施形態は主に畳み込みの文脈で説明されているが、当業者は、逆畳み込みも行列−行列タイプの乗算演算として構成することができ、したがって、本発明の原理が逆畳み込みに等しく適用可能であることを了解されよう。さらに、本開示の様々な実施形態に従って、他のタイプの数学演算が実装されてよい。
【００２２】
説明は、畳み込み行列乗算回路用のベクトル化入力への少なくとも１つの入力行列の変換を記載するが、当業者は、記載された方法および構造が、広範囲の入力データタイプをあるフォーマットから別のフォーマットに変換するために使用されてよいことを認識されよう。これらの異なる入力データ構造のすべては本説明の範囲内に入る。図２は、本開示の様々な実施形態による、畳み込みを行列乗算回路にマッピングするための例示的なプロセスのフローチャートである。プロセス２００は、たとえば、データフォーマッティングデバイスにおいて、畳み込みパラメータを含む畳み込み命令が受け取られるステップ２０２において始まる。畳み込み命令またはパラメータは、たとえば、フィルタ次元、ストライド、入力のアドレス、または特定の数の出力チャネルであってよい。
【００２３】
ステップ２０４において、畳み込みパラメータに基づいて、畳み込み演算の入力が識別される。実施形態では、入力は、実施形態では３次元データ行列を表すことができる異なるアドレスにある１つまたは複数の記憶位置に記憶される。実施形態では、行列は、所与の出力チャネルに対して並行して計算されるピクセルの数に対応する第１の次元、並行して動作する出力チャネルの数に対応する第２の次元、およびピクセルごとの異なる色に対応する第３の次元を有する。
【００２４】
ステップ２０６において、重複する／冗長な入力データが、たとえば、状態機械によって識別される。実施形態では、状態機械は、フィルタサイズおよびストライドなどのフィルタパラメータを使用して、再利用可能なオペランドを決定する。
【００２５】
ステップ２０８において、計算時間および電力消費を削減するために、重複する入力データのローカルコピーがキャッシュまたはバッファから検索されて、たとえば、ＳＲＡＭから同じデータを再びフェッチする必要性を回避することができる。
【００２６】
ステップ２１０において、畳み込み演算ごとに、行列プロセッサが高性能算術演算、たとえば、大規模な行列乗算を実行することができるように、たとえば、行列プロセッサの所定の入力フォーマットに基づいて、行列プロセッサ内の位置に従って入力を配置するために、シーケンサが使用されてよい。実施形態では、シーケンサは、畳み込み演算のサイクルごとに入力を配置する。特定の実施形態では、シーケンサは、データを行列プロセッサに入力するために使用されるベクトルに２次元行列間のデータをマッピングする。たとえば、シーケンサは、２次元行列内のその位置に基づいてデータ／オペランドをベクトル内の対応する場所に効率的に移動させる、要素ごと（たとえば、ビットごとまたはバイトごと）のマッピングを実行することができる。入力が配置されると、実施形態では、アライナは、配置されたデータを整列させ、既定のシーケンスに従ってそれを行列プロセッサに供給することができる。
【００２７】
ステップ２１２において、入力フォーマットに基づいて、行列プロセッサのハードウェア要素は、行列乗算を実行するように動的に構成されてよい。実施形態では、行列プロセッサ入力は、データ入力行列に従ってフォーマットされたオペランドを含む第１のベクトル、および重み入力行列に従ってフォーマットされたオペランドを含む第２のベクトルに適応する。
【００２８】
最後に、ステップ２１４において、たとえば、入力画像をフィルタで畳み込んで畳み込み結果を生成するために、行列乗算結果が使用されてよい。実施形態では、畳み込み結果は、非線形関数、正規化演算、および／またはプーリング演算を使用することにより、たとえば、画像出力を向上させるためにさらに処理されてよい。
【００２９】
本明細書で開示されたプロセスおよびシステムは、畳み込み方法およびシステムの文脈で記載されるが、これは、本開示の教示が逆畳み込み方法およびシステムに等しく適用することができるので、本開示の範囲に対する制限として意図されないことに留意されたい。
【００３０】
図３は、本開示の様々な実施形態による、畳み込みを乗算回路にマッピングするためにデータフォーマッタを利用する例示的な行列乗算システムを示す図である。システム３００は、メモリデバイス３０２、データフォーマッタ３０６、制御ロジック３０８、キャッシュ（またはバッファ）３１２、論理回路３１４、および行列プロセッサ３１６、ならびにシーケンサ３１０を備える。図３の１つまたは複数の構成要素、たとえば、データフォーマッタ３０６およびシーケンサ３１０は、各個々の統合構成要素に関連付けられた少なくともいくつかの機能を実行する統合構成要素として実装されてよいことが理解されよう。
【００３１】
データフォーマッタ３０６はインラインフォーマッタとして実装されてよく、実施形態では、行列プロセッサ３１６によって効率的に処理することができるベクトルフォーマットにデータ入力行列を変換するために使用される。
【００３２】
図３のメモリデバイス３０２は、当技術分野で知られている任意のメモリデバイスであり、オーディオデータ、センサデータ、および超音波データなどの任意のタイプのデータを含んでよい。実施形態では、メモリ３０２は、１つまたは複数の位置および異なるアドレスに記憶された画像データ３０４を含む。実施形態では、アドレスは多次元データ行列を表すことができる。
【００３３】
実施形態では、制御ロジック３０８は、行列乗算システム３００内のシーケンサ３１０および他の構成要素を管理することができる。制御ロジック３０８は、データフォーマッタ３０６またはシーケンサ３１０に組み込まれてよく、実施形態では、データフォーマッタ３０６が行列乗算器３１６内の予想される位置に一致するようにデータをフォーマットすることができるように、フィルタパラメータ、たとえば、ストライドに従ってメモリ３０２の位置からデータを選択することができる。キャッシュ／バッファ３１２は、実施形態では、メモリ３０２からのデータに再アクセスし再読込みする必要性を回避するために、畳み込みによる再利用のためのデータのローカルコピーを記憶するために使用されてよいローカルバッファである。
【００３４】
論理回路３１４は、任意の数の入力演算子およびデータレジスタを表す回路を備えてよい。実施形態では、論理回路３１４は、Ｍ個の重みオペランドおよびＮ個の画像データオペランドを行列プロセッサ３１６に入力する回路を備えてよい。重みデータおよび画像データ３０４は、様々なタイプのメモリ３０２（たとえば、ＳＲＡＭ）に記憶されてよい。
【００３５】
行列プロセッサ３１６は、乗算、累算、およびシフト演算を同時に実行することができる任意の数の回路およびサブサーキット回路（たとえば、算術論理ユニット、レジスタ、エンコーダなど）を備えてよい。各サブサーキット回路は、算術演算を実行することが可能なセルであってよい。実施形態では、行列プロセッサ３１６は、たとえば、データ行列および事前にフォーマットされた重み行列を受け取り、乗算して、畳み込み演算用の乗算積を生成する乗加算回路を備える。
【００３６】
畳み込み演算は、画像データに、一組の個別のフィルタ、すなわち、異なるセットの情報を含む可能性があるいくつかの入力チャネルに対して、事前にフォーマットされ、メモリ３０２に記憶された一組の重みを加えることができる。これにより、入力画像内の様々な特徴を検出することが可能になる。
【００３７】
加えて、一連の異なる特徴を異なる順序で分析することにより、画像内でマクロ特徴が識別されてよい。実施形態では、畳み込みは、（たとえば、加算器によって）合計された部分ドット積を取得して、出力画像内の出力ピクセルを表す累積ドット積（すなわち、整数）を生成するために、長方形の入力行列の長方形の重み行列との乗算を含む。
【００３８】
実施形態では、算術演算は、行列プロセッサ３１６の複数の行および列を利用して、Ｎ×Ｎのタイル出力を生成することによって並列化される。たとえば、９６の所与の行サイズ、および９６の対応する列サイズは、９２１６個のピクセルの出力を容易にする。行列プロセッサ３１６は、各軸上の任意のベクトル長に適応することができ、実施形態では、行列フォーマットで配置されたＰｘＱのタイルを備えるＭ×Ｎの行列プロセッサとして寸法付けられる。
【００３９】
実施形態では、シーケンサ３１０は、たとえば、制御ロジック３０８から、任意の数の畳み込みパラメータを含む畳み込み命令を受け取る。実施形態では、畳み込み命令は、フィルタパラメータ（たとえば、フィルタサイズ）、出力チャネルの数などを含んでよい。実施形態では、シーケンサ３１０は、畳み込みパラメータを使用して畳み込み演算の入力または入力のアドレスを識別し、それらの入力をメモリ３０２内の対応するアドレス位置から受け取るか、またはフェッチする。
【００４０】
実施形態では、データフォーマッタ３０６は、画像情報を含む２次元または３次元のデータを、行または列によって表されてよい単一のベクトルまたは文字列に変換し、このように、画像データが線形化またはベクトル化される。実施形態では、フォーマッタ３０６は、畳み込みパラメータに従って、画像データ３０４を行列プロセッサ３１６のハードウェア要件による適切なフォーマットにマッピングすることにより、画像データ３０４を行列プロセッサ３１６による処理に向けて準備し、その結果、行列プロセッサ３１６は、たとえば、出力ピクセルを生成するために、畳み込み計算の一部として行列乗算を実行することができる。
【００４１】
実施形態では、ベクトル化画像データのサイズは、オペランドが行列プロセッサ３１６への入力と整列するように、行列プロセッサ３１６への入力の数に直接関係する。
【００４２】
実施形態では、データフォーマッタ３０６は、たとえば、状態機械を介して、重複する、すなわち、同一または冗長であり、所与の畳み込み演算のために２回以上アクセスされる必要がある１つまたは複数の位置に存在してよい入力を識別する。状態機械は、重複するデータを再利用可能なデータとして識別するために、フィルタサイズおよびストライドなどのフィルタパラメータを使用するように構成されてよく、その結果、行列プロセッサ３１６は、メモリ３０２からデータに再アクセスし転送する必要なく、オペランドを再利用することができる。代わりに、実施形態では、再利用可能なデータは、たとえば、キャッシュ３１２に記憶されたローカルコピーからロードされてよく、それにより、計算の労力、時間、および電力消費が削減される。
【００４３】
実施形態では、データシーケンサ３１０は、たとえば、畳み込み演算ごとに、畳み込み演算の各サイクル内で行列プロセッサ３１６によって予想される場所に従って、たとえば、ドット乗算を実行するときに行列プロセッサ３１６の所与の入力フォーマットと一致するように、検索された入力を配置することができる。シーケンサ３１０は、データを読み取るためのアドレスを生成し、結果を書き込み、畳み込み演算を実行するときにシステム３００の状態を追跡することができる。実施形態では、シーケンサ３１０は、この情報の一部またはすべてを使用して、メモリ３０２内のどのアドレスからデータを取得するか、および、たとえば、後続の畳み込みステップで行列プロセッサ３１６によってそれが適切に使用され得るように、それを処理する方法を決定する。実施形態では、シーケンサ３１０は、データフォーマッタ３０６に結合され、データフォーマッタ３０６は、所与の入力フォーマットに従って既定の順序で、検索および同期された画像データを行列プロセッサ３１６と整列させるために使用されてよい。
【００４４】
実施形態では、様々な入力パラメータまたは構成によって決定されるような入力フォーマットに基づいて、行列プロセッサ３１６のハードウェア要素は、任意のタイプの算術演算（たとえば、乗累算乗加算）を実行するように動的に構成されてよい。実施形態では、行列プロセッサ３１６への入力は、データ入力行列に従ってフォーマットされたベクトルを含む。実施形態では、入力は、たとえば、行列乗算がニューラルネットワーク向けの画像データ３０４を畳み込むために使用されてよいように、重み入力行列に従ってフォーマットされた第２のベクトルを含む。
【００４５】
実施形態では、フォーマット化は、異なる入力サイズを有する行列の処理に適応するために動的に実行される。実施形態では、入力チャネルを含む再フォーマットされた行列は、キャッシュ／バッファ３１２に供給される。実施形態では、キャッシュ／バッファ３１２は、データを読み取るためにメモリ３０２に再アクセスする必要なく、メモリ３０２からデータをフェッチし、畳み込みによって再利用され得るデータのローカルコピーを記憶する。
【００４６】
高速行列乗算に適した代替フォーマットにデータを再配置することにより、畳み込み演算を行列乗算演算に変換するために、ＣＰＵまたはＧＰＵによって実行されるフォーマッティング関数の一般的なソフトウェア実装形態とは異なり、本開示の様々なハードウェア実装形態は、データをその場で再フォーマットし、たとえば、サイクルごとに９６個のデータを効果的に実行に使用できるようにし、行列の比較的多数の要素が並行して処理されることが可能になり、こうして、畳み込みが行列演算に効率的にマッピングされる。実施形態では、２Ｎ個のフェッチされた入力データに対して、Ｎ２個の計算データが取得されてよい。
【００４７】
システム３００は、本開示の範囲内に入る追加の構成要素、たとえば、ハードウェア加速プーリングユニット、メモリ３０２からデータを検索し、データ（たとえば、重みおよび結果）をＳＲＡＭに記憶するＤＭＡの一部であり得るＤＲＡＭ、ならびに当技術分野で知られている他の後処理要素などの後処理要素を備えてよいことが理解されよう。
【００４８】
図４は、本開示の様々な実施形態による、畳み込みを行列乗算回路にマッピングするためのプロセスを示す例示的な図である。図４００では、各行列４０２Ａ、４０２Ｂは、サブ行列４０６、４０８、たとえば、特定の色に関連付けられた入力チャネル用のサブ行列４０６を含む、強調表示されたセクションで描写されている。行列４１８は、重みデータ行列などの１つまたは複数の入力行列を表す。行列プロセッサ３１６は、好ましくは、図３を参照して説明された種類のプロセッサである。
【００４９】
実施形態では、データ行列４０２Ａ、４０２Ｂは、３つの異なる色についての画像データなどの入力データを保持することができる任意の数の行、列、およびチャネルを含む、３次元データ行列の一部を形成する。同様に、行列４１８は、３つの異なる色についての重みデータを保持するために任意の数の行および列を含むことができる長方形の入力重みデータ行列である。当業者は、入力行列のサイズおよび入力チャネルの数が、異なるアプリケーションに対して異なってよいことを認識されよう。
【００５０】
図４はさらに、実施形態では、それぞれのデータサブ行列４０６、４０８を線形化してその線形化バージョンを生成することによって取得され得るアレイ４１０、４１２を描写する。逆に、重みデータ行列４１８は、アレイ４１４を取得するためにベクトル化されてよい。一例として、実施形態では、第１の色に関連付けられた第１の入力チャネル用の３×３サブ行列４０６、第２の色に関連付けられた第２の入力チャネル用の３×３サブ行列４０６、および第３の色に関連付けられた第３の入力チャネル用の第３の３×３サブ行列４０６は、アレイ４１０を形成するように組み立てられる。２のストライドを想定すると、行列プロセッサ３１６のすべての入力列が入力データで満たされ得るまで、別の３×３サブ行列４０８への位置がデータ行列４０２Ｂ内で識別されて配列４１２を形成し、以下同様である。同様に、入力重みデータは、アレイ４１４と同様の追加の出力チャネルを形成するために再フォーマットすることができる。
【００５１】
実施形態では、３つの別個の入力チャネルを表すことができる３つの３×３重みデータ行列４１８は、（たとえば、図３を参照して説明されたフォーマッタによって）、合計２７要素を含むベクトルに再フォーマットされてよく、それらから、２７要素アレイ（たとえば、アレイ４１４）は、行列プロセッサ３１６によって実行される畳み込み演算で使用するために生成されてよい。
【００５２】
詳細には、データ行列４０２Ａ、４０２Ｂは、たとえば、重み行列４１８の３×３×３要素に対応するアレイまたは行４１４内の各要素を、たとえば、サブ行列４０６の３×３×３要素に対応するアレイまたは列４１０内の各要素とドット乗算して、たとえば、出力画像内の出力ピクセルを表すことができる累積ドット積４３０を生成するために行列プロセッサアーキテクチャ３１６によって累積され得る部分ドット積を生成することにより、畳み込み演算の一部として重みデータ行列４１８と乗算されてよい。次のドット積は、行４１４を列４１２に対応するベクトルとドット乗算することによって取得されてよく、そのような部分ドット積の値は、入力データ行列４０２Ａ、４０２Ｂに対する重み行列４１８の適用に対応し、アキュムレータ出力は畳み込み全体を表す。実施形態では、行列プロセッサは９６×９６のサイズであり、これにより、９２１６個の乗累算演算が、並行して、たとえば、単一のクロックサイクル内で実行されることが可能になる。
【００５３】
実施形態では、出力チャネルの計算において、行列プロセッサは、一度に入力データを読み込むことにより、多くの出力チャネルが一度に生成することができるように、行列４０２Ａ、４０２Ｂからの同じセットの入力データを使用して、行列４１８からの異なるセットの重み（すなわち、フィルタ）を使用して、同じ出力ピクセルを生成することができる。１つまたは複数の入力チャネル、たとえば、色（たとえば、ＲＧＢ）ごとに１つが使用されてよい。たとえば、各畳み込みは、色ごとに１つ、３つの異なる行列を表す重み４１８を使用することができる。
【００５４】
各出力チャネル４３６は、入力データ内の異なる特徴を表す異なるフィルタまたは重み４１８を使用して生成されてよい。出力チャネルの数は特徴の数に依存してよい。実施形態では、畳み込みの数は、入力チャネルの数の出力チャネル４３６の数倍に等しく、各畳み込みは入力チャネルごとにＮ個の畳み込みを有してよい。
【００５５】
入力データ行列４０２Ａ、４０２Ｂ、重みデータ行列４１８、およびアレイ４１０〜４１４は、図４に示されたものとは異なる数の列および行を有してよいことが理解されよう。正確に示されたように、入力チャネルおよび出力チャネルの数は任意に選択されてよい。実施形態では、重みデータ行列４１８が既知であるとき、アレイ４１４は、フォーマッタを使用することなく、ベクトル化フォーマットで生成および記憶されてよい。実施形態では、ドット乗算は、ワンショット行列−行列乗算演算を生成するために同時に実行されてよい。
【００５６】
本発明の実施形態は、１つまたは複数のプロセッサまたは処理ユニットがステップを実行させるための命令を用いて、１つまたは複数の非一時的コンピュータ可読媒体上に符号化されてよい。１つまたは複数の非一時的コンピュータ可読媒体は、揮発性メモリおよび不揮発性メモリを含むことに留意されたい。ハードウェア実装形態またはソフトウェア／ハードウェア実装形態を含む代替の実装形態が可能であることに留意されたい。ハードウェア実装機能は、ＡＳＩＣ、プログラマブルアレイ、デジタル信号処理回路などを使用して実現されてよい。したがって、任意の請求項内の「手段」という用語は、ソフトウェアとハードウェアの両方の実装形態をカバーするものである。同様に、本明細書で使用される「コンピュータ可読媒体」という用語は、その上に具現化された命令のプログラムを有するソフトウェアおよび／もしくはハードウェア、またはそれらの組合せを含む。これらの代替実施形態を念頭に置いて、図および付随する説明は、当業者がプログラムコード（すなわち、ソフトウェア）を記述し、かつ／または回路（すなわち、ハードウェア）を組み立てて、必要な処理を実行するために必要とする機能情報を提供することを理解されたい。
【００５７】
本発明の実施形態は、様々なコンピュータ実装演算を実行するためのコンピュータコードを有する非一時的で有形のコンピュータ可読媒体を有するコンピュータ製品にさらに関連してよいことに留意されたい。媒体およびコンピュータコードは、本発明の目的のために特別に設計および構築されたものであってよく、またはそれらは、関連分野の当業者に知られているかもしくは利用可能な種類のものであってよい。有形のコンピュータ可読媒体の例には、限定はしないが、ハードディスク、フロッピーディスク、および磁気テープなどの磁気媒体、ＣＤ−ＲＯＭおよびホログラフィックデバイスなどの光学媒体、光磁気媒体、ならびに特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理デバイス（ＰＬＤ）、フラッシュメモリデバイス、ＲＯＭデバイス、およびＲＡＭデバイスなどのプログラムコードを記憶または記憶し実行するように特別に構成されたハードウェアデバイスが含まれる。コンピュータコードの例には、コンパイラによって生成されるものなどの機械コード、およびインタプリタを使用してコンピュータによって実行されるより高いレベルのコードを含むファイルが含まれる。本発明の実施形態は、処理デバイスによって実行されるプログラムモジュール内にあり得る機械実行可能命令として、全体的または部分的に実装されてよい。プログラムモジュールの例には、ライブラリ、プログラム、ルーチン、オブジェクト、構成要素、およびデータ構造が含まれる。分散コンピューティング環境では、プログラムモジュールは、ローカル、リモート、または両方の設定で物理的に配置されてよい。
【００５８】
当業者は、本発明の実践にとってコンピューティングシステムまたはプログラミング言語が不可欠でないことを認識されよう。当業者はまた、上述されたいくつかの要素が物理的および／または機能的にサブモジュールに分離されるか、または一緒に組み合わされてよいことを認識されよう。
【００５９】
以下の特許請求の範囲の要素は、複数の依存関係、構成、および組合せを有することを含めて、異なって配置されてよいことに留意されたい。たとえば、実施形態では、様々な請求項の主題は、他の請求項と組み合わされてよい。
【００６０】
前述の例および実施形態は例示的であり、本発明の範囲を限定するものではないことが当業者には了解されよう。明細書を読み、図面を検討すると当業者には明らかである、それに対するすべての置換、拡張、等価物、組合せ、および改善は、本発明の真の趣旨および範囲内に含まれることが意図されている。
【図１】
2021507335.tif 000003
【図２】
2021507335.tif 000004
【図３】
2021507335.tif 000005
【図４】
2021507335.tif 000006
【国際調査報告】
2021507335.tif 000007