(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-08
(54)【発明の名称】1つまたは複数のテンソルを再フォーマットすることによりニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための方法、装置および製造品
(51)【国際特許分類】
G06F 17/10 20060101AFI20241001BHJP
【FI】
G06F17/10 A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023568735
(86)(22)【出願日】2022-07-28
(85)【翻訳文提出日】2023-12-22
(86)【国際出願番号】 US2022038710
(87)【国際公開番号】W WO2023048824
(87)【国際公開日】2023-03-30
(32)【優先日】2021-09-24
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ブレイディ、ケビン
(72)【発明者】
【氏名】パワー、マーティン
(72)【発明者】
【氏名】ハンラハン、ニアル
(72)【発明者】
【氏名】パッラ、アレッサンドロ
(72)【発明者】
【氏名】グライメル、マーティン-トーマス
(72)【発明者】
【氏名】ベルナルド、デイヴィッド
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB26
5B056BB38
5B056BB71
5B056HH03
(57)【要約】
1つまたは複数のテンソルを再フォーマットすることによりニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げる方法、装置、システムおよび製造品が、開示される。例示的な装置は、重みカーネルの幅を決定し、第1のテンソルの深さを決定するためのパラメータ決定回路を含む。例示的な装置は、第1のテンソルの1番目のXY位置から、重みカーネルの幅と重なる連続するXY位置の、第1のテンソルの深さまで、1つまたは複数のZ値をコピーし、1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードするための記憶制御回路も含む。
【特許請求の範囲】
【請求項1】
ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための装置であって、
第1のテンソルにアクセスするためのインタフェース回路;および
プロセッサ回路
を備え、
前記プロセッサ回路は、
中央処理ユニット、グラフィックスプロセッサユニットまたはデジタル信号プロセッサのうちの少なくとも1つ、前記中央処理ユニット、前記グラフィックスプロセッサユニットまたは前記デジタル信号プロセッサのうちの前記少なくとも1つは、前記プロセッサ回路内のデータ移動を制御するための制御回路、命令に対応する1つまたは複数の第1の演算を実行するための算術および論理回路、および前記1つまたは複数の第1の演算の結果および前記命令を前記装置に記憶するための1つまたは複数のレジスタを含む;
フィールドプログラマブルゲートアレイ(FPGA)、前記FPGAは、論理ゲート回路、複数の構成可能な相互接続および記憶回路を含み、前記論理ゲート回路および前記相互接続は、1つまたは複数の第2の演算を実行し、前記記憶回路は、前記1つまたは複数の第2の演算の結果を記憶する;または
1つまたは複数の第3の演算を実行するための論理ゲート回路を含む特定用途向け集積回路(ASIC);
のうちの1つまたは複数を有し、
前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、
パラメータ決定回路を、
重みカーネルの幅を決定すること;および
前記第1のテンソルの深さを決定すること
を行うようインスタンス化する;および
記憶制御回路を、
前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーすること;および
前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードすること
を行うようインスタンス化する、
装置。
【請求項2】
前記装置前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、パディング回路を、
前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断すること;
外部パディングが適用される、という判断に応答して、
前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードすること;および
前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードすること
を行うようインスタンス化する、
請求項1に記載の装置。
【請求項3】
前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記記憶制御回路を、
前記第1のテンソルの1番目のY位置を選択すること;
前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択すること;および
前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択すること
を行うようインスタンス化する、
請求項1に記載の装置。
【請求項4】
前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記記憶制御回路を、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択することを行うようインスタンス化する、
請求項1から3のいずれか一項に記載の装置。
【請求項5】
前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である、請求項1に記載の装置。
【請求項6】
前記第1のテンソルは、前記NNへの入力画像に対応する、請求項1に記載の装置。
【請求項7】
前記重みカーネルは、第1の重みカーネルであり、前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記パラメータ決定回路を、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択することを行うようインスタンス化する、請求項1に記載の装置。
【請求項8】
実行された場合、少なくとも、
重みカーネルの幅を決定する手順;
第1のテンソルの深さを決定する手順;
前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーする手順;および
前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードする手順
をプロセッサ回路に実行させる命令を備えるコンピュータ可読記憶媒体。
【請求項9】
前記命令は、実行された場合、
前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断する手順;
外部パディングが適用される、という判断に応答して、
前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードする手順;および
前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードする手順
を前記プロセッサ回路に実行させる、
請求項8に記載のコンピュータ可読記憶媒体。
【請求項10】
前記命令は、実行された場合、
前記第1のテンソルの1番目のY位置を選択する手順;
前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択する手順;および
前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択する手順
を前記プロセッサ回路に実行させる、
請求項8に記載のコンピュータ可読記憶媒体。
【請求項11】
前記命令は、実行された場合、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択する手順を前記プロセッサ回路に実行させる、請求項8から10のいずれか一項に記載のコンピュータ可読記憶媒体。
【請求項12】
前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である、請求項8に記載のコンピュータ可読記憶媒体。
【請求項13】
前記第1のテンソルは、ニューラルネットワークへの入力画像に対応する、請求項8に記載のコンピュータ可読記憶媒体。
【請求項14】
前記重みカーネルは、第1の重みカーネルであり、前記命令は、実行された場合、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択する手順を前記プロセッサ回路に実行させる、請求項8に記載のコンピュータ可読記憶媒体。
【請求項15】
ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための装置であって、
重みカーネルの幅を決定すること;および
第1のテンソルの深さを決定すること;
を行う、1つまたは複数のパラメータを決定するための手段;および
前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーすること;および
前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードすること
を行う、記憶を制御するための手段
を備える、装置。
【請求項16】
前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断すること;
外部パディングが適用される、という判断に応答して、
前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードすること;および
前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードすること
を行う、パディングするための手段をさらに備える、請求項15に記載の装置。
【請求項17】
前記記憶を制御するための手段は、
前記第1のテンソルの1番目のY位置を選択すること;
前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択すること;および
前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択すること
を行う、
請求項15に記載の装置。
【請求項18】
前記記憶を制御するための手段は、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択することを行う、請求項15から17のいずれか一項に記載の装置。
【請求項19】
前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である、請求項15に記載の装置。
【請求項20】
前記第1のテンソルは、前記NNへの入力画像に対応する、請求項15に記載の装置。
【請求項21】
前記重みカーネルは、第1の重みカーネルであり、前記1つまたは複数のパラメータを決定するための手段は、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択することを行う、請求項15に記載の装置。
【請求項22】
ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための方法であって、
重みカーネルの幅を決定する段階;
第1のテンソルの深さを決定する段階;
前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーする段階;および
前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードする段階
を備える、方法。
【請求項23】
前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断する段階;
外部パディングが適用される、という判断に応答して、
前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードする段階;および
前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードする段階
をさらに備える、請求項22に記載の方法。
【請求項24】
前記第1のテンソルの1番目のY位置を選択する段階;
前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択する段階;および
前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択する段階
をさらに備える、請求項22に記載の方法。
【請求項25】
前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択する段階をさらに備える、請求項22から24のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、アクセラレータ回路に関し、より具体的には、1つまたは複数のテンソルを再フォーマットすることによりニューラルネットワーク(NN)の利用率をNNの浅い層のアクセラレータ回路について上げるための方法、装置および製造品に関する。
【背景技術】
【0002】
画像処理能力に対する需要が、高出力の専用デスクトップハードウェア以外にも広がっており、パーソナルおよび/またはそうでなければモバイルデバイスに対する期待になっている。モバイルデバイスは、典型的には、サイズの制約、温度管理の制約および/または電力の制約により制限される処理能力を有する。
【図面の簡単な説明】
【0003】
【
図1】ニューラルネットワークの深さが増すと入力テンソルの次元がどのように変化するかを示すグラフ図である。
【0004】
【
図2】例示的な中央処理ユニット(CPU)、例示的なシステムメモリ、例示的なダイレクトメモリアクセス(DMA)回路および例示的な人工知能(AI)アクセラレータ回路を含む例示的なシステムオンチップ(SoC)のブロック図である。
【0005】
【0006】
【
図4】
図2のシステムメモリに記憶された例示的なテンソルデータを示す。
【0007】
【
図5】例示的なポインタテーブルおよび対応するテンソルデータを含む例示的なメモリを示す。
【0008】
【
図6】記憶要素ポインタがないメモリにおけるデータレイアウトを示すグラフ図である。
【0009】
【
図7】記憶要素ポインタがあるメモリにおけるデータレイアウトを示すグラフ図である。
【0010】
【
図8】
図2の例示的なデータ複製前処理回路の例示的な実装を示すブロック図である。
【0011】
【
図9】(a)例示的な出力テンソルを決定するための、例示的な入力テンソルと例示的な重みセットとの畳み込みから(b)例示的な出力テンソルを決定するための、例示的な再フォーマットされた入力テンソルと例示的な再フォーマットされた重みセットとの畳み込みへの例示的な再形成を示すデータフロー図である。
【0012】
【
図10】
図2の例示的なフラクショナルストライド前処理回路の例示的な実装を示すブロック図である。
【0013】
【
図11】
図2の例示的なMAC回路の例示的な実装を示すブロック図である。
【0014】
【
図12】例示的な出力テンソルを決定するための、パディングがない例示的な入力テンソルと1のストライドを有する3×3×3重みカーネルの例示的なセットとの例示的な畳み込みを示すデータフロー図である。
【0015】
【
図13】
図12の例示的な出力テンソルを決定するための、パディングがない例示的な再フォーマットされた入力テンソルと1のストライドを有する再フォーマットされた1×3×9重みカーネルの例示的なセットとの例示的な畳み込みを示すデータフロー図である。
【0016】
【
図14】洗練されたフラクショナルストライディングを容易にするための、パディングがない例示的な再フォーマットされた入力テンソルと1のストライドおよび1つまたは複数の重みスパース性ビットマップを有する例示的な3×3×3重みカーネルとの例示的な畳み込みを示すデータフロー図である。
【0017】
【
図15】例示的な出力テンソルを決定するための、パディングがない例示的な入力テンソルと2のストライドを有する3×3×3重みカーネルの例示的なセットとの例示的な畳み込みを示すデータフロー図である。
【0018】
【
図16】
図15の例示的な出力テンソルを決定するための、パディングがない例示的な再フォーマットされた入力テンソルと2のストライドを有する再フォーマットされた1×3×9重みカーネルの例示的なセットとの例示的な畳み込みを示すデータフロー図である。
【0019】
【
図17】洗練されたフラクショナルストライディングを容易にするための、パディングがない例示的な再フォーマットされた入力テンソルと2のストライドおよび1つまたは複数の重みスパース性ビットマップを有する例示的な3×3×3重みカーネルとの例示的な畳み込みを示すデータフロー図である。
【0020】
【
図18】例示的な出力テンソルを決定するための、パディングがある例示的な入力テンソルと1のストライドを有する3×3×3重みカーネルの例示的なセットとの例示的な畳み込みを示すデータフロー図である。
【0021】
【
図19】
図18の例示的な出力テンソルを決定するための、パディングがある例示的な再フォーマットされた入力テンソルと1のストライドを有する再フォーマットされた1×3×9重みカーネルの例示的なセットとの例示的な畳み込みを示すデータフロー図である。
【0022】
【
図20】洗練されたフラクショナルストライディングを容易にするための、パディングがある例示的な再フォーマットされた入力テンソルと1のストライドおよび1つまたは複数の重みスパース性ビットマップを有する例示的な3×3×3重みカーネルとの例示的な畳み込みを示すデータフロー図である。
【0023】
【
図21】
図2および/または
図8のデータ複製前処理回路を実装するためにプロセッサ回路により実行および/またはインスタンス化され得る例示的な機械可読命令および/または例示的な動作のフローチャート代表図である。
【0024】
【
図22】
図2および/または
図10のフラクショナルストライド前処理回路を実装するためにプロセッサ回路により実行および/またはインスタンス化され得る例示的な機械可読命令および/または例示的な動作のフローチャート代表図である。
【0025】
【
図23】
図2および/または
図8のデータ複製前処理回路を実装するための
図21の例示的な機械可読命令および/または
図2および/または
図10のフラクショナルストライド前処理回路を実装するための
図22の例示的な機械可読命令を実行するように構造化されたプロセッサ回路を含む例示的な処理プラットフォームのブロック図である。
【0026】
【
図24】
図23のプロセッサ回路の例示的な実装のブロック図である。
【0027】
【
図25】
図23のプロセッサ回路の別の例示的な実装のブロック図である。
【0028】
【
図26】エンドユーザおよび/または消費者(例えば、ライセンス、販売および/または使用のために)、小売業者(例えば、販売、再販売、ライセンスおよび/またはサブライセンスのために)および/または相手先商標製品製造者(OEM)(例えば、小売業者へ、および/または直接購入顧客などの他のエンドユーザへ配布される製品に含めるためになど)に関連付けられたクライアントデバイスへソフトウェア(例えば、
図21および/または
図22の例示的な機械可読命令に対応するソフトウェア)を配布するための例示的なソフトウェア配布プラットフォーム(例えば、1つまたは複数のサーバ)のブロック図である。
【0029】
図面は縮尺通りではない。概して、同じまたは同様の部分を指すために、図面および付随する明細書の全体にわたって同じ参照番号が用いられる。本明細書において用いられる場合、別段の記載がない限り、接続についての言及(例えば、取り付けられ、結合され、接続され、および接合され)は、接続についての言及により参照される要素の間の中間部材、および/またはそれらの要素の間の相対移動を含み得る。したがって、接続についての言及は、2つの要素が互いに直接接続され、および/または固定されていることを必ずしも推論するわけではない。
【0030】
別段の明示的な記載がない限り、例えば、「第1の」、「第2の」、「第3の」等の記述子は、本明細書では、優先順位、物理的順序、リスト内の配置および/または任意の態様での順序付けのいかなる意味も否定し、または別様に示すことなく用いられるが、開示されている例を理解しやすくするために、要素を区別するためのラベルおよび/または任意の名前として用いられているに過ぎない。いくつかの例において、「第1の」という記述子は、詳細な説明におけるある要素を指すために用いられ得るが、同じ要素が、「第2の」または「第3の」のような異なる記述子が記載された請求項において参照され得る。そのような場合、そのような記述子は、そうでなければ例えば同じ名前を共有し得る要素を明確に識別するために用いられているに過ぎないことを理解されたい。本明細書において用いられる場合、「通信している」という、その変形を含む文言は、1つまたは複数の中間コンポーネントを通じた直接的な通信および/または間接的な通信を包含しており、直接的な物理(例えば、有線)通信および/または絶え間ない通信を必要としないが、むしろ、周期的間隔、スケジューリングされた間隔、非周期的な間隔および/または1回限りのイベントでの選択的な通信を追加的に含む。
【0031】
本明細書において用いられる場合、「プロセッサ回路」は、(i)特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含んでいる1つまたは複数の専用電気回路、および/または(ii)特定の動作を実行するように命令でプログラミングされており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含んでいる1つまたは複数の汎用半導体ベース電気回路を含むように定義されている。プロセッサ回路の例は、プログラミングされたマイクロプロセッサ、命令をインスタンス化し得るフィールドプログラマブルゲートアレイ(FPGA)、中央処理ユニット(CPU)、グラフィックスプロセッサユニット(GPU)、デジタル信号プロセッサ(DSP)、XPUまたはマイクロコントローラ、および、特定用途向け集積回路(ASIC)のような集積回路を含む。例えば、XPUが、複数のタイプのプロセッサ回路(例えば、1つまたは複数のFPGA、1つまたは複数のCPU、1つまたは複数のGPU、1つまたは複数のDSP等、および/またはそれらの組み合わせ)を含む異種のコンピューティングシステムにより実装されてよく、複数のタイプの処理回路のどれにでもコンピューティングタスクを割り当て得るアプリケーションプログラミングインタフェース(API)が、コンピューティングタスクの実行に最適である。
【発明を実施するための形態】
【0032】
パーソナルコンピュータおよび/またはモバイルデバイスを含む典型的なコンピューティングシステムは、高度画像処理またはコンピュータビジョンアルゴリズムを使用して、ヒューマンビジョンが実行できるタスクを自動化する。コンピュータビジョンタスクは、デジタル画像の取得、処理、分析および/または理解を含む。そのようなタスクは、デジタル画像からの次元データの抽出を部分的に容易にして、数値および/または記号情報を生成する。コンピュータビジョンアルゴリズムは、数値および/または記号情報を用いて、とりわけ3次元(3D)姿勢推定、イベント検出、オブジェクト認識、ビデオ追跡等に関連付けられた決定を行い、および/またはそうでなければ、それらに関連付けられた動作を実行できる。したがって、拡張現実(AR)、仮想現実(VR)、ロボット工学および/または他の用途をサポートするために、そのようなタスクを迅速に(例えば、リアルタイムまたは準リアルタイムで)かつ効率的に実行することが重要である。
【0033】
高度画像処理またはコンピュータビジョンアルゴリズムは、畳み込みニューラルネットワーク(CNN)を使用することがある。CNNは、ディープ人工ニューラルネットワークであり、画像の分類、類似度による画像のクラスタ化(例えば、画像検索)、および/または畳み込みを用いた画像内のオブジェクト認識の実行に典型的に用いられる。本明細書において用いられる場合、畳み込みは、2つの所与の関数のうちの一方の形状が他方の関数の形状によってどのように修正されるかを表す積分によりこれらの関数から導出される関数であると定義される。したがって、CNNは、入力画像の画像特徴(例えば、横方向線、2次元(2D)形状等)に対応する1つまたは複数のフィルタの出力を渡すことにより、入力画像に含まれる顔、個人、道路標識、動物等を識別して、入力画像内の画像特徴のマッチを識別するために用いられ得る。CNNは、1つまたは複数の関数を実行するために計算において記憶および/または使用される必要があるベクトル(例えば、多次元アレイから細分化される)を取得する。したがって、CNNは、1つまたは複数の画像に対応するデータを含む多次元アレイ(例えば、テンソル)を受信し得る。畳み込みを実行するために、プロセッサ回路は、1つまたは複数のフィルタ、および活性化関数を入力テンソル(例えば、多次元アレイ、3Dアレイ等)適用して、出力テンソルを生成する。本明細書において用いられる場合、テンソルという用語は、データの次元セットを指す。テンソルは、ランクによりカテゴリ化されてよく、ランクは、テンソルの次元数とは無関係である。例えば、ランクゼロのテンソルがスカラ値に対応し、ランク1のテンソルがベクトル値に対応し、ランク2のテンソルが行列値に対応し、ランク3以上のテンソルがテンソル値に対応する。
【0034】
ニューラル計算エンジン(NCE)およびニューラルネットワークアクセラレータ(NNA)を含む人工知能(AI)アクセラレータ回路は、AIモデル(例えば、ニューラルネットワーク(NN)モデル)の動作を実行するための専用ハードウェア回路である。例えば、そのような動作は、学習/トレーニングフェーズおよび推論フェーズという2つのフェーズへ分割され得る。学習/トレーニングフェーズでは、例えばトレーニングデータに基づくパターンおよび/または関連付けに従って動作するようにモデルをトレーニングするために、トレーニングアルゴリズムが用いられる。概して、モデルは、入力データを出力データへ変換するためのモデル内の一連のノードおよび接続を通じてなど、入力データがどのように出力データへ変換されるかをガイドする内部パラメータを含む。
【0035】
モデルは、ひとたびトレーニングおよび展開されると、データを処理するために推論フェーズで動作させられ得る。推論フェーズでは、分析されるデータ(例えば、実データ)がモデルへ入力され、モデルは、出力を作成するように実行される。この推論フェーズは、AIモデルがトレーニングから学習したことに基づいて出力を(例えば、モデルを実行して、学習されたパターンおよび/または関連付けを実データへ適用することにより)生成しようと「思っている」ものと考えられ得る。いくつかの例において、入力データは、AIモデルへの入力として用いられる前に、前処理を経る。さらに、いくつかの例において、出力を有用な結果(例えば、データ、機械により実行される命令の表示等)へ変換するために、出力データは、AIモデルにより生成された後に後処理を経ることがある。
【0036】
コンピュータビジョン、音声認識、および画像およびビデオ処理を含む様々なユースケースにわたって、NN用のアーキテクチャの数が増えている。例示的なNNアーキテクチャは、ResNet-50、MobileNet、EfficientNetおよびTinyYoloを含む。これらの例示的なNNアーキテクチャの各々は、各処理層が非常に高い計算要件を有する多くの処理層を含み、多くの乗算および加算(MAC)演算を含む。追加的に、NNアーキテクチャ内の各層は、1つまたは複数のチャネルを含む入力テンソルを受信する。1つまたは複数のチャネルは、対応する入力テンソルの深さに対応する。
【0037】
ほとんどのNNアーキテクチャの共通の特徴は、NNへの初期入力層が3つのチャネルを含むことである。例えば、いくつかのCNN(例えば、コンピュータビジョン用、画像およびビデオ処理用等)では、入力層は、実行された場合、画像に対して畳み込みを実行する。そのような例において、画像画素は、CNNへ供給され、典型的には、CNNの後続の層への入力テンソルと比較して非常に浅いとみなされる3つのチャネル(例えば、赤、緑、青(RGB)値)のみを含む。
【0038】
現代のCNNは、実行された場合、典型的には、32個、64個または96個のフィルタを入力画像へ適用する。したがって、CNNの次の層への入力テンソルは、入力画像よりもはるかに深くなり、深さは、フィルタの数(例えば、32個、64個96個等)に対応する。CNNが深くなると、入力テンソルのチャネル深さは、典型的には、256から2,048チャネルに及ぶ。逆に、テンソルの空間次元(例えば、高さおよび幅)は、CNNが深くなると減る傾向がある。
図1は、NNの深さが増すと入力テンソルの次元がどのように変化するかを示すグラフ
図100である。グラフ
図100は、ResNet-50 NNの深さが増すと入力テンソルの次元がどのように変化するかを示す。
【0039】
図1の示されている例において、グラフ
図100は、例示的な第1のプロット102および例示的な第2のプロット104を含む。
図1の例において、第1のプロット102は、ResNet-50 NNの深さが増すときの入力テンソルの空間次元を表す。
図1の例において、第2のプロット104は、ResNet-50 NNの深さが増すときの入力テンソルの深さを表す。ResNet-50 NNの例示的な最初の層において、入力画像は、3(点108)のチャネル深さを有する50,176画素(点106)の空間次元をもたらす224×224画素である。第1のプロット102が56×56画素、28×28画素、14×14画素および7×7画素へ進行する間に、第2のプロット104は、ResNet-50 NNの深さが増すと64チャネルから2,048チャネルへ増える。ResNet-50 NNの最終層(例えば、最も深い層)は、畳み込み層に対向する完全に接続された層である。したがって、第1のプロット102は、7×7画素から32×32画素(ブロック110)へ増える。
【0040】
図1に示されるように、最初の層から離れて、NNのほとんどの層への入力テンソルは、かなりの深さを有する。深い入力テンソルがAIアクセラレータ回路の計算のほとんどを含むので、業界全体の動向として、AIアクセラレータ回路が深いテンソルの処理においてますます効率的になっている。例えば、AIアクセラレータ回路は、アレイで配置され、かつ、より深い入力テンソルを処理するために最適化された多数のMAC回路を含む。高利用率を実現するために、例示的なAIアクセラレータ回路のそのようなMAC回路は、対応する入力テンソルにおいて最小数のチャネルを必要とする。32以上の深さを有する入力テンソルを含むほとんどの畳み込み層は、100%近くの利用率を実現しており、処理オーバヘッドに起因する劣化の割合は、1桁台の前半である。対照的に、より深い入力テンソルを有するこれらの層と同じ態様で処理された場合における入力層の利用率は、<30%というMAC利用率を実現している。
【0041】
したがって、NNの最初の層への入力テンソルの深さが不足していることで、AIアクセラレータ回路の効率が低減し、MAC回路の利用率の低下がもたらされる。(幅および高さに関して)比較的大きいサイズの最初の入力テンソルと結合されたMAC回路の利用率が低いので、NNへの最初の入力テンソルにより、NN全体の処理時間のうちのかなりの割合がもたらされる。したがって、NNの最初の層への入力テンソルに深さを追加すると、最初の層の処理の性能を改善できる。
【0042】
既存のAIアクセラレータ回路は、専ら最初の入力テンソルを処理して比較的浅い入力テンソルの処理効率を改善するハードウェア論理回路を用いている。このハードウェア論理回路は、利用率を上げるために再使用される入力活性化の重複がカーネルの次元およびストライドにより可能になる構成に依存している。そのようなハードウェア論理回路は、プレーナフォーマットでフォーマットされる最初の入力テンソルを必要とする。したがって、既存のAIアクセラレータ回路は、構成依存型であり、この結果、最初の入力テンソルの処理が遅くなる。
【0043】
追加的に、専用ハードウェア論理回路は、面積を消費し、既存のAIアクセラレータ回路内のMAC回路およびメモリの間に専用相互接続を必要とする。そのような専用相互接続により、ルーティングボトルネックがもたらされ、MACアレイが動作し得る最大周波数が限定される。追加的に、専用ハードウェア論理回路および相互接続は、最初の入力テンソルの処理のみに用いられるが、ネットワーク内のより深い層への入力テンソルは、異なる回路により処理される。大きいMACアレイを有するAIアクセラレータ回路に対する業界の動向として、専用相互接続を必要とするそのような専用ハードウェア論理回路のスケーリングは、現実的ではない。
【0044】
既存のAIアクセラレータ回路とは異なり、本明細書において開示される例は、高利用率を実現するためにカーネルの次元およびストライドの重複に依存しない。追加的に、本明細書において開示される例は、有利なことに、ネットワーク内の全ての層に共通のテンソルフォーマット(例えば、Zメジャーフォーマット)を利用する。利用率を上げるために、本明細書において開示される例は、カーネルにおける複数の点の活性化がMAC回路のアレイへ同時に入力されるように、入力テンソルを再フォーマットする。したがって、本明細書において開示される例により、NNの最初の層への入力テンソルのMAC回路利用率が上がる。例えば、開示される方法、装置および製造品は、NNの最初の層への入力テンソルを処理するAIアクセラレータ回路の性能の大きな改善をもたらす。NNの最初の層への入力テンソルの処理がネットワーク処理時間全体のうちのかなりの割合を占め得るので、そのような層を処理するための時間を減らすと、ネットワークレイテンシ全体が低減する。
【0045】
テンソルは、XYZ空間における3D構造であってよい。テンソルの各XY面は、チャネルに対応し、Z軸に沿った各ステップは、異なるチャネルに対応する。本明細書において開示される例示的なメモリにおいて、テンソルは、Zメジャーフォーマットとも称されるZXYフォーマットで記憶される。メモリにおいて、ZXYフォーマットデータは、Z次元、続いてX次元、それに続いてY次元に記憶される。つまり、例示的なテンソルは、メモリに連続的に記憶されるZX面へ分割される。したがって、MAC回路は、複数のチャネルにわたる各XY位置のデータを同時に読み取ることができる。
【0046】
本明細書において開示される例示的な方法、装置および製造品は、テンソルデータ複製を含み、この複製では、重みカーネルの幅と重なる、入力テンソルのXY位置のZ値が、再フォーマットされたテンソルへ連続的にコピーおよびロードされ、入力テンソルの深さが増す。追加的に、本明細書において開示される例示的な方法、装置および製造品は、フラクショナルストライティングを含み、フラクショナルストライドでは、異なるスパース性パターンを有する複数の重みスパース性ビットマップが、同じ重みカーネルについて生成され、入力テンソルを効果的に深くする入力テンソルの活性化データが選択的に処理される。
【0047】
図2は、例示的な中央処理ユニット(CPU)202、例示的なシステムメモリ204、例示的なダイレクトメモリアクセス(DMA)回路206および例示的な人工知能(AI)アクセラレータ回路208を含む例示的なシステムオンチップ(SoC)200のブロック図である。
図2の例において、CPU202は、例示的なコンパイラ210、例示的なデータ複製前処理回路212および例示的なフラクショナルストライド前処理回路214を含む。追加的に、
図2の例において、AIアクセラレータ回路208は、例示的なローカルメモリ216、例示的なデータ読み取り回路218、例示的な乗算および加算(MAC)回路220、および例示的なデータ書き込み回路222を含む。
【0048】
図2の示されている例において、CPU202は、DMA回路206に結合されている。
図2の例において、CPU202は、特定の動作を実行するよう命令を用いてプログラミングされており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路により実装される。例えば、CPU202は、コンパイラ210の動作、データ複製前処理回路212の動作および/またはフラクショナルストライド前処理回路214の動作を実行するよう、命令を用いてプログラミングされている。追加的に、CPU202は、1つまたは複数のAIまたは画像処理関連機能を実行するために記憶されまたは計算において用いられるデータ(例えば、入力テンソルおよび/または1つまたは複数の重みカーネル)を取得し得る。例えば、SoC200は、処理される画像を表す1つまたは複数の入力テンソルにアクセスするためのインタフェース回路を含んでよく、CPU202は、インタフェース回路から1つまたは複数の入力テンソルを取得してよい。したがって、CPU202は、1つまたは複数の画像に対応するデータを含む多次元アレイ(例えば、ベクトルのテンソルまたは行)を受信し得る。
図2の例において、CPU202は、データ(例えば、1つまたは複数のテンソルおよび/または1つまたは複数の重みカーネル)の記憶が、DMA回路206を介してシステムメモリ204内のAIアクセラレータ回路208により処理されるようにする。システムメモリ204内のAIアクセラレータ回路208により処理されるデータをCPU202が記憶する場合、データは、1つまたは複数のスパース性ビットマップ(本明細書においてさらに説明される)を含むスパースフォーマットで記憶される。いくつかの例において、入力テンソルが浅い(例えば、3、4、5等の深さを有する)場合、CPU202は、入力テンソルをシステムメモリ204に密なフォーマットで記憶する。追加的に、CPU202は、1つまたは複数のAIワークロード(例えば、コンパイラ210によりコンパイルされる)を処理のためにAIアクセラレータ回路208へオフロードする。
【0049】
図2の示されている例において、CPU202は、例示的なコンパイラ210を含む。
図2の例において、コンパイラ210は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。
図2の例において、コンパイラ210は、とりわけ、AIアクセラレータ回路208上での実装のために、TensorFlow、Keras、PyTorchなど、AIおよび/または他のNNプログラムからの出力をコンパイルする。例示的なコンパイラ210は、AIプログラムの変数を処理することで、1つまたは複数のテンソルを再フォーマットすることによりNNの浅い層のMAC回路220の利用率を上げるようどのようにAIアクセラレータ回路208を構成するかを決定する。
【0050】
図2の示されている例において、コンパイラ210は、少なくとも2つの構成に従って動作するようAIアクセラレータ回路208を構成し得る。そのような一例において、少なくとも2つの構成は、テンソルデータ複製構成およびフラクショナルストライティング構成を含む。例示的なコンパイラ210は、AIアクセラレータ回路208の1つまたは複数の構成レジスタにおける1つまたは複数の構成ビットを設定することにより、構成を設定する。いくつかの例において、AIアクセラレータ回路208に関連付けられたプログラムマニュアルは、NNの浅い層のMAC回路220の利用率を上げるようどのようにAIアクセラレータ回路208を構成するかを説明する。
【0051】
図2の示されている例において、システムメモリ204は、DMA回路206に結合されている。
図2の例において、システムメモリ204は、AIワークロードのための入力データ(例えば、入力テンソル)および/またはAIワークロードからの出力データ(例えば、出力テンソル)を記憶する。例えば、AIワークロードのための入力データは、1つまたは複数の活性化テンソルおよび1つまたは複数の重みセットを含む。重みセットは、追加的に、または代替的に、重みカーネルと称され得る。
図2の例において、システムメモリ204は、DRAMにより実装される。追加のまたは代替的な例において、システムメモリ204は、他の揮発性メモリ(例えば、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)、RAMBUSダイナミックランダムアクセスメモリ(RDRAM)等)および/または不揮発性メモリ(例えば、フラッシュメモリ)により実装される。例示的なシステムメモリ204は、追加的に、または代替的に、例えば、DDR、DDR2、DDR3、DDR4、モバイルDDR(mDDR)等、1つまたは複数のダブルデータレート(DDR)メモリにより実装され得る。追加のまたは代替的な例において、例示的なシステムメモリ204は、例えば、SoC200の外部のハードディスクドライブ、コンパクトディスクドライブ、デジタル多用途ディスクドライブ、ソリッドステートディスクドライブ等、1つまたは複数の大容量ストレージデバイスにより実装され得る。
【0052】
図2の示されている例において、システムメモリ204に記憶されているデータは、スパーステンソルなど、スパースデータとして記憶されている。上述のように、いくつかの例において(例えば、入力テンソルが浅い場合)、システムメモリ204に記憶されているデータは、密なデータである。本明細書において定義されるように、スパースデータ(例えば、スパーステンソル)は、密なデータと同じ順序で密なデータの非0要素の全てを含むが、密なデータの全てのゼロ要素を除外したデータである。本明細書において定義されるように、密なデータ(例えば、密なテンソル)は、ゼロおよび非0要素の両方を含むデータである。したがって、密なベクトル[0,0,5,0,18,0,4,0]は、スパースベクトル[5,18,4]に対応する。いくつかの例において、密なデータは、アンパックされたデータおよび/または圧縮されていないデータと称され得る。追加的に、いくつかの例において、スパースデータは、パックされたデータおよび/または圧縮されたデータと称され得る。
【0053】
密なデータは、対応するスパースデータおよびスパース性ビットマップに基づいて生成および/または決定され得る。本明細書において定義されるように、スパース性ビットマップは、密なデータのそれぞれの要素がゼロまたは非0のいずれであるかを識別する1ビット要素を含むベクトルである。したがって、スパース性ビットマップは、密なデータの非0値を「1」へマッピングしてよく、密なデータのゼロ値を「0」へマッピングしてよい。上記の密なベクトル[0,0,5,0,18,0,4,0]について、スパース性ビットマップは、(例えば、密なベクトルの3番目、5番目および7番目の要素が非0なので、)[0,0,1,0,1,0,1,0]であってよい。スパースデータおよびスパース性ビットマップの組み合わせは、対応する密なデータを表す(例えば、密なデータは、対応するスパースデータおよびスパース性ビットマップに基づいて生成および/または再構築され得る)。
【0054】
図2の示されている例において、DMA回路206は、CPU202、システムメモリ204およびローカルメモリ216に結合されている。
図2の例において、DMA回路206は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。
図2の例において、DMA回路206は、システムメモリ204にアクセスするための(例えば、メモリ204との間でデータの読み取りおよび/または書き込みを行うための)コントローラとして動作する。このように、CPU202およびAIアクセラレータ回路208は、互いに独立してシステムメモリ204にアクセスし得る。例えば、AIアクセラレータ回路208は、ローカルメモリ216と直接通信して、入力活性化テンソルおよび/または重みセットを取得する。ローカルメモリ216は、必要に応じて、システムメモリ204から入力テンソルおよび/または重みセットを取得し得る。追加的に、例えば、AIアクセラレータ回路208は、ローカルメモリ216と直接通信して、出力テンソルを記憶できる。ローカルメモリ216は、そのような出力テンソルを記憶したものを、それらが利用可能になるとシステムメモリ204へ転送してよく、および/またはそのような出力テンソルを、それらが利用可能になるとMAC回路220へフィードバックしてよい。
【0055】
図2の示されている例において、AIアクセラレータ回路208は、DMA回路206に結合されている。
図2の例において、AIアクセラレータ回路208は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。
図2の例において、AIアクセラレータ回路208は、MAC回路220の利用率が上がるように、再フォーマットされた入力テンソルを処理する。
【0056】
図2の示されている例において、CPU202は、データ複製前処理回路212を含む。
図2の例において、データ複製前処理回路212は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。いくつかの例において、データ複製前処理回路212は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。例えば、いくつかのそのような例において、AIアクセラレータ回路208は、データ複製前処理回路212を実装する。
図2の例において、データ複製前処理回路212は、AIアクセラレータ回路208によりシステムメモリ204から入力テンソルが読み取られる前に、入力テンソルを前処理する。例えば、データ複製前処理回路212は、入力テンソルを再フォーマットして、再フォーマットされていない入力テンソルよりも深い再フォーマットされた入力テンソルを生成する。
図8に関連して、データ複製前処理回路212をさらに説明する。
【0057】
図2の示されている例において、CPU202は、フラクショナルストライド前処理回路214を含む。
図2の例において、フラクショナルストライド前処理回路214は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。いくつかの例において、フラクショナルストライド前処理回路214は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。例えば、いくつかのそのような例において、AIアクセラレータ回路208は、フラクショナルストライド前処理回路214を実装する。
図2の例において、フラクショナルストライド前処理回路214は、記憶要素ポインタおよびスパース性を用いて、フラクショナルストライティングを介して入力テンソルを再フォーマットする。
図10に関連して、フラクショナルストライド前処理回路214をさらに説明する。
【0058】
図2の示されている例において、AIアクセラレータ回路208は、ローカルメモリ216を含む。例示的なローカルメモリ216は、DMA回路206およびデータ読み取り回路218に結合されている。
図2の例において、ローカルメモリ216は、AIワークロードの圧縮された入力データ(例えば、圧縮された入力テンソル、圧縮された活性化テンソル、圧縮された重みセット等)および出力データ(例えば、出力テンソル)を記憶する。ローカルメモリ216は、比較するとシステムメモリ204よりもはるかに小さい。例えば、ローカルメモリ216は、典型的には、1および2メガバイト(MB)の間である。
図2の例において、ローカルメモリ216は、SRAMにより実装される。追加のまたは代替的な例において、ローカルメモリ216は、他の揮発性メモリ(例えば、DRAM、SDRAM、RDRAM等)および/または不揮発性メモリ(例えば、フラッシュメモリ)により実装される。例示的なローカルメモリ216は、追加的にまたは代替的に、例えば、DDR、DDR2、DDR3、DDR4、mDDR等、1つまたは複数のDDRメモリにより実装され得る。
図2の示されている例において、ローカルメモリ216に記憶されているデータは、スパースデータおよび対応するスパース性ビットマップを含む圧縮されたデータとして記憶されている。
【0059】
図2の示されている例において、システムメモリ204および/またはローカルメモリ216は、AIアクセラレータ回路208の構成に応じて、データを異なるように記憶する。例えば、テンソルデータ複製構成がアクティブであることをコンパイラ210が示した場合、システムメモリ204および/またはローカルメモリ216は、
図3および
図4に示されるテンソルデータを記憶する。
図3は、例示的なテンソル300を示す。
図3の示されている例において、テンソル300は、3次元である。本明細書において開示される例は、例示的なX軸302、例示的なY軸304および例示的なZ軸306に沿って、テンソル300を横断する。いくつかの例において、テンソル300は、圧縮された(例えば、スパース)フォーマットで記憶される。他の例において(例えば、テンソル300が浅い場合)、テンソル300は、圧縮されていない(例えば、密な)フォーマットで記憶される。
図3の例において、テンソル300は、システムメモリ204にZXYフォーマットで記憶される。
【0060】
いくつかの例において、テンソル300は、X=4、Y=2かつZ=Nという次元を有する。いくつかの例において、テンソル300の各点のデータ幅は、8ビットである。いくつかの例において、CPU202は、例示的な表1に示されるように、テンソル300をシステムメモリ204にZXYフォーマットかつ16バイトアライメント記憶で記憶することを決定する。
[表1]
【表1】
【0061】
つまり、CPU202は、ZX面(例えば、0、1、2、3等)に沿ってテンソル300を横断する。各XY位置のZ値は、システムメモリ204の専用16バイトである。DMA回路206がテンソル300および/またはその一部分をローカルメモリ216へロードする場合、DMA回路206は同様に、ローカルメモリ216の16バイトをテンソル300の各XY位置のZ値に割り当てる。
図3の示されている例において、太字のデータ点インデックスは、Z=0のXY面(例えば、前側XY面)のデータ点に対応する。
【0062】
図4は、
図2のシステムメモリ204に記憶されている例示的なテンソルデータを示す。例えば、システムメモリ204は、テンソル300をZXYフォーマットかつ16バイトアライメント記憶で記憶する。しかしながら、追加のまたは代替的な例において、システムメモリ204は、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方であってよい(例えば、そうである)。つまり、テンソル300は、連続的に記憶されるZX面へ分割される。例えば、システムメモリ204は、例示的な第1のZX面402、例示的な第2のZX面404および例示的な第3のZX面406を記憶する。例示的な第1のZX面402は、Y=0である場合のテンソル300のテンソルデータに対応し、例示的な第2のZX面404は、Y=1である場合のテンソル300のテンソルデータに対応し、例示的な第3のZX面406は、Y=2である場合のテンソル300のテンソルデータに対応する。
図4の示されている例は3つのZX面402、404、406を含んでいるが、本明細書において開示される例は、(例えば、テンソル300のY次元に対応する)より少ないまたはより多い数のZX面を含み得る。
【0063】
図4の示されている例において、CPU202がデータをシステムメモリ204に記憶する場合、CPU202は、テンソル300のZ軸を横断する。例えば、CPU202は、X=0,Y=0のZ軸の横断に基づいて、データの例示的な1番目の行408を記憶する。CPU202がZ軸の横断を終了した場合、CPU202は、Xを1だけインクリメントし、Z軸(例えば、X=1,Y=0)を横断して、例示的な2番目の行410等を生成する。例示的なCPU202は、テンソル300のデータを
図2のシステムメモリ204に連続的に記憶する。重みカーネルもシステムメモリ204に連続的に記憶される(不図示)。例えば、各重みカーネルは、重み値の27×1アレイとして記憶される。
【0064】
図2に戻ると、上述のように、システムメモリ204は、AIアクセラレータ回路208の構成に応じて異なるようにデータを記憶する。例えば、フラクショナルストライティング構成がアクティブであることをコンパイラ210が示している場合、システムメモリ204は、
図5に示されるテンソルデータを記憶する。
図5は、例示的なポインタテーブル502および対応するテンソルデータ504を含む例示的なメモリ500を示す。いくつかの例において、メモリ500は、システムメモリ204に対応する。
【0065】
図5の示されている例において、例示的なポインタテーブル502は、例示的な1番目の記憶要素ポインタ506(SE_PTR_0)、例示的な2番目の記憶要素ポインタ508(SE_PTR_1)、例示的な3番目の記憶要素ポインタ510(SE_PTR_2)、例示的な4番目の記憶要素ポインタ512(SE_PTR_3)および例示的なN番目の記憶要素ポインタ514を含む。
図5の例において、CPU202は、テンソルデータ504を例示的な1番目の記憶要素516、例示的な2番目の記憶要素518、例示的な3番目の記憶要素520、例示的な4番目の記憶要素522および例示的なN番目の記憶要素524へパーティション化済みである。記憶要素の各々は、テンソルのXY位置におけるテンソルのZ値を表す。例えば、1番目の記憶要素516は、テンソルの1番目のXY位置(X=0,Y=0)におけるテンソルのZ値に対応する。
【0066】
図5の示されている例において、ポインタテーブル502は、記憶要素の各々の開始位置をメモリ500に記憶する。例えば、1番目の記憶要素ポインタ506は、1番目の記憶要素516の開始位置に対応し、2番目の記憶要素ポインタ508は、2番目の記憶要素518の開始位置に対応する。追加的に、例えば、3番目の記憶要素ポインタ510は、3番目の記憶要素520の開始位置に対応し、4番目の記憶要素ポインタ512は、4番目の記憶要素522の開始位置に対応する。また、例えば、N番目の記憶要素ポインタ514は、N番目の記憶要素524の開始位置に対応する。したがって、記憶要素516、518、520、522、524の各々は、メモリ500内の任意の箇所で始まり得る。
【0067】
図5の示されている例において、ポインタテーブル502は、連続するテーブルとしてメモリ500に記憶されている密な構造であり、この構造において、各記憶要素ポインタがメモリ500のメモリワード長の一部分を占有している。例えば、メモリ500のメモリワード長が16バイトである場合、ポインタテーブル502の各行に4つの記憶要素ポインタが存在するので、記憶要素の各々は、メモリ500の4バイト(例えば、32ビット)を占有する。しかしながら、他の例では、メモリ500のメモリワード長は、異なり得る(例えば、32バイト、64バイト等)。上述のように、ポインタテーブル502の各記憶要素ポインタは、テンソルデータ504におけるXY位置を指し示している。概して、個々の記憶要素がスパース性に起因してより少ないデータを含む場合でも、記憶要素は、メモリ500のメモリワード長と一致するサイズになっている。概して、記憶要素ポインタの粒度は、メモリワードサイズに基づく。いくつかの例において、CPU202は、記憶要素が空である(例えば、記憶要素がゼロのみを含んでいる)旨のインジケーションを記憶する。
【0068】
図6は、記憶要素ポインタがないメモリにおけるデータレイアウトを示すグラフ
図600である。グラフ
図600は、例示的な1番目の静的記憶要素602および例示的な2番目の静的記憶要素604を含む。記憶要素ポインタなしに、1番目の静的記憶要素602および2番目の静的記憶要素604で構成されるテンソルが、メモリ内のデータの連続するストリームとして配置されている。したがって、2N個のチャネル(例えば、Z=2)を有するテンソルの場合、メモリ内のデータレイアウトは、
図6に示されるように配置される。
【0069】
図7は、記憶要素ポインタを有するメモリにおけるデータレイアウトを示すグラフ
図700である。グラフ
図700は、例示的な1番目の動的記憶要素702、例示的な2番目の動的記憶要素704および例示的な3番目の動的記憶要素706を含む。記憶要素ポインタにより1番目の動的記憶要素702、2番目の動的記憶要素704および3番目の動的記憶要素706がメモリ内の任意の箇所で始まることが可能になるので、連続するXY位置におけるデータが繰り返される場合、記憶要素ポインタにより、データを複製することなく、例示的なテンソルをより深く再フォーマットすることが可能になる。例えば、記憶要素ポインタが追加されると、各XY位置(例えば、1番目の動的記憶要素702、2番目の動的記憶要素704および3番目の動的記憶要素706の各々)のZ値が前のXY位置と重なるので、データを複製することなくテンソルの深さを増すために、フラクショナルストライティングが適用され得る。フラクショナルストライド長は、テンソルの連続するXY位置の重複を定義する。
図7の例では、50%のフラクショナルストライドである。
【0070】
スパース性を実装することにより、入力テンソルまたは重みカーネルのいずれかがゼロである場合にMAC演算をスキップすることにより実行されるMAC演算の数をMAC回路220が低減することが可能になる。一般的に、入力テンソルおよび重みの対応する活性化の両方が非0であることを入力テンソルスパース性ビットマップおよび重みスパース性ビットマップが示している場合、MAC回路220は、計算サイクルを実行する。スパース性ビットマップが活性化または重みデータの全てのバイトの1ビットを含むので、スパース性ビットマップは、密なデータと比較した場合、12.5%のオーバヘッドを有する。
【0071】
図2に戻ると、AIアクセラレータ回路208は、データ読み取り回路218を含む。例示的なデータ読み取り回路218は、ローカルメモリ216およびMAC回路220に結合されている。
図2の例において、データ読み取り回路218は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。
図2の例において、データ読み取り回路218は、ローカルメモリ216に記憶されている圧縮されたデータを読み取る。
【0072】
図2の示されている例において、AIアクセラレータ回路208は、MAC回路220を含む。例示的なMAC回路220は、データ読み取り回路218およびデータ書き込み回路222に結合されている。
図2の例において、MAC回路220は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。例えば、MAC回路220は、1つまたは複数のバッファ、圧縮解除回路、1つまたは複数のMAC回路および制御論理回路を含む。
図2の示されている例において、MAC回路220は、1つまたは複数の入力テンソルおよび1つまたは複数の重みカーネルを読み取り、1つまたは複数の入力テンソルおよび1つまたは複数の重みセットを処理して、1つまたは複数の出力テンソルを生成する。
図11に関連して、MAC回路220をさらに説明する。
【0073】
図2の示されている例において、AIアクセラレータ回路208は、データ書き込み回路222を含む。例示的なデータ書き込み回路222は、MAC回路220およびローカルメモリ216に結合されている。
図2の例において、データ書き込み回路222は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。
図2の例において、データ書き込み回路222は、MAC回路220により生成される結果をローカルメモリ216へ書き込む。例えば、データ書き込み回路222は、圧縮された出力テンソルおよび対応するスパース性ビットマップをローカルメモリ216へ書き込む。
【0074】
図8は、
図2の例示的なデータ複製前処理回路212の例示的な実装を示すブロック図である。上述のように、データ複製前処理回路212は、再フォーマットされていない入力テンソルよりも深い再フォーマットされた入力テンソルを生成する。
図8の示されている例において、データ複製前処理回路212は、例示的なパラメータ決定回路802、例示的なパディング回路804および例示的な記憶制御回路806を含む。
図8の例において、パラメータ決定回路802、パディング回路804および/または記憶制御回路806のいずれも、例示的な通信バス808を介して通信できる。本明細書に開示される例において、通信バス808は、任意の適切な有線および/または無線通信を用いて実装され得る。追加のまたは代替的な例において、通信バス808は、ソフトウェア、機械可読命令および/または通信プロトコルを含み、これらにより、パラメータ決定回路802、パディング回路804および/または記憶制御回路806の間で情報が通信される。
【0075】
図8の示されている例において、パラメータ決定回路802は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。
図8の例において、パラメータ決定回路802は、入力テンソルおよび重みカーネルの1つまたは複数のパラメータを決定する。例えば、パラメータ決定回路802は、処理される重みカーネルを選択し、重みカーネルの幅、高さおよびストライドを決定する。パラメータ決定回路802は、選択された重みカーネルと畳み込まれる入力テンソルの幅、高さおよび深さを追加的に決定する。
【0076】
図8の示されている例において、パディング回路804は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。
図8の例において、パディング回路804は、外部パディングが入力テンソルに適用されるかどうかを判断する。例えば、パディング回路804は、外部パディングが入力テンソルに適用されるかどうかを重みカーネルの次元および/または出力テンソルの所望の次元に基づいて判断する。そのような例において、重みカーネルが1よりも大きい幅を有しており、かつ、出力テンソルの所望の次元が入力テンソルのものと同じである場合、パディング回路804は、外部パディングが入力テンソルに適用される、と判断する。
【0077】
図8の示されている例において、外部パディングは、パディング回路804が入力テンソルの左および右側に1つまたは複数のパッドを追加することに対応する。例えば、パディングが入力テンソルに適用されるという判断に応答して、パディング回路804は、入力テンソルの1番目のY位置における1番目のX位置(X=-1,Y=0)の前に(例えば、重みカーネルの次元に基づく入力テンソルの左側に)1つまたは複数のパッドをロードする。追加的に、パディング回路804は、入力テンソルの1番目のY位置における最後のX位置(例えば、最後の点)(X=i+1,Y=0)の後に(例えば、入力テンソルの右側に)1つまたは複数のパッドをロードする。
図8の例において、入力テンソルに適用される外部パッドは、入力テンソル(例えば、3個のチャネル、3バイト等)の深さに等しい。外部パッドをシステムメモリ204へロードするために、パディング回路804は、入力テンソルのデータをコピーする場合に1つまたは複数のバイトオフセットを実装するようDMA回路206に命令する。本明細書において開示される例において、外部パッドは、テンソルの縁部の周囲に挿入されるヌル値を有するデータである。本明細書において開示される外部パッドバイトは、メモリへロードされない場合、スパース性として実装され、メモリ内のいかなる空間も占有しない。例えば、パディング回路804がメモリ内の入力テンソルの右および左に外部パッドを挿入している間、CPU202は、スパース性を介して入力テンソルの上および下に外部パッドを実装するようAIアクセラレータ回路208に命令する。したがって、上および下の外部パッドがAIアクセラレータ回路208によりスパース性を介して実装されるので、パディング回路804は、外部パディングが入力テンソルに適用されるかどうかを判断する場合に重みカーネルの高さを考慮しない。
【0078】
図8の示されている例において、記憶制御回路806は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。
図8の例において、パディングが適用されない、とパディング回路804が判断したことに応答して、記憶制御回路806は、再フォーマットされる入力テンソルの1番目のY位置を選択する。追加的に、記憶制御回路806は、選択されたY位置における入力テンソルの1番目のX位置を選択する。
【0079】
図8の示されている例において、記憶制御回路806は、選択されたXY位置から、入力テンソルと畳み込まれる重みカーネルの幅と重なる連続するXY位置の、入力テンソルの深さまで、Z値をコピーする。本明細書において開示されるいくつかの例において、XY位置は、第1のテンソルの第1の次元に沿った1番目の点および第1のテンソルの第2の次元に沿った1番目の点の交点と称される。追加的に、本明細書において開示されるいくつかの例において、1つまたは複数のZ値は、第1のテンソルの第3の次元に沿った1つまたは複数の値と称される。また、本明細書において開示されるいくつかの例において、重みカーネルの幅と重なる連続するXY位置は、重みカーネルの幅と重なる第1の次元および第2の次元に沿った複数の点の連続する交点と称される。
【0080】
図8の示されている例において、記憶制御回路806は、コピーされたZ値を再フォーマットされたテンソルの次のXY位置に連続的にロードする。例えば、第1の反復において、記憶制御回路806は、コピーされたZ値を再フォーマットされたテンソルの1番目のXY位置(X=0,Y=0)に連続的にロードする。本明細書において開示されるいくつかの例において、コピーされたZ値を再フォーマットされたテンソルの次のXY位置に連続的にロードすることは、第1のテンソルの第3の次元に沿った1つまたは複数の値を第2のテンソルの第1の次元に沿った1番目の点および第2のテンソルの第2の次元に沿った1番目の点の1番目の交点に連続的にロードすることと称される。後続の反復において、記憶制御回路806は、コピーされたZ値を、最初の反復の後の反復回数に等しい再フォーマットされたテンソルの次のXY位置へロードする。例えば、記憶制御回路806は、最初の反復の後の反復回数を追跡するためのカウンタを実装し得る。
【0081】
図8の示されている例において、記憶制御回路806は、再フォーマットされた入力テンソルの別の列を生成するために重みカーネルの幅の外側に十分な入力テンソルデータが存在しているかどうかを判断する。例えば、重みカーネルのストライドに応じて、再フォーマットされた入力テンソルの別の列を生成するために、追加の1つよりも多くのX位置が必要とされ得る。重みカーネルのストライドが1である場合、記憶制御回路806は、重みカーネルの幅の外側に入力テンソルの追加のX位置(例えば、追加の点)が存在しているかどうかを判断する。重みカーネルの幅の外側に十分な入力テンソルデータが存在しているという判断に応答して、記憶制御回路806は、重みカーネルのストライドに従って、選択されたY位置における入力テンソルの次のX位置を選択する。重みカーネルの幅の外側に十分な入力テンソルデータが存在していないという判断に応答して、記憶制御回路806は、再フォーマットされた入力テンソルの別の行を生成するために重みカーネルの高さの外側に十分な入力テンソルデータが存在しているかどうかを判断する。例えば、重みカーネルのストライドに応じて、再フォーマットされた入力テンソルの別の行を生成するために、追加の1つよりも多くのY位置が必要とされ得る。
【0082】
図8の示されている例において、重みカーネルのストライドが1である場合、記憶制御回路806は、重みカーネルの高さの外側に入力テンソルの追加のY位置(例えば、追加の点)が存在しているかどうかを判断する。重みカーネルの高さの外側に十分な入力テンソルデータが存在している、と記憶制御回路806が判断したことに応答して、記憶制御回路806は、重みカーネルのストライドに従って、入力テンソルの次のY位置を選択する。重みカーネルの高さの外側に十分な入力テンソルデータが存在していない、と記憶制御回路806が判断したことに応答して、処理が進み、パラメータ決定回路802は、処理される追加の重みカーネルが存在しているかどうかを判断する。
【0083】
図9は、(a)例示的な出力テンソル906を決定するための、例示的な入力テンソル902と例示的な重みセット904との畳み込みから(b)例示的な出力テンソル906を決定するための、例示的な再フォーマットされた入力テンソル908と例示的な再フォーマットされた重みセット910との畳み込みへの例示的な再形成を示すデータフロー
図900である。
図9の例において、入力テンソル902は、224×224×3テンソルであり、重みセットは、2のストライドを有する64個の7×7×3重みカーネルを含む。例示的な出力テンソル906は、112×112×64テンソルである。
【0084】
図9の示されている例において、テンソルデータ複製構成に従って、データ複製前処理回路212は、入力テンソル902および重みセット904を再フォーマットして、再フォーマットされた入力テンソル908および再フォーマットされた重みセット910を生成する。再フォーマットされた入力テンソル908および再フォーマットされた重みセット910は、入力テンソル902および重みセット904とは異なる次元(すなわち、深さ)を有するが、再フォーマットされたテンソルを畳み込むことにより、同一の定数(例えば、出力テンソル906)と同等の出力テンソルがもたらされる。
【0085】
図9の示されている例において、データ複製前処理回路212は、深さが3である7×7個のフィルタから深さが21である1×7個のフィルタへ重みセット904の個々の重みカーネルを再フォーマットするために重みカーネルの各々のX次元がZ次元に沿って再パックされるように、重みセット904の重みカーネルを再フォーマットする(例えば、再フォーマットされた重みセット910)。重みセット904の値は、変更されない。
図9の例において、重みセット904の重みカーネルの形状が再フォーマットされた重みセット910へ再フォーマットされるが、重みセット904がメモリに記憶される方式は、変わらない。代わりに、重みセット904を再フォーマットするために、MAC回路220は、
図11のMAC回路を通じて重みセット904を順序付けて、再フォーマットされた入力テンソル908の新しい次元に適応させる。
【0086】
図9の示されている例において、データ複製前処理回路212は、再フォーマットされた重みセット910の深さと一致するように入力テンソル902を再フォーマットする。そのような再フォーマットは、再フォーマットされた重みセット910の深さと一致させるための既存の画素のいくつかの複製およびZ次元に沿ったそのような画素の再パックを含む。
図9に示されるように、再フォーマットされた入力テンソル908を再フォーマットされた重みセット910と畳み込むことにより、入力テンソル902を重みセット904と畳み込んだものと同じ出力テンソル(例えば、出力テンソル906)がもたらされるが、前者の畳み込みは、より深い入力テンソルを利用し、したがって、後者の畳み込みと比較して改善された性能がもたらされる。
【0087】
図10は、
図2の例示的なフラクショナルストライド前処理回路214の例示的な実装を示すブロック図である。上述のように、フラクショナルストライド前処理回路214は、記憶要素ポインタおよびスパース性を用いて、フラクショナルストライティングを介して入力テンソルを再フォーマットする。
図10の示されている例において、フラクショナルストライド前処理回路214は、例示的なテンソルおよび重み制御回路1002、例示的なパディング制御回路1004、例示的なスパース性生成回路1006および例示的なポインタ制御回路1008を含む。
図10の例において、テンソルおよび重み制御回路1002、パディング制御回路1004、スパース性生成回路1006および/またはポインタ制御回路1008のいずれも、例示的な通信バス1010を介して通信できる。本明細書に開示される例において、通信バス1010は、任意の適切な有線および/または無線通信を用いて実装され得る。追加のまたは代替的な例において、通信バス1010は、ソフトウェア、機械可読命令および/または通信プロトコルを含み、これらにより、テンソルおよび重み制御回路1002、パディング制御回路1004、スパース性生成回路1006および/またはポインタ制御回路1008の間で情報が通信される。
【0088】
上述のように、記憶要素ポインタは、
図10の例では16バイトであるメモリワードサイズに基づく粒度を有する。NNの最初の層への入力テンソルが記憶要素ポインタの粒度よりも少ない(例えば、3<16)チャネルを有するので、フラクショナルストライド前処理回路214は、スパース性および入力テンソル操作を利用してフラクショナルストライティングを洗練させることにより、入力テンソルの効果的な深さを増す。
【0089】
図10の示されている例において、テンソルおよび重み制御回路1002は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。
図10の例において、テンソルおよび重み制御回路1002は、入力テンソルおよび重みカーネルの1つまたは複数のパラメータを決定する。例えば、テンソルおよび重み制御回路1002は、処理される重みカーネルを選択し、重みカーネルの幅、高さおよびストライドを決定する。テンソルおよび重み制御回路1002は、選択された重みカーネルと畳み込まれる入力テンソルの幅、高さおよび深さを追加的に決定する。
【0090】
図10の示されている例において、テンソルおよび重み制御回路1002はまた、選択された重みカーネルを複製して、再フォーマットされた入力テンソルのXY位置毎に生成され得る出力テンソルの点の数と一致するようにN個の重みカーネルを生成する。記憶要素ポインタおよびスパース性を用いてフラクショナルストライティングを介して入力テンソルが再フォーマットされた後、テンソルおよび重み制御回路1002は、処理され、および/またはメモリに記憶される入力テンソル、1つまたは複数の重みカーネルおよび1つまたは複数の重みスパース性ビットマップをオフロードする。入力テンソルが浅い一例において、重み制御回路1002は、入力テンソルを密なデータとしてオフロードする。
【0091】
図10の示されている例において、パディング制御回路1004は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。
図10の例において、パディング制御回路1004は、外部パディングが入力テンソルに適用されるかどうかを判断する。例えば、パディング制御回路1004は、外部パディングが入力テンソルに適用されるかどうかを重みカーネルの次元および/または出力テンソルの所望の次元に基づいて判断する。そのような例において、重みカーネルが1よりも大きい幅を有しており、かつ、出力テンソルの所望の次元が入力テンソルのものと同じである場合、パディング制御回路1004は、外部パディングが入力テンソルに適用される、と判断する。
【0092】
図10の示されている例において、外部パディングは、パディング制御回路1004が入力テンソルの左および右側に1つまたは複数のパッドを追加することに対応する。例えば、パディングが入力テンソルに適用されるという判断に応答して、パディング制御回路1004は、入力テンソルの1番目のY位置における1番目のX位置(X=-1,Y=0)の前に(例えば、重みカーネルの次元に基づく入力テンソルの左側に)1つまたは複数のパッドをロードする。追加的に、パディング制御回路1004は、入力テンソルの1番目のY位置における最後のX位置(例えば、最後の点)(X=i+1,Y=0)の後に(例えば、入力テンソルの右側に)1つまたは複数のパッドをロードする。例えば、1のストライドを有する3×3重みカーネルについて、パディング制御回路1004は、1つの外部パッドをXY面の左に、1つの外部パッドをXY面の右に追加する。
図10の例において、入力テンソルに適用される外部パッドは、入力テンソルの深さに等しい。したがって、そのような一例において、パディング制御回路1004は、3バイトの深さを有する外部パッドを入力テンソルの左に、3バイトの深さを有する外部パッドを入力テンソルの右に追加する。別の例において、1のストライドを有する5×5重みカーネルについて、パディング制御回路1004は、2つの外部パッドをXY面の左に、2つの外部パッドをXY面の右に追加する。そのような一例において、パディング制御回路1004は、3バイトの深さを各々が有する2つの外部パッドを入力テンソルの左に、3バイトの深さを各々が有する2つの外部パッドを入力テンソルの右に追加する。
【0093】
図10の示されている例において、外部パッドをシステムメモリ204へロードするために、パディング制御回路1004は、入力テンソルのデータをコピーする場合に1つまたは複数のバイトオフセットを実装するようDMA回路206に命令する。本明細書において開示される外部パッドバイトは、メモリへロードされない場合、スパース性として実装され、メモリ内のいかなる空間も占有しない。例えば、パディング制御回路1004がメモリ内の入力テンソルの右および左に外部パッドを挿入している間、CPU202は、スパース性を介して入力テンソルの上および下に外部パッドを実装するようAIアクセラレータ回路208に命令する。したがって、上および下の外部パッドがAIアクセラレータ回路208によりスパース性を介して実装されるので、パディング制御回路1004は、外部パディングが入力テンソルに適用されるかどうかを判断する場合に重みカーネルの高さを考慮しない。
【0094】
図10の示されている例において、スパース性生成回路1006は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。
図10の例において、スパース性生成回路1006は、内部パディングが入力テンソルに適用されるかどうかを判断する。例えば、スパース性生成回路1006は、記憶要素の粒度を入力テンソルの深さで除算することにより内部パディングが入力テンソルに適用されるかどうかを判断する。除算演算の剰余がゼロではない場合、スパース性生成回路1006は、内部パディングが適用され、逆も然り、と判断する。
【0095】
図10の示されている例において、内部パディングが入力テンソルに適用されるという判断に応答して、スパース性生成回路1006は、入力テンソルの各XY位置のZ値をパッドの数により分離する。パッドの数を決定するために、スパース性生成回路1006はまず、入力テンソルの深さを、記憶要素の粒度へ除算された場合に剰余ゼロを戻す4の最も近い倍数までラウンドする。例えば、記憶要素の粒度が16バイトであり、入力テンソルの深さが3である場合、4が16へ均一に分割するので、スパース性生成回路1006は、3を4までラウンドする。次に、スパース性生成回路1006は、入力テンソルのラウンドされた値および深さの間の差を見出して、パッドの数を決定する。例えば、記憶要素の粒度が16であり、入力テンソルの深さが3である場合、スパース性生成回路1006は、パッドの数を1(例えば、4-3=1)と決定する。本明細書において開示される例において、入力テンソルの内部パッドの長さは、1バイトである。
【0096】
図10の示されている例において、スパース性生成回路1006は、N個の重みスパース性ビットマップを生成する。各重みスパース性ビットマップは、選択された重みカーネルのストライドの数と入力テンソルの深さおよび内部パッドの数の和との積だけそれぞれの重みスパース性ビットマップの開始からずらされるスパース性パターンを含む。
図10の例において、Nは、再フォーマットされた入力テンソルのXY位置毎に生成され得る出力テンソルの点の数と一致する重みカーネルの数に等しい。それぞれのスパース性パターンのオフセットは、入力テンソルの深さおよび内部パッドの数によって決まる。例えば、入力テンソルの深さが3であり、内部パッドの数が1である場合、オフセットは、選択された重みカーネルのストライドの数と4との積に等しい。
図10の例において、各重みスパース性ビットマップのスパース性パターンは、d個の連続する1ビットのw
Kセットを含む。w
Kは、重みカーネルの幅であり、dは、入力テンソルの深さである。内部パディングが入力テンソルに適用される場合、w
Kセットの各々には、内部パッドの数に等しい1つまたは複数のゼロビットが付加される。したがって、3の幅を有する重みカーネル、および3の深さおよび1の内部パディングを有する入力テンソルについて、各重みスパース性ビットマップのスパース性パターンは、3つの連続する1ビットの3つのセットを含む。各セットには、1つのゼロビットが付加される(例えば、[1,1,1,0,1,1,1,0,1,1,1,0])。N個のスパース性ビットマップについてスパース性生成回路1006により生成される1ビットの総数は、重みカーネルの幅、重みカーネルの高さと入力テンソルの深さとの積に等しい。
【0097】
図10の示されている例において、ポインタ制御回路1008は、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の汎用半導体ベース電気回路に対して特定の動作を実行するための1つまたは複数の命令(例えば、ソフトウェア)により実装される。
図10の例において、ポインタ制御回路1008は、適用される場合、N、入力テンソルの深さ、重みカーネルのストライドおよび内部パッド長に基づいてフラクショナルストライドオフセットを連続する記憶要素ポインタに適用することを決定する。例えば、ポインタ制御回路1008は、以下の式1に従って、フラクショナルストライドオフセットを決定する。
FS
OFFSET=N+(NUM_CHANNELS+PAD)*STRIDE
式1
【0098】
図10の示されている例において、Nは、再フォーマットされた入力テンソルのXY位置毎に生成され得る出力テンソルの点の数と一致する重みカーネルの数に等しい。1つの例において、1のストライドを有する3×3カーネルが深さ3の入力チャネルと畳み込みされている場合、内部パッドは、長さが1になる。そのような例において、再フォーマットされた入力テンソルのXY位置毎に生成され得る出力テンソルの点の数。したがって、フラクショナルストライドオフセットは、4×(3バイト+1パッドバイト)×1=16バイトに等しい。
図10の示されている例において、ポインタ制御回路1008は、フラクショナルストライティングオフセットを決定した後、連続する記憶要素ポインタをこのオフセットの分だけずらす。
【0099】
図11は、
図2の例示的なMAC回路220の例示的な実装を示すブロック図である。
図11の例において、MAC回路220は、例示的な制御論理回路1102、例示的な重みバッファ1104、例示的な重み圧縮解除回路1106、例示的な入力テンソルバッファ1108、例示的な入力テンソル圧縮解除回路1110、および、MAC回路1112
1,1から1112
1,M、1114
2,1から1114
2,Mおよび1116
N,1から1116
N,Mの例示的なアレイを含む。
図11の例において、制御論理回路1102は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。例示的な制御論理回路1102は、重みバッファ1104、重み圧縮解除回路1106、入力テンソルバッファ1108および入力テンソル圧縮解除回路1110に結合されている。
【0100】
図11の示されている例において、制御論理回路1102は、1つまたは複数の重みカーネルおよび対応する重みスパース性ビットマップを受信する。追加的に、例示的な制御論理回路1102は、1つまたは複数の入力テンソルおよび入力テンソルスパース性ビットマップを受信する。入力テンソルが浅い例では、スパース性を利用するには入力テンソルが浅過ぎるので、制御論理回路1102は、入力テンソルスパース性ビットマップを受信しない。
図11の例において、制御論理回路1102は、1つまたは複数の重みカーネルを、そのようなデータを処理した後に重みバッファ1104へ転送し、対応する重みスパース性ビットマップを、そのようなデータを処理した後に重み圧縮解除回路1106へ転送する。追加的に、制御論理回路1102は、1つまたは複数の入力テンソルを、そのようなデータを処理した後に入力テンソルバッファ1108へ転送する。ニューラルネットワーク内の後の層について(例えば、入力テンソルが深い場合)、制御論理回路1102はまた、対応する入力テンソルスパース性ビットマップを、そのようなデータを処理した後に入力テンソル圧縮解除回路1110へ転送する。いくつかの例において、制御論理回路1102は、データ複製前処理回路212および/またはフラクショナルストライド前処理回路214を実装する。
【0101】
図11の示されている例において、重みバッファ1104および入力テンソルバッファ1108の各々は、SRAMにより実装される。追加のまたは代替的な例において、重みバッファ1104および入力テンソルバッファ1108の各々は、他の揮発性メモリ(例えば、DRAM、SDRAM、RDRAM等)および/または不揮発性メモリ(例えば、フラッシュメモリ)により実装される。
図11の例において、重みバッファ1104は、制御論理回路1102および重み圧縮解除回路1106に結合されている。
【0102】
図11の示されている例において、重み圧縮解除回路1106は、制御論理回路1102、重みバッファ1104、MAC回路1112
1、1から1112
1,Mの1番目の列、MAC回路1114
1,1から1114
1,Mの2番目の列およびMAC回路1116
N,1から1116
N,MのN番目の列に結合されている。
図11の例において、重み圧縮解除回路1106は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。
図11の例において、例示的な重み圧縮解除回路1106は、圧縮された重みデータ(例えば、スパース重みカーネルおよび対応する重みスパース性ビットマップ)を処理し、スパース重みデータを密な重みデータへ変換する。重み圧縮解除回路1106は、圧縮された重みデータを圧縮解除した後、密な重みデータをMAC回路1112
1,1から1112
1,Mの1番目の列、MAC回路1114
1,1から1114
1,Mの2番目の列およびMAC回路1116
N,1から1116
N,MのN番目の列へ伝送する。
【0103】
図11の示されている例において、入力テンソルバッファ1108は、制御論理回路1102および入力テンソル圧縮解除回路1110に結合されている。
図11の例において、入力テンソル圧縮解除回路1110は、制御論理回路1102、入力テンソルバッファ1108、MAC回路1112
1,1、1114
2,1および1116
N,1の1番目の行、MAC回路1112
1,2、1114
2,2および1116
N,2の2番目の行、およびMAC回路1112
1,M、1114
2,Mおよび1116
N,MのM番目の行に結合されている。
図11の例において、入力テンソル圧縮解除回路1110は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。
図11の例において、例示的な入力テンソル圧縮解除回路1110は、圧縮された入力テンソルデータ(例えば、スパース入力テンソルおよび対応する入力テンソルスパース性ビットマップ)を処理し、スパース入力テンソルデータを密な入力テンソルデータへ変換する。入力テンソル圧縮解除回路1110は、圧縮された入力テンソルデータを圧縮解除した後、密な入力テンソルデータをMAC回路1112
1,1、1114
2,1および1116
N,1の1番目の行、MAC回路1112
1,2、1114
2,2および1116
N,2の2番目の行、およびMAC回路1112
1,M、1114
2,Mおよび1116
N,MのM番目の行へ伝送する。入力テンソルスパース性ビットマップが受信されない場合、入力テンソルデータが既に密なので、入力テンソル圧縮解除回路1110は、入力テンソルデータをMAC回路1112
1,1、1114
2,1および1116
N,1の1番目の行、MAC回路1112
1,2、1114
2,2および1116
N,2の2番目の行、およびMAC回路1112
1,M、1114
2,Mおよび1116
N,MのM番目の行へ伝送する。
【0104】
図11の示されている例において、MAC回路1112
1,1、1112
1,2、1112
1,M、1114
2,1、1114
2,2、1114
2,M、1116
N,1、1116
N,2および1116
N,M(総称して、
図11のMAC回路)の各々は、特定の動作を実行するように構造化されており、かつ、1つまたは複数の半導体ベース論理デバイス(例えば、1つまたは複数のトランジスタにより実装される電気ハードウェア)を含む1つまたは複数の専用電気回路により実装される。
図11の例において、
図11のMAC回路の各々は、重み圧縮解除回路1106から重みデータを、入力テンソル圧縮解除回路1110から入力テンソルデータを受信する。
図11のMAC回路の各々は、1サイクル毎に複数回のMAC演算を実行する。例えば、
図11のMAC回路の各々は、1サイクル毎に8回のMAC演算を実行する。
図11の例において、
図11のMAC回路のそれぞれにより実行される各MAC演算は、入力テンソルのXY位置の活性化データを処理する、
図11のMAC回路の各々に対応する。
図11のMAC回路は、1クロックサイクル毎に32チャネルまでの活性化データを受信することで、入力テンソルのチャネル深さが(例えば、16よりも大きい、またはそれに等しい深さを有する入力テンソルについて)高い場合にMAC回路220の効率的な利用率を可能にするように構成されている。
【0105】
図12は、例示的な出力テンソル1206を決定するための、パディングがない例示的な入力テンソル1202と1のストライドを有する3×3×3重みカーネル1204の例示的なセットとの例示的な畳み込み1200を示すデータフロー図である。
図12の例において、入力テンソル1202は、X=4、Y=4かつZ=3の次元を有する。入力テンソル1202は、3個のチャネルを用いたZメジャーフォーマットでメモリに記憶される。
図12の例において、入力テンソル1202上の各XY位置は、位置合わせされた16バイトであるメモリ内の位置を占有する。したがって、入力テンソル1202(例えば、Z>2)のチャネルの後のメモリは、未使用のバイトである。いくつかの例では、未使用のバイトにデータが記憶されないが、追加のまたは代替的な例では、未使用のバイトは、ゼロという対応するスパース性ビットマップを有するデータを含み得る。
図12の例において、16バイトアライメント(例えば、16-3=13)の結果として、メモリには、XY位置毎に13個の未使用バイトが存在している。
【0106】
図12の示されている例において、入力テンソル1202は、入力テンソル1202の1番目のXY位置における第1のZ値1208、入力テンソル1202の2番目のXY位置における第2のZ値1210、入力テンソル1202の3番目のXY位置における第3のZ値1212および入力テンソル1202の4番目のXY位置における第4のZ値1214を含む。
図12の例において、3×3×3重みカーネル1204のセットは、例示的な第1の重みカーネル1216、例示的な第2の重みカーネル1218、例示的な第3の重みカーネル1220および例示的な第4の重みカーネル1222を含む。第1の重みカーネル1216、第2の重みカーネル1218、第3の重みカーネル1220および第4の重みカーネル1222の各々は、3の深さを有する。したがって、第1の重みカーネル1216、第2の重みカーネル1218、第3の重みカーネル1220および第4の重みカーネル1222の各々は、メモリ内の27バイト(例えば、X
KERNEL*Y
KERNEL*NUM_CHANNELS)を占有する。したがって、MAC回路は、27回のMAC演算を実行して、出力テンソル1206の出力点1224、1226の各々を生成する。
図12の例において、第1の重みカーネル1216、第2の重みカーネル1218、第3の重みカーネル1220および第4の重みカーネル1222の各々は、出力テンソル1206内の単一のチャネル(例えば、Kにおけるステップ)を生成するために、4回用いられる。
【0107】
図12の例において、第1の重みカーネル1216、第2の重みカーネル1218、第3の重みカーネル1220および第4の重みカーネル1222の各々は、メモリに連続的に記憶される。つまり、第1の重みカーネル1216、第2の重みカーネル1218、第3の重みカーネル1220および第4の重みカーネル1222の各々は、27×1アレイとしてメモリに記憶される。
図12の例において、第1の重みカーネル1216、第2の重みカーネル1218、第3の重みカーネル1220および第4の重みカーネル1222は、3×3×3重みカーネル1204のセットが入力テンソル1202にどのようにマッピングするかを示すために、3×3×3個のテンソルとして示されている。
【0108】
図13は、
図12の例示的な出力テンソル1206を決定するための、パディングがない例示的な再フォーマットされた入力テンソル1302と1のストライドを有する再フォーマットされた1×3×9重みカーネル1304の例示的なセットとの例示的な畳み込み1300を示すデータフロー図である。
図13の例において、再フォーマットされた入力テンソル1302は、X=2、Y=4かつZ=9の次元を有する。再フォーマットされた入力テンソル1302のZ次元は、第1の重みカーネル1216の幅と入力テンソル1202のチャネルの数との積として決定され得る(例えば、Z
REFORMATTED=X
KERNEL*NUM_CHANNELS)。
図13の例において、再フォーマットされた入力テンソル1302上の各XY位置は、位置合わせされた16バイトであるメモリ内の位置を占有する。したがって、再フォーマットされた入力テンソル1302(例えば、Z>8)のチャネルの後のメモリは、未使用のバイトである。
図13の例において、データ複製前処理回路212は、入力テンソル1202をテンソルデータ複製構成に従って再フォーマットして、再フォーマットされた入力テンソル1302を生成する。
【0109】
図13の示されている例において、再フォーマットされた1×3×9重みカーネル1304のセットは、例示的な第1の重みカーネル1306、例示的な第2の重みカーネル1308、例示的な第3の重みカーネル1310および例示的な第4の重みカーネル1312を含む。
図13の例において、入力テンソル1202は、それぞれの重みカーネルの次元がX
KERNEL*Y
KERNELから1*Y
KERNELへ変更され得るように再フォーマットされる。例えば、第1の重みカーネル1306、第2の重みカーネル1308、第3の重みカーネル1310および第4の重みカーネル1312の各々は、9の深さを有する1×3カーネルである。
【0110】
図13の例において、3×3×3重みカーネル1204のセットのそれぞれの形状が再フォーマットされた1×3×9重みカーネル1304のセットへ再フォーマットされるが、3×3×3重みカーネル1204のセットがメモリに記憶される方式は、変わらない。代わりに、3×3×3重みカーネル1204のセットを再フォーマットするために、MAC回路220は、
図11のMAC回路を通じて3×3×3重みカーネル1204のセットを順序付けて、再フォーマットされた入力テンソル1302の新しい次元に適応させる。
【0111】
図13の示されている例において、パラメータ決定回路802は、第1の重みカーネル1216の幅(例えば、3)、高さ(例えば、3)およびストライド(例えば、1)を決定する。パラメータ決定回路802は、入力テンソル1202の幅(例えば、4)、高さ(例えば、4)および深さ(例えば、3)を追加的に決定する。その後、記憶制御回路806は、入力テンソル1202の1番目のY位置(例えば、Y=0)を選択する。記憶制御回路806は、選択されたY位置における入力テンソル1202の1番目のX位置(例えば、X=0,Y=0)を追加的に選択する。
【0112】
図13の示されている例において、記憶制御回路806は、選択されたXY位置から、第1の重みカーネル1216の幅と重なる連続するXY位置の、入力テンソル1202の深さまで、1つまたは複数のZ値をコピーする。例えば、記憶制御回路806が入力テンソル1202の1番目のXY位置(X=0,Y=0)から始まっており、第1の重みカーネル1216の幅が3なので、記憶制御回路806は、第1のZ値1208、第2のZ値1210および第3のZ値1212をコピーする。記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1302の次のXY位置へロードする。これが第1のロード動作である場合、記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1302の1番目のXY位置(X=0,Y=0)へロードし、後続の反復のためにX位置をインクリメントする。
【0113】
したがって、記憶制御回路806は、再フォーマットされた入力テンソル1302の1番目のXY位置(X=0,Y=0)へ第1のZ値1208を、続いて第2のZ値1210を、次に第3のZ値1212ロードする。次に、記憶制御回路806は、第1の重みカーネル1216の幅の外側に入力テンソル1202の十分なデータ(例えば、追加のX位置)が存在しているかどうかを判断する。入力テンソル1202の4番目のXY位置(X=3,Y=0)が第1の重みカーネル1216の幅の外側にあるので、記憶制御回路806は、第1の重みカーネル1216のストライドに従って、選択されたY位置における入力テンソル1202の次のX位置を選択する。第1の重みカーネル1216のストライドが1なので、記憶制御回路806は、入力テンソル1202の2番目のXY位置(X=1,Y=0)を選択する。
【0114】
図13の示されている例において、記憶制御回路806は、選択されたXY位置から、第1の重みカーネル1216の幅と重なる連続するXY位置の、入力テンソル1202の深さまで、1つまたは複数のZ値をコピーする。例えば、記憶制御回路806が入力テンソル1202の2番目のXY位置(X=1,Y=0)から始まっており、第1の重みカーネル1216の幅が3なので、記憶制御回路806は、第2のZ値1210、第3のZ値1212および第4のZ値1214をコピーする。記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1302の次のXY位置へロードする。
【0115】
したがって、例えば、以前にロードされたXY位置が、再フォーマットされた入力テンソル1302の1番目のXY位置だったので、記憶制御回路806は、再フォーマットされた入力テンソル1302の2番目のXY位置(X=1,Y=0)へ第2のZ値1210を、続いて第3のZ値1212を、次に第4のZ値1214をロードする。処理は、第1の重みカーネル1216の垂直ストライドについて、同様に続く。
【0116】
図13の例に示されるように、1のストライドを有する3×3×3重みカーネル1204のセットについて、再フォーマットされた入力テンソル1302は、入力テンソル1202と比較した場合により小さいメモリフットプリントを有する。例えば、X/(X+2)の係数だけ、メモリフットプリントが低減する。いくつかの例において(例えば、モデルへの入力層について)、Xが実際には大きいので、メモリフットプリントの限定された低減が提供される。追加的に、1のストライドを有する3×3×3重みカーネル1204のセットについて、再フォーマットされた入力テンソル1302は、入力テンソルメモリ読み取り数の33%の低減を提供する(例えば、3×3カーネルの代わりに3×1カーネルとの畳み込みが行われる)。メモリ読み取り数の低減により、より少ないデータ移動およびより少ないメモリ帯域幅要件がもたらされ、これらの両方により、より低い電力消費および改善された性能がもたらされる。したがって、データ複製前処理回路212は、出力テンソル1206を生成するための動作の性能を改善する。データ複製前処理回路212は、全てのカーネルサイズに適用可能であり、重みカーネルの幅(例えば、X
KERNEL)は、1へ変更され、再フォーマットされた入力テンソルのZ次元は、重みカーネルの幅と入力テンソルのチャネルの数との積へ変更される(例えば、Z
REFORMATTED=X
KERNEL*NUM_CHANNELS)。
【0117】
図14は、洗練されたフラクショナルストライディングを容易にするための、パディングがない例示的な再フォーマットされた入力テンソル1402と1のストライドおよび1つまたは複数の重みスパース性ビットマップ1404を有する例示的な3×3×3重みカーネルとの例示的な畳み込み1400を示すデータフロー図である。
図14の例において、フラクショナルストライド前処理回路214は、重みスパース性を転用して、フラクショナルストライドを洗練させ、4バイトの粒度で選択される入力テンソルの活性化を可能にする。フラクショナルストライド前処理回路214は、スパース性を記憶要素ポインタと組み合わせることにより、再フォーマットされた入力テンソル1402を例示的な入力テンソル1406から生成する。
図14の例において、入力テンソル1406は、X=12、Y=4かつZ=3の次元を有する。
【0118】
図14の示されている例において、入力テンソル1406は、入力テンソル14061番目のXY位置における第1のZ値1408、入力テンソル14062番目のXY位置における第2のZ値1410、入力テンソル1406の3番目のXY位置における第3のZ値1412および入力テンソル14064番目のXY位置における第4のZ値1414を含む。入力テンソル1406は、入力テンソル1406の5番目のXY位置における第5のZ値1416、入力テンソル1406の6番目のXY位置における第6のZ値1418、入力テンソル1406の7番目のXY位置における第7のZ値1420および入力テンソル1406の8番目のXY位置における第8のZ値1422も含む。追加的に、入力テンソル1406は、入力テンソル1406の9番目のXY位置における第9のZ値1424、入力テンソル1406の10番目のXY位置における第10のZ値1426、入力テンソル1406の11番目のXY位置における第11のZ値1428および入力テンソル1406の12番目のXY位置における第12のZ値1430を含む。
【0119】
図14の示されている例において、スパース性生成回路1006は、内部パディングが入力テンソル1406に適用されるかどうかを判断する。例えば、スパース性生成回路1006は、記憶要素の粒度を入力テンソル1406の深さで除算することにより内部パディングが入力テンソル1406に適用されるかどうかを判断する。除算演算の剰余がゼロではない場合、スパース性生成回路1006は、内部パディングが適用され、逆も然り、と判断する。
【0120】
図14の示されている例において、内部パディングが入力テンソル1406に適用されるという判断に応答して、スパース性生成回路1006は、入力テンソル1406の各XY位置のZ値をパッドの数により分離する。パッドの数を決定するために、スパース性生成回路1006はまず、入力テンソル1406の深さを、記憶要素の粒度(例えば、16)へ除算された場合に剰余ゼロを戻す4の最も近い倍数までラウンドする。次に、スパース性生成回路1006は、入力テンソル1406のラウンドされた値および深さの間の差を見出して、パッドの数を決定する。
【0121】
図14の示されている例において、記憶要素の粒度は16であり、入力テンソル1406の深さは3である。したがって、スパース性生成回路1006は、パッドの数が1(例えば、4-3=1)である、と判断する。本明細書において開示される例において、入力テンソルの内部パッドの長さは、1バイトである。したがって、入力テンソル1406のチャネルが、4バイトへ内部でパディングされ、3つのチャネルのグループが記憶要素の粒度へ位置合わせされる(例えば、4×(3チャネルバイト+1パッドバイト)=16バイト)。重みスパース性ビットマップが内部パッドバイトについてゼロなので、内部パッドバイトは処理されない。
【0122】
図14の示されている例において、テンソルおよび重み制御回路1002は、入力テンソル1406と畳み込まれる各重みカーネルを複製して、各重みカーネルのN個の重みカーネルを生成する。Nは、再フォーマットされた入力テンソル1402のXY位置毎に生成され得る出力テンソルの点の数と一致する。
図14の例において、MAC回路220は、再フォーマットされた入力テンソル1402のXY位置毎に出力テンソルの4つの点を生成できる。例えば、MAC回路220は、第1のZ値1408、第2のZ値1410および第3のZ値1412に基づいて出力テンソルの1番目の点を;、第2のZ値1410、第3のZ値1412および第4のZ値1414に基づいて出力テンソルの2番目の点を;第3のZ値1412、第4のZ値1414および第5のZ値1416に基づいて出力テンソルの3番目の点を;および、第4のZ値1414、第5のZ値1416および第6のZ値1418に基づいて出力テンソルの第4の点を生成する。したがって、テンソルおよび重み制御回路1002は、各重みカーネルを複製して、各重みカーネルの4つの重みカーネルを生成する。追加的に、スパース性生成回路1006は、1つまたは複数の重みスパース性ビットマップ1404を生成する。各重みスパース性ビットマップは、異なる重みスパース性パターン(例えば、WEIGHT_SET0_A、WEIGHT_SET0_B、WEIGHT_SET0_C、WEIGHT_SET0_D)を含む。
【0123】
図14の示されている例において、1つまたは複数の重みスパース性ビットマップ1404は、N個の重みスパース性ビットマップを含む。
図14の例において、スパース性生成回路1006は、1つまたは複数の重みスパース性ビットマップ1404を生成する。各重みスパース性ビットマップは、選択された重みカーネルのストライドの数と入力テンソル1406の深さおよび内部パッドの数の和との積だけそれぞれの重みスパース性ビットマップの開始からずらされるスパース性パターンを含む。
図14の例において、入力テンソル1406の深さは3であり、内部パッドの数は1である。したがって、
図14の例において、それぞれのスパース性パターンは、選択された重みカーネルのストライドの数と4との積だけずらされる。
【0124】
図14の例において、各重みスパース性ビットマップのスパース性パターンは、d個の連続する1ビットのw
Kセットを含む。w
Kは、重みカーネルの幅であり、dは、入力テンソルの深さである。内部パディングが入力テンソル1406に適用されるので、スパース性生成回路1006は、w
Kセットの各々に1つのゼロビットを付加して、内部パッドの数と一致させる。上述のように、N個のスパース性ビットマップについてスパース性生成回路1006により生成される1ビットの総数は、重みカーネルの幅と、重みカーネルの高さと、入力テンソルの深さとの積に等しい。
図14の1のストライドを有する3×3×3重みカーネルと入力テンソル1406との畳み込みの場合、スパース性生成回路1006は、1つまたは複数の重みスパース性ビットマップ1404の1番目のもの(例えば、WEIGHT_SET0_A)を重みカーネルの高さに等しい回数だけ複製する。したがって、スパース性生成回路1006は、1つまたは複数の重みスパース性ビットマップ1404の1番目のものを3回複製する。したがって、複製された重みスパース性ビットマップは、合計で96ビットを含む。各重みスパース性ビットマップは、32ビットを含む。重みスパース性ビットマップの各々は、9個の1ビットおよび23個のゼロビットを含む。したがって、複製された重みスパース性ビットマップは、合計で27個の1ビットおよび合計で69個のゼロビットを含む。
【0125】
図14の示されている例において、ポインタ制御回路1008は、適用される場合、入力テンソル1406の深さ、選択された重みカーネルのストライドおよび内部パッド長に基づいてフラクショナルストライドオフセットを連続する記憶要素ポインタに適用することを決定する。例えば、ポインタ制御回路1008は、上記の式1に従って、フラクショナルストライドオフセットを決定する。
図14の例において、ポインタ制御回路1008は、フラクショナルストライティングオフセットを決定した後、連続する記憶要素ポインタをこのオフセットの分だけずらす。
【0126】
記憶要素の粒度および適用されたフラクショナルストライドオフセットと位置合わせされた入力テンソル1406のチャネルを用いて、
図11のMAC回路は、異なる重みスパース性ビットマップで入力テンソル1406の活性化を処理して、各畳み込みの所望の入力活性化を選択する。例えば、フラクショナルストライド前処理回路214のスパース性および記憶要素ポインタは、
図11のMAC回路に、入力テンソル1406を32チャネル入力テンソルとして処理させて、入力テンソル1406を再フォーマットされた入力テンソル1402へ効果的に再フォーマットする。追加的に、フラクショナルストライド前処理回路214のスパース性および記憶要素ポインタは、
図11のMAC回路に、3×3×3重みカーネルを1×3×9重みカーネルとして処理させる。例えば、1つまたは複数の重みスパース性ビットマップ1404は、入力テンソル1406の所望のバイトを選択し、50%のフラクショナルストライドが、重複する記憶要素を用いて提供される。再フォーマットされた入力テンソル1402の深さは、以下の式2を介して決定され得る。式2は、全てのカーネルサイズに適用可能である。
D
REFORMATTED=ROUND_UPTO_NEAREST_16(3*[NUM_CHANNELS+PAD]*STRIDE+X
KERNEL*[NUM_CHANNELS+PAD])
式2
【0127】
図15は、例示的な出力テンソル1506を決定するための、パディングがない例示的な入力テンソル1502と2のストライドを有する3×3×3重みカーネル1504の例示的なセットとの例示的な畳み込み1500を示すデータフロー図である。
図15の例において、入力テンソル1502は、X=5、Y=5かつZ=3の次元を有する。入力テンソル1502は、3個のチャネルを用いたZメジャーフォーマットでメモリに記憶される。
図15の例において、入力テンソル1502上の各XY位置は、位置合わせされた16バイトであるメモリ内の位置を占有する。したがって、入力テンソル1502(例えば、Z>2)のチャネルの後のメモリは、未使用のバイトである。いくつかの例では、未使用のバイトにデータが記憶されないが、追加のまたは代替的な例では、未使用のバイトは、ゼロという対応するスパース性ビットマップを有するデータを含み得る。
図15の例において、16バイトアライメント(例えば、16-3=13)の結果として、メモリには、XY位置毎に13個の未使用バイトが存在している。
【0128】
図15の示されている例において、入力テンソル1502は、入力テンソル1502の1番目のXY位置における第1のZ値1508、入力テンソル1502の2番目のXY位置における第2のZ値1510、入力テンソル1502の3番目のXY位置における第3のZ値1512、入力テンソル1502の4番目のXY位置における第4のZ値1514および入力テンソル1502の5番目のXY位置における第5のZ値1516を含む。
図15の例において、3×3×3重みカーネル1504のセットは、例示的な第1の重みカーネル1518、例示的な第2の重みカーネル1520、例示的な第3の重みカーネル1522および例示的な第4の重みカーネル1524を含む。第1の重みカーネル1518、第2の重みカーネル1520、第3の重みカーネル1522および第4の重みカーネル1524の各々は、3の深さを有する。したがって、第1の重みカーネル1518、第2の重みカーネル1520、第3の重みカーネル1522および第4の重みカーネル1524の各々は、メモリ内の27バイト(例えば、X
KERNEL*Y
KERNEL*NUM_CHANNELS)を占有する。したがって、MAC回路は、27回のMAC演算を実行して、出力テンソル1506の出力点1526、1528、1530の各々を生成する。
図15の例において、第1の重みカーネル1518、第2の重みカーネル1520。第3の重みカーネル1522および第4の重みカーネル1524の各々は、出力テンソル1506内の単一のチャネル(例えば、Kにおけるステップ)を生成するために、4回用いられる。
【0129】
図15の例において、第1の重みカーネル1518、第2の重みカーネル1520、第3の重みカーネル1522および第4の重みカーネル1524の各々は、メモリに連続的に記憶される。つまり、第1の重みカーネル1518、第2の重みカーネル1520、第3の重みカーネル1522および第4の重みカーネル1524の各々は、27×1アレイとしてメモリに記憶される。
図15の例において、第1の重みカーネル1518、第2の重みカーネル1520、第3の重みカーネル1522および第4の重みカーネル1524は、3×3×3重みカーネル1504のセットが入力テンソル1502にどのようにマッピングするかを示すために、3×3×3個のテンソルとして示されている。
【0130】
図16は、
図15の例示的な出力テンソル1506を決定するための、パディングがない例示的な再フォーマットされた入力テンソル1602と2のストライドを有する再フォーマットされた1×3×9重みカーネル1604の例示的なセットとの例示的な畳み込み1600を示すデータフロー図である。
図16の例において、再フォーマットされた入力テンソル1602は、X=2、Y=5かつZ=9の次元を有する。再フォーマットされた入力テンソル1602のZ次元は、第1の重みカーネル1518の幅と入力テンソル1502のチャネルの数との積として決定され得る(例えば、Z
REFORMATTED=X
KERNEL*NUM_CHANNELS)。
図16の例において、再フォーマットされた入力テンソル1602上の各XY位置は、位置合わせされた16バイトであるメモリ内の位置を占有する。したがって、再フォーマットされた入力テンソル1602(例えば、Z>8)のチャネルの後のメモリは、未使用のバイトである。
図16の例において、データ複製前処理回路212は、入力テンソル1502をテンソルデータ複製構成に従って再フォーマットして、再フォーマットされた入力テンソル1602を生成する。
【0131】
図16の示されている例において、再フォーマットされた1×3×9重みカーネル1604のセットは、例示的な第1の重みカーネル1606、例示的な第2の重みカーネル1608、例示的な第3の重みカーネル1610および例示的な第4の重みカーネル1612を含む。
図16の例において、入力テンソル1502は、それぞれの重みカーネルの次元がX
KERNEL*Y
KERNELから1*Y
KERNELへ変更され得るように再フォーマットされる。例えば、第1の重みカーネル1606、第2の重みカーネル1608、第3の重みカーネル1610および第4の重みカーネル1612の各々は、9の深さを有する1×3カーネルである。
【0132】
図16の例において、3×3×3重みカーネル1504のセットのそれぞれの形状が再フォーマットされた1×3×9重みカーネル1604のセットへ再フォーマットされるが、3×3×3重みカーネル1504のセットがメモリに記憶される方式は、変わらない。代わりに、3×3×3重みカーネル1504のセットを再フォーマットするために、MAC回路220は、
図11のMAC回路を通じて3×3×3重みカーネル1504のセットを順序付けて、再フォーマットされた入力テンソル1602の新しい次元に適応させる。
【0133】
図16の示されている例において、パラメータ決定回路802は、第1の重みカーネル1518の幅(例えば、3)、高さ(例えば、3)およびストライド(例えば、2)を決定する。パラメータ決定回路802は、入力テンソル1502の幅(例えば、5)、高さ(例えば、5)および深さ(例えば、3)を追加的に決定する。その後、記憶制御回路806は、入力テンソル1502の1番目のY位置(例えば、Y=0)を選択する。記憶制御回路806は、選択されたY位置における入力テンソル1502の1番目のX位置(例えば、X=0,Y=0)を追加的に選択する。
【0134】
図16の示されている例において、記憶制御回路806は、選択されたXY位置から、第1の重みカーネル1518の幅と重なる連続するXY位置の、入力テンソル1502の深さまで、1つまたは複数のZ値をコピーする。例えば、記憶制御回路806が入力テンソル15021番目のXY位置(X=0,Y=0)から始まっており、第1の重みカーネル1518の幅が3なので、記憶制御回路806は、第1のZ値1508、第2のZ値1510および第3のZ値1512をコピーする。記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1602の次のXY位置へロードする。これが第1のロード動作である場合、記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1602の1番目のXY位置(X=0,Y=0)へロードし、後続の反復のためにX位置をインクリメントする。
【0135】
したがって、記憶制御回路806は、再フォーマットされた入力テンソル1602の1番目のXY位置(X=0,Y=0)へ第1のZ値1508を、続いて第2のZ値1510を、次に第3のZ値1512ロードする。次に、記憶制御回路806は、第1の重みカーネル1518の幅の外側に入力テンソル1502の十分なデータ(例えば、追加のX位置)が存在しているかどうかを判断する。入力テンソル1502の4番目のXY位置(X=3,Y=0)および入力テンソル1502の5番目のXY位置(X=4,Y=0)が第1の重みカーネル1518の幅の外側にあるので、記憶制御回路806は、第1の重みカーネル1518のストライドに従って、選択されたY位置における入力テンソル1502の次のX位置を選択する。第1の重みカーネル1518のストライドが2なので、記憶制御回路806は、入力テンソル1502の3番目のXY位置(X=2,Y=0)を選択する。
【0136】
図16の示されている例において、記憶制御回路806は、選択されたXY位置から、第1の重みカーネル1518の幅と重なる連続するXY位置の、入力テンソル1502の深さまで、1つまたは複数のZ値をコピーする。例えば、記憶制御回路806が入力テンソル1502の3番目のXY位置(X=2,Y=0)から始まっており、第1の重みカーネル1518の幅が3なので、記憶制御回路806は、第3のZ値1512、第4のZ値1514および第5のZ値1516をコピーする。記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1602の次のXY位置へロードする。
【0137】
したがって、例えば、以前にロードされたXY位置が、再フォーマットされた入力テンソル1602の1番目のXY位置だったので、記憶制御回路806は、再フォーマットされた入力テンソル1602の2番目のXY位置(X=1,Y=0)へ第3のZ値1512を、続いて第4のZ値1514を、次に第5のZ値1516ロードする。次に、記憶制御回路806は、第1の重みカーネル1518の幅の外側に入力テンソル1502の十分なデータ(例えば、追加のX位置)が存在しているかどうかを判断する。第1の重みカーネル1518の幅の外側にX位置がないので、記憶制御回路806は、第1の重みカーネル1518の高さの外側に入力テンソル1502の十分なデータ(例えば、追加のY位置)が存在しているかどうかを判断する。入力テンソル1502の16番目のXY位置(X=0,Y=4)および入力テンソル1502の21番目のXY位置(X=0,Y=5)が第1の重みカーネル1518の高さの外側にあるので、記憶制御回路806は、第1の重みカーネル1518のストライドに従って、入力テンソル1502の次のY位置を選択する。第1の重みカーネル1518のストライドが2なので、記憶制御回路806は、入力テンソル1502の16番目のXY位置(X=0,Y=4)を選択する。次に、記憶制御回路806は、入力テンソルの選択されたY位置における入力テンソル1502の1番目のX位置(例えば、X=0,Y=0)を選択し、処理は、上述のように同様に続く。
【0138】
図16の例に示されるように、2のストライドを有する3×3×3重みカーネル1504のセットについて、再フォーマットされた入力テンソル1602は、入力テンソル1502と比較した場合により小さいメモリフットプリントを有する。例えば、X/(2X+1)の係数だけ、メモリフットプリントが低減する。
図16の例において、メモリフットプリントは、約50%だけ低減される。追加的に、再フォーマットされた入力テンソル1602のメモリフットプリントは、さらに低減され得る。例えば、MAC回路220が独立のXストライドおよび独立のYストライドとの畳み込みを実行するように構成されている場合、MAC回路220は、再フォーマットされた入力テンソル1602にわたって1をストライドでき、再フォーマットされた入力テンソル1602の下に2をストライドできる。したがって、データ複製前処理回路212は、出力テンソル1506を生成するための動作の性能を改善する。データ複製前処理回路212は、全てのカーネルサイズに適用可能であり、重みカーネルの幅(例えば、X
KERNEL)は、1へ変更され、再フォーマットされた入力テンソルのZ次元は、重みカーネルの幅と入力テンソルのチャネルの数との積へ変更される(例えば、Z
REFORMATTED=X
KERNEL*NUM_CHANNELS)。
【0139】
図17は、洗練されたフラクショナルストライディングを容易にするための、パディングがない例示的な再フォーマットされた入力テンソル1702と2のストライドおよび1つまたは複数の重みスパース性ビットマップ1704を有する例示的な3×3×3重みカーネルとの例示的な畳み込み1700を示すデータフロー図である。
図17の例において、フラクショナルストライド前処理回路214は、重みスパース性を転用して、フラクショナルストライドを洗練させ、4バイトの粒度で選択される入力テンソルの活性化を可能にする。フラクショナルストライド前処理回路214は、スパース性を記憶要素ポインタと組み合わせることにより、再フォーマットされた入力テンソル1702を例示的な入力テンソル1706から生成する。
図17の例において、入力テンソル1706は、X=12、Y=4かつZ=3の次元を有する。
【0140】
図17の示されている例において、入力テンソル1706は、入力テンソル1706の1番目のXY位置における第1のZ値1708、入力テンソル1706の2番目のXY位置における第2のZ値1710、入力テンソル1706の3番目のXY位置における第3のZ値1712および入力テンソル1706の4番目のXY位置における第4のZ値1714を含む。入力テンソル1706は、入力テンソル1706の5番目のXY位置における第5のZ値1716、入力テンソル1706の6番目のXY位置における第6のZ値1718、入力テンソル1706の7番目のXY位置における第7のZ値1720および入力テンソル1706の8番目のXY位置における第8のZ値1722も含む。追加的に、入力テンソル1706は、入力テンソル1706の9番目のXY位置における第9のZ値1724、入力テンソル1706の10番目のXY位置における第10のZ値1726、入力テンソル1706の11番目のXY位置における第11のZ値1728および入力テンソル1706の12番目のXY位置における第12のZ値1730を含む。
【0141】
図17の示されている例において、スパース性生成回路1006は、内部パディングが入力テンソル1706に適用されるかどうかを判断する。例えば、スパース性生成回路1006は、記憶要素の粒度を入力テンソル1706の深さで除算することにより内部パディングが入力テンソル1706に適用されるかどうかを判断する。除算演算の剰余がゼロではない場合、スパース性生成回路1006は、内部パディングが適用され、逆も然り、と判断する。
【0142】
図17の示されている例において、内部パディングが入力テンソル1706に適用されるという判断に応答して、スパース性生成回路1006は、入力テンソル1706の各XY位置のZ値をパッドの数により分離する。パッドの数を決定するために、スパース性生成回路1006はまず、入力テンソル1706の深さを、記憶要素の粒度(例えば、16)へ除算された場合に剰余ゼロを戻す4の最も近い倍数までラウンドする。次に、スパース性生成回路1006は、入力テンソル1706のラウンドされた値および深さの間の差を見出して、パッドの数を決定する。
【0143】
図17の示されている例において、記憶要素の粒度は16であり、入力テンソル1706の深さは3である。したがって、スパース性生成回路1006は、パッドの数が1(例えば、4-3=1)である、と判断する。本明細書において開示される例において、入力テンソルの内部パッドの長さは、1バイトである。したがって、入力テンソル1706のチャネルが、4バイトへ内部でパディングされ、3つのチャネルのグループが記憶要素の粒度へ位置合わせされる(例えば、4×(3チャネルバイト+1パッドバイト)=16バイト)。重みスパース性ビットマップが内部パッドバイトについてゼロなので、内部パッドバイトは処理されない。
【0144】
図17の示されている例において、テンソルおよび重み制御回路1002は、入力テンソル1706と畳み込まれる各重みカーネルを複製して、各重みカーネルのN個の重みカーネルを生成する。Nは、再フォーマットされた入力テンソル1402のXY位置毎に生成され得る出力テンソルの点の数と一致する。
図17の例において、MAC回路220は、再フォーマットされた入力テンソル1702のXY位置毎に出力テンソルの4つの点を生成できる。したがって、テンソルおよび重み制御回路1002は、各重みカーネルを複製して、各重みカーネルの4つの重みカーネルを生成する。追加的に、スパース性生成回路1006は、1つまたは複数の重みスパース性ビットマップ1704を生成する。各重みスパース性ビットマップは、異なる重みスパース性パターン(例えば、WEIGHT_SET0_A、WEIGHT_SET0_B、WEIGHT_SET0_C、WEIGHT_SET0_D)を含む。
図17の例において、1つまたは複数の重みスパース性ビットマップ1704は、N個の重みスパース性ビットマップを含む。
図17の例において、スパース性生成回路1006は、1つまたは複数の重みスパース性ビットマップ1704を生成する。各重みスパース性ビットマップは、選択された重みカーネルのストライドの数と入力テンソル1706の深さおよび内部パッドの数の和との積だけそれぞれの重みスパース性ビットマップの開始からずらされるスパース性パターンを含む。
図17の例において、入力テンソル1706の深さは3であり、内部パッドの数は1である。したがって、
図17の例において、それぞれのスパース性パターンは、選択された重みカーネルのストライドの数と4との積だけずらされる。各重みスパース性ビットマップのスパース性パターンは、d個の連続する1ビットのw
Kセットを含む。w
Kは、重みカーネルの幅であり、dは、入力テンソルの深さである。内部パディングが入力テンソル1706に適用されるので、スパース性生成回路1006は、w
Kセットの各々に1つのゼロビットを付加して、内部パッドの数と一致させる。
【0145】
図17の示されている例において、ポインタ制御回路1008は、適用される場合、入力テンソル1706の深さ、選択された重みカーネルのストライドおよび内部パッド長に基づいてフラクショナルストライドオフセットを連続する記憶要素ポインタに適用することを決定する。例えば、ポインタ制御回路1008は、上記の式1に従って、フラクショナルストライドオフセットを決定する。
図17の例において、ポインタ制御回路1008は、フラクショナルストライティングオフセットを決定した後、連続する記憶要素ポインタをこのオフセットの分だけずらす。
【0146】
記憶要素の粒度および適用されたフラクショナルストライドオフセットと位置合わせされた入力テンソル1706のチャネルを用いて、
図11のMAC回路は、異なる重みスパース性ビットマップで入力テンソル1706の活性化を処理して、各畳み込みの所望の入力活性化を選択する。例えば、フラクショナルストライド前処理回路214のスパース性および記憶要素ポインタは、
図11のMAC回路に、入力テンソル1706を48チャネル入力テンソルとして処理させて、入力テンソル1706を再フォーマットされた入力テンソル1702へ効果的に再フォーマットする。追加的に、フラクショナルストライド前処理回路214のスパース性および記憶要素ポインタは、
図11のMAC回路に、3×3×3重みカーネルを1×3×9重みカーネルとして処理させる。例えば、1つまたは複数の重みスパース性ビットマップ1704は、入力テンソル1706の所望のバイトを選択し、66%のフラクショナルストライドが、重複する記憶要素を用いて提供される。再フォーマットされた入力テンソル1702の深さは、上記の式2を介して決定され得る。
【0147】
図18は、例示的な出力テンソル1806を決定するための、外部パディングがある例示的な入力テンソル1802と1のストライドを有する3×3×3重みカーネル1804の例示的なセットとの例示的な畳み込み1800を示すデータフロー図である。
図18の例において、入力テンソル1802は、X=4、Y=4かつZ=3の次元を有する。入力テンソル1802は、3個のチャネルを用いたZメジャーフォーマットでメモリに記憶される。
図18の例において、入力テンソル1802上の各XY位置は、位置合わせされた16バイトであるメモリ内の位置を占有する。したがって、入力テンソル1802(例えば、Z>2)のチャネルの後のメモリは、未使用のバイトである。いくつかの例では、未使用のバイトにデータが記憶されないが、追加のまたは代替的な例では、未使用のバイトは、ゼロという対応するスパース性ビットマップを有するデータを含み得る。
図18の例において、16バイトアライメント(例えば、16-3=13)の結果として、メモリには、XY位置毎に13個の未使用バイトが存在している。
【0148】
図18の示されている例において、非1×1カーネルが用いられる場合に入力テンソル1802および出力テンソル1806が同じサイズになることを可能にするために、外部パディングが入力テンソル1802に追加される。上述のように、外部パッドは、ヌルデータである。
図18の例において、1つの外部パッドバイトは、入力テンソル1802の上、下、右および左に追加される。追加的に、上述のように、外部パッドバイトは、メモリへロードされない場合、活性化スパース性として実装され、メモリ内の空間を占有しない。
【0149】
図18の示されている例において、入力テンソル1802は、入力テンソル1802の1番目のXY位置における第1のZ値1808、入力テンソル1802の2番目のXY位置における第2のZ値1810、入力テンソル1802の3番目のXY位置における第3のZ値1812および入力テンソル1802の4番目のXY位置における第4のZ値1814を含む。
図18の例において、3×3×3重みカーネル1804のセットは、例示的な第1の重みカーネル1816、例示的な第2の重みカーネル1818、例示的な第3の重みカーネル1820および例示的な第4の重みカーネル1822を含む。第1の重みカーネル1816、第2の重みカーネル1818、第3の重みカーネル1820および第4の重みカーネル1822の各々は、3の深さを有する。したがって、第1の重みカーネル1816、第2の重みカーネル1818、第3の重みカーネル1820および第4の重みカーネル1822の各々は、メモリ内の27バイト(例えば、X
KERNEL*Y
KERNEL*NUM_CHANNELS)を占有する。したがって、MAC回路は、27回のMAC演算を実行して、出力テンソル1806の出力点1824、1826の各々を生成する。
図18の例において、第1の重みカーネル1816、第2の重みカーネル1818。第3の重みカーネル1820および第4の重みカーネル1822の各々は、出力テンソル1806内の単一のチャネル(例えば、Kにおけるステップ)を生成するために、4回用いられる。
【0150】
図18の例において、第1の重みカーネル1816、第2の重みカーネル1818、第3の重みカーネル1820および第4の重みカーネル1822の各々は、メモリに連続的に記憶される。つまり、第1の重みカーネル1816、第2の重みカーネル1818、第3の重みカーネル1820および第4の重みカーネル1822の各々は、27×1アレイとしてメモリに記憶される。
図18の例において、第1の重みカーネル1816、第2の重みカーネル1818、第3の重みカーネル1820および第4の重みカーネル1822は、3×3×3重みカーネル1804のセットが入力テンソル1802にどのようにマッピングするかを示すために、3×3×3個のテンソルとして示されている。
【0151】
図19は、
図18の例示的な出力テンソル1806を決定するための、外部パディングがある例示的な再フォーマットされた入力テンソル1902と1のストライドを有する再フォーマットされた1×3×9重みカーネル1904の例示的なセットとの例示的な畳み込み1900を示すデータフロー図である。
図19の例において、再フォーマットされた入力テンソル1902は、X=4、Y=4かつZ=9の次元を有する。再フォーマットされた入力テンソル1902のZ次元は、第1の重みカーネル1816の幅と入力テンソル1802のチャネルの数との積として決定され得る(例えば、Z
REFORMATTED=X
KERNEL*NUM_CHANNELS)。
図19の例において、再フォーマットされた入力テンソル1902上の各XY位置は、位置合わせされた16バイトであるメモリ内の位置を占有する。したがって、再フォーマットされた入力テンソル1902(例えば、Z>8)のチャネルの後のメモリは、未使用のバイトである。
図19の例において、データ複製前処理回路212は、入力テンソル1802をテンソルデータ複製構成に従って再フォーマットして、再フォーマットされた入力テンソル1902を生成する。
【0152】
図19の示されている例において、再フォーマットされた1×3×9重みカーネル1904のセットは、例示的な第1の重みカーネル1906、例示的な第2の重みカーネル1908、例示的な第3の重みカーネル1910および例示的な第4の重みカーネル1912を含む。
図19の例において、入力テンソル1802は、それぞれの重みカーネルの次元がX
KERNEL*Y
KERNELから1*Y
KERNELへ変更され得るように再フォーマットされる。例えば、第1の重みカーネル1906、第2の重みカーネル1908、第3の重みカーネル1910および第4の重みカーネル1912の各々は、9の深さを有する1×3カーネルである。
【0153】
図19の例において、3×3×3重みカーネル1804のセットのそれぞれの形状が再フォーマットされた1×3×9重みカーネル1904のセットへ再フォーマットされるが、3×3×3重みカーネル1804のセットがメモリに記憶される方式は、変わらない。代わりに、3×3×3重みカーネル1804のセットを再フォーマットするために、MAC回路220は、
図11のMAC回路を通じて3×3×3重みカーネル1804のセットを順序付けて、再フォーマットされた入力テンソル1902の新しい次元に適応させる。
【0154】
図19の示されている例において、パラメータ決定回路802は、第1の重みカーネル1816の幅(例えば、3)、高さ(例えば、3)およびストライド(例えば、1)を決定する。パラメータ決定回路802は、入力テンソル1802の幅(例えば、4)、高さ(例えば、4)および深さ(例えば、3)を追加的に決定する。
図19の例において、パディング回路804は、外部パディングが入力テンソル1802に適用されるかどうかを判断する。外部パディングが適用されるという判断に応答して、パディング回路804は、入力テンソル1802の1番目のY位置における1番目のX位置の前に(例えば、入力テンソル1802の左に)第1の外部パッド1914をロードする。追加的に、パディング回路804は、入力テンソル1802の1番目のY位置における最後のX位置の後に(例えば、入力テンソル1802の右に)第2の外部パッド1916をロードする。その後、記憶制御回路806は、入力テンソル1802の1番目のY位置(例えば、Y=0)を選択する。記憶制御回路806は、選択されたY位置における入力テンソル1802の1番目のX位置を追加的に選択する。1番目のY位置における最後のX位置の後の1番目のX位置および第2の外部パッド1916の前にパディング回路804が第1の外部パッド1914を追加するので、入力テンソル1802は、6のX次元を有するように見える。したがって、記憶制御回路806は、選択されたY位置における1番目のX位置(例えば、X=1,Y=0)を選択する場合、第1の外部パッド1914のX位置を選択する。
【0155】
図19の示されている例において、記憶制御回路806は、選択されたXY位置から、第1の重みカーネル1816の幅と重なる連続するXY位置の、入力テンソル1802の深さまで、1つまたは複数のZ値をコピーする。例えば、記憶制御回路806が入力テンソル1802の1番目のXY位置(X=-1,Y=0)から始まっており、第1の重みカーネル1816の幅が3なので、記憶制御回路806は第1の外部パッド1914、第1のZ値1808および第2のZ値1810をコピーする。記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1902の次のXY位置へロードする。これが第1のロード動作である場合、記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1902の1番目のXY位置(X=0,Y=0)へロードし、後続の反復のためにX位置をインクリメントする。
【0156】
したがって、記憶制御回路806は、再フォーマットされた入力テンソル1902の1番目のXY位置(X=0,Y=0)へ第1の外部パッド1914を、続いて第1のZ値1808を、次に第2のZ値1810ロードする。したがって、再フォーマットされた入力テンソル1902と畳み込まれるカーネルのY位置のデータは、同じメモリ位置に存在する。次に、記憶制御回路806は、第1の重みカーネル1216の幅の外側に入力テンソル1802の十分なデータ(例えば、追加のX位置)が存在しているかどうかを判断する。入力テンソル1802の3番目のXY位置(X=2,Y=0)入力テンソル1802の4番目のXY位置および第2の外部パッド1916が第1の重みカーネル1816の幅の外側にあるので、記憶制御回路806は、第1の重みカーネル1816のストライドに従って、選択されたY位置における入力テンソル1802の次のX位置を選択する。第1の重みカーネル1816のストライドが1なので、記憶制御回路806は、入力テンソル1802の1番目のXY位置(X=0,Y=0)を選択する。
【0157】
図19の示されている例において、記憶制御回路806は、選択されたXY位置から、第1の重みカーネル1816の幅と重なる連続するXY位置の、入力テンソル1802の深さまで、1つまたは複数のZ値をコピーする。例えば、記憶制御回路806が入力テンソル1802の1番目のXY位置(X=0,Y=0)から始まっており、第1の重みカーネル1816の幅が3なので、記憶制御回路806は、第1のZ値1808、第2のZ値1810および第3のZ値1812をコピーする。記憶制御回路806は、コピーされた1つまたは複数のZ値を再フォーマットされた入力テンソル1902の次のXY位置へロードする。
【0158】
したがって、例えば、以前にロードされたXY位置が、再フォーマットされた入力テンソル1902の1番目のXY位置だったので、記憶制御回路806は、再フォーマットされた入力テンソル1902の2番目のXY位置(X=1,Y=0)へ第1のZ値1808を、続いてに第2のZ値1810を、次に第3のZ値1812ロードする。処理は、第1の重みカーネル1816の垂直ストライドについて、同様に続く。
【0159】
図20は、洗練されたフラクショナルストライディングを容易にするための、パディングがある例示的な再フォーマットされた入力テンソル2002と1のストライドおよび1つまたは複数の重みスパース性ビットマップ2004を有する例示的な3×3×3重みカーネルとの例示的な畳み込みを示すデータフロー図である。
図20の例において、フラクショナルストライド前処理回路214は、重みスパース性を転用して、フラクショナルストライドを洗練させ、4バイトの粒度で選択される入力テンソルの活性化を可能にする。フラクショナルストライド前処理回路214は、スパース性を記憶要素ポインタと組み合わせることにより、再フォーマットされた入力テンソル2002を例示的な入力テンソル2006から生成する。
図20の例において、入力テンソル2006は、X=8、Y=1かつZ=3の次元を有するが、X=10、Y=3かつZ=3の次元を有するようにパディングされる。
【0160】
図20の示されている例において、パディング制御回路1004は、外部パディングが入力テンソル2006に適用されるかどうかを判断する。外部パディングが入力テンソル2006に適用されるという判断に応答して、パディング制御回路1004は、入力テンソル2006の1番目のY位置における1番目のX位置の前に(例えば、入力テンソル2006の左に)第1の外部パッド2008をロードする。したがって、入力テンソル2006と畳み込まれるカーネルのY位置のデータは、同じメモリ位置に存在する。追加的に、パディング制御回路1004は、入力テンソル2006の1番目のY位置における最後のX位置の後に(例えば、入力テンソル2006の右に)第2の外部パッド2010をロードする。したがって、入力テンソル2006と畳み込まれるカーネルのY位置のデータは、同じメモリ位置に存在する。入力テンソル2006の上および下のパッドは、実行中、AIアクセラレータ回路208によりスパース性として挿入される。
【0161】
したがって、
図20の示されている例において、入力テンソル2006は、第1の外部パッド2008、入力テンソル2006の1番目のXY位置における第1のZ値2012、入力テンソル2006の2番目のXY位置における第2のZ値2014、入力テンソル2006の3番目のXY位置における第3のZ値2016および入力テンソル2006の4番目のXY位置における第4のZ値2018を含む。入力テンソル2006は、入力テンソル2006の5番目のXY位置における第5のZ値2020、入力テンソル2006の6番目のXY位置における第6のZ値2022、入力テンソル2006の7番目のXY位置における第7のZ値2024、入力テンソル2006の8番目のXY位置における第8のZ値2026および第2の外部パッド2010も含む。
図20の例において、スパース性生成回路1006は、内部パディングが入力テンソル2006に適用されるかどうかを判断する。例えば、スパース性生成回路1006は、記憶要素の粒度を入力テンソル2006の深さで除算することにより内部パディングが入力テンソル2006に適用されるかどうかを判断する。除算演算の剰余がゼロではない場合、スパース性生成回路1006は、内部パディングが適用され、逆も然り、と判断する。
【0162】
図20の示されている例において、内部パディングが入力テンソル2006に適用されるという判断に応答して、スパース性生成回路1006は、入力テンソル2006の各XY位置のZ値をパッドの数により分離する。パッドの数を決定するために、スパース性生成回路1006はまず、入力テンソル2006の深さを、記憶要素の粒度(例えば、16)へ除算された場合に剰余ゼロを戻す4の最も近い倍数までラウンドする。次に、スパース性生成回路1006は、入力テンソル2006のラウンドされた値および深さの間の差を見出して、パッドの数を決定する。
【0163】
図20の示されている例において、記憶要素の粒度は16であり、入力テンソル2006の深さは3である。したがって、スパース性生成回路1006は、パッドの数が1(例えば、4-3=1)である、と判断する。本明細書において開示される例において、入力テンソルの内部パッドの長さは、1バイトである。したがって、入力テンソル2006のチャネルが、4バイトへ内部でパディングされ、3つのチャネルのグループが記憶要素の粒度へ位置合わせされる(例えば、4×(3チャネルバイト+1パッドバイト)=16バイト)。重みスパース性ビットマップが内部パッドバイトについてゼロなので、内部パッドバイトは処理されない。
【0164】
図20の示されている例において、テンソルおよび重み制御回路1002は、入力テンソル2006と畳み込まれる各重みカーネルを複製して、各重みカーネルのN個の重みカーネルを生成する。Nは、再フォーマットされた入力テンソル2002のXY位置毎に生成され得る出力テンソルの点の数と一致する。
図20の例において、MAC回路220は、再フォーマットされた入力テンソル2002のXY位置毎に出力テンソルの4つの点を生成できる。したがって、テンソルおよび重み制御回路1002は、各重みカーネルを複製して、各重みカーネルの4つの重みカーネルを生成する。追加的に、スパース性生成回路1006は、1つまたは複数の重みスパース性ビットマップ2004を生成する。各重みスパース性ビットマップは、異なる重みスパース性パターン(例えば、WEIGHT_SET0_A、WEIGHT_SET0_B、WEIGHT_SET0_C、WEIGHT_SET0_D)を含む。
図20の例において、1つまたは複数の重みスパース性ビットマップ2004は、N個の重みスパース性ビットマップを含む。
図20の例において、スパース性生成回路1006は、1つまたは複数の重みスパース性ビットマップ2004を生成する。各重みスパース性ビットマップは、選択された重みカーネルのストライドの数と入力テンソル2006の深さおよび内部パッドの数の和との積だけそれぞれの重みスパース性ビットマップの開始からずらされるスパース性パターンを含む。
図20の例において、入力テンソル2006の深さは3であり、内部パッドの数は1である。したがって、
図20の例において、それぞれのスパース性パターンは、選択された重みカーネルのストライドの数と4との積だけずらされる。各重みスパース性ビットマップのスパース性パターンは、d個の連続する1ビットのw
Kセットを含む。w
Kは、重みカーネルの幅であり、dは、入力テンソルの深さである。内部パディングが入力テンソル2006に適用されるので、スパース性生成回路1006は、w
Kセットの各々に1つのゼロビットを付加して、内部パッドの数と一致させる。
【0165】
図20の示されている例において、ポインタ制御回路1008は、適用される場合、入力テンソル2006の深さ、選択された重みカーネルのストライドおよび内部パッド長に基づいてフラクショナルストライドオフセットを連続する記憶要素ポインタに適用することを決定する。例えば、ポインタ制御回路1008は、上記の式1に従って、フラクショナルストライドオフセットを決定する。
図20の例において、ポインタ制御回路1008は、フラクショナルストライティングオフセットを決定した後、連続する記憶要素ポインタをこのオフセットの分だけずらす。
【0166】
記憶要素の粒度および適用されたフラクショナルストライドオフセットと位置合わせされた入力テンソル2006のチャネルを用いて、
図11のMAC回路は、異なる重みスパース性ビットマップで入力テンソル2006の活性化を処理して、各畳み込みの所望の入力活性化を選択する。例えば、フラクショナルストライド前処理回路214のスパース性および記憶要素ポインタは、
図11のMAC回路に、入力テンソル2006を32チャネル入力テンソルとして処理させて、入力テンソル2006を再フォーマットされた入力テンソル2002へ効果的に再フォーマットする。追加的に、フラクショナルストライド前処理回路214のスパース性および記憶要素ポインタは、
図11のMAC回路に、3×3×3重みカーネルを1×3×9重みカーネルとして処理させる。例えば、1つまたは複数の重みスパース性ビットマップ2004は、入力テンソル2006の所望のバイトを選択し、50%のフラクショナルストライドが、重複する記憶要素を用いて提供される。再フォーマットされた入力テンソル2002の深さは、上記の式2を介して決定され得る。
【0167】
表2は、通常の処理と比較した場合のテンソルデータ複製構成およびフラクショナルストライティング構成のためのResNet-50およびMobileNetのMAC利用率を示す。表1の例において、ResNet-50は、2のストライドを有する7×7重みカーネルを利用し、MobileNetは、2のストライドを有する3×3重みカーネルを利用する。
[表2]
【表2】
【0168】
ResNet-50について、表2は、テンソルデータ複製およびフラクショナルストライティングについてそれぞれ、2.8倍および1.8倍の利用率の上昇を示す。MobileNetについて、表2は、テンソルデータ複製およびフラクショナルストライティングについてそれぞれ、1.2倍および1.6倍のMAC利用率の上昇を示す。表2の例において、MAC利用率の上昇は、18%および65%の間の層を処理するためのサイクル数の低減へ変換される。これは、既存の技術と比較すると、入力層についての大きな改善である。
【0169】
上で言及したように、AIアクセラレータ回路は、ネットワーク内のより深い層について非常に効率的であるが、浅い層は、そのような効率を低減し得る。追加的に、そのような層の活性化および重みデータの両方におけるスパース性の上昇により、ネットワーク全体の計算時間の大きな割合を占める浅い層(例えば、入力層)がもたらされ得る。例えば、ResNet-50ネットワークへの入力層は、本明細書において開示される例の利点なく、実行するのにネットワークの時間全体の10.7%を占める。逆に、本明細書において開示される例は、MAC利用率を1.8倍および2.8倍の間で上昇させ、これにより、4.8%および6.9%の間だけ、ネットワークの全体的な処理が低減する。
【0170】
表2は、MobileNetについてフラクショナルストライティングよりも良好にテンソルデータ複製が実行されること、およびResNet-50についてテンソルデータ複製よりも良好にフラクショナルストライティングが実行されることを示す。これらの差は、部分的に、異なる構成がAIアクセラレータ回路によりどのように処理されるかに起因する。そのような差は、各構成に関連付けられたコストテーブルを実装しており、かつ、最適な解決手段を選ぶコンパイラ(例えば、コンパイラ210)により軽減され得る。
【0171】
表3は、ResNet-50およびMobileNetのためのテンソルデータ複製およびフラクショナルストライティングについての活性化および重みフットプリントを示す。MobileNetおよびResNet-50の両方について、メモリフットプリントは、テンソルデータ複製を実装する場合、通常の処理のものの約50である。追加的に、メモリフットプリントは、フラクショナルストライティングを実装する場合、通常の処理のものの約25である。メモリが限られたリソースであるエッジデバイスについて、メモリフットプリントの低減は、本明細書において開示される例により実現される大きな利益である。
[表3]
【表3】
【0172】
いくつかの例において、データ複製前処理回路212は、1つまたは複数のパラメータを決定するための手段を含む。例えば、1つまたは複数のパラメータを決定するための手段は、パラメータ決定回路802により実装され得る。いくつかの例において、パラメータ決定回路802は、
図23の例示的なプロセッサ回路2312、
図24の例示的なプロセッサ回路2400および/または
図25の例示的なフィールドプログラマブルゲートアレイ(FPGA)回路2500により実装され得るプロセッサ回路によって実行される
図21の最後のブロック2102、2104、2106、2130および2132により実装されるものなど、機械実行可能命令により実装され得る。他の例において、パラメータ決定回路802は、他のハードウェア論理回路、ハードウェア実装ステートマシン、および/または、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の他の組み合わせにより実装される。例えば、パラメータ決定回路802は、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された少なくとも1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、特定用途向け集積回路(ASIC)、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得るが、他の構造も同様に適切である。
【0173】
いくつかの例において、データ複製前処理回路212は、パディングするための手段を含む。例えば、パディングするための手段は、パディング回路804により実装され得る。いくつかの例において、パディング回路804は、
図23の例示的なプロセッサ回路2312、
図24の例示的なプロセッサ回路2400および/または
図25の例示的なフィールドプログラマブルゲートアレイ(FPGA)回路2500により実装され得るプロセッサ回路によって実行される
図21の最後のブロック2108、2110および2112により実装されるものなど、機械実行可能命令により実装され得る。他の例において、パディング回路804は、他のハードウェア論理回路、ハードウェア実装ステートマシン、および/または、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の他の組み合わせにより実装される。例えば、パディング回路804は、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された少なくとも1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、特定用途向け集積回路(ASIC)、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得るが、他の構造も同様に適切である。
【0174】
いくつかの例において、データ複製前処理回路212は、記憶を制御するための手段を含む。例えば、記憶を制御するための手段は、記憶制御回路806により実装され得る。いくつかの例において、記憶制御回路806は、
図23の例示的なプロセッサ回路2312、
図24の例示的なプロセッサ回路2400および/または
図25の例示的なフィールドプログラマブルゲートアレイ(FPGA)回路2500により実装され得るプロセッサ回路によって実行される
図21の最後のブロック2114、2116、2118、2120、2122、2124、2126および2128により実装されるものなど、機械実行可能命令により実装され得る。他の例において、記憶制御回路806は、他のハードウェア論理回路、ハードウェア実装ステートマシン、および/または、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の他の組み合わせにより実装される。例えば、記憶制御回路806は、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された少なくとも1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、特定用途向け集積回路(ASIC)、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得るが、他の構造も同様に適切である。
【0175】
いくつかの例において、フラクショナルストライド前処理回路214は、1つまたは複数のテンソルを制御するための手段を含む。例えば、1つまたは複数のテンソルを制御するための手段は、テンソルおよび重み制御回路1002により実装され得る。いくつかの例において、テンソルおよび重み制御回路1002は、
図23の例示的なプロセッサ回路2312、
図24の例示的なプロセッサ回路2400および/または
図25の例示的なフィールドプログラマブルゲートアレイ(FPGA)回路2500により実装され得るプロセッサ回路によって実行される
図22の最後のブロック2202、2204、2206、2218、2226、2228および2230により実装されるものなど、機械実行可能命令により実装され得る。他の例において、テンソルおよび重み制御回路1002は、他のハードウェア論理回路、ハードウェア実装ステートマシン、および/または、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の他の組み合わせにより実装される。例えば、テンソルおよび重み制御回路1002は、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された少なくとも1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、特定用途向け集積回路(ASIC)、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得るが、他の構造も同様に適切である。
【0176】
いくつかの例において、フラクショナルストライド前処理回路214は、パディングするための手段を含む。例えば、パディングするための手段は、パディング制御回路1004により実装され得る。いくつかの例において、パディング制御回路1004は、
図23の例示的なプロセッサ回路2312、
図24の例示的なプロセッサ回路2400および/または
図25の例示的なフィールドプログラマブルゲートアレイ(FPGA)回路2500により実装され得るプロセッサ回路によって実行される
図22の最後のブロック2208、2210および2212により実装されるものなど、機械実行可能命令により実装され得る。他の例において、パディング制御回路1004は、他のハードウェア論理回路、ハードウェア実装ステートマシン、および/または、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の他の組み合わせにより実装される。例えば、パディング制御回路1004は、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された少なくとも1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、特定用途向け集積回路(ASIC)、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得るが、他の構造も同様に適切である。
【0177】
いくつかの例において、フラクショナルストライド前処理回路214は、スパース性を生成するための手段を含む。例えば、スパース性を生成するための手段は、スパース性生成回路1006により実装され得る。いくつかの例において、スパース性生成回路1006は、
図23の例示的なプロセッサ回路2312、
図24の例示的なプロセッサ回路2400および/または
図25の例示的なフィールドプログラマブルゲートアレイ(FPGA)回路2500により実装され得るプロセッサ回路によって実行される
図22の最後のブロック2214および2216により実装されるものなど、機械実行可能命令により実装され得る。他の例において、スパース性生成回路1006は、他のハードウェア論理回路、ハードウェア実装ステートマシン、および/または、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の他の組み合わせにより実装される。例えば、スパース性生成回路1006は、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された少なくとも1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、特定用途向け集積回路(ASIC)、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得るが、他の構造も同様に適切である。
【0178】
いくつかの例において、フラクショナルストライド前処理回路214は、1つまたは複数のポインタを制御するための手段を含む。例えば、1つまたは複数のポインタを制御するための手段は、ポインタ制御回路1008により実装され得る。いくつかの例において、ポインタ制御回路1008は、
図23の例示的なプロセッサ回路2312、
図24の例示的なプロセッサ回路2400および/または
図25の例示的なフィールドプログラマブルゲートアレイ(FPGA)回路2500により実装され得るプロセッサ回路によって実行される
図22の最後のブロック2220、2222および2224により実装されるものなど、機械実行可能命令により実装され得る。他の例において、ポインタ制御回路1008は、他のハードウェア論理回路、ハードウェア実装ステートマシン、および/または、ハードウェア、ソフトウェアおよび/またはファームウェアの任意の他の組み合わせにより実装される。例えば、ポインタ制御回路1008は、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された少なくとも1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、特定用途向け集積回路(ASIC)、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得るが、他の構造も同様に適切である。
【0179】
図2のデータ複製前処理回路212を実装する例示的な方式が
図8に示されているが、
図8に示されている要素、処理および/またはデバイスのうちの1つまたは複数は、任意の他の態様で組み合わされ、分割され、再配置され、省略され、排除され、および/または実装され得る。追加的に、
図2のフラクショナルストライド前処理回路214を実装する例示的な方式が
図10に示されているが、
図10に示されている要素、処理および/またはデバイスのうちの1つまたは複数は、任意の他の態様で組み合わされ、分割され、再配置され、省略され、排除され、および/または実装され得る。さらに、
図2および/または
図8の例示的なパラメータ決定回路802、例示的なパディング回路804、例示的な記憶制御回路806および/またはより一般的には例示的なデータ複製前処理回路212、および/または、
図2および/または
図10の例示的なテンソルおよび重み制御回路1002、例示的なパディング制御回路1004、例示的なスパース性生成回路1006、例示的なポインタ制御回路1008および/またはより一般的には例示的なフラクショナルストライド前処理回路214は、ハードウェアにより単独で、または、ハードウェアによりソフトウェアおよび/またはファームウェアとの組み合わせで実装され得る。したがって、例えば、
図2および/または
図8の例示的なパラメータ決定回路802、例示的なパディング回路804、例示的な記憶制御回路806および/またはより一般的には例示的なデータ複製前処理回路212、および/または、
図2および/または
図10の例示的なテンソルおよび重み制御回路1002、例示的なパディング制御回路1004、例示的なスパース性生成回路1006、例示的なポインタ制御回路1008および/またはより一般的には例示的なフラクショナルストライド前処理回路214のいずれも、プロセッサ回路、アナログ回路、デジタル回路、論理回路、プログラマブルプロセッサ、プログラマブルマイクロコントローラ、グラフィックスプロセッサユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス(PLD)、および/またはフィールドプログラマブルゲートアレイ(FPGA)のようなフィールドプログラマブルロジックデバイス(FPLD)により実装され得る。またさらに、
図2の例示的なデータ複製前処理回路212は、
図8に示されるものに加えて、またはそれらの代わりに、1つまたは複数の要素、処理および/またはデバイスを含んでよく、および/または、示されている要素、処理およびデバイスのいずれかまたは全てのうちの1つよりも多くを含んでよい。追加的に、
図2のフラクショナルストライド前処理回路214は、
図10に示されるものに加えて、またはそれらの代わりに、1つまたは複数の要素、処理および/またはデバイスを含んでよく、および/または、示されている要素、処理およびデバイスのいずれかまたは全てのうちの1つよりも多くを含んでよい。
【0180】
例示的なハードウェア論理回路、機械可読命令、ハードウェア実装ステートマシン、および/または、
図2および/または
図8のデータ複製前処理回路212を実装するためのそれらの任意の組み合わせのフローチャート代表図が、
図21に示される。機械可読命令は、
図23に関連して後述される例示的なプロセッサプラットフォーム2300内に示されるプロセッサ回路2312および/または
図24および/または
図25に関連して後述される例示的なプロセッサ回路のようなプロセッサ回路による実行および/またはインスタンス化のための実行可能および/またはインスタンス化可能プログラムの1つまたは複数の実行可能および/またはインスタンス化可能プログラムまたは部分であってよい。このプログラムは、1つまたは複数のハードウェアデバイス内に位置するプロセッサ回路に関連付けられたCD、フロッピディスク、ハードディスクドライブ(HDD)、DVD、ブルーレイディスク、揮発性メモリ(例えば、任意のタイプのランダムアクセスメモリ(RAM)等)または不揮発性メモリ(例えば、フラッシュメモリ、HDD等)など、1つまたは複数の非一時的コンピュータ可読記憶媒体に記憶されたソフトウェアにおいて具現化されてよいが、このプログラム全体および/またはその一部は、代替的に、このプロセッサ回路以外の1つまたは複数のハードウェアデバイスにより実行および/またはインスタンス化され、および/または、ファームウェアまたは専用ハードウェアにおいて具現化され得る。機械可読命令は、複数のハードウェアデバイスにわたって分散され、および/または、2つまたはそれよりも多くのハードウェアデバイス(例えば、サーバおよびクライアントハードウェアデバイス)により実行され、および/または、2つまたはそれよりも多くのハードウェアデバイスによりインスタンス化されてよい。例えば、クライアントハードウェアデバイスは、エンドポイントクライアントハードウェアデバイス(例えば、ユーザに関連付けられたハードウェアデバイス)または中間クライアントハードウェアデバイス(例えば、サーバおよびエンドポイントクライアントハードウェアデバイスの間の通信を容易にし得る無線アクセスネットワーク(RAN)ゲートウェイ)により実装され得る。同様に、非一時的コンピュータ可読記憶媒体は、1つまたは複数のハードウェアデバイス内に位置する1つまたは複数の媒体を含み得る。さらに、
図21に示されるフローチャートを参照して例示的なプログラムが説明されているが、例示的なデータ複製前処理回路212を実装する多くの他の方法が、代替的に用いられ得る。例えば、ブロックの実行順序は、変更されてよく、および/または、説明されているブロックのいくつかは、変更され、排除され、または組み合わされてよい。追加的に、または代替的に、ブロックのいずれかまたは全てが、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、ASIC、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得る。プロセッサ回路は、異なるネットワーク位置に分散され、および/または、1つまたは複数のハードウェアデバイス(例えば、シングルコアプロセッサ(例えば、シングルコア中央処理ユニット(CPU)))、単一の機械内のマルチコアプロセッサ(例えば、マルチコアCPU等)、サーバラックの複数のサーバにわたって分散された複数のプロセッサ、1つまたは複数のサーバラックにわたって分散された複数のプロセッサ、同じパッケージ(例えば、同じ集積回路(IC)パッケージ、または2つまたはそれよりも多くの別個のハウジング等)内に位置するCPUおよび/またはFPGAにローカルであってよい。
【0181】
例示的なハードウェア論理回路、機械可読命令、ハードウェア実装ステートマシン、および/または、
図2および/または
図10のフラクショナルストライド前処理回路214を実装するためのそれらの任意の組み合わせのフローチャート代表図が、
図22に示される。機械可読命令は、
図23に関連して後述される例示的なプロセッサプラットフォーム2300内に示されるプロセッサ回路2312および/または
図24および/または
図25に関連して後述される例示的なプロセッサ回路のようなプロセッサ回路による実行および/またはインスタンス化のための実行可能および/またはインスタンス化可能プログラムの1つまたは複数の実行可能および/またはインスタンス化可能プログラムまたは部分であってよい。このプログラムは、1つまたは複数のハードウェアデバイス内に位置するプロセッサ回路に関連付けられたCD、フロッピディスク、ハードディスクドライブ(HDD)、DVD、ブルーレイディスク、揮発性メモリ(例えば、任意のタイプのランダムアクセスメモリ(RAM)等)または不揮発性メモリ(例えば、フラッシュメモリ、HDD等)など、1つまたは複数の非一時的コンピュータ可読記憶媒体に記憶されたソフトウェアにおいて具現化されてよいが、このプログラム全体および/またはその一部は、代替的に、このプロセッサ回路以外の1つまたは複数のハードウェアデバイスにより実行および/またはインスタンス化され、および/または、ファームウェアまたは専用ハードウェアにおいて具現化され得る。機械可読命令は、複数のハードウェアデバイスにわたって分散され、および/または、2つまたはそれよりも多くのハードウェアデバイス(例えば、サーバおよびクライアントハードウェアデバイス)により実行され、および/または、2つまたはそれよりも多くのハードウェアデバイスによりインスタンス化されてよい。例えば、クライアントハードウェアデバイスは、エンドポイントクライアントハードウェアデバイス(例えば、ユーザに関連付けられたハードウェアデバイス)または中間クライアントハードウェアデバイス(例えば、サーバおよびエンドポイントクライアントハードウェアデバイスの間の通信を容易にし得る無線アクセスネットワーク(RAN)ゲートウェイ)により実装され得る。同様に、非一時的コンピュータ可読記憶媒体は、1つまたは複数のハードウェアデバイス内に位置する1つまたは複数の媒体を含み得る。さらに、
図22に示されるフローチャートを参照して例示的なプログラムが説明されているが、例示的なフラクショナルストライド前処理回路214を実装する多くの他の方法が、代替的に用いられ得る。例えば、ブロックの実行順序は、変更されてよく、および/または、説明されているブロックのいくつかは、変更され、排除され、または組み合わされてよい。追加的に、または代替的に、ブロックのいずれかまたは全てが、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された1つまたは複数のハードウェア回路(例えば、プロセッサ回路、ディスクリートおよび/または統合アナログおよび/またはデジタル回路、FPGA、ASIC、コンパレータ、演算増幅器(オペアンプ)、論理回路等)により実装され得る。プロセッサ回路は、異なるネットワーク位置に分散され、および/または、1つまたは複数のハードウェアデバイス(例えば、シングルコアプロセッサ(例えば、シングルコア中央処理ユニット(CPU)))、単一の機械内のマルチコアプロセッサ(例えば、マルチコアCPU等)、サーバラックの複数のサーバにわたって分散された複数のプロセッサ、1つまたは複数のサーバラックにわたって分散された複数のプロセッサ、同じパッケージ(例えば、同じ集積回路(IC)パッケージ、または2つまたはそれよりも多くの別個のハウジング等)内に位置するCPUおよび/またはFPGAにローカルであってよい。
【0182】
本明細書において説明される機械可読命令は、圧縮形式、暗号化形式、断片化形式、コンパイル形式、実行可能形式、パッケージ形式等のうちの1つまたは複数で記憶され得る。本明細書において説明されるような機械可読命令は、機械実行可能命令を作成、製造および/または生成するために利用され得るデータまたはデータ構造(例えば、命令の各部分、コード、コードの表現等)として記憶され得る。例えば、機械可読命令は、ネットワークまたはネットワークの集合の同じまたは異なる位置(例えば、クラウド内、エッジデバイス内等)に位置する1つまたは複数のストレージデバイスおよび/またはコンピューティングデバイス(例えば、サーバ)にフラグメント化および記憶され得る。機械可読命令は、それらをコンピューティングデバイスおよび/または他の機械により直接読み取り可能、解釈可能および/または実行可能なものにすべく、インストール、修正、適合、更新、組み合わせ、補足、構成、復号、圧縮解除、アンパック、配布、再割り当て、コンパイル等のうちの1つまたは複数を、必要とし得る。例えば、機械可読命令は、別個のコンピューティングデバイスで個々に圧縮、暗号化および/または記憶された複数の部分に記憶され得る。これらの部分は、復号され、圧縮解除され、および/または組み合わされた場合、本明細書において説明されるもののようなプログラムを共に形成し得る1つまたは複数の動作を実装する機械実行可能命令のセットを形成する。
【0183】
別の例において、機械可読命令は、プロセッサ回路により読み取られ得る状態で記憶され得るが、特定のコンピューティングデバイスまたは他のデバイス上で機械可読命令を実行および/またはインスタンス化すべく、ライブラリ(例えば、ダイナミックリンクライブラリ(DLL))、ソフトウェア開発キット(SDK)、アプリケーションプログラミングインタフェース(API)等の追加を必要とする。別の例において、機械可読命令は、機械可読命令および/または対応するプログラムが全体的または部分的に実行および/またはインスタンス化され得る前に、構成(例えば、設定の記憶、データの入力、ネットワークアドレスの記録等)される必要があり得る。したがって、本明細書において用いられる機械可読媒体は、記憶されている、またはそうでなければ、静止している、または送信中である場合、機械可読命令および/またはプログラムの特定のフォーマットまたは状態にかかわらず、機械可読命令および/またはプログラムを含み得る。
【0184】
本明細書において説明される機械可読命令は、任意の過去、現在または将来の命令言語、スクリプト言語、プログラミング言語等により表され得る。例えば、機械可読命令は、C、C++、Java(登録商標)、C♯、Perl、Python(登録商標)、JavaScript(登録商標)、ハイパーテキストマークアップ言語(HTML)、構造化クエリ言語(SQL)、Swift(登録商標)等の言語のいずれかを用いて表され得る。
【0185】
上で言及したように、
図21および/または
図22の例示的な動作は、任意の持続時間にわたって(例えば、延長された期間にわたって、永続的に、短期間にわたって、情報の一時的なバッファおよび/またはキャッシュのために)内部に情報が記憶される光学ストレージデバイス、磁気ストレージデバイス、HDD、フラッシュメモリ、リードオンリメモリ(ROM)、CD、DVD、キャッシュ、任意のタイプのRAM、レジスタ、および/または任意の他のストレージデバイスまたはストレージディスクなど、1つまたは複数の非一時的コンピュータおよび/または機械可読媒体に記憶された実行可能命令(例えば、コンピュータおよび/または機械可読命令)を用いて実装され得る。本明細書において用いられる場合、非一時的コンピュータ可読媒体および非一時的コンピュータ可読記憶媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイスおよび/またはストレージディスクを含み、伝搬信号を除外し、かつ、伝送媒体を除外するように、明示的に定義される。本明細書において開示されるいくつかの例において、非一時的コンピュータ可読記憶媒体に記憶されている命令は、実行された場合、本明細書において開示される動作をプロセッサ回路に実行させる。
【0186】
「含む(including)」および「備える(comprising)」(およびそれらの全ての形態および時制)は、本明細書において、オープンエンドの用語として用いられる。したがって、ある請求項が任意の形態の「含む(including)」または「備える(comprising)」(例えば、備える(comprises)、含む(includes)、備える(comprising)、含む(including)、有する(having)等)をプリアンブルとして、または任意の種類の請求項の記載において使用している場合は必ず、対応する請求項または記載の範囲から外れることなく、追加の要素、用語等が存在し得ると理解されるべきである。本明細書において用いられるように、「少なくとも(at least)」という文言は、例えば請求項のプリアンブルにおいて、移行用語として用いられる場合、「備える(comprising)」および「含む(including)」という用語がオープンエンドであるのと同じようにオープンエンドである。「および/または」という用語は、例えば、A、Bおよび/またはCなどの形式で用いられる場合、(1)Aのみ、(2)Bのみ、(3)Cのみ、(4)AとB、(5)AとC、(6)BとC、または(7)AとBとCなど、A、B、Cの任意の組み合わせまたはサブセットを指す。構造、コンポーネント、アイテム、オブジェクトおよび/または物を説明する文脈で本明細書において用いられる場合、「AおよびBのうちの少なくとも一方」という文言は、(1)少なくとも1つのA、(2)少なくとも1つのBまたは(3)少なくとも1つのAおよび少なくとも1つのBのいずれかを含む実装を指すように意図されている。同様に、構造、コンポーネント、アイテム、オブジェクトおよび/または物を説明する文脈で本明細書において用いられる場合、「AまたはBのうちの少なくとも一方」という文言は、(1)少なくとも1つのA、(2)少なくとも1つのBまたは(3)少なくとも1つのAおよび少なくとも1つのBのいずれかを含む実装を指すように意図されている。処理、命令、動作、アクティビティおよび/またはステップの実行(performance)または実行(execution)を説明する文脈で本明細書において用いられる場合、「AおよびBのうちの少なくとも一方」という文言は、(1)少なくとも1つのA、(2)少なくとも1つのBまたは(3)少なくとも1つのAおよび少なくとも1つのBのいずれかを含む実装を指すように意図されている。同様に、処理、命令、動作、アクティビティおよび/またはステップの実行(performance)または実行(execution)を説明する文脈で本明細書において用いられる場合、「AまたはBのうちの少なくとも一方」という文言は、(1)少なくとも1つのA、(2)少なくとも1つのBまたは(3)少なくとも1つのAおよび少なくとも1つのBのいずれかを含む実装を指すように意図されている。
【0187】
本明細書において用いられる場合、単数形での言及(例えば、「1つの(a)」、「1つの(an)」、「第1の(first)」、「第2の(second)」等)は、複数を除外しない。本明細書において用いられる場合、「1つの(a)」または「1つの(an)」オブジェクトという用語は、そのオブジェクトのうちの1つまたは複数を指す。「1つの(a)」(または「1つの(an)」)、「1つまたは複数の」および「少なくとも1つの」という用語は、本明細書において同じ意味で用いられる。さらに、個々に記載されているが、複数の手段、要素または方法動作は、例えば、同じエンティティまたはオブジェクトにより実装され得る。追加的に、個々の特徴が、異なる例または請求項に含まれ得るが、これらは、場合によっては組み合わされてよく、異なる例または請求項における包含は、複数の特徴の組み合わせが実現可能および/または有利ではないことを示唆するわけではない。
【0188】
図21は、
図2および/または
図8のデータ複製前処理回路212を実装するためにプロセッサ回路により実行および/またはインスタンス化され得る例示的な機械可読命令および/または例示的な動作2100のフローチャート代表図である。機械可読命令および/または例示的な動作2100は、パラメータ決定回路802がAIアクセラレータ回路により処理される第1の重みカーネルを選択するブロック2102において始まる。ブロック2104において、パラメータ決定回路802は、選択された重みカーネルの幅、高さおよびストライドを決定する。
【0189】
図21の示されている例では、ブロック2106において、パラメータ決定回路802は、AIアクセラレータ回路により処理される入力テンソルの幅、高さおよび深さを決定する。ブロック2108において、パディング回路804は、外部パディングが入力テンソルに適用されるかどうかを判断する。例えば、ブロック2108において、パディング回路804は、外部パディングが入力テンソルに適用されるかどうかを重みカーネルの次元および/または出力テンソルの所望の次元に基づいて判断する。パディングが入力テンソルに適用される(ブロック2108:はい)、とパディング回路804が判断したことに応答して、機械可読命令および/または動作2100は、ブロック2110へ進む。ブロック2110において、パディング回路804は、入力テンソルの1番目のY位置における1番目のX位置の前に(例えば、入力テンソルの左に)第1の外部パッドをロードする。ブロック2112において、パディング回路804は、入力テンソルの1番目のY位置における最後のX位置の後に(例えば、入力テンソルの右に)第2のパッドをロードする。
【0190】
図21の示されている例において、ブロック2108に戻ると、パディングが入力テンソルに適用されない(ブロック2108:いいえ)、とパディング回路804が判断したことに応答して、機械可読命令および/または動作2100は、ブロック2114へ進む。ブロック2114において、記憶制御回路806は、再フォーマットされる入力テンソルの1番目のY位置を選択する。ブロック2116において、記憶制御回路806は、選択されたY位置における入力テンソルの1番目のX位置を選択する。
【0191】
図21の示されている例では、ブロック2118において、記憶制御回路806は、選択されたXY位置から、入力テンソルと畳み込まれる重みカーネルの幅と重なる入力テンソルの連続するXY位置の、入力テンソルの深さまで、Z値をコピーする。ブロック2120において、記憶制御回路806は、コピーされたZ値を再フォーマットされたテンソルの次のXY位置に連続的にロードする。例えば、ブロック2120の第1の反復において、記憶制御回路806は、コピーされたZ値を再フォーマットされたテンソルの1番目のXY位置(X=0,Y=0)に連続的にロードする。ブロック2120の後続の反復において、記憶制御回路806は、コピーされたZ値を最初の反復の後の反復回数に等しい再フォーマットされたテンソルの次のXY位置へロードする。
【0192】
図21の示されている例では、ブロック2122において、記憶制御回路806は、再フォーマットされたテンソルの別の列を生成するために重みカーネルの幅の外側に十分な入力テンソルデータが存在しているかどうかを判断する。例えば、ブロック2122において、記憶制御回路806は、重みカーネルの幅の外側に入力テンソルの追加のX位置が存在しているかどうかを判断する。再フォーマットされたテンソルの別の列を生成するために重みカーネルの幅の外側に十分な入力テンソルデータが存在している(ブロック2122:はい)、と記憶制御回路806が判断したことに応答して、機械可読命令および/または動作2100は、ブロック2124へ進む。ブロック2124において、記憶制御回路806は、重みカーネルのストライドに従って、選択されたY位置における入力テンソルの次のX位置を選択する。ブロック2124の後、機械可読命令および/または動作2100は、ブロック2118へ戻る。
【0193】
図21の示されている例において、再フォーマットされたテンソルの別の列を生成するために重みカーネルの幅の外側に十分な入力テンソルデータが存在していない(ブロック2122:いいえ)、と記憶制御回路806が判断したことに応答して、機械可読命令および/または動作2100は、ブロック2126へ進む。ブロック2126において、記憶制御回路806は、再フォーマットされたテンソルの別の行を生成するために重みカーネルの高さの外側に十分な入力テンソルデータが存在しているかどうかを判断する。例えば、ブロック2126において、記憶制御回路806は、重みカーネルの高さの外側に入力テンソルの追加のY位置が存在しているかどうかを判断する。再フォーマットされたテンソルの別の行を生成するために重みカーネルの高さの外側に十分な入力テンソルデータが存在している(ブロック2126:はい)、と記憶制御回路806が判断したことに応答して、機械可読命令および/または動作2100は、ブロック2128へ進む。ブロック2128において、記憶制御回路806は、重みカーネルのストライドに従って、入力テンソルの次のY位置を選択する。ブロック2128の後、機械可読命令および/または動作2100は、ブロック2116へ戻る。
【0194】
図21の示されている例において、再フォーマットされたテンソルの別の行を生成するために重みカーネルの高さの外側に十分な入力テンソルデータが存在していない(ブロック2126:いいえ)、と記憶制御回路806が判断したことに応答して、機械可読命令および/または動作2100は、ブロック2130へ進む。ブロック2130において、パラメータ決定回路802は、処理される追加の重みカーネルが存在しているかどうかを判断する。処理される追加の重みカーネルが存在している(ブロック2130:はい)、とパラメータ決定回路802が判断したことに応答して、機械可読命令および/または動作2100は、処理される次の重みカーネルをパラメータ決定回路802が選択するブロック2132へ進む。ブロック2132の後、機械可読命令および/または動作2100は、ブロック2104へ戻る。処理される追加の重みカーネルが存在していない(ブロック2130:いいえ)、とパラメータ決定回路802が判断したことに応答して、機械可読命令および/または動作2100は、終了する。
【0195】
図22は、
図2および/または
図10のフラクショナルストライド前処理回路214を実装するためにプロセッサ回路により実行および/またはインスタンス化され得る例示的な機械可読命令および/または例示的な動作2200のフローチャート代表図である。機械可読命令および/または動作2200は、処理される第1の重みカーネルをテンソルおよび重み制御回路1002が選択するブロック2202において始まる。ブロック2204において、テンソルおよび重み制御回路1002は、選択された重みカーネルの幅、高さおよびストライドを決定する。ブロック2206において、テンソルおよび重み制御回路1002は、選択された重みカーネルと畳み込まれる入力テンソルの幅、高さおよび深さを決定する。
【0196】
図22の示されている例では、ブロック2208において、パディング制御回路1004は、外部パディングが入力テンソルに適用されるかどうかを判断する。外部パディングが入力テンソルに適用される(ブロック2208:はい)、とパディング制御回路1004が判断したことに応答して、機械可読命令および/または動作2200は、ブロック2210へ進む。ブロック2210において、パディング制御回路1004は、入力テンソルの1番目のY位置における1番目のX位置の前に(例えば、入力テンソルの左に)外部パッドをロードする。
図22の例では、ブロック2212において、パディング制御回路1004は、入力テンソルの1番目のY位置における最後のX位置の後に(例えば、入力テンソルの右に)外部パッドをロードする。
【0197】
図22の示されている例において、外部パディングが入力テンソルに適用されない(ブロック2208:いいえ)、とパディング制御回路1004が判断したことに応答して、機械可読命令および/または動作2200は、ブロック2214へ進む。ブロック2214において、スパース性生成回路1006は、内部パディングが入力テンソルに適用されるかどうかを判断する。例えば、ブロック2214において、スパース性生成回路1006は、記憶要素の粒度を入力テンソルの深さで除算することにより内部パディングが入力テンソルに適用されるかどうかを判断する。
図22の例において、内部パディングが入力テンソルに適用される(ブロック2214:はい)、とスパース性生成回路1006が判断したことに応答して、機械可読命令および/または動作2200は、ブロック2216へ進む。ブロック2216において、スパース性生成回路1006は、入力テンソルの各XY位置のZ値をパッドの数により分離する。内部パディングが入力テンソルに適用されない(ブロック2214:いいえ)、とスパース性生成回路1006が判断したことに応答して、機械可読命令および/または動作2200は、ブロック2218へ進む。
【0198】
図22の示されている例では、ブロック2218において、テンソルおよび重み制御回路1002は、選択された重みカーネルを複製して、再フォーマットされた入力テンソルのXY位置毎に生成され得る出力テンソルの点の数と一致するようにN個の重みカーネルを生成する。例えば、ブロック2218において、テンソルおよび重み制御回路1002は、選択された重みカーネルを複製して、4つの重みカーネルを生成する。
図22の例において、テンソルおよび重み制御回路1002は、圧縮の前に、選択された重みカーネルを複製する(例えば、選択された重みカーネルは、密である)。
ブロック2220において、スパース性生成回路1006は、N個の重みスパース性ビットマップを生成する。各重みスパース性ビットマップは、選択された重みカーネルのストライドの数と入力テンソルの深さおよび内部パッドの数の和との積だけそれぞれの重みスパース性ビットマップの開始からずらされるスパース性パターンを含む。例えば、入力テンソルの深さが3であり、内部パッドの数が1である場合、それぞれのスパース性パターンは、重みカーネルのストライドの数と4との積だけずらされる。
図22の例において、各重みスパース性ビットマップのスパース性パターンは、d個の連続する1ビットのw
Kセットを含む。w
Kは、重みカーネルの幅であり、dは、入力テンソルの深さである。内部パディングが入力テンソルに適用される場合、スパース性生成回路1006は、w
Kセットの各々に、内部パッドの数に等しい1つまたは複数のゼロビットを付加する。
【0199】
図22の示されている例では、ブロック2222において、ポインタ制御回路1008は、適用される場合、N、入力テンソルの深さ、重みカーネルのストライドおよび内部パッド長に基づいてフラクショナルストライドオフセットを連続する記憶要素ポインタに適用することを決定する。例えば、ポインタ制御回路1008は、式1に従って、フラクショナルストライドオフセットを決定する。
図22の例では、ブロック2224において、ポインタ制御回路1008は、フラクショナルストライドオフセットだけ記憶要素ポインタの連続するそれぞれをずらす。
図22の例では、ブロック2226において、テンソルおよび重み制御回路1002は、処理される入力テンソル、1つまたは複数の重みカーネルおよび1つまたは複数の重みスパース性ビットマップをオフロードする。ブロック2228において、テンソルおよび重み制御回路1002は、処理される追加の重みカーネルが存在しているかどうかを判断する。処理される追加の重みカーネルが存在している(ブロック2228:はい)、とテンソルおよび重み制御回路1002が判断したことに応答して、機械可読命令および/または動作2200は、処理される次の重みカーネルをテンソルおよび重み制御回路1002が選択するブロック2230へ進む。処理される追加の重みカーネルが存在していない(ブロック2228:いいえ)、とテンソルおよび重み制御回路1002が判断したことに応答して、機械可読命令および/または動作2200は、終了する。
【0200】
図23は、
図2および/または
図8のデータ複製前処理回路212を実装するための
図21の機械可読命令および/または動作2100および/または
図2および/または
図10のフラクショナルストライド前処理回路214を実装するための
図22の機械可読命令および/または動作2200を実行および/またはインスタンス化するように構造化された例示的なプロセッサプラットフォーム2300のブロック図である。プロセッサプラットフォーム2300は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、自己学習機械(例えば、ニューラルネットワーク)、モバイルデバイス(例えば、携帯電話、スマートフォン、iPad(登録商標)のようなタブレット)、パーソナルデジタルアシスタント(PDA(登録商標))、インターネット機器、DVDプレーヤ、CDプレーヤ、デジタルビデオレコーダ、ブルーレイプレーヤ、ゲーミングコンソール、パーソナルビデオレコーダ、セットトップボックス、ヘッドセット(例えば、拡張現実(AR)ヘッドセット、仮想現実(VR)ヘッドセット等)、または他のウェアラブルデバイスまたは任意の他のタイプのコンピューティングデバイスであり得る。
【0201】
示されている例のプロセッサプラットフォーム2300は、プロセッサ回路2312を含む。示されている例のプロセッサ回路2312は、ハードウェアである。例えば、プロセッサ回路2312は、任意の所望のファミリまたは製造者の1つまたは複数の集積回路、論理回路、FPGA、マイクロプロセッサ、CPU、GPU、DSPおよび/またはマイクロコントローラにより実装され得る。プロセッサ回路2312は、1つまたは複数の半導体ベースの(例えば、シリコンベースの)デバイスにより実装され得る。この例において、プロセッサ回路2312は、例示的なパラメータ決定回路802、例示的なパディング回路804、例示的な記憶制御回路806および/またはより一般的にはデータ複製前処理回路212、および/または、例示的なテンソルおよび重み制御回路1002、例示的なパディング制御回路1004、例示的なスパース性生成回路1006、例示的なポインタ制御回路1008および/またはより一般的にはフラクショナルストライド前処理回路214を実装する。
【0202】
示されている例のプロセッサ回路2312は、ローカルメモリ2313(例えば、キャッシュ、レジスタ等)を含む。示されている例のプロセッサ回路2312は、揮発性メモリ2314および不揮発性メモリ2316を含むメインメモリと、バス2318により通信している。揮発性メモリ2314は、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)、ダイナミックランダムアクセスメモリ(DRAM)、 RAMBUS(登録商標)ダイナミックランダムアクセスメモリ(RDRAM(登録商標))および/または任意の他のタイプのRAMデバイスにより実装され得る。不揮発性メモリ2316は、フラッシュメモリおよび/または任意の他の所望のタイプのメモリデバイスにより実装され得る。示されている例のメインメモリ2314、2316へのアクセスは、メモリコントローラ2317により制御される。
【0203】
示されている例のプロセッサプラットフォーム2300は、AIアクセラレータ回路208も含む。例示的なAIアクセラレータ回路208は、例示的なローカルメモリ216、例示的なデータ読み取り回路218、例示的なMAC回路220および例示的なデータ書き込み回路222を含む。
図23の例において、例示的なMAC回路220は、例示的な制御論理回路1102、例示的な重みバッファ1104、例示的な重み圧縮解除回路1106、例示的な入力テンソルバッファ1108、例示的な入力テンソル圧縮解除回路1110、MAC回路1112
1,1から1112
1,Mの例示的な1番目の列、MAC回路1114
1,1から1114
1,Mの例示的な2番目の列およびMAC回路1116
N,1から1116
N,Mの例示的なN番目の列を含む。いくつかの例において、制御論理回路1102は、例示的なパラメータ決定回路802、例示的なパディング回路804、例示的な記憶制御回路806および/またはより一般的にはデータ複製前処理回路212、および/または、例示的なテンソルおよび重み制御回路1002、例示的なパディング制御回路1004、例示的なスパース性生成回路1006、例示的なポインタ制御回路1008および/またはより一般的にはフラクショナルストライド前処理回路214を実装する。上述のように、示されている例のAIアクセラレータ回路208は、ローカルメモリ216を含む。示されている例のAIアクセラレータ回路208は、揮発性メモリ2314および不揮発性メモリ2316を含むメインメモリと、バス2318により通信している。
【0204】
示されている例のプロセッサプラットフォーム2300は、インタフェース回路2320も含む。インタフェース回路2320は、イーサネット(登録商標)インタフェース、ユニバーサルシリアルバス(USB)インタフェース、Bluetooth(登録商標)インタフェース、近距離無線通信(NFC)インタフェース、PCIインタフェースおよび/またはPCIeインタフェースなど、任意のタイプのインタフェース規格によるハードウェアにより実装され得る。
【0205】
示されている例において、1つまたは複数の入力デバイス2322が、インタフェース回路2320に接続されている。入力デバイス2322は、データおよび/またはコマンドをプロセッサ回路2312へ入力することをユーザに許可する。入力デバイス2322は、例えば、オーディオセンサ、マイク、カメラ(スチルまたはビデオ)、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、アイソポイントデバイスおよび/または音声認識システムにより実装され得る。
【0206】
1つまたは複数の出力デバイス2324も、示されている例のインタフェース回路2320に接続されている。出力デバイス2324は、例えば、ディスプレイデバイス(例えば、発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、陰極線管(CRT)ディスプレイ、インプレーススイッチング(IPS)ディスプレイ、タッチスクリーン等)、触覚出力デバイス、プリンタおよび/またはスピーカにより実装され得る。したがって、示されている例のインタフェース回路2320は、典型的には、グラフィックスドライバカード、グラフィックスドライバチップ、および/または、GPUなどのグラフィックスプロセッサ回路を含む。
【0207】
示されている例のインタフェース回路2320は、ネットワーク2326による外部の機械(例えば、任意の種類のコンピューティングデバイス)とのデータ交換を容易にするためのトランスミッタ、レシーバ、トランシーバ、モデム、レジデンシャルゲートウェイ、無線アクセスポイントおよび/またはネットワークインタフェースなど、通信デバイスも含む。通信は、例えば、イーサネット(登録商標)接続、デジタル加入者線(DSL)接続、電話線接続、同軸ケーブルシステム、衛星システム、有視界無線システム、セルラ電話システム、光接続等によるものであり得る。
【0208】
示されている例のプロセッサプラットフォーム2300は、ソフトウェアおよび/またはデータを記憶するための1つまたは複数の大容量ストレージデバイス2328も含む。そのような大容量ストレージデバイス2328の例は、磁気ストレージデバイス、光学ストレージデバイス、フロッピディスクドライブ、HDD、CD、ブルーレイディスクドライブ、独立ディスク冗長アレイ(RAID)システム、フラッシュメモリデバイスのようなソリッドステートストレージデバイス、およびDVDドライブを含む。
【0209】
図21および/または
図23の機械可読命令により実装され得る機械実行可能命令2332は、大容量ストレージデバイス2328、揮発性メモリ2314、不揮発性メモリ2316、および/または、CDまたはDVDのようなリムーバブル非一時的コンピュータ可読記憶媒体に記憶され得る。
【0210】
図24は、
図23のプロセッサ回路2312の例示的な実装のブロック図である。この例において、
図23のプロセッサ回路2312は、マイクロプロセッサ2400により実装される。例えば、マイクロプロセッサ2400は、例えば、CPU、DSP、GPU、XPU等、マルチコアハードウェア回路を実装し得る。任意の数の例示的なコア2402(例えば、1つのコア)を含み得るが、この例のマイクロプロセッサ2400は、N個のコアを含むマルチコア半導体デバイスである。マイクロプロセッサ2400のコア2402は、独立して動作してよく、または機械可読命令を実行するために協働してよい。例えば、ファームウェアプログラム、埋め込みソフトウェアプログラムまたはソフトウェアプログラムに対応する機械コードが、コア2402のうちの1つにより実行されてよく、または、コア2402のうちの複数により同時に、または異なる時点で実行されてよい。いくつかの例において、ファームウェアプログラム、埋め込みソフトウェアプログラムまたはソフトウェアプログラムに対応する機械コードは、複数のスレッドへ分割され、コア2402のうちの2つまたはそれよりも多くにより並列に実行される。ソフトウェアプログラムは、
図21および/または
図22のフローチャートにより表される機械可読命令および/または動作の一部または全部に対応し得る。
【0211】
コア2402は、例示的なバス2404により通信し得る。いくつかの例において、バス2404は、通信バスを実装して、コア2402のうちの1つに関連付けられた通信を実現し得る。例えば、バス2404は、集積回路間(I2C)バス、シリアルペリフェラルインタフェース(SPI)バス、PCIバスまたはPCIeバスのうちの少なくとも1つを実装し得る。追加的に、または代替的に、バス2404は、任意の他のタイプのコンピューティングまたは電気バスを実装し得る。コア2402は、例示的なインタフェース回路2406により、1つまたは複数の外部デバイスからデータ、命令および/または信号を取得し得る。コア2402は、インタフェース回路2406により、データ、命令および/または信号を1つまたは複数の外部デバイスへ出力し得る。この例のコア2402は、例示的なローカルメモリ2420(例えば、L1データキャッシュおよびL1命令キャッシュへ分割され得るレベル1(L1)キャッシュ)を含むが、マイクロプロセッサ2400は、データおよび/または命令への高速アクセスのためにコア(例えば、レベル2(L2)キャッシュ)により共有され得る例示的な共有メモリ2410も含む。データおよび/または命令は、共有メモリ2410への書き込みおよび/または共有メモリ2410からの読み取りにより、転送(例えば、共有)され得る。コア2402および共有メモリ2410の各々のローカルメモリ2420は、複数のレベルのキャッシュメモリおよびメインメモリ(例えば、
図23)のメインメモリ2314、2316)を含むストレージデバイスの階層の一部であってよい。典型的には、階層内のより高いレベルのメモリが、より少ないアクセス時間を示し、より低いレベルのメモリよりも少ない記憶容量を有する。様々なレベルのキャッシュ階層における変更は、キャッシュコヒーレンシポリシーにより管理(例えば、調整)される。
【0212】
各コア2402は、CPU、DSP、GPU等、または任意の他のタイプのハードウェア回路と称され得る。各コア2402は、制御ユニット回路2414、算術および論理(AL)回路(ALU回路と称されることがある)2416、複数のレジスタ2418、L1キャッシュ2420および例示的なバス2422を含む。他の構造が存在し得る。例えば、各コア2402は、ベクトルユニット回路、単一命令多重データ(SIMD)ユニット回路、ロード/記憶ユニット(LSU)回路、分岐/ジャンプユニット回路。浮動小数点ユニット(FPU)回路等を含み得る。制御ユニット回路2414は、対応するコア2402内のデータ移動を制御する(例えば、データ移動を調整する)ように構造化された半導体ベースの回路を含む。AL回路2416は、対応するコア2402内のデータに対して1つまたは複数の数学および/または論理演算を実行するように構造化された半導体ベースの回路を含む。いくつかの例のAL回路2416は、整数ベースの演算を実行する。他の例において、AL回路2416は、浮動小数点演算も実行する。さらに他の例において、AL回路2416は、整数ベースの演算を実行する第1のAL回路および浮動小数点演算を実行する第2のAL回路を含み得る。いくつかの例において、AL回路2416は、算術論理ユニット(ALU)および/または算術および論理回路と称され得る。レジスタ2418は、対応するコア2402のAL回路2416により実行される演算のうちの1つまたは複数の結果などのデータおよび/または命令を記憶するための半導体ベースの構造である。例えば、レジスタ2418は、ベクトルレジスタ、SIMDレジスタ、汎用レジスタ、フラグレジスタ、セグメントレジスタ、機械固有レジスタ、命令ポインタレジスタ、制御レジスタ、デバッグレジスタ、メモリ管理レジスタ、機械チェックレジスタ等を含み得る。レジスタ2418は、
図24に示されるように、バンク内に配置され得る。代替的に、レジスタ2418は、アクセス時間を短縮するためにコア2402の全体にわたる分散を含む任意の他の構成、フォーマットまたは構造で編成され得る。バス2422は、I2Cバス、SPIバス、PCIバスまたはPCIeバスのうちの少なくとも1つを実装し得る。
【0213】
各コア2402、および/または、より一般的にはマイクロプロセッサ2400は、図示された上述のものに対する追加のおよび/または代替的な構造を含み得る。例えば、1つまたは複数のクロック回路、1つまたは複数の電源、1つまたは複数の電力ゲート、1つまたは複数のキャッシュホームエージェント(CHA)、1つまたは複数の集約/共通メッシュストップ(CMS)、1つまたは複数のシフタ(例えば、バレルシフタ)および/または他の回路が存在し得る。マイクロプロセッサ2400は、1つまたは複数のパッケージに含まれる1つまたは複数の集積回路(IC)内の上述の構造を実装するために多くのトランジスタ相互接続を含むように製造された半導体デバイスである。プロセッサ回路は、1つまたは複数のアクセラレータを含み、および/またはこれらと協働してよい。いくつかの例において、汎用プロセッサにより行われ得るものよりも迅速および/または効率的に特定のタスクを実行するために、論理回路によりアクセラレータが実装される。アクセラレータの例は、本明細書において説明されるものなど、ASICおよびFPGAを含む。GPUまたは他のプログラマブルデバイスも、アクセラレータであり得る。アクセラレータは、プロセッサ回路と同じチップパッケージおよび/またはプロセッサ回路とは別個の1つまたは複数のパッケージでプロセッサ回路に搭載され得る。
【0214】
図25は、
図23のプロセッサ回路2312の別の例示的な実装のブロック図である。この例において、プロセッサ回路2312は、FPGA回路2500により実装される。FPGA回路2500は、例えば、対応する機械可読命令を実行する
図24の例示的なマイクロプロセッサ2400により別様に実行され得る動作を実行するために用いられ得る。しかしながら、FPGA回路2500は、ひとたび構成されると、ハードウェア内の機械可読命令をインスタンス化し、したがって、対応するソフトウェアを実行する汎用マイクロプロセッサにより実行され得るよりも速く動作を実行できることが多い。
【0215】
より具体的には、上述の
図24のマイクロプロセッサ2400(
図21および/または
図22のフローチャートにより表される機械可読命令のいくつかまたは全てを実行するようにプログラミングされ得るが、ひとたび製造されると相互接続および論理回路が固定される汎用デバイスである)とは対照的に、
図25の例のFPGA回路2500は、例えば、
図21および/または
図22のフローチャートにより表される機械可読命令のいくつかまたは全てをインスタンス化するために製造後に異なる態様で構成および/または相互接続され得る相互接続および論理回路を含む。特に、FPGA回路2500は、論理ゲート、相互接続およびスイッチのアレイと考えられ得る。スイッチは、相互接続により論理ゲートがどのように相互接続されるかを変更することで、1つまたは複数の専用論理回路を効果的に形成するようにプログラミングされ得る(FPGA回路2500が再プログラミングされるまで)。構成された論理回路は、入力回路により受信されるデータに対して異なる動作を実行するために論理ゲートが異なる態様で協働することを可能にする。それらの動作は、
図21および/または
図22のフローチャートにより表されるソフトウェアのいくつかまたは全てに対応し得る(例えば、
図21および/または
図22のフローチャートにより表される命令に対応する動作)。したがって、FPGA回路2500は、
図21および/または
図22のフローチャートの機械可読命令のいくつかまたは全てを、ASICと類似の専用方式でそれらのソフトウェア命令に対応する動作を実行するための専用論理回路として効果的にインスタンス化するように、構造化され得る。したがって、FPGA回路2500は、
図21および/または
図22の機械可読命令のいくつかまたは全てに対応する動作を、汎用マイクロプロセッサがこれらの動作を実行できるよりも速く実行し得る。
【0216】
図25の例において、FPGA回路2500は、Verilogなどのハードウェア記述言語(HDL)によってエンドユーザによりプログラミングされる(および/または、1回または複数回以上プログラミングされる)ように構造化されている。
図25のFPGA回路2500は、例示的な構成回路2504および/または外部ハードウェア(例えば、外部ハードウェア回路)2506からデータを取得し、および/またはそれらへデータを出力するための例示的な入力/出力(I/O)回路2502を含む。例えば、構成回路2504は、FPGA回路2500またはその部分を構成するための機械可読命令を取得し得るインタフェース回路を実装し得る。いくつかのそのような例において、構成回路2504は、ユーザ、機械(例えば、人工知能/機械学習(AI/ML)モデルを実装して命令を生成し得るハードウェア回路(例えば、プログラミングされた、または専用の回路))等から機械可読命令を取得し得る。いくつかの例において、外部ハードウェア2506は、
図24のマイクロプロセッサ2400を実装し得る。FPGA回路2500は、例示的な論理ゲート回路2508、複数の例示的な構成可能相互接続2510および例示的な記憶回路2512のアレイも含む。論理ゲート回路2508および相互接続2510は、
図21および/または
図22の機械可読命令および/または他の所望の動作の少なくともいくつかに対応し得る1つまたは複数の動作をインスタンス化するように構成可能である。
図25に示される論理ゲート回路2508は、グループまたはブロックで製造される。各ブロックは、論理回路へと構成され得る半導体ベースの電気構造を含む。いくつかの例において、電気構造は、論理回路のための基本ビルディングブロックを提供する論理ゲート(例えば、ANDゲート、ORゲート、NORゲート等)を含む。所望の動作を実行するための回路を形成するための電気構造および/または論理ゲートの構成を可能にするために、論理ゲート回路2508の各々の内部には電気制御可能スイッチ(例えば、トランジスタ)が存在する。論理ゲート回路2508は、例えば、ルックアップテーブル(LUT)、レジスタ(例えば、フリップフロップまたはラッチ)、マルチプレクサ等、他の電気構造を含み得る。
【0217】
示されている例の相互接続2510は、論理ゲート回路2508のうちの1つまたは複数の間の1つまたは複数の接続を活性化または非活性化して所望の論理回路をプログラミングするように(例えば、HDL命令言語を用いて)プログラミングすることにより状態が変更され得る電気制御可能スイッチ(例えば、トランジスタ)を含み得る導電性経路、トレースまたはビア等である。
【0218】
示されている例の記憶回路2512は、対応する論理ゲートにより実行される動作のうちの1つまたは複数の結果を記憶するように構造化されている。記憶回路2512は、レジスタ等により実装され得る。示されている例において、記憶回路2512は、アクセスを容易にして実行速度を上げるために、論理ゲート回路2508の間で分散されている。
【0219】
図25の例示的なFPGA回路2500は、例示的な専用動作回路2514も含む。この例において、専用動作回路2514は、一般的に用いられる機能を実装して当分野におけるそれらの機能をプログラミングする必要性を回避するために呼び出され得る専用回路2516を含む。そのような専用回路2516の例は、メモリ(例えば、DRAM)コントローラ回路、PCIeコントローラ回路、クロック回路、トランシーバ回路、メモリ、および乗算器-アキュムレータ回路を含む。他のタイプの専用回路が存在し得る。いくつかの例において、FPGA回路2500は、例示的なCPU2520および/または例示的なDSP2522など、例示的な汎用プログラマブル回路2518も含み得る。他の動作を実行するようにプログラミングされ得るGPU、XPU等、他の汎用プログラマブル回路2518が、追加的に、または代替的に存在し得る。
【0220】
図24および
図25は、
図23のプロセッサ回路2312の2つの例示的な実装を示しているが、多くの他の手法が考えられる。例えば、上で言及したように、現代のFPGA回路は、
図25の例示的なCPU2520のうちの1つまたは複数など、オンボードCPUを含み得る。したがって、
図23のプロセッサ回路2312は、
図24の例示的なマイクロプロセッサ2400および
図25の例示的なFPGA回路2500を組み合わせることにより、追加的に実装され得る。いくつかのそのようなハイブリッドな例において、
図21および/または
図22のフローチャートにより表される機械可読命令の第1の部分は、
図24のコア2402のうちの1つまたは複数により実行されてよく、
図21および/または
図22のフローチャートにより表される機械可読命令の第2の部分は、
図25のFPGA回路2500により実行されてよい。
【0221】
いくつかの例において、
図23のプロセッサ回路2312は、1つまたは複数のパッケージ内にあってよい。例えば、
図24のマイクロプロセッサ2400および/または
図25のFPGA回路2500は、1つまたは複数のパッケージ内にあってよい。いくつかの例において、XPUは、1つまたは複数のパッケージ内にあってよい
図23のプロセッサ回路2312により実装され得る。例えば、XPUは、1つのパッケージ内のCPU、別のパッケージ内のDSP、さらに別のパッケージ内のGPU、およびまたさらに別のパッケージ内のFPGAを含み得る。
【0222】
サードパーティにより所有および/または運用されるハードウェアデバイスへ
図23の例示的な機械可読命令2332などのソフトウェアを配布するための例示的なソフトウェア配布プラットフォーム2605を示すブロック図が、
図26に示される。例示的なソフトウェア配布プラットフォーム2605は、ソフトウェアを他のコンピューティングデバイスへ記憶および伝送できる任意のコンピュータサーバ、データファシリティ、クラウドサービス等により実装され得る。サードパーティは、ソフトウェア配布プラットフォーム2605を所有および/または運用するエンティティの顧客であってよい。例えば、ソフトウェア配布プラットフォーム2605を所有および/または運用するエンティティは、
図23の例示的な機械可読命令2332などのソフトウェアの開発者、販売者および/またはライセンサであってよい。サードパーティは、使用および/または再販売および/またはサブライセンスのためにソフトウェアを購入および/またはライセンスする消費者、ユーザ、小売業者、OEM等であってよい。示されている例において、ソフトウェア配布プラットフォーム2605は、1つまたは複数のサーバおよび1つまたは複数のストレージデバイスを含む。ストレージデバイスは、上述の
図21の機械可読命令および/または動作2100および/または
図22の機械可読命令および/または動作2200に対応し得る機械可読命令2332を記憶する。例示的なソフトウェア配布プラットフォーム2605の1つまたは複数のサーバは、インターネットおよび/または上述の例示的なネットワークのいずれか、のいずれか1つまたは複数に対応し得るネットワーク2610と通信している。いくつかの例において、1つまたは複数のサーバは、商用トランザクションの一部として要求当事者へソフトウェアを伝送するための要求に応答する。ソフトウェアの配信、販売および/またはライセンスに対する支払いは、ソフトウェア配布プラットフォームの1つまたは複数のサーバにより、および/またはサードパーティ支払いエンティティにより処理され得る。サーバは、購入者および/またはライセンサがソフトウェア配布プラットフォーム2605から機械可読命令2332をダウンロードすることを可能にする。例えば、
図21の機械可読命令および/または動作2100に対応し得るソフトウェアは、機械可読命令2332を実行して
図2および/または
図8のデータ複製前処理回路212を実装する例示的なプロセッサプラットフォーム2300へダウンロードされ得る。追加的に、または代替的に、
図22の機械可読命令および/または動作2200に対応し得るソフトウェアは、機械可読命令2332を実行して
図2および/または
図10のフラクショナルストライド前処理回路214を実装する例示的なプロセッサプラットフォーム2300によりダウンロードされ得る。いくつかの例において、ソフトウェア配布プラットフォーム2605の1つまたは複数のサーバは、ソフトウェア(例えば、
図23の例示的な機械可読命令2332)の更新を周期的に提供、伝送および/または強制して、改善、パッチ、更新等がエンドユーザデバイスにおけるソフトウェアへ配布および適用されることを保証する。
【0223】
上記から、1つまたは複数のテンソルを再フォーマットすることによりNNアクセラレータ回路の利用率をNNの浅い層について上げる例示的なシステム、方法、装置および製造品が開示されてきたことが理解されるであろう。本明細書において開示される例示的なシステム、方法、装置および製造品は、活性化データをAIアクセラレータ回路のMACアレイへ転送するための時間を低減し、MACアレイ内のより多くのMACが並列に動作することを可能にする。したがって、本明細書において開示される例は、MAC利用率を上げ、NNへの入力層(例えば、画像)を処理するために必要とされる時間を低減する。既存の技術と比較すると、本明細書において開示される例は、カスタムハードウェアを必要とせず、全ての構成にわたってより良い性能を与え、設計を物理的な観点から大幅に簡略化する。したがって、本明細書において開示される例は、例えば、既存の技術に存在する専用相互接続を排除することによって、より高い周波数の動作およびより低い電力消費を可能にする。
【0224】
追加的に、開示されるシステム、方法、装置および製造品は、NNの入力層への入力テンソルの処理性能を改善する。本明細書において開示される例は、性能を改善するためにテンソルデータがどのように複製されるかを説明するテンソルデータ複製、および、性能を改善するためにフラクショナルストライティングがどのように用いられるかを説明するフラクショナルストライティングを含む。本明細書において開示される例は、テンソル操作を用いることによりMAC利用率を上げて、MACがより多くの活性化データを並列に受信することを可能にする。テンソルデータ複製により提供される利益に加え、フラクショナルストライティングは、活性化データを複製せず、これにより、NNのための活性化データを前処理する計算負荷が低減する。前処理を低減することにより、全体的なレイテンシが低減し、フレーム毎秒(FPS)が上がる。
【0225】
開示されているシステム、方法、装置および製造品は、電力消費を低減し、フレームレートを上げることにより、コンピューティングデバイスの使用効率を改善する。例えば、画像処理CNNの主要メトリックは、FPSの数である。本明細書において開示される例は、CNNの入力層を処理するための時間を低減し、これにより、CNNのレイテンシが低減し、FPSが直接改善される。追加的に、FPS毎ワット(FPS/W)は、ビジョン処理ユニットのようなエッジニューラルネットワークアクセラレータの主要メトリックである。本明細書において開示される例は、FPSを上げ、電力を低減して、主要メトリックの有意義な向上をもたらす。したがって、開示されているシステム、方法、装置および製造品は、コンピュータまたは他の電子および/または機械デバイスなど、機械の動作における1つまたは複数の改善に関連する。
【0226】
1つまたは複数のテンソルを再フォーマットすることによりニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための例示的な方法、装置、システムおよび製造品が、本明細書において開示される。
さらなる例およびそれらの組み合わせは、以下を含む。
【0227】
例1は、ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための装置であって、第1のテンソルにアクセスするためのインタフェース回路、およびプロセッサ回路を備え、前記プロセッサ回路は、中央処理ユニット、グラフィックスプロセッサユニットまたはデジタル信号プロセッサのうちの少なくとも1つ、前記中央処理ユニット、前記グラフィックスプロセッサユニットまたは前記デジタル信号プロセッサのうちの前記少なくとも1つは、前記プロセッサ回路内のデータ移動を制御するための制御回路、命令に対応する1つまたは複数の第1の演算を実行するための算術および論理回路、および前記1つまたは複数の第1の演算の結果および前記命令を前記装置に記憶するための1つまたは複数のレジスタを含む、フィールドプログラマブルゲートアレイ(FPGA)、前記FPGAは、論理ゲート回路、複数の構成可能な相互接続および記憶回路を含み、前記論理ゲート回路および前記相互接続は、1つまたは複数の第2の演算を実行し、前記記憶回路は、前記1つまたは複数の第2の演算の結果を記憶する、または1つまたは複数の第3の演算を実行するための論理ゲート回路を含む特定用途向け集積回路(ASIC)、前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、パラメータ決定回路を、重みカーネルの幅を決定すること、および前記第1のテンソルの深さを決定することを行うようインスタンス化する、および記憶制御回路を、前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーすること、および前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードすることを行うようインスタンス化する、のうちの1つまたは複数を有する装置を含む。
【0228】
例2は、例1に記載の装置を含み、前記装置前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、パディング回路を、前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断すること、外部パディングが適用される、という判断に応答して、前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードすること、および前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードすることを行うようインスタンス化する。
【0229】
例3は、例1に記載の装置を含み、前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記記憶制御回路を、前記第1のテンソルの1番目のY位置を選択すること、前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択すること、および前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択することを行うようインスタンス化する。
【0230】
例4は、例3に記載の装置を含み、前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記記憶制御回路を、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択することを行うようインスタンス化する。
【0231】
例5は、例1に記載の装置を含み、前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である。
【0232】
例6は、例1に記載の装置を含み、前記第1のテンソルは、前記NNへの入力画像に対応する。
【0233】
例7は、例1に記載の装置を含み、前記重みカーネルは、第1の重みカーネルであり、前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記パラメータ決定回路を、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択することを行うようインスタンス化する。
【0234】
例8は、実行された場合、少なくとも、重みカーネルの幅を決定する手順、第1のテンソルの深さを決定する手順、前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーする手順、および前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードする手順をプロセッサ回路に実行させる命令を備える非一時的コンピュータ可読記憶媒体を含む。
【0235】
例9は、例8に記載の非一時的コンピュータ可読記憶媒体を含み、前記命令は、実行された場合、前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断する手順、外部パディングが適用される、という判断に応答して、前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードする手順、および前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードする手順を前記プロセッサ回路に実行させる。
【0236】
例10は、例8に記載の非一時的コンピュータ可読記憶媒体を含み、前記命令は、実行された場合、前記第1のテンソルの1番目のY位置を選択する手順、前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択する手順、および前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択する手順を前記プロセッサ回路に実行させる。
【0237】
例11は、例10に記載の非一時的コンピュータ可読記憶媒体を含み、前記命令は、実行された場合、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択する手順を前記プロセッサ回路に実行させる。
【0238】
例12は、例8に記載の非一時的コンピュータ可読記憶媒体を含み、前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である。
【0239】
例13は、例8に記載の非一時的コンピュータ可読記憶媒体を含み、前記第1のテンソルは、ニューラルネットワークへの入力画像に対応する。
【0240】
例14は、例8に記載の非一時的コンピュータ可読記憶媒体を含み、前記重みカーネルは、第1の重みカーネルであり、前記命令は、実行された場合、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択する手順を前記プロセッサ回路に実行させる。
【0241】
例15は、ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための装置であって、重みカーネルの幅を決定すること、および第1のテンソルの深さを決定すること、を行う、1つまたは複数のパラメータを決定するための手段、および前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーすること、および前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードすることを行う、記憶を制御するための手段を備える、装置を含む。
【0242】
例16は、前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断すること、外部パディングが適用される、という判断に応答して、前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードすること、および前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードすることを行う、パディングするための手段をさらに備える、例15に記載の装置を含む。
【0243】
例17は、例15に記載の装置を含み、前記記憶を制御するための手段は、前記第1のテンソルの1番目のY位置を選択すること、前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択すること、および前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択することを行う。
【0244】
例18は、例17に記載の装置を含み、前記記憶を制御するための手段は、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択することを行う。
【0245】
例19は、例15に記載の装置を含み、前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である。
【0246】
例20は、例15に記載の装置を含み、前記第1のテンソルは、前記NNへの入力画像に対応する。
【0247】
例21は、例15に記載の装置を含み、前記重みカーネルは、第1の重みカーネルであり、前記1つまたは複数のパラメータを決定するための手段は、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択することを行う。
【0248】
例22は、ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための方法であって、重みカーネルの幅を決定する段階、第1のテンソルの深さを決定する段階、前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーする段階、および前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードする段階を備える、方法を含む。
【0249】
例23は、前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断する段階、外部パディングが適用される、という判断に応答して、前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードする段階、および前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードする段階をさらに備える、例22に記載の方法を含む。
【0250】
例24は、前記第1のテンソルの1番目のY位置を選択する段階、前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択する段階、および前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択する段階をさらに備える、例22に記載の方法を含む。
【0251】
例25は、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択する段階をさらに備える、例24に記載の方法を含む。
【0252】
例26は、例22に記載の方法を含み、前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である。
【0253】
例27は、例22に記載の方法を含み、前記第1のテンソルは、前記NNへの入力画像に対応する。
【0254】
例28は、例22に記載の方法を含み、前記重みカーネルは、第1の重みカーネルであり、前記方法は、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択する段階をさらに含む。
【0255】
例29は、ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための装置であって、重みカーネルの幅を決定すること、および第1のテンソルの深さを決定することを行うパラメータ決定回路、および前記第1のテンソルの第1の次元に沿った1番目の点および前記第1のテンソルの第2の次元に沿った1番目の点の1番目の交点から、前記重みカーネルの前記幅と重なる前記第1の次元および前記第2の次元に沿った複数の点の連続する交点の、前記第1のテンソルの前記深さまで、前記第1のテンソルの第3の次元に沿った1つまたは複数の値をコピーすること、および前記第1のテンソルの前記第3の次元に沿った前記1つまたは複数の値を第2のテンソルの第1の次元に沿った1番目の点および第2のテンソルの第2の次元に沿った1番目の点の1番目の交点に連続的にロードすることを行う記憶制御回路を備える、装置を含む。
【0256】
例30は、前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断すること、外部パディングが適用される、という判断に応答して、前記第1のテンソルの前記第2の次元に沿った前記1番目の点における前記第1のテンソルの前記第1の次元に沿った前記1番目の点の前に第1の外部パッドをロードすること、および前記第1のテンソルの前記第2の次元に沿った前記1番目の点における前記第1のテンソルの前記第1の次元に沿った最後の点の後に第2の外部パッドをロードすることを行う、パディング回路をさらに備える、例29に記載の装置を含む。
【0257】
例31は、例29に記載の装置を含み、前記記憶制御回路は、前記第1のテンソルの前記第2の次元に沿った前記1番目の点を選択すること、前記第1のテンソルの前記第1の次元に沿った前記1番目の点および前記第1のテンソルの前記第2の次元に沿った前記1番目の点の前記1番目の交点を設定するために、前記第1のテンソルの前記第2の次元に沿った前記1番目の点における前記第1のテンソルの前記第1の次元に沿った前記1番目の点を選択すること、および前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記第1のテンソルの前記第2の次元に沿った前記1番目の点の前記第1のテンソルの前記第1の次元に沿った2番目の点を前記重みカーネルのストライドに従って選択することを行う。
【0258】
例32は、例31に記載の装置を含み、前記記憶制御回路は、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの前記第2の次元に沿った2番目の点を前記重みカーネルの前記ストライドに従って選択することを行う。
【0259】
例33は、例29に記載の装置を含み、前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である。
【0260】
例34は、例29に記載の装置を含み、前記第1のテンソルは、前記NNへの入力画像に対応する。
【0261】
例35は、例29に記載の装置を含み、前記重みカーネルは、第1の重みカーネルであり、前記パラメータ決定回路は、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択することを行う。
【0262】
例36は、ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための装置であって、重みカーネルのストライドを決定すること、1つまたは複数のポインタを有する1つまたは複数の記憶要素を含む第1のテンソルの深さを決定すること、および第2のテンソルのXY位置毎に生成され得る出力テンソルの点の数と一致するように前記重みカーネルを第1の回数だけ複製することを行うテンソルおよび重み制御回路、前記第1の数に等しい重みスパース性ビットマップの第2の数を生成することであって、各重みスパース性ビットマップは、前記重みカーネルの前記ストライドの第3の数と前記第1のテンソルの前記深さとの積だけそれぞれの重みスパース性ビットマップの開始からずらされるスパース性パターンを含む、生成することを行うスパース性生成回路、およびフラクショナルストライドオフセットだけ前記ポインタの連続するそれぞれをずらして前記第2のテンソルを形成することを行うポインタ制御回路を備える、装置を含む。
【0263】
例37は、例36に記載の装置を含み、前記スパース性生成回路は、前記内部パディングが前記第1のテンソルに適用される、という判断に応答して、前記第1のテンソルの各XY位置のZ値を内部パッドの数により分離する。
【0264】
例38は、例37に記載の装置を含み、各スパース性パターンは、前記重みカーネルの前記ストライドの前記第3の数と前記第1のテンソルの前記深さおよび前記内部パッドの数の和との積だけ前記それぞれの重みスパース性ビットマップの前記開始からずらされる。
【0265】
例39は、例37に記載の装置を含み、前記ポインタ制御回路は、前記第1の数、前記第1のテンソルの前記深さ、前記重みカーネルの前記ストライドおよび前記内部パッドの数に基づいて、前記フラクショナルストライドオフセットを決定する。
【0266】
例40は、例37に記載の装置を含み、前記スパース性生成回路は、ラウンドされた値を、記憶要素の粒度へ除算された場合に剰余ゼロを戻す最も近い4の倍数までラウンドすることにより決定し、前記内部パッドの数を前記ラウンドされた値および前記第1のテンソルの前記深さの間の差として決定することにより、前記内部パッドの数を決定する。
【0267】
例41は、前記重みカーネルの幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断すること、外部パディングが適用される、という判断に応答して、前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードすること、および前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードすることを行う、パディング制御回路をさらに備える、例36に記載の装置を含む。
【0268】
例42は、例36に記載の装置を含み、前記重みカーネルは、第1の重みカーネルであり、前記テンソルおよび重み制御回路は、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択することを行う。
【0269】
特定の例示的なシステム、方法、装置および製造品が本明細書において開示されてきたが、本特許の適用範囲は、これらに限定されない。反対に、本特許は、本特許の特許請求の範囲に公正に含まれる全てのシステム、方法、装置および製造品を包含する。
【0270】
以下の特許請求の範囲は、ここに、この参照により、この発明を実施するための形態へ組み込まれ、各請求項は、本開示の別個の実施形態として独立している。
【手続補正書】
【提出日】2024-03-26
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための装置であって、
第1のテンソルにアクセスするためのインタフェース回路;および
プロセッサ回路
を備え、
前記プロセッサ回路は、
中央処理ユニット、グラフィックスプロセッサユニットまたはデジタル信号プロセッサのうちの少なくとも1つ、前記中央処理ユニット、前記グラフィックスプロセッサユニットまたは前記デジタル信号プロセッサのうちの前記少なくとも1つは、前記プロセッサ回路内のデータ移動を制御するための制御回路、命令に対応する1つまたは複数の第1の演算を実行するための算術および論理回路、および前記1つまたは複数の第1の演算の結果および前記命令を前記装置に記憶するための1つまたは複数のレジスタを含む;
フィールドプログラマブルゲートアレイ(FPGA)、前記FPGAは、論理ゲート回路、複数の構成可能な相互接続および記憶回路を含み、前記論理ゲート回路および前記相互接続は、1つまたは複数の第2の演算を実行し、前記記憶回路は、前記1つまたは複数の第2の演算の結果を記憶する;または
1つまたは複数の第3の演算を実行するための論理ゲート回路を含む特定用途向け集積回路(ASIC);
のうちの1つまたは複数を有し、
前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、
パラメータ決定回路を、
重みカーネルの幅を決定すること;および
前記第1のテンソルの深さを決定すること
を行うようインスタンス化する;および
記憶制御回路を、
前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーすること;および
前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードすること
を行うようインスタンス化する、
装置。
【請求項2】
前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、パディング回路を、
前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断すること;
外部パディングが適用される、という判断に応答して、
前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードすること;および
前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードすること
を行うようインスタンス化する、
請求項1に記載の装置。
【請求項3】
前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記記憶制御回路を、
前記第1のテンソルの1番目のY位置を選択すること;
前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択すること;および
前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択すること
を行うようインスタンス化する、
請求項1に記載の装置。
【請求項4】
前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記記憶制御回路を、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択することを行うようインスタンス化する、
請求項
3に記載の装置。
【請求項5】
前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である、請求項1に記載の装置。
【請求項6】
前記第1のテンソルは、前記NNへの入力画像に対応する、請求項1に記載の装置。
【請求項7】
前記重みカーネルは、第1の重みカーネルであり、前記プロセッサ回路は、前記第1の演算、前記第2の演算または前記第3の演算のうちの少なくとも1つを実行して、前記パラメータ決定回路を、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択することを行うようインスタンス化する、請求項1に記載の装置。
【請求項8】
実行された場合、少なくとも、
重みカーネルの幅を決定する手順;
第1のテンソルの深さを決定する手順;
前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーする手順;および
前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードする手順
をプロセッサ回路に実行させる命令を備えるコンピュータ
プログラム。
【請求項9】
前記命令は、実行された場合、
前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断する手順;
外部パディングが適用される、という判断に応答して、
前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードする手順;および
前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードする手順
を前記プロセッサ回路に実行させる、
請求項8に記載のコンピュータ
プログラム。
【請求項10】
前記命令は、実行された場合、
前記第1のテンソルの1番目のY位置を選択する手順;
前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択する手順;および
前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択する手順
を前記プロセッサ回路に実行させる、
請求項8に記載のコンピュータ
プログラム。
【請求項11】
前記命令は、実行された場合、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択する手順を前記プロセッサ回路に実行させる、請求項
10に記載のコンピュータ
プログラム。
【請求項12】
前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である、請求項8に記載のコンピュータ
プログラム。
【請求項13】
前記第1のテンソルは、ニューラルネットワークへの入力画像に対応する、請求項8に記載のコンピュータ
プログラム。
【請求項14】
前記重みカーネルは、第1の重みカーネルであり、前記命令は、実行された場合、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択する手順を前記プロセッサ回路に実行させる、請求項8に記載のコンピュータ
プログラム。
【請求項15】
ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための装置であって、
重みカーネルの幅を決定すること;および
第1のテンソルの深さを決定すること;
を行う、1つまたは複数のパラメータを決定するための手段;および
前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーすること;および
前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードすること
を行う、記憶を制御するための手段
を備える、装置。
【請求項16】
前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断すること;
外部パディングが適用される、という判断に応答して、
前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードすること;および
前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードすること
を行う、パディングするための手段をさらに備える、請求項15に記載の装置。
【請求項17】
前記記憶を制御するための手段は、
前記第1のテンソルの1番目のY位置を選択すること;
前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択すること;および
前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択すること
を行う、
請求項15に記載の装置。
【請求項18】
前記記憶を制御するための手段は、前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択することを行う、請求項
17に記載の装置。
【請求項19】
前記第1のテンソルは、メモリに記憶され、前記メモリは、位置合わせされた16バイトまたは位置合わせされた32バイトのうちの少なくとも一方である、請求項15に記載の装置。
【請求項20】
前記第1のテンソルは、前記NNへの入力画像に対応する、請求項15に記載の装置。
【請求項21】
前記重みカーネルは、第1の重みカーネルであり、前記1つまたは複数のパラメータを決定するための手段は、処理される追加の重みカーネルが存在している、という判断に応答して、第2の重みカーネルを選択することを行う、請求項15に記載の装置。
【請求項22】
ニューラルネットワーク(NN)アクセラレータ回路の利用率をNNの浅い層について上げるための方法であって、
重みカーネルの幅を決定する段階;
第1のテンソルの深さを決定する段階;
前記第1のテンソルの1番目のXY位置から、前記重みカーネルの前記幅と重なる連続するXY位置の、前記第1のテンソルの前記深さまで、1つまたは複数のZ値をコピーする段階;および
前記1つまたは複数のZ値を第2のテンソルの1番目のXY位置に連続的にロードする段階
を備える、方法。
【請求項23】
前記重みカーネルの前記幅に基づいて外部パディングが前記第1のテンソルに適用されるかどうかを判断する段階;
外部パディングが適用される、という判断に応答して、
前記第1のテンソルの1番目のY位置における1番目のX位置の前に第1の外部パッドをロードする段階;および
前記第1のテンソルの前記1番目のY位置における最後のX位置の後に第2の外部パッドをロードする段階
をさらに備える、請求項22に記載の方法。
【請求項24】
前記第1のテンソルの1番目のY位置を選択する段階;
前記1番目のXY位置を設定するために、前記1番目のY位置における前記第1のテンソルの1番目のX位置を選択する段階;および
前記第2のテンソルの別の列を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの前記幅の外側に存在している、という判断に応答して、前記1番目のY位置における2番目のX位置を前記重みカーネルのストライドに従って選択する段階
をさらに備える、請求項22に記載の方法。
【請求項25】
前記第2のテンソルの別の行を生成するための前記第1のテンソルの十分なデータが前記重みカーネルの高さの外側に存在している、という判断に応答して、前記第1のテンソルの2番目のY位置を前記重みカーネルの前記ストライドに従って選択する段階をさらに備える、請求項
24に記載の方法。
【請求項26】
請求項8から14のいずれかに一項に記載のコンピュータプログラムを格納するコンピュータ可読記憶媒体。
【国際調査報告】