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

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

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特表2024-533636畳み込みニューラルネットワーク演算
<>
  • 特表-畳み込みニューラルネットワーク演算 図1A
  • 特表-畳み込みニューラルネットワーク演算 図1B
  • 特表-畳み込みニューラルネットワーク演算 図2
  • 特表-畳み込みニューラルネットワーク演算 図3
  • 特表-畳み込みニューラルネットワーク演算 図4
  • 特表-畳み込みニューラルネットワーク演算 図5
  • 特表-畳み込みニューラルネットワーク演算 図6
  • 特表-畳み込みニューラルネットワーク演算 図7
  • 特表-畳み込みニューラルネットワーク演算 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-09-12
(54)【発明の名称】畳み込みニューラルネットワーク演算
(51)【国際特許分類】
   G06F 17/16 20060101AFI20240905BHJP
   G06F 17/10 20060101ALI20240905BHJP
【FI】
G06F17/16 Z
G06F17/10 A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024518136
(86)(22)【出願日】2022-09-16
(85)【翻訳文提出日】2024-04-23
(86)【国際出願番号】 US2022043872
(87)【国際公開番号】W WO2023055586
(87)【国際公開日】2023-04-06
(31)【優先権主張番号】17/489,734
(32)【優先日】2021-09-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ブライアン エンバーリン
(72)【発明者】
【氏名】マイケル マントル
(72)【発明者】
【氏名】マイケル ワイ. チョウ
(72)【発明者】
【氏名】ビン ホー
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB26
5B056BB42
(57)【要約】
単一命令複数データ(SIMD)ユニット上で演算を実行するための方法及びシステムが開示される。開示される技術は、1コンピュータサイクル中に入力データに対して内積演算を実行する。実行することは、入力データを畳み込み、中間データを生成することと、1つ以上の遷移演算を中間データに適用して、出力データを生成することと、を含む。説明される態様では、入力データは、畳み込みニューラルネットワークのレイヤへの入力であり、生成された出力データは、レイヤの出力である。
【選択図】図3
【特許請求の範囲】
【請求項1】
単一命令複数データ(SIMD)ユニット上で演算を実行するための方法であって、
SIMDユニット上で実行されるウェーブのレーンが、入力データを前記レーンのベクトル汎用レジスタ(VGPR)にロードすることと、
前記レーンが、1コンピュータサイクル中に内積演算を実行し、出力データを生成することと、を含み、
前記出力データを生成することは、
前記入力データのデータ要素を畳み込み、中間データ要素を生成することと、
1つ以上の遷移演算を前記中間データ要素に適用して、前記出力データの出力データ要素を生成することと、を含む、
方法。
【請求項2】
前記レーンが、前記1コンピュータサイクル中に内積演算を実行することを含み、
前記内積演算を実行することは、
前記入力データの第2のデータ要素を畳み込み、第2の中間データ要素を生成することと、
前記1つ以上の遷移演算を前記第2の中間データ要素に適用して、前記出力データの第2の出力データ要素を生成することと、を含む、
請求項1の方法。
【請求項3】
前記1つ以上の遷移演算は、再フォーマット演算、整流演算又はクランプ演算のうち何れかである、
請求項1の方法。
【請求項4】
前記入力データは、畳み込みニューラルネットワークのレイヤへの入力であり、前記出力データは、前記レイヤの出力である、
請求項1の方法。
【請求項5】
前記入力データは、ピクセルと、前記ピクセルを中心とするピクセルブロックと、を含む画像のピクセルを含み、
前記畳み込みは、前記ピクセルブロックと重みのカーネルとの内積を含み、前記ピクセルブロック及び前記カーネルは、前記レーンのVGPRに記憶されている、
請求項1の方法。
【請求項6】
前記ピクセルブロックの第1の部分が前記レーンのVGPRに記憶されており、前記ピクセルブロックの第2の部分が前記ウェーブ内の別のレーンのVGPRに記憶されている場合に、前記レーンは、前記別のレーンのVGPRの前記第2の部分にアクセスする、
請求項5の方法。
【請求項7】
前記ピクセルブロックの第1の部分が前記レーンのVGPRに記憶されており、前記ピクセルブロックの第2の部分が前記レーンのVGPRに記憶されていない場合に、前記第2の部分のデータは、前記第1の部分のデータによって置き換えられる、
請求項5の方法。
【請求項8】
生成された出力データは、第2のウェーブのレーンによって生成された出力データに置き換えられる、
請求項7の方法。
【請求項9】
前記入力データは、画像のピクセルのチャネルデータであり、
前記畳み込みは、前記チャネルデータと重みのカーネルとの内積を含み、前記チャネルデータ及び前記カーネルは、前記レーンのVGPRに記憶されている、
請求項1の方法。
【請求項10】
単一命令複数データ(SIMD)ユニット上で演算を実行するための回路であって、
少なくとも1つのプロセッサと、
命令を記憶するメモリと、を備え、
前記命令は、前記少なくとも1つのプロセッサによって実行されると、
SIMDユニット上で実行されるウェーブのレーンが、入力データを前記レーンのベクトル汎用レジスタ(VGPR)にロードすることと、
前記レーンが、1コンピュータサイクル中に内積演算を実行し、出力データを生成することと、
を前記回路に行わせ、
前記出力データを生成することは、
前記入力データのデータ要素を畳み込み、中間データ要素を生成することと、
1つ以上の遷移演算を前記中間データ要素に適用して、前記出力データの出力データ要素を生成することと、を含む、
回路。
【請求項11】
前記命令は、
前記レーンが、前記1コンピュータサイクル中に内積演算を実行することを前記回路に行わせ、
前記内積演算を実行することは、
前記入力データの第2のデータ要素を畳み込み、第2の中間データ要素を生成することと、
前記1つ以上の遷移演算を前記第2の中間データ要素に適用して、前記出力データの第2の出力データ要素を生成することと、を含む、
請求項10の回路。
【請求項12】
前記1つ以上の遷移演算は、再フォーマット演算、整流演算又はクランプ演算のうち何れかである、
請求項10の回路。
【請求項13】
前記入力データは、畳み込みニューラルネットワークのレイヤへの入力であり、前記出力データは、前記レイヤの出力である、
請求項10の回路。
【請求項14】
前記入力データは、ピクセルと、前記ピクセルを中心とするピクセルブロックと、を含む画像のピクセルを含み、
前記畳み込みは、前記ピクセルブロックと重みのカーネルとの内積を含み、前記ピクセルブロック及び前記カーネルは、前記レーンのVGPRに記憶されている、
請求項10の回路。
【請求項15】
前記ピクセルブロックの第1の部分が前記レーンのVGPRに記憶されており、前記ピクセルブロックの第2の部分が前記ウェーブ内の別のレーンのVGPRに記憶されている場合に、前記レーンは、前記別のレーンのVGPRの前記第2の部分にアクセスする、
請求項14の回路。
【請求項16】
前記ピクセルブロックの第1の部分が前記レーンのVGPRに記憶されており、前記ピクセルブロックの第2の部分が前記レーンのVGPRに記憶されていない場合に、前記第2の部分のデータは、前記第1の部分のデータによって置き換えられる、
請求項14の回路。
【請求項17】
生成された出力データは、第2のウェーブのレーンによって生成された出力データに置き換えられる、
請求項16の回路。
【請求項18】
前記入力データは、画像のピクセルのチャネルデータであり、
前記畳み込みは、前記チャネルデータと重みのカーネルとの内積を含み、前記チャネルデータ及び前記カーネルは、前記レーンのVGPRに記憶されている、
請求項10の回路。
【請求項19】
単一命令複数データ(SIMD)ユニット上で演算を実行するための方法を実行するために少なくとも1つのプロセッサによって実行可能な命令を含むコンピュータ可読記憶媒体であって、
前記方法は、
SIMDユニット上で実行されるウェーブのレーンが、入力データを前記レーンのベクトル汎用レジスタ(VGPR)にロードすることと、
前記レーンが、1コンピュータサイクル中に内積演算を実行し、出力データを生成することと、を含み、
前記出力データを生成することは、
前記入力データのデータ要素を畳み込み、中間データ要素を生成することと、
1つ以上の遷移演算を前記中間データ要素に適用して、前記出力データの出力データ要素を生成することと、を含む、
コンピュータ可読記憶媒体。
【請求項20】
前記レーンが、前記1コンピュータサイクル中に内積演算を実行することを含み、
前記内積演算を実行することは、
前記入力データの第2のデータ要素を畳み込み、第2の中間データ要素を生成することと、
前記1つ以上の遷移演算を前記第2の中間データ要素に適用して、前記出力データの第2の出力データ要素を生成することと、を含む、
請求項19のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年9月29日に出願された米国特許出願第17/489,734号の利益を主張し、参照によって、本明細書に十分に記載されているように組み込まれる。
【背景技術】
【0002】
様々な計算タスクは、複数の段階(stages)における多次元データの処理を含む。例えば、畳み込みニューラルネットワーク(CNN)は、典型的には、複数のレイヤのアーキテクチャで構成されている。各レイヤでは、入力画像に対する畳み込み演算等の計算演算(computational operation)がレイヤの入力に適用され得る。そのような場合、結果として生じる畳み込み画像(又は中間画像)は、レイヤの出力を生成するために、遷移演算(transitional operations)によって更に処理され得る。遷移演算は、次のレイヤによる処理のために中間画像を準備するために、中間画像を再フォーマットすること、整流すること、及び/又は、クランプする(clamping)ことを含み得る。しかしながら、これらの遷移演算は、計算演算自体(例えば、畳み込み)を実行するのにかかる時間に対してかなりの時間を消費する。マルチレイヤ処理アーキテクチャによって使用される遷移演算の実行効率を高めるための技術が必要とされる。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
図1A】本開示の1つ以上の特徴が実装され得ることに基づく、例示的なデバイスのブロック図である。
図1B】本開示の1つ以上の特徴が実装され得ることに基づく、図1Aのデバイスによって使用可能なアクセラレータを示す例示的なシステムのブロック図である。
図2】本開示の1つ以上の特徴が実装され得ることに基づく、単一命令複数データ(SIMD)ユニットにおけるウェーブのレーンによって実行される例示的な内積演算(dot product operation)を示す図である。
図3】本開示の1つ以上の特徴が実装され得ることに基づく、CNNの例示的なレイヤ処理を示す図である。
図4】本開示の1つ以上の特徴が実装され得ることに基づく、畳み込み演算(図4)及び遷移演算(図5)を含む例示的な双対(デュアル)内積命令(dual dot product instruction)を示す図である。
図5】本開示の1つ以上の特徴が実装され得ることに基づく、畳み込み演算(図4)及び遷移演算(図5)を含む例示的な双対内積命令を示す図である。
図6】本開示の1つ以上の特徴が実装され得ることに基づく、SIMDユニット内のウェーブのレーンによって実行される例示的な内積演算を示す図である。
図7】本開示の1つ以上の特徴が実装され得ることに基づく、別の例示的な双対内積命令を示す図である。
図8】本開示の1つ以上の特徴が実装され得ることに基づく、双対内積命令の適用のための例示的な方法のフローチャートである。
【発明を実施するための形態】
【0005】
遷移演算、例えば、CNNのレイヤの入力データに適用されCNNのレイヤ出力を生成する畳み込み演算を含む内積演算を使用するシステム及び方法が、本願において開示される。本明細書で開示される内積命令は、双対出力データ(dual output data)、すなわち双対内積命令を生成するために、入力データの2つの要素に関して同時に実行され得る。双対内積命令は、1コンピュータサイクル中に実行可能であり、SIMDユニットによって並列に実行されるウェーブ(waves)のレーンによって実行することができる。これらのレーンは、ベクトル汎用レジスタ(VGPR)を利用して、それぞれの内積命令の実行に必要なデータを記憶する。本明細書で開示されるように、各レーンは、内積命令を実行するために、別のレーンのVGPRに記憶されたデータにアクセスすることもできる。
【0006】
本明細書で開示する態様は、SIMDユニット上で演算を実行するための方法について説明する。方法は、SIMDユニット上で実行されるウェーブのレーンによって、入力データをレーンのVGPRにロードすることと、次いで、レーンによって、1コンピュータサイクル中に内積演算を実行し、出力データを生成することと、を含むことができる。実行される内積演算は、入力データのデータ要素を畳み込み、中間データ要素を生成することと、中間データ要素に1つ以上の遷移演算を適用して、出力データの出力データ要素を生成することと、を含むことができる。方法は、レーンによって、1コンピュータサイクル中に第2の内積演算を実行することを更に含むことができる。第2の内積演算は、入力データの第2のデータ要素を畳み込み、第2の中間データ要素を生成することと、1つ以上の遷移演算を第2の中間データ要素に適用して、出力データの第2の出力データ要素を生成することと、を含むことができる。
【0007】
また、本明細書で開示する態様は、SIMDユニット上で演算を実行するための回路について説明する。回路は、少なくとも1つのプロセッサと、命令を記憶するメモリと、を備えることができる。命令は、少なくとも1つのプロセッサによって実行される場合に、回路に、SIMDユニット上で実行するウェーブのレーンによって、入力データをレーンのVGPRにロードさせ、レーンによって、1コンピュータサイクル中に内積演算を実行させ、出力データを生成させることができる。実行される内積演算は、入力データのデータ要素を畳み込み、中間データ要素を生成することと、中間データ要素に1つ以上の遷移演算を適用して、出力データの出力データ要素を生成することと、を含むことができる。更に、命令は、回路に、レーンによって、1コンピュータサイクル中に第2の内積演算を実行させることができる。第2の内積演算は、入力データの第2のデータ要素を畳み込み、第2の中間データ要素を生成することと、1つ以上の遷移演算を第2の中間データ要素に適用して、出力データの第2の出力データ要素を生成することと、を含むことができる。
【0008】
更に、本明細書で開示する態様は、SIMDユニット上で演算を実行するための方法を実行するために少なくとも1つのプロセッサによって実行可能な命令を備える非一時的なコンピュータ可読記憶媒体について説明する。方法は、SIMDユニット上で実行されるウェーブのレーンによって、入力データをレーンのVGPRにロードすることと、レーンによって、1コンピュータサイクル中に内積演算を実行し、出力データを生成することと、を含むことができる。実行される内積演算は、入力データのデータ要素を畳み込み、中間データ要素を生成することと、中間データ要素に1つ以上の遷移演算を適用して、出力データの出力データ要素を生成することと、を含むことができる。方法は、レーンによって、1コンピュータサイクル中に第2の内積演算を実行することを更に含むことができる。第2の内積演算は、入力データの第2のデータ要素を畳み込み、第2の中間データ要素を生成することと、1つ以上の遷移演算を第2の中間データ要素に適用して、出力データの第2の出力データ要素を生成することと、を含むことができる。
【0009】
図1Aは、本開示の1つ以上の特徴が実装され得ることに基づく、例示的なデバイス100Aのブロック図である。機器100Aは、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータであり得る。デバイス100Aは、プロセッサ102と、加速処理ユニット(APU)116と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100Aは、入力ドライバ112及び出力ドライバ114を含むことができる。一態様では、デバイス100Aは、図1に示されていない追加の構成要素を含むことができる。
【0010】
プロセッサ102は、中央処理装置(CPU)又はCPUの1つ以上のコアを含むことができる。グラフィックス処理装置(GPU)を表すAPU116は、APUの1つ以上のコアを含むことができる。プロセッサ102及びAPU116は、同じダイ上又は別のダイ上に位置してもよい。メモリ104は、プロセッサ102と同じダイ上に位置してもよいが、プロセッサ102とは別に位置し得る。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ、又は、それらの組み合わせ)を含むことができる。
【0011】
ストレージ106は、固定又はリムーバブルストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含むことができる。入力デバイス108は、例えば、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号を受信するための無線ローカルエリアネットワークカード)を含むことができる。出力デバイス110は、例えば、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号を送信するための無線ローカルエリアネットワークカード)を含むことができる。
【0012】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、入力デバイス108からプロセッサ102への入力の受信を容易にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102から出力デバイス110への出力の送信を容易にする。一態様では、入力ドライバ112及び出力ドライバ114はオプションの構成要素であり、デバイス100Aは、入力ドライバ112及び出力ドライバ114が存在しない場合に同じように動作することができる。
【0013】
APU116は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け取り、それらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、及び/又は、ディスプレイ(出力デバイス110)に出力を提供するように構成することができる。以下で更に詳細に説明するように、APU116は、例えばSIMDパラダイムに従って計算を実行するように構成された1つ以上の並列処理ユニットを含むことができる。したがって、本明細書では、様々な機能がAPU116によって又はAPU116と併せて実行されるものとして説明されているが、様々な代替例では、APU116によって実行されるものとして説明される機能は、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、例えばディスプレイにグラフィック出力を提供するように構成することができる同様の能力を有する他のコンピューティングデバイスによって、追加的又は代替的に実行することができる。処理システムがSIMDパラダイムに従って処理タスクを実行することができるか否かにかかわらず、処理システムは、本明細書で説明される機能を実行するように構成され得る。
【0014】
図1Bは、本開示の1つ以上の特徴が実装され得ることに基づく、図1Aのデバイスによって使用可能な例示的なシステム100Bのブロック図である。図1Bは、APU116上での処理タスクの実行を更に詳細に示す。プロセッサ102は、プロセッサ102による実行のための1つ以上のモジュールをメモリ104内に維持することができる。モジュールは、オペレーティングシステム120、カーネルモードドライバ122及びアプリケーション126を含む。これらのモジュールは、プロセッサ102及びAPU116の演算の様々な特徴を制御することができる。例えば、オペレーティングシステム120は、システムコール、すなわち、アプリケーションプログラミングインターフェース(API)を提供することができ、これは、アプリケーション126によって使用され、ハードウェアと直接インターフェースすることができる。カーネルモードドライバ122は、例えば、APU116の様々な機能にアクセスするためにプロセッサ102上で実行されるアプリケーション126にAPIを提供することによってAPU116の演算を制御することができる。また、カーネルモードドライバ122は、APU116の構成要素(以下で更に詳細に説明するSIMDユニット138等)を処理することによって実行するためのプログラムをコンパイルするジャストインタイムコンパイラを含むことができる。
【0015】
APU116は、並列処理又は逐次処理の何れか、及び、順序処理又は非順序処理の何れかを含む、グラフィックス演算及び非グラフィックス演算のためのコマンド及びプログラムを実行することができる。APU116は、プロセッサ102から受信したコマンドに基づいて、ピクセル及び/又は幾何学的計算(例えば、ディスプレイ(出力デバイス110)に画像をレンダリングする)を処理する演算等のグラフィックスパイプライン演算を実行するために使用することができる。また、APU116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する演算等のように、グラフィックス演算に関連しない処理演算を実行することができる。
【0016】
APU116は、ワークグループプロセッサ(WGP)132.1~132.Mを含むことができ、各WGP、例えば132.1は、SIMDパラダイムに従って並列にプロセッサ102の要求に応じて演算を実行することができる1つ以上のSIMDユニット、例えば138.1.1~138.1.Nを有することができる。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって、同じプログラムを異なるデータで実行することができる。一例では、各SIMDユニット、例えば138.1.1は、64個のレーン(すなわち、スレッド)を含むことができ、各レーンは、SIMDユニット内の他のレーンと同時に同じ命令を実行するが、異なるデータに対してその命令を実行する。レーンは、全てのレーンが所定の命令を実行する必要がない場合、予測でオフに切り替えることができる。また、予測は、分岐制御フローを有するプログラムを実行するために使用することができる。具体的には、制御フローが個々のレーンによって行われる計算に基づいている条件付き枝又は他の命令を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスのシリアル実行が、任意の制御フローを可能にする。一態様では、WGP132.1~132.Mの各々は、ローカルキャッシュを有することができる。別の態様では、複数のWGPがキャッシュを共有することができる。
【0017】
WGP(例えば132.1)における実行の基本単位は、ワークアイテムである。典型的には、各ワークアイテムは、特定のレーンにおいて並列に実行することができるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMD、例えば138.1.1上で「ウェーブフロント(wavefront)」(又は「ウェーブ」)として同時に実行することができる。1つ以上のウェーブをワークグループ内で実行することができ、各ウェーブは、同じプログラムを実行するように指定されたワークアイテムの集合を含む。ワークグループは、ワークグループを構成するウェーブの各々を実行することによって、実行される。また、ウェーブは、単一のSIMDユニット上で逐次実行されてもよいし、異なるSIMDユニット138.1~138.N上で部分的に若しくは完全に並列に実行されてもよい。したがって、ウェーブは、単一のSIMDユニット(例えば138.1.1)上で同時に実行され得るワークアイテムの集合と考えることができる。したがって、プロセッサ102から受信したコマンドが、単一のSIMDユニット上でプログラムを同時に実行することができない程度に特定のプログラムを並列化すべきであることを示す場合、そのプログラムは、必要に応じて、2つ以上のSIMDユニット(例えば、138.1.1~138.1.N)上で並列化、同じSIMDユニット(例えば、138.1.1)上で直列化、又は、並列化と直列化の両方が可能なウェーブに分けることができる。スケジューラ136は、異なるWGP132.1~132.M及びそれらのそれぞれのSIMDユニット上で様々なウェーブをスケジューリングすることに関連する演算を実行するように構成され得る。
【0018】
WGP132.1~132.Mによって与えられる並列性は、例えば、ピクセル値に対する演算(例えば、フィルタ演算)、幾何学的データに対する演算(例えば、頂点変換)、及び、他のグラフィックス関連演算等のグラフィックス関連演算に適している。例えば、プロセッサ102上で実行されるアプリケーション126は、APU116によって実行される計算を含むことができる。アプリケーション126は、カーネルモードドライバ122によって提供されるAPIを使用して、処理コマンドをAPU116に発行することができる。次に、処理コマンドは、スケジューラ136に提供される。スケジューラ136は、処理コマンドを、並列実行のためにWGP132.1~132.Mに割り当てられる計算タスクに変換する。
【0019】
図2は、本開示の1つ以上の特徴が実装され得ることに基づく、SIMDユニット内のウェーブのレーンによって実行される例示的な内積演算200を示している。ウェーブ210の2つのレーン220.1~220.2の演算が図2に示されている。レーンは、64個のVGPR230にアクセスすることができ、各レジスタは、例えば4バイトを保持することができる。典型的には、レーンのVGPRの一部(例えば、230.1~230.3)は、演算が実行される入力データを記憶するためにレーンによって使用されてもよく、他のレジスタ(例えば、230.63)は、演算の結果を記憶するためにレーンによって使用され得る。ウェーブのレーンのVGPR230に記憶されるデータは、レーンによって並列演算が実行される任意の多次元データであってもよい。例えば、レーン220.1のVGPR230.2は、画像の4つの隣接ピクセルを保持することができ、各ピクセル値はバイトによって表される。別の例では、レーン220.1のVGPR230.2は、ピクセルの4つの成分を保持することができ、各成分は、画像のチャネル(例えば、RGB(赤、青、緑)カラーモデルの3つのチャネル及び透明チャネル)に対応し、各成分値はバイトによって表される。前者の例では、レーン1 220.1の連続するVGPR230.1~230.3は、画像の4×3ピクセルブロックを保持することができる。画像内の次の4×3ピクセルブロックは、レーン2 220.2のVGPR230.1~230.3によって保持することができる。
【0020】
一態様では、レーンを使用して、画像に対して畳み込み演算を実行することができる。畳み込み演算は、画像のピクセルブロックに重みのカーネルを乗算することを含む。例えば、画像は、3×3カーネル240で畳み込まれてもよく、すなわち、各ピクセルに対して、内積が、カーネルの要素と、画像内のピクセルの位置を中心とする3×3ピクセルブロックと、の間に適用される。したがって、レーン1 220.1が画像IのピクセルI(x,y)250に対して畳み込み演算を実行する場合、まず、レーン220.1は、カーネル240と、ピクセル250を中心とする3×3ピクセルブロックと、にアクセスしなければならない。これらのデータは、(典型的にはそれぞれのWGP132によって)レーンのVGPRにロードされ、演算中の高速アクセスを可能にすることができる。例えば、上述したように、4×3×3ピクセルの画像領域は、レーン1のVGPR230.1~230.3に記憶され得る。例えば、ピクセルI(x,y)250を畳み込むために、以下の内積演算を使用して、ピクセル250を中心とする3×3ピクセルブロック260にカーネルw240が乗算される。
【0021】
【数1】

内積の結果I’(x,y)は、次いで、出力(畳み込み)画像ピクセルを記憶するために使用されるレーン1のVGPRに記憶され得る。例えば、VGPR230.63は、図2に示すように、その第2のバイト270にI’(x,y)を記憶するために使用することができる。同様に、レーン1のVGPR230.2内の他のピクセルは、カーネル240を用いて畳み込まれ得る。例えば、ピクセルI(x,y)250の右側のピクセル、すなわち、VGPR230.2の第3のバイトに記憶されるピクセルは、畳み込まれ、VGPR230.63の第3のバイトに記憶される、結果として生じる内積を有し得る。
【0022】
図3は、本開示の1つ以上の特徴が実装され得ることに基づく、CNNの例示的なレイヤ処理を示している。概して、レイヤ320の入力は、3次元(3D)ボリューム又は2次元(2D)行列等のような、整数又は浮動小数点数の多次元配列であり得る。図3に示されるように、レイヤ320の入力310は、画像の各ピクセルが8ビット整数であり得る2D画像の1つのチャネルである。レイヤ320の出力380は、同じサイズ又は異なるサイズであり得る別の2D画像である。レイヤ320の入力に典型的に適用される演算子は、畳み込み演算子340と、再フォーマット演算子350、整流演算子360及びクランプ演算子370等の遷移演算子と、を含む。したがって、入力画像310の各ピクセル315について、畳み込み演算子は、ピクセル315の中心にあるピクセルブロック316とカーネル330との間に内積を適用し、対応する畳み込みピクセルをもたらす。このような内積は、図2を参照して説明したように、レーンによって実行することができる。画像310の畳み込みピクセルの各々に対して遷移演算が実行され、出力画像380(CNNの次のレイヤに供給される)が以下のように生成される。各ピクセル、例えば315は、畳み込み340された後、再フォーマット350され得る。例えば、畳み込まれたピクセルは、2-14によって乗算され、これを最小の表現可能な浮動小数点(FP16)にスケーリングし、バイアス(FP16値)をこれに加えることができる。また、再フォーマットされたピクセルは、整流され得る(360)。例えば、整流線形ユニット(ReLU)を使用することができ、整流器への入力が負である場合、出力は0に設定され、そうでない場合、出力は入力と同じである。別の例では、漏洩整流線形ユニット(LReLU)を使用することができ、整流器への入力が負である場合、出力は4で除算され、そうでない場合、出力は入力と同じである。次に、整流されたピクセルをクランプして(370)、その値をある範囲内、例えば8ビット符号付き整数の-127~128の範囲内に設定することができる。クランプされたピクセルは出力ピクセル385となる。
【0023】
上述したように、畳み込み演算340の出力を、CNNの次のレイヤによる処理の準備ができている出力380に変換する遷移演算(再フォーマット350、整流360及びクランプ370)は、畳み込み340を実行するのにかかる時間を超えない場合に匹敵するかなりの計算時間を消費する。本明細書では、畳み込み演算及び遷移演算を1コンピュータサイクルで実行するように設計された命令が開示される。図4及び図5は、共に、以下に詳細に説明するように、1コンピュータサイクルにおいて画像の2つのピクセルに対して畳み込み演算(図4)及び遷移演算(図5)を実行するように設計された命令、すなわち双対内積命令を示している。
【0024】
図4及び図5は、本開示の1つ以上の特徴が実装され得ることに基づく、畳み込み演算(図4)及び遷移演算(図5)を含む、例示的な双対内積命令を示している。図4は、VGPR450の第2及び第3のバイトに記憶された2つの隣接ピクセル、すなわちピクセルI22及びピクセルI23に対して動作する双対内積命令を示している(図4において丸で囲まれている)。ピクセルI22及びI23の畳み込みを容易にするために、VGPR440、450、460に記憶されるデータは、2つの3×3ピクセルブロックを含む。第1のピクセルブロック(ピクセル{I11、I12、I13、I21、I22、I23、I31、I32、I33}を含む)は、ピクセルI22の畳み込みに使用される。第2のピクセルブロック(ピクセル{I12、I13、I14、I22、I23、I24、I32、I33、I34}を含む)は、ピクセルI23の畳み込みに使用される。3つの内積ユニット415、425、435は、それぞれ、第1のピクセルブロックの第1、第2及び第3のラインに対して内積演算を実行するために使用される。これらの内積の和は、ピクセルI22の畳み込み結果480を構成する。同様に、3つの内積ユニット410、420、430は、それぞれ、第2のピクセルブロックの第1、第2及び第3のラインに対して内積演算を実行するために使用される。これらの内積の和は、ピクセルI23の畳み込み結果470を構成する。内積ユニット410、415、420、425、430、435は、3×3カーネルの重み{w11、w12、w13、w21、w22、w23、w31、w32、w33}を使用することに留意されたい。例えば、内積ユニット410出力は、w11・I12+w12・I13+w13・I14である。
【0025】
図5に示すように、ピクセルI22の畳み込み結果480及びピクセルI23の畳み込み結果470に対して、遷移演算が更に適用される。図5において、ピクセルI22の畳み込み結果510及びピクセルI23の畳み込み結果540は、再フォーマット(515、545)され、整流(520、550)され、クランプ(530、560)され得る。例えば、ピクセルI22の畳み込み値510は、浮動小数点フォーマットに再フォーマットすることができる。すなわち、I22の整数値は、14ビットの小数を可能にするために、14ビットだけ右シフトされ得る。バイアス値505(例えば、浮動小数点数)は、再フォーマットされたI22の小数ビットに整列され、それに加えられ得る。バイアス値は、一定値又はそれぞれのレーンのVGPRに記憶された値の何れかであり得る。同様に、ピクセルI23540の畳み込み値を再フォーマットすることができ、バイアス値535をそれに加えてもよい。次いで、再フォーマットされた値は、シフト演算子522、552及びReLU(又はLReLU)演算子525、555を適用することによって、整流され得る(520、550)。次に、整流された値をクランプすることができ(530、560)、その結果、宛先VGPR570に記憶される出力ピクセル580、590が得られる。
【0026】
図6は、本開示の1つ以上の特徴が実装され得ることに基づく、SIMDユニットにおけるウェーブのレーンによって実行される例示的な内積演算を示している。図6は、境界に位置するピクセル(例えば、図4のピクセルI21又はI24)の畳み込み演算を示している。概して、画像を処理するために必要とされるウェーブの数は、ウェーブのサイズによって除算された画像において処理されるピクセルの数である。ウェーブのサイズは、レーンの数(例えば、64)×各レーンが処理のために割り当てられるピクセルの数(例えば、4ピクセル)である。2つのウェーブが図6に示されている。各ウェーブは、画像ラインのセグメントの処理に割り当てられる。例えば、ウェーブ-1 610は、256ピクセルの第1のセグメントを処理し、ウェーブ-2 650は、256ピクセルの第2のセグメントを処理する。ウェーブの各レーン(すなわち、ウェーブ-1 610の図示されたレーン620.1~620.64及びウェーブ-2 650のレーン-1 660.1)は、画像ラインの4つのピクセルを処理する。例えば、レーン1 620.1は、画像ライン630.2のピクセル1~4の処理に割り当てられ、レーン2 620.2は、画像ライン630.2のピクセル5~8の処理に割り当てられる。
【0027】
例えば図2に関して説明したように、ピクセルを畳み込むために、レーンは、ピクセルを中心とするピクセルブロックへのアクセスを必要とする。したがって、レーンは、そのVGPRに、(画像ライン630.2内の)畳み込みを計算しなければならない4つのピクセルだけでなく、(画像ライン630.1内の)上の4つのピクセル及び(画像ライン630.3内の)下の4つのピクセルも記憶している。しかしながら、境界ピクセルを畳み込むためにレーンによって必要とされるピクセルブロックは、それぞれのレーンによって記憶されないピクセルを含む。例えば、ライン630.2のピクセル4を畳み込むために、レーン1 620.1は、画像ライン630.1、630.2及び630.3のピクセル5へのアクセスを必要とする。一態様では、レーン(レーン1 620.1等)は、ウェーブ内の別のレーンのVGPR(ウェーブ1 610のレーン2 620.2のVGPR等)に記憶されたピクセルデータにアクセスすることができる。
【0028】
同様に、ライン630.2のピクセル256を畳み込むために、レーン64 620.64は、画像ライン630.1、630.2及び630.3のピクセル257へのアクセスを必要とする。しかしながら、ピクセル256は、ウェーブ1 610に割り当てられた画像セグメントの終わりにあるので、これらのピクセルは、レーン64にアクセスできない。したがって、一態様では、ピクセルブロック645の欠けている右列をメモリからロードする(すなわち、画像ライン630.1、630.2及び630.3のピクセル257をロードする)代わりに、レーン64 620.64は、(図6中の矢印646によって示されるように)画像ライン630.1、630.2及び630.3のピクセル256をピクセルブロック645の右列にパディングすることができる。このパディングは、メモリからレーン64のVGPRにデータをロードする必要性を省くが、画像ライン630.2のピクセル256等の境界ピクセルの畳み込み結果を汚染する。1つの解決策は、2つの隣接するウェーブに割り当てられた第1のセグメントと第2のセグメントとの間に2ピクセルのオーバーラップを維持することである。例えば、図6に示すように、ウェーブ-1のレーン-64のピクセル255及び256もロードされ、ウェーブ-2のレーン-1によって処理される。(図6の矢印686によって示されるように)画像ライン670.2内のピクセル255の畳み込みを計算するのに必要なピクセルブロック680を完成させるためにパディングも実行される場合、このピクセルの畳み込み結果も汚染される。しかしながら、ライン630.2のピクセル255及びライン670.2のピクセル256は、それらのそれぞれのレーン64 620.64及びレーン1 660.1における境界ピクセルではなく、したがって、それらのそれぞれの畳み込み結果は有効であることに留意されたい。一態様では、レーン1及びレーン64は畳み込み結果を切り替えることができる。すなわち、レーン64は、(ライン630.2の)256に対する汚染された畳み込み結果を、レーン1によって計算された(ライン630.2の)256に対する有効な結果で置き換えることができ(695)、レーン1は、(ライン670.2の)255に対する汚染された畳み込み結果を、レーン64によって計算された(ライン670.2の)255に対する有効な結果で置き換えることができる(690)。
【0029】
図7は、本開示の1つ以上の特徴が実装され得ることに基づく、別の例示的な双対内積命令を示している。また、図7に示す双対内積命令は、図5に示すような遷移演算を含む。一態様では、図7に示される命令は、2行4列のデータ行列に内積を実行するために適用され得る。例えば、この命令は、画像のチャネルにわたる畳み込み(すなわち、ポイントワイズ畳み込み)に適用され得る。図7は、8つのチャネルを有する画像に対して双対畳み込みを実行することを示す。したがって、第1のピクセルのチャネルは、1(1)、1(2)、1(3)及び1(4)で示される第1のVGPR715と、1(5)、1(6)、1(7)及び1(8)で示される第2のVGPR725と、に記憶される。第2のピクセルのチャネルは、2(1)、2(2)、2(3)及び2(4)で示される第1のVGPR735と、2(5)、2(6)、2(7)及び2(8)で示される第2のVGPR745と、に記憶される。4つの内積ユニット710、720、730、740は、双対内積演算を実行するために使用される。2つのユニット710、720は、第1のピクセルとカーネルとの内積、すなわち、w1・1(1)、w2・1(2)、w3・1(3)、w4・1(4)、w5・1(5)、w6・1(6)、w7・1(7)及びw8・1(8)の和を実行する。この内積は、遷移演算子(図5に示される、例えば、再フォーマット演算子515、整流演算子520及びクランプ演算子530)に供給され得る、第1のピクセル750の畳み込み結果を構成し、その結果は、レーンのVGPRのうち何れか、例えば580に記憶され得る。2つのユニット730、740は、第2のピクセルとカーネルとの内積、すなわち、w1・2(1)、w2・2(2)、w3・2(3)、w4・2(4)、w5・2(5)、w6・2(6)、w7・2(7)及びw8・2(8)の和を実行する。この内積は、遷移演算子(図5に示される、例えば、再フォーマット演算子545、整流演算子550及びクランプ演算子560)に供給され得る、第2のピクセル760の畳み込み結果を構成し、その結果は、レーンのVGPRのうち何れか、例えば590に記憶され得る。
【0030】
一態様では、第1の段階において、図4の双対内積命令を使用して、画像の各チャネル内のピクセルに畳み込みを適用し(すなわち、深さ方向畳み込み)、各チャネルの出力画像をもたらすことができる。次いで、第2の段階では、図7の双対内積命令を使用して、チャネルにわたって畳み込み(すなわち、ポイントワイズ畳み込み)を適用し、第1の段階によって生成された出力を入力として受信することができる。
【0031】
図8は、本開示の1つ以上の特徴が実装され得ることに基づく、双対内積命令の適用のための例示的な方法800のフローチャートである。SIMDユニット上で実行されるウェーブのレーンによって使用される方法800は、ステップ810において、入力データをレーンのVGPRにロードすることから始まる。次に、ステップ820において、1コンピュータサイクル中に内積演算を実行することができる。内積演算は、入力データのデータ要素を畳み込み、次に畳み込まれたデータ要素に遷移演算を適用することを含む。第2の内積演算は、ステップ830において1コンピュータサイクル中に実行することができる。第2の内積演算は、入力データの第2のデータ要素を畳み込み、次いで、畳み込まれた第2のデータ要素に遷移演算を適用することを含むことができる。ステップ820及びステップ830の内積演算は、図4図7を参照して説明したように、双対積命令(deal product instructions)を適用することによって実行することができる。
【0032】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
【0033】
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実装することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、実施形態の態様を実施するプロセッサを製造する。
【0034】
本明細書に提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。
図1A
図1B
図2
図3
図4
図5
図6
図7
図8
【国際調査報告】