(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022105467
(43)【公開日】2022-07-14
(54)【発明の名称】ニューラルネットワークアクセラレータランタイム再構成可能性
(51)【国際特許分類】
G06N 3/063 20060101AFI20220707BHJP
【FI】
G06N3/063
【審査請求】有
【請求項の数】22
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2021079197
(22)【出願日】2021-05-07
(11)【特許番号】
(45)【特許公報発行日】2021-11-05
(31)【優先権主張番号】17/141,187
(32)【優先日】2021-01-04
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】520171826
【氏名又は名称】エッジコーティックス ピーティーイー. リミテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ニコライ ネズ
(72)【発明者】
【氏名】ハミド レザ ゾフーリ
(72)【発明者】
【氏名】オレグ カービン
(72)【発明者】
【氏名】アントニオ トーマス ネヴァド ビルチェス
(72)【発明者】
【氏名】サキャシンガ ダスグプタ
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160GA11
5B160MM20
(57)【要約】 (修正有)
【課題】ニューラルネットワークアクセラレータランタイム再構成可能性を利用した推論デバイス及びプログラムを提供する。
【解決手段】デバイス100は、複数の畳み込みモジュールと、複数の加算器モジュールと、蓄積メモリと、複数の畳み込みモジュールと、複数の加算器モジュール112A~112Dと、蓄積メモリを接続する複数の畳み込み出力インターコネクトの内の畳み込み出力インターコネクトを開閉する畳み込み出力インターコネクト制御モジュールと、を備える。ニューラルネットワーク推論は、少なくとも1つの畳み込み出力接続スキームに応じてデバイスを構成しながら実行される。畳み込み出力インターコネクト制御モジュールは、少なくとも1つの畳み込み出力接続スキームに応じて複数の畳み込み出力インターコネクトを構成する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
蓄積メモリと、
入力値に数学的演算を実行するように構成された複数の畳み込みモジュールと、
前記複数の畳み込みモジュールから出力された値を合計するように構成された複数の加算器モジュールと、
各畳み込みモジュールが、各加算器モジュールと、前記蓄積メモリとに直接接続を有し、各加算器モジュールが前記蓄積メモリに直接接続を有するように、前記複数の畳み込みモジュールと、前記複数の加算器モジュールと、前記蓄積メモリとを接続する複数の畳み込み出力インターコネクトと、
畳み込み出力接続スキームに応じて、畳み込み出力インターコネクトを開閉するように構成され、これにより、各畳み込みモジュールは、前記複数の畳み込み出力インターコネクトを通じた、前記蓄積メモリまたは前記複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる、畳み込み出力インターコネクト制御モジュールと、
を備える、デバイス。
【請求項2】
前記複数の畳み込みモジュールのそれぞれと通信し、前記入力値を格納する入力データメモリと、
前記複数の畳み込みモジュールの動作を同期させるように構成された1つまたは複数のシーケンサモジュールと、
をさらに備える、請求項1に記載のデバイス。
【請求項3】
前記入力データメモリおよび前記複数の畳み込みモジュールと通信し、複数のインデクスを含むラインバッファと、
各畳み込みモジュールが、各インデクスと、前記入力データメモリとに直接接続を有するように、前記複数のインデクスと、前記複数の畳み込みモジュールと、前記入力データメモリとを接続する複数の畳み込み入力インターコネクトと、
畳み込み入力接続スキームに応じて畳み込み入力インターコネクトを開閉するように構成され、これにより、各畳み込みモジュールは、前記複数の畳み込み入力インターコネクトを通じた、前記入力データメモリまたは前記複数のインデクスの1つに対する開直接接続が1を超えないようになる、畳み込み入力インターコネクト制御モジュールと、
をさらに備える、請求項2に記載のデバイス。
【請求項4】
前記蓄積メモリは、書き込み可能メモリブロックの蓄積メモリアロケーションである、請求項1から3のいずれか一項に記載のデバイス。
【請求項5】
前記書き込み可能メモリブロックは、再構成可能バンク幅を有する、請求項4に記載のデバイス。
【請求項6】
前記蓄積メモリアロケーションの各バンクは、前記書き込み可能メモリブロックの連続したバンクの仮想的な組み合わせである、請求項5に記載のデバイス。
【請求項7】
前記書き込み可能メモリブロックは、前記入力値を格納する、入力データメモリアロケーションをさらに含む、請求項4から6のいずれか一項に記載のデバイス。
【請求項8】
前記畳み込み出力接続スキームは、前記複数の加算器モジュールの内の共通加算器モジュールに対する開直接接続を有する、前記複数の畳み込みモジュールの内の1つを超える畳み込みモジュールを含む、請求項1から7のいずれか一項に記載のデバイス。
【請求項9】
ニューラルネットワークと、集積回路の構成とを取得する手順であって、前記集積回路は、複数の畳み込みモジュール、複数の加算器モジュール、蓄積メモリ、および前記複数の畳み込みモジュール、前記複数の加算器モジュール、および前記蓄積メモリを接続する複数の畳み込み出力インターコネクトの内の畳み込み出力インターコネクトを開閉するように構成された畳み込み出力インターコネクト制御モジュールを含む、手順と、
少なくとも1つの畳み込み出力接続スキームを決定する手順であって、これにより、各畳み込みモジュールは、前記複数の畳み込み出力インターコネクトを通じた、前記蓄積メモリまたは前記複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる、手順と、
前記集積回路が前記ニューラルネットワークの推論を実行するための集積回路命令であって、前記畳み込み出力インターコネクト制御モジュールに、前記少なくとも1つの畳み込み出力接続スキームに応じて前記複数の畳み込み出力インターコネクトを構成させる命令を含む、集積回路命令を生成する手順と、
を含む動作をコンピュータに実行させるプログラム。
【請求項10】
前記少なくとも1つの畳み込み出力接続スキームを決定する手順は、前記ニューラルネットワークと、前記集積回路の前記構成に基づく、請求項9に記載のプログラム。
【請求項11】
前記動作は、
前記ニューラルネットワークの推論時に使用されるタイルサイズを決定する手順をさらに含み、
前記少なくとも1つの畳み込み出力接続スキームを決定する手順は、前記タイルサイズにさらに基づく、請求項10に記載のプログラム。
【請求項12】
前記集積回路は、前記複数の畳み込みモジュールのそれぞれと通信する入力データメモリと、前記複数の畳み込みモジュールの動作を同期させるように構成されたシーケンサモジュールとをさらに含む、請求項10または11に記載のプログラム。
【請求項13】
前記動作は、
少なくとも1つの畳み込み入力接続スキームを決定する手順であって、これにより、各畳み込みモジュールは、複数の畳み込み入力インターコネクトを通じた、前記入力データメモリ、またはラインバッファに含まれる複数のインデクスの1つに対する開直接接続が1を超えないようになる、手順をさらに含み、
前記集積回路は、前記入力データメモリおよび前記複数の畳み込みモジュールと通信する前記ラインバッファと、前記複数のインデクス、前記複数の畳み込みモジュール、および前記入力データメモリを接続する複数の畳み込み入力インターコネクトの内の畳み込み入力インターコネクトを開閉するように構成された畳み込み入力インターコネクト制御モジュールとをさらに備え、
前記命令は、前記畳み込み入力インターコネクト制御モジュールに、前記少なくとも1つの畳み込み入力接続スキームに応じて、前記複数の畳み込み入力インターコネクトを構成させる命令をさらに含む、
請求項12に記載のプログラム。
【請求項14】
前記動作は、
前記ニューラルネットワークの推論時に使用されるカーネルサイズを決定する手順をさらに含み、
前記少なくとも1つの畳み込み入力接続スキームを決定する手順は、前記カーネルサイズにさらに基づく、
請求項13に記載のプログラム。
【請求項15】
前記蓄積メモリは、再構成可能バンク幅を有する書き込み可能メモリブロックの蓄積メモリアロケーションであり、
前記集積回路命令は、前記書き込み可能メモリブロックの前記再構成可能バンク幅を再構成する命令をさらに含む、
請求項10から14のいずれか一項に記載のプログラム。
【請求項16】
前記集積回路命令は、前記蓄積メモリアロケーションおよび入力データメモリアロケーションに対して、前記書き込み可能メモリブロックを割り当てる命令をさらに含む、請求項15に記載のプログラム。
【請求項17】
前記集積回路命令は、前記蓄積メモリアロケーションの各バンクが、前記書き込み可能メモリブロックの連続したバンクの仮想的な組み合わせであるように、前記蓄積メモリアロケーションに対して前記書き込み可能メモリブロックを割り当てる命令をさらに含む、請求項16に記載のプログラム。
【請求項18】
ニューラルネットワークの推論を実行する命令を受信する手順と、
少なくとも1つの畳み込み出力接続スキームに応じて複数の畳み込み出力インターコネクトを構成する手順であって、これにより、複数の畳み込みモジュールの内の各畳み込みモジュールは、前記複数の畳み込み出力インターコネクトを通じた、蓄積メモリまたは複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる、手順と、
前記ニューラルネットワークの推論を実行する手順と、
を含む動作をコンピュータに実行させるプログラム。
【請求項19】
前記動作は、少なくとも1つの畳み込み入力接続スキームに応じて複数の畳み込み入力インターコネクトを構成する手順であって、これにより、各畳み込みモジュールは、前記複数の畳み込み入力インターコネクトを通じた、入力データメモリ、またはラインバッファに含まれる複数のインデクスの1つに対する開直接接続が1を超えないようになる、手順をさらに含む、請求項18に記載のプログラム。
【請求項20】
前記動作は、前記蓄積メモリが書き込み可能メモリブロックの蓄積メモリアロケーションであるように、前記書き込み可能メモリブロックを割り当てる手順をさらに含む、請求項19に記載のプログラム。
【請求項21】
前記動作は、前記書き込み可能メモリブロックのバンク幅を再構成する手順をさらに含む、請求項20に記載のプログラム。
【請求項22】
前記動作は、前記蓄積メモリアロケーションの各バンクが、前記書き込み可能メモリブロックの連続したバンクの仮想的な組み合わせであるように、前記蓄積メモリアロケーションに対して前記書き込み可能メモリブロックを割り当てる手順をさらに含む、請求項20または21に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
[背景技術]
本発明は、ニューラルネットワークアクセラレータランタイム再構成可能性に関する。より具体的には、本発明の例示的実施形態は、ニューラルネットワークアクセラレータランタイム再構成可能性を利用した推論の構成と実行に関する。
【背景技術】
【0002】
集積回路等のチップ内に、より多くの計算リソースが搭載されるにつれて、計算能力のコストが下がっている。一方で、所与のチップの計算能力が常にあらゆるタスクに対して、完全に利用されているわけではない。したがって、単一のチップに複数のタイプのタスクが割り当てられる場合、チップはそのタスクの内、最もリソースを要するものに対応するような計算リソースで設計され得る。その特定の設計は、別のタスクの実行には効率的でない可能性がある。したがって、実行が喪失する虞がある。これは特に、種々のタイプのニューラルネットワーク推論を実行するように構成されたアクセラレータチップで生じやすい事態である。
【発明の概要】
【0003】
本発明の態様によると、蓄積メモリと、入力値に数学的演算を実行するように構成された複数の畳み込みモジュールと、上記複数の畳み込みモジュールから出力された値を合計するように構成された複数の加算器モジュールと、各畳み込みモジュールが、各加算器モジュールと、上記蓄積メモリとに直接接続を有し、各加算器モジュールが上記蓄積メモリに直接接続を有するように、上記複数の畳み込みモジュールと、上記複数の加算器モジュールと、上記蓄積メモリとを接続する複数の畳み込み出力インターコネクトと、畳み込み出力接続スキームに応じて、畳み込み出力インターコネクトを開閉するように構成され、これにより、各畳み込みモジュールは、上記複数の畳み込み出力インターコネクトを通じた、上記蓄積メモリまたは上記複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる、畳み込み出力インターコネクト制御モジュールと、を備える、デバイスが提供される。
【0004】
本発明の別の態様によると、コンピュータにより実行可能な命令が格納される、非一時的コンピュータ可読媒体であって、上記命令は上記コンピュータに、ニューラルネットワークと、集積回路の構成とを取得する手順であって、上記集積回路は、複数の畳み込みモジュール、複数の加算器モジュール、蓄積メモリ、および上記複数の畳み込みモジュール、上記複数の加算器モジュール、および上記蓄積メモリを接続する複数の畳み込み出力インターコネクトの内の畳み込み出力インターコネクトを開閉するように構成された畳み込み出力インターコネクト制御モジュールを含む、手順と、少なくとも1つの畳み込み出力接続スキームを決定する手順であって、これにより、各畳み込みモジュールは、上記複数の畳み込み出力インターコネクトを通じた、上記蓄積メモリまたは上記複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる、手順と、上記集積回路が上記ニューラルネットワークの推論を実行するための集積回路命令であって、上記畳み込み出力インターコネクト制御モジュールに、上記少なくとも1つの畳み込み出力接続スキームに応じて上記複数の畳み込み出力インターコネクトを構成させる命令を含む、集積回路命令を生成する手順と、を含む動作を実行させる、コンピュータ可読媒体が提供される。
【0005】
この態様はさらに、コンピュータプログラムの命令を実行するプロセッサにより実行される方法、および、当該方法を実行する装置を含んでよい。装置は、当該方法の動作を実行するように構成された各部を含み得る。
【0006】
本発明のさらに別の態様によると、集積回路により実行可能な命令が格納される、非一時的コンピュータ可読媒体であって、上記命令は上記集積回路に、ニューラルネットワークの推論を実行する命令を受信する手順と、少なくとも1つの畳み込み出力接続スキームに応じて複数の畳み込み出力インターコネクトを構成する手順であって、これにより、複数の畳み込みモジュールの内の各畳み込みモジュールは、上記複数の畳み込み出力インターコネクトを通じた、蓄積メモリまたは複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる、手順と、上記ニューラルネットワークの推論を実行する手順と、を含む動作を実行させる、コンピュータ可読媒体が提供される。
【0007】
この態様はさらに、コンピュータプログラムの命令を実行するプロセッサにより実行される方法、および、当該方法を実行する装置を含んでよい。装置は、当該方法の動作を実行するように構成された各部を含み得る。
【0008】
発明の概要は、本発明の実施形態の必要な特徴の全てを説明しているわけではない。上述の特徴のサブコンビネーションも本発明となり得る。
【図面の簡単な説明】
【0009】
【
図1】本発明の実施形態に係る、アクセラレータランタイム再構成可能性用のデバイスを示す。
【0010】
【
図2】本発明の実施形態に係る、畳み込み出力接続スキームに応じて構成されたデバイス構成を示す。
【0011】
【
図3】本発明の実施形態に係る、再構成可能書き込み可能メモリを有するアクセラレータランタイム再構成可能性用のデバイスを示す。
【0012】
【
図4】本発明の実施形態に係る、アクセラレータランタイム再構成可能性用の別のデバイスを示す。
【0013】
【
図5】本発明の実施形態に係る、畳み込み出力接続スキームおよび畳み込み入力接続スキームに応じて構成されたデバイスを示す。
【0014】
【
図6】本発明の実施形態に係る、畳み込み出力接続スキームおよび別の畳み込み入力接続スキームに応じて構成されたデバイスを示す。
【0015】
【
図7】本発明の実施形態に係る、アクセラレータランタイム再構成可能性用のシステムを示す。
【0016】
【
図8】本発明の実施形態に係る、推論用のアクセラレータランタイム再構成可能性により、デバイスを構成する動作フローを示す。
【0017】
【
図9】本発明の実施形態に係る、推論用の再構成可能メモリの割り当てを決定する動作フローを示す。
【0018】
【
図10】本発明の実施形態に係る、推論を実行しながら、アクセラレータランタイム再構成可能性によりデバイスを再構成する動作フローを示す。
【0019】
【
図11】本発明の実施形態に係る、推論を実行しながら、再構成可能メモリでデバイスを再構成する動作フローを示す。
【0020】
【
図12】本発明の実施形態に係る、アクセラレータランタイム再構成可能性を利用した推論の構成および実行用のハードウェア構成を示す。
【発明を実施するための形態】
【0021】
続いて、本発明の例示的実施形態を説明する。例示的な実施形態は、特許請求の範囲による本発明を限定しないものとし、実施形態に記載される特徴の組み合わせは、必ずしも本発明に不可欠ではない。
【0022】
ニューラルネットワーク推論の実行について、様々な並列度が存在し、計算効率向上のために利用可能である。特に、多くの計算リソースを擁するチップにより実行されるシンプルなタスクは、並列性を通じてそのリソースをより利用可能である。一方で、最高性能のチップは、限定数の利用可能な並列度を活用するように最適化された、固定アーキテクチャを持ち、したがって、全ての並列度に効率的にサポートすることはできなくなる。したがって、シンプルなタスクを強力なチップ上で実行することは、計算リソース利用の減少、延いては性能および電力効率の低下につながり得る。
【0023】
一方で、フィールドプログラマブルゲートアレイ(FPGA)等の、完全なアーキテクチャ再構成が可能なチップが存在する。当該チップは、各特定のタスクのために再構成可能である。しかし、そのようなチップを実際に再構成するのに必要なリソースは、タスク中の全計算リソースの利用におけるリソース貯蓄分を超えてしまうことが多い。さらに、FPGAは、高粒度再構成可能性により高い柔軟性を提供するが、これによりそのピーク計算性能は、同様のチップサイズの特定用途向け集積回路(ASIC)と比較して限定される。
【0024】
さらに、ニューラルネットワーク推論の実行時のアーキテクチャ再構成が求められている。アクセラレータチップのオンチップメモリサイズに適応するため、推論時に、ニューラルネットワークの層は、「タイル」に分配され得る。計算モジュールにより、複数の入力タイルが並列に計算可能である。しかし、これが効率的に作用するのは、行と列のサイズの大きい、最初の数層のみであり得る。
【0025】
より計算モジュールを利用する別の論理的方法として、並列に複数の入力チャネルタイルを計算することが挙げられる。しかし、これは通常、データ依存性により不能である。即ち、チャネルを計算する1つの計算モジュールの入力値は、別のチャネルを計算する別の計算モジュールにより計算される出力値であり得るので、当該出力値をオンチップメモリに書き込み、その後再度それを入力値として読み出すことが必要となる。
【0026】
より計算モジュールを利用する別の論理的方法として、複数の出力チャネルタイルを並列に計算することが挙げられる。しかし、これは望ましくなくなり得る。入力値および重み値が8ビットであり得るが、出力値が32ビットとなり得、したがって、別の形態の並列性よりも極めて多くのメモリが必要となるためである。
【0027】
これらの問題および要望に対処するために、アクセラレータ等のニューラルネットワーク推論を実行するためのデバイスは、その計算モジュールと、そのオンチップメモリとの間に、オンザフライで計算モジュール出力を蓄積し、オンチップメモリに対する余分な読み書きを避けるための、「低減インターコネクト」を有し得る。低減インターコネクトは、「選択」信号に応じて、計算モジュールと、オンチップメモリと、その間のあらゆるものとの間に、ランタイム推論タスクまたは当該タスクの一部が効率的になるように、接続を構築する。
【0028】
例えば、畳み込みニューラルネットワークの推論用のアクセラレータにおいて、低減インターコネクトは全ての畳み込みモジュールについて、蓄積メモリに対する直接アクセス、または特定の加算器を通じたアクセスの選択を可能とし得る。
【0029】
接続性を自由に選択できることで、畳み込みモジュールが完全に同期的に動作していれば、アクセラレータは並列に複数入力チャネルタイルを計算可能になり得る。完全な同期動作は、単一のシーケンサが、タスクに係る全ての畳み込みモジュールを制御することで構築し得る。
【0030】
低減インターコネクトの個別の接続は、推論の開始前に、回路交換方式で構築され得る。この場合、接続性の制御に「選択」信号が使用され得る。その結果、「ランタイム再構成可能性」が実現する。
【0031】
図1は、本発明の実施形態に係る、アクセラレータランタイム再構成可能性用のデバイス100を示す。デバイス100は、アクセラレータ等の、ニューラルネットワーク推論を実行するための集積回路である。デバイス100は、畳み込みモジュール110A、110B、110C、および110Dと、加算器モジュール112A、112B、112C、および112Dと、制御モジュール114と、低減インターコネクト115と、シーケンサモジュール117と、入力データメモリ122と、蓄積メモリ124と、を備える。
【0032】
畳み込みモジュール110A、110B、110C、および110Dは、入力データメモリ122と通信し、それぞれ入力データメモリ122からの入力値と、重み値とに、数学的演算を実行するように構成される。各畳み込みモジュールは、加算器モジュール112A、112B、112C、および112Dの内の1つまたは複数、または蓄積メモリ124に値を出力し得る。各畳み込みモジュールは、高さ(KH)×幅(KW)のカーネルサイズ、鉛直および水平ストライド、拡張、パッディング等のような、数学的演算の異なるパラメータに対する直接のサポートを提供してよい。デバイス100のいくつかの実施形態において、畳み込みモジュール110A、110B、110C、および110Dは、少なくとも1つの専用の深さごとの(depth-wise)畳み込みモジュールおよび少なくとも1つの点ごとの(point-wise)畳み込みモジュールを含む。デバイス100の他の実施形態は、汎用の畳み込みモジュールを含み、それは、モバイルネット型ニューラルネットワークの逆残余ブロック(Inverted Residual Blocks)等の、深さごとの畳み込みおよび点ごとの畳み込み層の組み合わせをサポートしてよい。
【0033】
加算器モジュール112A、112B、112C、および112Dは、低減インターコネクト115を通じて、畳み込みモジュール110A、110B、110C、および110Dに接続され、それぞれ、畳み込みモジュール110A、110B、110C、および110Dの内の1つまたは複数から出力された値を合計するように構成される。各加算器モジュールは、得られた合計を、蓄積メモリ124に出力し得る。加算器モジュールの入力および出力ビット幅は、あらゆる任意の値であり得る。
【0034】
制御モジュール114は、低減インターコネクト115と通信し、低減インターコネクト115を制御するように構成される。制御モジュール114は、畳み込みモジュール110A、110B、110C、および110Dの出力を配向するために、インターコネクトを開閉するように構成される。制御モジュール114は、ニューラルネットワークまたはニューラルネットワーク内の所定の層の推論時に、デバイス100の計算リソースを最大限に使用するように設計されたスキーム等のスキームに応じて、低減インターコネクト115を制御し得る。言い換えると、制御モジュール114は、畳み込み出力接続スキームに応じて畳み込み出力インターコネクトを開閉するように構成される。これにより、各畳み込みモジュールは、複数の畳み込み出力インターコネクトを通じた、蓄積メモリまたは複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる。
【0035】
低減インターコネクト115は、各畳み込みモジュールと、蓄積メモリ124との間、および各畳み込みモジュールと、各加算器との間の接続を可能とするように配置された複数のインターコネクトを含む。言い換えると、低減インターコネクト115は、各畳み込みモジュールが各加算器モジュールおよび蓄積メモリとの直接接続を有し、各加算器モジュールが蓄積メモリとの直接接続を有するように、複数の畳み込みモジュールと、複数の加算器モジュールと、蓄積メモリとを接続する、複数の畳み込み出力インターコネクトを含む。これらの接続は、全開放ではなく、各畳み込みモジュールは開直接接続が1を超えないように、むしろほとんど閉じている。畳み込みモジュールが所定のスキームで使用されなければ、その畳み込みモジュールは、低減インターコネクト115を通じた、開直接接続を有さなくなり得る。
【0036】
シーケンサモジュール117は、畳み込みモジュール110A、110B、110C、および110Dそれぞれと通信し、複数の畳み込みモジュールの動作を同期させるように構成される。例えば、シーケンサモジュール117は、同じ計算に係る各畳み込みモジュールを同期し得る。これにより、同じ入力インデクスに対応する出力値はこれらの畳み込みモジュールにより同時に生成され、加算器モジュール112A、112B、112C、および112Dの1つに送られて、蓄積される。
【0037】
入力データメモリ122は、複数の畳み込みモジュールのそれぞれと通信し、入力値を格納する。蓄積メモリ124は、畳み込みモジュール110A、110B、110C、および110Dおよび加算器モジュール112A、112B、112C、および112Dと通信し、そこから出力された値を受信し、格納する。この実施形態において、入力データメモリ122および蓄積メモリ124はいずれも、デバイス100のオンチップメモリのブロックである。オンチップメモリの各ブロックは、所定のサイズの、複数のバンクを含む。各ブロックは、1または2ポートメモリバンクの組として整理され得る。各ブロックは、対応する計算モジュール、ロードモジュール、および格納モジュールに露出した、リードおよびライトポートを有し得る。
【0038】
この実施形態において、シーケンサモジュール117および制御モジュール114は別個に設けられる。アクセラレータランタイム再構成可能性用のデバイスのいくつかの実施形態において、シーケンサモジュール117が制御モジュール114の機能を実行できる。別の実施形態は、シーケンサモジュール117および制御モジュール114の両方の機能を実行するように構成された1つの専用制御モジュールを有する。いくつかの実施形態において、畳み込みモジュールから蓄積メモリへの直接接続は、低減インターコネクト外であり得、さらなる実施形態では一切存在しなくてよい。これは、畳み込みモジュールが加算器モジュールのみにデータを送ることを意味する。
【0039】
図2は、本発明の実施形態に係る、畳み込み出力接続スキームに応じて構成されたデバイス200を示す。この例示的な実施形態において、デバイス200は、畳み込みモジュール210A、210B、210C、および210Dと、加算器モジュール212A、212B、212C、および212Dと、制御モジュール214と、低減インターコネクト215と、シーケンサモジュール217と、入力データメモリ222と、蓄積メモリ224と、を備える。畳み込みモジュール210A、210B、210C、および210Dと、加算器モジュール212A、212B、212C、および212Dと、制御モジュール214と、低減インターコネクト215と、シーケンサモジュール217と、入力データメモリ222と、蓄積メモリ224とは、以下の説明が異ならない限り、それぞれ
図1の畳み込みモジュール110A、110B、110C、および110Dと、加算器モジュール112A、112B、112C、および112Dと、制御モジュール114と、低減インターコネクト115と、シーケンサモジュール117と、入力データメモリ122と、蓄積メモリ124と実質的に同じ構造を有し、実質的に同じ機能を実行する。
【0040】
この実施形態において畳み込み出力接続スキームは、複数の加算器モジュールの内の共通加算器モジュールに対して開直接接続を有する、複数の畳み込みモジュールの内の1つを超える畳み込みモジュールを含む。より具体的には、この実施形態における畳み込み出力接続スキームでは、畳み込みモジュール210Aおよび畳み込みモジュール210Bが、加算器モジュール212Aに直接接続される。畳み込みモジュール210Cおよび畳み込みモジュール210Dは、加算器モジュールに接続されず、そのため非アクティブである。加算器モジュール212B、加算器モジュール212C、および加算器モジュール212Dは、畳み込みモジュールに接続されず、そのため非アクティブである。
【0041】
入力データメモリ222は、ニューラルネットワーク層232のタイル234Aおよび234Bからの入力値を、現在格納中である。これらのタイルは、入力のチャネル寸法に亘って存在する。この実施形態における畳み込み出力接続スキームによると、タイル234Aからの入力値が、畳み込みモジュール210Aにより計算され、タイル234Bからの入力値が、畳み込みモジュール210Bにより計算される。シーケンサモジュール217は、畳み込みモジュール210Aおよび210Bの数学的演算を同期する。これにより、値は同時に出力され、加算器モジュール212Aにより合計される。合計すると、加算器モジュール212Aは得られた合計を蓄積メモリ224に出力する。この得られた合計は、ニューラルネットワーク層236のタイル238の値である。
【0042】
図1および
図2の実施形態において、入力データメモリおよび蓄積メモリは別個のメモリブロックである。これは、入力値および蓄積値が、データ幅と総計について異なる要件を有する異なる種類のデータであるためである。重みメモリ等の別の種類のメモリについても同じことが当てはまり得る。これらメモリブロックは別個であるため、その中の未使用バンクは、別のブロックと共有不能である。
【0043】
データ種類毎の必要メモリサイズは、ニューラルネットワーク間、さらにはニューラルネットワークの層間で異なる。これにより、ある種類のメモリのブロックが十分利用されず、別の種類のメモリのブロックは十分にまたは過剰に利用される。
【0044】
異なるメモリブロック間で、データ幅は異なり得る。各メモリブロックが、当該メモリブロックが格納するように構成された値に一致するデータ幅を持つためである。したがって、未使用バンクを共有しようとするあらゆる試みがさらに複雑化する。
【0045】
これらの問題および要望に対処するために、アクセラレータ等のニューラルネットワーク推論を実行するデバイスは、あらゆる種類のデータを格納可能な、単一の書き込み可能メモリブロックを有し得る。各メモリは、単一のメモリブロック上のアロケーションとして存在する。単一のメモリブロックを利用することで、未使用メモリバンクは、共有または別のメモリに再割り当てされ得る。したがって、デバイスは、かなり違いの大きいニューラルネットワークに対しても、メモリの大きな割合を利用しながら、推論を実行し得る。
【0046】
異なるデータ幅の値に対応するため、データ幅間の最小公分母がバンクサイズとして選択され得る。大きなデータ幅を要する値を格納するメモリに対して、メモリ割り当てにおいて連続したメモリバンクが仮想的に組み合わされ得る。バンクサイズ構成およびメモリ割り当ては、デバイスの構成または設定時に実行され得る。これは推論の実行前であり得る。
【0047】
図3は、本発明の実施形態に係る、再構成可能書き込み可能メモリ320を有する、アクセラレータランタイム再構成可能性用デバイス300を示す。この例示的な実施形態において、デバイス300は、畳み込みモジュール310A、310B、および310Cと、加算器モジュール312A、312B、および312Cと、制御モジュール314と、低減インターコネクト315と、シーケンサモジュール317と、書き込み可能メモリブロック320とを備え、書き込み可能メモリブロック320は、入力データメモリアロケーション322と、蓄積メモリアロケーション324と、重みメモリアロケーション326と、フリーメモリ328とを備える。畳み込みモジュール310A、310B、および310Cと、加算器モジュール312A、312B、および312Cと、制御モジュール314と、低減インターコネクト315と、シーケンサモジュール317と、入力データメモリアロケーション322と、蓄積メモリアロケーション324とは、以下の説明が異ならない限り、それぞれ
図1の畳み込みモジュール110A、110B、および110Cと、加算器モジュール112A、112B、および112Cと、制御モジュール114と、低減インターコネクト115と、シーケンサモジュール117と、入力データメモリ122と、蓄積メモリ124と実質的に同じ構造を有し、実質的に同じ機能を実行する。
【0048】
書き込み可能メモリブロック320は、デバイス300内の唯一のメモリブロックで、それぞれ異なるメモリに割り当てられた、複数のアロケーションを含む。デバイス300の蓄積メモリは、書き込み可能メモリブロック320の蓄積メモリアロケーション324として存在する。書き込み可能メモリブロック320はさらに、入力データメモリアロケーション322を含む。入力データメモリアロケーション322は入力値を格納する。書き込み可能メモリブロック320は再構成可能なバンク幅を有する。書き込み可能メモリブロック320はさらに、重みメモリアロケーション326を含む。重みメモリアロケーション326は重み値を格納する。
【0049】
この実施形態において、書き込み可能メモリブロック320は、8ビットのバンク幅用に構成される。入力データメモリアロケーション322は、8ビット値の入力データ値を格納する。重みメモリアロケーション326は、同じく8ビット値の重み値を格納する。一方で、蓄積メモリアロケーション324は、32ビット値である蓄積値を格納する。書き込み可能メモリブロック320の8ビットメモリバンク内に、32ビット値を格納するために、蓄積メモリアロケーション324は、32ビット仮想バンクを含み、各仮想バンクは、4つの連続した8ビットメモリバンクの仮想的な組み合わせである。言い換えると、蓄積メモリアロケーション324の各バンクは、書き込み可能メモリブロック320の連続したバンクの仮想的な組み合わせである。
【0050】
書き込み可能メモリブロック320は、計算用の入力データ値および重み値を提供するために、畳み込みモジュール310A、310B、および310Cと通信し、蓄積値を格納するためにさらに加算器モジュール312A、312B、および312Cと通信する。書き込み可能メモリブロック320から畳み込みモジュール310A、310B、および310Cへの共有通信ラインが示されているが、別の実施形態では、入力データおよび重み値用に、別個の通信ラインが存在し得る。
【0051】
別の実施形態では、デバイスの全データ種類に対応するために、バンク幅が乗算可能であるものとして、書き込み可能メモリブロックは、その他任意の種類のデータ用の、任意のその他メモリ用のアロケーションを含み得る。
【0052】
計算リソース利用をさらに増やすため、カーネル行寸法を考慮して、別の並列度を利用可能である。入力データメモリと、畳み込みモジュールとの間にラインバッファを追加することで、複数の畳み込みモジュールの利用を増やして、ニューラルネットワーク推論を実行可能である。ラインバッファのインデクスと、個別の畳み込みモジュールとの間の再構成可能接続を可能とするように、別のインターコネクトが、ラインバッファと、畳み込みモジュールとの間に提供され得る。各ラインバッファのインデクスは、カーネル行におけるインデクスに対応する。この畳み込み入力インターコネクトは、どの畳み込みモジュールにラインバッファのどのインデクスが提供されるかを構築し得る。
【0053】
図4は、本発明の実施形態に係る、アクセラレータランタイム再構成可能性用の別のデバイス400を示す。この例示的な実施形態において、デバイス400は、畳み込みモジュール410A、410B、410C、および410Dと、加算器モジュール412A、412B、412C、および412Dと、制御モジュール414と、低減インターコネクト415と、シーケンサモジュール417と、入力データメモリ422と、蓄積メモリ424と、ラインバッファ440と、ラインバッファインデクス442A、442B、442C、442D、442Eと、制御モジュール444と、とインターコネクト445と、を備える。畳み込みモジュール410A、410B、410C、および410Dと、加算器モジュール412A、412B、412C、および412Dと、制御モジュール414と、インターコネクト415と、シーケンサモジュール417と、入力データメモリ422と、蓄積メモリ424とは、以下の説明が異ならない限り、それぞれ
図1の畳み込みモジュール110A、110B、110C、および110Dと、加算器モジュール112A、112B、112C、および112Dと、制御モジュール114と、低減インターコネクト115と、シーケンサモジュール117と、入力データメモリ122と、蓄積メモリ124と実質的に同じ構造を有し、実質的に同じ機能を実行する。
【0054】
この実施形態において、入力データメモリ422および蓄積メモリ424は、
図1および
図2のメモリブロックと同様に示されているが、入力データメモリ422および蓄積メモリ424は、別個のメモリブロックであり得、または
図3の単一の書き込み可能メモリブロック320等の単一の書き込み可能メモリブロックのアロケーションとして存在し得る。
【0055】
ラインバッファ440は、入力データメモリ442と、畳み込みモジュール410A、410B、410C、および410Dと通信する。ラインバッファインデクス442A、442B、442C、442D、および442Eは、インターコネクト445を通じて、畳み込みモジュール410A、410B、410C、および410Dに接続される。ラインバッファ440は、畳み込みモジュール410A、410B、410C、および410Dに入力されたカーネルインデクスに対応する入力値を格納するように構成される。
【0056】
制御モジュール444は、インターコネクト445と通信し、インターコネクト445を制御するように構成される。制御モジュール444は、畳み込みモジュール410A、410B、410C、および410Dの入力を配向するために、インターコネクトを開閉するように構成される。制御モジュール444は、ニューラルネットワークまたはニューラルネットワーク内の所定の層の推論時に、デバイス400の計算リソースを最大限に使用するように設計されたスキーム等のスキームに応じて、インターコネクト445を制御し得る。言い換えると、制御モジュール444は、畳み込み入力接続スキームに応じて畳み込み入力インターコネクトを開閉するように構成される。これにより、各畳み込みモジュールは、複数の畳み込み入力インターコネクトを通じた、入力データメモリまたは複数のインデクスの1つに対する開直接接続が1を超えないようになる。
【0057】
インターコネクト445は、各畳み込みモジュールと、入力データメモリ424との間、および各畳み込みモジュールと、各ラインバッファインデクスとの間の接続を可能とするように配置された複数のインターコネクトを含む。言い換えると、インターコネクト445は、各畳み込みモジュールが、各インデクスおよび入力データメモリに直接接続を有するように、複数のインデクスと、複数の畳み込みモジュールと、入力データメモリとを接続する、複数の畳み込み入力インターコネクトを含む。これらの接続は、全開放ではなく、各畳み込みモジュールは開直接接続が1を超えないように、むしろほとんど閉じている。畳み込みモジュールが所定のスキームで使用されなければ、その畳み込みモジュールは、インターコネクト445を通じた、開直接接続を有さなくなり得るラインバッファインデクス442A、442B、442C、442D、および442Eと、畳み込みモジュール410A、410B、410C、および410Dとの間の接続性は、各レベルの全モジュールが、別のレベルの各モジュールに1つ接続を有するという点で、畳み込みモジュール410A、410B、410C、および410Dと、加算器モジュール412A、412B、412C、および412Dとの間の接続性と略同様である。
【0058】
この実施形態において、各インターコネクトを制御するために、個別の制御モジュールが存在する。別の実施形態では、単一の制御モジュールが、インターコネクト415および445の両方を制御するのに使用され得る。各インターコネクトは、複数の個別制御可能インターコネクトを備えるため、共通ソース、個別ソース、または複数のソースから、切替え信号を受信する可能性があり得る。いくつかの実施形態において、シーケンサモジュール417は、制御モジュール414および制御モジュール444の機能を実行可能である。別の実施形態は、シーケンサモジュール417、制御モジュール414、および制御モジュール444の機能を実行するように構成された1つの専用制御モジュールを有する。いくつかの実施形態において、畳み込みモジュールから入力データメモリへの直接接続は、インターコネクト外であり得、さらなる実施形態では一切存在しなくてよい。これは、畳み込みモジュールがラインバッファからのみ入力データを受信することを意味する。
【0059】
図5は、本発明の実施形態に係る、畳み込み出力接続スキームおよび畳み込み入力接続スキームに応じて構成されたデバイス500を示す。この例示的な実施形態において、デバイス500は、畳み込みモジュール510A、510B、510C、および510Dと、加算器モジュール512A、512B、512C、および512Dと、制御モジュール514と、低減インターコネクト515と、シーケンサモジュール517と、入力データメモリ522と、蓄積メモリ524と、ラインバッファ540と、ラインバッファインデクス542A、542B、542C、542D、および542Eと、制御モジュール544と、インターコネクト545と、を備える。畳み込みモジュール510A、510B、510C、および510D、加算器モジュール512A、512B、512C、および512D、制御モジュール514、低減インターコネクト515、シーケンサモジュール517、入力データメモリ522、蓄積メモリ524、ラインバッファ540、ラインバッファインデクス542A、542B、542C、542D、および542E、制御モジュール544、およびインターコネクト545は、以下の説明が異ならない限り、それぞれ
図1の畳み込みモジュール110A、110B、110C、および110Dと、加算器モジュール112A、112B、112C、および112Dと、制御モジュール114と、低減インターコネクト115と、シーケンサモジュール117と、入力データメモリ122と、蓄積メモリ124、並びに
図4のラインバッファ440と、ラインバッファインデクス442A、442B、442C、442D、および442Eと、制御モジュール444と、インターコネクト445と実質的に同じ構造を有し、実質的に同じ機能を実行する。
【0060】
この実施形態において、入力データメモリ522および蓄積メモリ524は、
図1および
図2のメモリブロックと同様に示されているが、入力データメモリ522および蓄積メモリ524は、別個のメモリブロックであり得、または
図3の単一の書き込み可能メモリブロック320等の単一の書き込み可能メモリブロックのアロケーションとして存在し得る。
【0061】
この実施形態における畳み込み入力接続スキームによると、ラインバッファインデクス542Aは、畳み込みモジュール510Aに直接接続され、ラインバッファインデクス542Bは畳み込みモジュール510Bに直接接続され、ラインバッファインデクス542Cは畳み込みモジュール510Cに直接接続される。ラインバッファインデクス542Dおよびラインバッファインデクス542Eは、畳み込みモジュールに接続されず、そのため非アクティブである。畳み込みモジュール510Dは、ラインバッファインデクスに接続されず、そのため非アクティブである。
【0062】
この実施形態における畳み込み出力接続スキームでは、畳み込みモジュール510A、畳み込みモジュール510B、および畳み込みモジュール510Cは全て、加算器モジュール512Aに直接接続される。畳み込みモジュール510Dは非アクティブであるため、加算器モジュールに接続されてもいない。加算器モジュール512B、加算器モジュール512C、および加算器モジュール512Dは、畳み込みモジュールに接続されず、そのため非アクティブである。
【0063】
入力データメモリ522は、ニューラルネットワーク層532のタイル534Aからの入力値を、現在格納中である。ラインバッファには、入力データメモリ522からの入力の5つの連続したインデクスがプリロードされている。ニューラルネットワーク層532の推論は、行幅が3、拡張係数が1のカーネルを使用して実行される。これは、入力インデクス1、2、および3と、カーネル行値との間でドット積演算が行われることを意味する。カーネル行は、カーネルインデクス539A、539B、および539Cを含む。この実施形態における畳み込み入力接続スキームによると、畳み込みモジュール510Aにより、第1入力インデクスが、複数入力チャネル用のカーネルインデクス539Aの値で乗算され、畳み込みモジュール510Bにより、第2入力インデクスが、複数入力チャネル用のカーネルインデクス539Bの値で乗算され、畳み込みモジュール510Cにより、第3入力インデクスが、複数入力チャネル用のカーネルインデクス539Cの値で乗算される。合計すると、加算器モジュール512Aは得られた合計を蓄積メモリ524に出力する。その後、第1入力インデクスが破棄され、入力データメモリ522から第6入力インデクスがロードされて、ラインバッファ540が左にシフトする。次のステップにおいて、入力値をカーネル行値で乗算するプロセスが繰り返される。今度は、入力インデクス2、3、および4と、出力とが同様に合計され、入力タイル534Aが完全に処理されるまで、ラインバッファ522は再度シフトされる。
【0064】
図6は、本発明の実施形態に係る、畳み込み出力接続スキームおよび別の畳み込み入力接続スキームに応じて構成されたデバイス600を示す。この例示的な実施形態において、デバイス600は、畳み込みモジュール610A、610B、610C、および610Dと、加算器モジュール612A、612B、612C、および612Dと、制御モジュール614と、低減インターコネクト615と、シーケンサモジュール617と、入力データメモリ622と、蓄積メモリ624と、ラインバッファ640と、ラインバッファインデクス642A、642B、642C、642D、および642Eと、制御モジュール644と、インターコネクト645と、を備える。畳み込みモジュール610A、610B、610C、および610D、加算器モジュール612A、612B、612C、および612D、制御モジュール614、低減インターコネクト615、シーケンサモジュール617、入力データメモリ622、蓄積メモリ624、ラインバッファ640、ラインバッファインデクス642A、642B、642C、642D、および642E、制御モジュール644、およびインターコネクト645は、以下の説明が異ならない限り、それぞれ
図1の畳み込みモジュール110A、110B、110C、および110Dと、加算器モジュール112A、112B、112C、および112Dと、制御モジュール114と、低減インターコネクト115と、シーケンサモジュール117と、入力データメモリ122と、蓄積メモリ124、並びに
図4のラインバッファ440と、ラインバッファインデクス442A、442B、442C、442D、および442Eと、制御モジュール444と、インターコネクト445と実質的に同じ構造を有し、実質的に同じ機能を実行する。
【0065】
この実施形態において、入力データメモリ622および蓄積メモリ624は、
図1および
図2のメモリブロックと同様に示されているが、入力データメモリ622および蓄積メモリ624は、別個のメモリブロックであり得、または
図3の単一の書き込み可能メモリブロック320等の単一の書き込み可能メモリブロックのアロケーションとして存在し得る。
【0066】
この実施形態における畳み込み入力接続スキームによると、ラインバッファインデクス642Aは、畳み込みモジュール610Aに直接接続され、ラインバッファインデクス642Cは畳み込みモジュール610Bに直接接続され、ラインバッファインデクス642Eは畳み込みモジュール610Cに直接接続される。ラインバッファインデクス642Dおよびラインバッファインデクス642Eは、畳み込みモジュールに接続されず、そのため計算時に非アクティブであるが、入力データの保持には使用される。畳み込みモジュール610Dは、ラインバッファインデクスに接続されず、そのため非アクティブである。
【0067】
この実施形態における畳み込み出力接続スキームでは、畳み込みモジュール610A、畳み込みモジュール610B、および畳み込みモジュール610Cは全て、加算器モジュール612Aに直接接続される。畳み込みモジュール610Dは非アクティブであるため、加算器モジュールに接続されてもいない。加算器モジュール612B、加算器モジュール612C、および加算器モジュール612Dは、畳み込みモジュールに接続されず、そのため非アクティブである。
【0068】
入力データメモリ622は、ニューラルネットワーク層632のタイル634Aからの入力値を、現在格納中である。ラインバッファには、入力データメモリ622からの入力の5つの連続したインデクスがプリロードされている。ニューラルネットワーク層632の推論は、行幅が3、拡張係数が2のカーネルを使用して実行される。これは、入力インデクス1、3、および5と、カーネル行値との間でドット積演算が行われることを意味する。カーネル行は、カーネルインデクス639A、639B、および639Cを含む。この実施形態における畳み込み入力接続スキームによると、畳み込みモジュール610Aにより、第1入力インデクスが、複数入力チャネル用のカーネルインデクス639Aの値で乗算され、畳み込みモジュール610Bにより、第3入力インデクスが、複数入力チャネル用のカーネルインデクス639Bの値で乗算され、畳み込みモジュール610Cにより、第5入力インデクスが、複数入力チャネル用のカーネルインデクス639Cの値で乗算される合計すると、加算器モジュール612Aは得られた合計を蓄積メモリ624に出力するその後、第1入力インデクスが破棄され、入力データメモリ622から第6入力インデクスがロードされて、ラインバッファ640が左にシフトする。次のステップにおいて、入力値をカーネル行値で乗算するプロセスが繰り返される。今度は、入力インデクス2、4、および6と、出力とが同様に合計され、入力タイル634Aが完全に処理されるまで、ラインバッファ622は再度シフトされる。
【0069】
図7は、本発明の実施形態に係る、アクセラレータランタイム再構成可能性用のシステムを示す。システムは、ホストプロセッサ701と、外部メモリ705と、集積回路700と、を備える。ホストプロセッサ701と、集積回路700とは、外部メモリ705と通信する。ホストプロセッサ701は、ニューラルネットワーク推論用の集積回路700の構成および実行のため、パラメータを決定し命令を生成する。次に、ホストプロセッサ701は、入力データ730を外部メモリ705に書き込む。ホストプロセッサ701はまた、集積回路700により実行されると、集積回路700にニューラルネットワーク推論を再構成および実行させる命令をコンパイルする。ホストプロセッサ701は、コンパイルされた命令709を集積回路700に送り、ニューラルネットワーク推論の再構成および実行のため、コンパイルされた命令709を集積回路700に実行させる。推論時に、集積回路700は、タイル等の1つまたは複数の部分における外部メモリ705から入力データ730を読み出す。集積回路700は、出力データ739の値を計算しながら、外部メモリ705に出力値739を書き込む。
【0070】
アクセラレータランタイム再構成可能性を促進するために、ホストプロセッサにより生成される命令は、推論動作に加え、1つまたは複数の構成動作を含む。これにより、単一の「設定」段階により時間がかかるFPGA等のプログラム可能デバイス、または「設定」段階を一切有さず、「実行」段階のみを持ち得る、典型的なASIC等の構成不能推論デバイスに対する命令と比較して、命令粒度が低減し得る。「設定」および「実行」段階を別個とすることで、再構成可能アクセラレータにおける畳み込みモジュールの数の増加とともに命令の複雑さが増すことが防止され得る。命令の生成時に、ホストプロセッサは、推論の実行に関して、畳み込みモジュールをどのように、どの順序で使用するかを決定し、さらにアクセラレータの再構成可能メモリブロックが、異なるメモリの異なるデータ種類間で共有されるように、どのように割り当てられるかをさらに決定し得る。
【0071】
別の実施形態では、命令の生成およびコンパイルを担うプロセッサは、集積回路に命令を送るホストプロセッサと別個とすることが可能である。
【0072】
図8は、本発明の実施形態に係る、推論用のアクセラレータランタイム再構成可能性により、デバイスを構成するための動作フローを示す。動作フローは、推論用のアクセラレータランタイム再構成可能性によりデバイスを構成する方法を提供し得る。方法は、以下に説明する
図12に示すホストプロセッサ等の、所定の動作を実行する各部を含むホストプロセッサにより実行され得る。方法はさらに、ホストプロセッサとは別個のプロセッサにより実行され得る。
【0073】
S850において、取得部は、ニューラルネットワークと、集積回路の構成とを取得する。取得された構成は、集積回路の詳細を、複数の畳み込みモジュールと、複数の加算器モジュールと、蓄積メモリと、複数の畳み込みモジュール、複数の加算器モジュール、および蓄積メモリを接続する複数の畳み込み出力インターコネクトの内の畳み込み出力インターコネクトを開閉するように構成された畳み込み出力インターコネクト制御モジュールと、を備えるものとして示す。ニューラルネットワークは、複数の層を有し得、各層は複数のノードおよび複数のエッジを有し、各ノードは数学的演算の表現を含む。ニューラルネットワークは、計算グラフとして取得され得る。ニューラルネットワークは、重み値の定義された組を含み得る。あるいは、取得部は、ニューラルネットワークとは別個に重み値を取得し得る。
【0074】
S852において、決定部は、ニューラルネットワークの推論に使用されるカーネルのサイズを決定する。決定部は、拡張等、カーネルの他の特徴を決定し得る。これらの値は構成不能で、ニューラルネットワーク構成の一部であるので、ニューラルネットワーク構成の一部として取得され得、決定部は、S850で取得されたニューラルネットワーク構成における値を単純に参照することで、これら特徴を決定し得る。
【0075】
S853において、決定部は、ニューラルネットワークの推論実行に集積回路を使用するために適切なタイルサイズを決定する。タイルは、入力データでの一部で、より多くの入力データのために、外部メモリをアクセスする前に、全タイルを計算するのに十分なメモリを集積回路が有するようなサイズであり得る。タイルサイズは、集積回路のオンチップメモリブロックの容量により決定され得る。決定部は、各寸法におけるタイルの数等の、タイルサイズに基づいた別の特徴を決定し得る。
【0076】
S860において、決定部は、ニューラルネットワークの推論の実行に集積回路を使用するのに適した、集積回路のオンチップメモリブロックの割り当てを決定する。集積回路が集積回路の計算モジュールと固定通信ラインを持つ別個のメモリブロックを有する場合、割り当ての選択肢は限られ得る。一方で、集積回路が単一の再構成可能メモリブロックを有する場合、多くの割り当て選択肢があり得る。
【0077】
S855において、決定部は、推論の実行時に使用される、集積回路用の少なくとも1つの畳み込み出力接続スキームを決定する。例えば、決定部は、少なくとも1つの畳み込み出力接続スキームを決定し得る。これにより、各畳み込みモジュールは、複数の畳み込み出力インターコネクトを通じた、蓄積メモリまたは複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる。決定部は、ニューラルネットワークと、集積回路の構成とに基づいて、少なくとも1つの畳み込み出力接続スキームを決定し得る。決定部は、畳み込みモジュールを最大限利用するために、タイルサイズ、各寸法におけるタイル数、および/または畳み込みモジュールの数にさらに基づいて、少なくとも1つの畳み込み出力接続スキームを決定し得る。決定部は、推論プロセス全体において使用される単一の畳み込み出力接続スキームを決定し得、またはニューラルネットワークのいくつかの層の群のそれぞれに対して1つずつ、複数の畳み込み出力接続スキームを決定し得る。
【0078】
S856において、決定部は、推論の実行時に使用される、集積回路用の少なくとも1つの畳み込み入力接続スキームを決定する。例えば、決定部は、少なくとも1つの畳み込み入力接続スキームを決定し得る。これにより、各畳み込みモジュールは、複数の畳み込み入力インターコネクトを通じた、入力データメモリまたはラインバッファに含まれる複数のインデクスの1つに対する開直接接続が1を超えないようになる。決定部は、畳み込みモジュールを最大限利用するために、カーネルサイズ、カーネル拡張、および/または畳み込みモジュールの数にさらに基づいて、少なくとも1つの畳み込み入力接続スキームを決定し得る。決定部は、推論プロセス全体において使用される単一の畳み込み入力接続スキームを決定し得、またはニューラルネットワークのいくつかの層の群のそれぞれに対して1つずつ、複数の畳み込み入力接続スキームを決定し得る。
【0079】
S858において、生成部は、カーネルサイズ、タイルサイズ、メモリ割り当て、およびスキームに応じて、集積回路が推論を実行するための命令を生成する。例えば、生成部は、集積回路がニューラルネットワークの推論を実行するための、集積回路命令を生成し得、命令は、畳み込み出力インターコネクト制御モジュールが、少なくとも1つの畳み込み出力接続スキームに応じて複数の畳み込み出力インターコネクトを構成するための命令を含む。生成部はさらに、畳み込み入力インターコネクト制御モジュールが少なくとも1つの畳み込み入力接続スキームに応じて複数の畳み込み入力インターコネクトを構成するための命令を生成し得る。命令を生成することはさらに、集積回路が推論を実行するために実行可能なフォーマットに、命令をコンパイルすることを含み得る。
【0080】
単一の再構成可能メモリブロックを有するデバイスについて、多精度サポートで利用され得る、多くの割り当て選択肢があり得る。単一の再構成可能メモリブロックの割り当ては、
図4のデバイス400等の、ロードバッファと、畳み込みモジュールとの間にインターコネクトを有するデバイスに対して、特に有用となり得る。単一の再構成可能メモリブロックを割り当てるために、メモリバンク幅は、所与のニューラルネットワークの推論を実行するためにサポートが必要な最小データ幅により決定され得る。いくつかの実施形態において、この最小データ幅は8ビットであるが、データ幅は任意の2の倍数であり得る。例として、メモリバンク幅を2まで低減すると、ビット幅として全ての2の倍数にサポート可能となる。デバイスの、畳み込みモジュール等の計算モジュールも、実用的に効率を得るために、そのような多精度サポートを要し得るが、これにはニューラルネットワークの層全体でのその任意の混合が含まれる。再構成可能メモリブロックはさらに、複数のニューラルネットワークの並列推論を可能にし得る。
【0081】
図9は、本発明の実施形態に係る、
図8のS860等の、推論用の再構成可能メモリの割り当てを決定する動作フローを示す。この動作フローの中の操作は、決定部または対応して名付けられたそのサブセクションによって実行されてよい。
【0082】
S963において、決定部またはそのサブセクションは、メモリの割り当てに対して、物理的なメモリバンク幅が十分であるか判定する。例えば、決定部は、入力データメモリアロケーションまたは蓄積メモリアロケーションに対して、メモリバンク幅が十分であるか判定し得る。バンク幅が十分であれば、動作フローは割り当てを決定するためS966に進む。バンク幅が不十分であれば、動作フローは、連続したバンクを仮想的に組み合わせるため、S964に進む。メモリバンク幅をサポートするために、判定されたメモリバンク幅は固定された物理的バンク幅と同一サイズまたは倍数である必要があり、書き込み可能メモリブロックを製造する前に判定される必要がある。入力データメモリアロケーションまたは蓄積メモリアロケーションに対するメモリバンク幅が、物理的バンク幅より小さければ、集積回路で別の書き込み可能メモリブロックを使用する必要がある。
【0083】
S964において、決定部またはそのサブセクションは、連続したバンクを仮想的に組み合わせて、仮想バンクを形成する。例えば、S963で判定されたメモリバンク幅が8ビットであるが、蓄積メモリが32ビット値のストレージを要する場合、決定部は、蓄積メモリアロケーションのために、仮想的に4つの連続した8ビットバンクを組み合わせて、1つの仮想32ビットバンクを形成する。これを利用するため、
図8のS858で生成された集積回路命令等の集積回路命令は、蓄積メモリアロケーションの各バンクが、書き込み可能メモリブロックの連続したバンクの仮想的な組み合わせであるように、蓄積メモリアロケーションに対して書き込み可能メモリブロックを割り当てる命令をさらに含む。
【0084】
S966において、決定部またはそのサブセクションは、メモリアロケーションのサイズを決定する。例えば、決定部は、タイルサイズ、値サイズ、値の数、書き込み可能メモリブロックの総容量、並列性の種類および並列度等に基づき得る、必要な容量に基づいて、メモリアロケーションのサイズを決定し得る。
【0085】
S967において、決定部またはそのサブセクションは、全てのメモリアロケーションが構成されたかを判定する。構成する必要のあるメモリアロケーションが残っていれば、動作フローは、S963の別のイテレーションに進む前に、次のアロケーションを選択する(S968)。未構成のメモリアロケーションがなければ、動作フローは終了する。蓄積メモリおよび入力データメモリのメモリアロケーションを実施するために、
図8のS858で生成された集積回路命令等の集積回路命令はさらに、蓄積メモリアロケーションおよび入力データメモリアロケーションに対して、書き込み可能メモリブロックを割り当てるための命令を含む。
【0086】
上述の実施形態では、各アロケーションのサイズは一度に1つずつ決定されるが、いくつかの実施形態においては、全てのアロケーションのサイズは同時に決定される。別の実施形態では、メモリの複数のアロケーションは、ニューラルネットワークの層の複数の群のそれぞれに対するアロケーション等、推論に対して決定される。
【0087】
命令が生成およびコンパイルされると、これらの命令は集積回路に送られる。命令における構成に基づいて、「設定」段階は、集積回路、またはそのインターコネクト制御モジュールに、「回路交換」式に、全ての畳み込みモジュールに関連付けられた信号を使用して、インターコネクトの、個別のインターコネクトを構成させ得る。「設定」段階は、集積回路またはメモリ制御モジュールに、全ての畳み込みモジュールに対するメモリバンクおよび接続性を構成し、メモリブロックをさらに設定させ得る。「設定」段階が完了すると、命令は集積回路に推論動作を実行させ得る。推論動作、または層の群により定義されたその部分が完了すると、全てのリソースが解放され、別の「設定」段階の準備ができる。
【0088】
図10は、本発明の実施形態に係る、推論を実行しながら、アクセラレータランタイム再構成可能性によりデバイスを再構成するための動作フローを示す。動作フローは、推論を実行しながら、アクセラレータランタイム再構成可能性によりデバイスを再構成するための方法を提供し得る。当該方法は、
図12に示される集積回路等の特定の動作を実行するための各部を含む集積回路により実行され得る。以下でこれを説明する。
【0089】
S1070において、受信部は、ニューラルネットワークの推論を実行する命令を受信する。命令は、
図8のS858で生成された命令等の、集積回路のインターコネクトまたは書き込み可能メモリブロックを再構成するための命令を含み得る。
【0090】
S1080において、割り当て部は、集積回路の書き込み可能メモリブロックを割り当てる。例えば、割り当て部は、蓄積メモリが書き込み可能メモリブロックの蓄積メモリアロケーションであるように、書き込み可能メモリブロックを割り当て得る。
【0091】
S1072において、再構成部は、集積回路の畳み込み出力低減インターコネクトを再構成する。例えば、再構成部は、少なくとも1つの畳み込み出力接続スキームに応じて複数の畳み込み出力インターコネクトを構成し得る。これにより、複数の畳み込みモジュールの内の各畳み込みモジュールは、複数の畳み込み出力インターコネクトを通じた、蓄積メモリまたは複数の加算器モジュールの1つに対する開直接接続が1を超えないようになる。再構成部は、
図1の制御モジュール114等の制御モジュールを含み得る。
【0092】
S1074において、再構成部は、集積回路の畳み込み入力インターコネクトを再構成する。例えば、再構成部は、少なくとも1つの畳み込み入力接続スキームに応じて複数の畳み込み入力インターコネクトを構成し得る。これにより、各畳み込みモジュールは、複数の畳み込み入力インターコネクトを通じた、入力データメモリまたはラインバッファに含まれる複数のインデクスの1つに対する開直接接続が1を超えないようになる。再構成部は、
図4の制御モジュール444等の制御モジュールをさらに含み得る。
【0093】
S1076において、推論部は、集積回路にニューラルネットワークの推論を実行させる。例えば、推論部は、ニューラルネットワークに応じて、入力データを読み込んで、出力データに処理するように、読み取りモジュール、畳み込みモジュール、加算器モジュール、書き込みモジュール等を調整し得る。入力データは、外部メモリから読み出され得、タイル等の部分で処理され、その後、出力データが外部メモリに書き込まれ得る。集積回路は再構成可能であるので、命令は、ニューラルネットワークの全層ではなく、層の群のみに対する現在の構成に応じて、推論を実行させ得る。命令は、別の構成に応じて、別の層の群の推論を実行させ得る。
【0094】
S1078において、再構成部は、全ての層の群が推定されたかを判定する。推定が必要な層の群が残っていれば、動作フローは、次の群に対する集積回路の再構成が始まるS1080の別のイテレーションに進む前に、次の層の群を選択し得る(S1079)。全ての層の群が推定されていれば、動作フローは終了する。同一の構成で全ての層が推定されれば、命令は、全ての層が単一の群に属するものとして扱い得る。
【0095】
図11は、本発明の実施形態に係る、
図10のS1080等の、推論を実行しながら、再構成可能メモリによりデバイスを再構成するための動作フローを示す。この動作フローの中の操作は、割り当て部または対応して名付けられたそのサブセクションによって実行されてよい。
【0096】
S1184において、割り当て部またはそのサブセクションは、構成がメモリアロケーション用の仮想バンクを含むか判定する。メモリアロケーションが仮想バンクを含む場合、動作フローは連続したバンクをロックするため、S1185に進む。メモリアロケーションが仮想バンクを含まない場合、動作フローはメモリ割り当てを形成するため、S1187に進む。
【0097】
S1185において、割り当て部またはそのサブセクションは、仮想バンクを形成するために、連続したバンクをロックする。例えば、S1182で構成されたメモリバンク幅が8ビットであるが、蓄積メモリが32ビット値のストレージを要する場合、割り当て部は、蓄積メモリアロケーションのために、4つの連続した8ビットバンクをロックして、1つの仮想32ビットバンクを形成する。
【0098】
S1187において、割り当て部またはそのサブセクションは、構成におけるサイズに応じて、メモリアロケーションを形成する。例えば、割り当て部は、メモリアロケーションの指定サイズに相当する所定数のメモリバンクを、メモリアロケーションに記録し得るモジュールに少なくとも示されるように指定し得る。例えば、割り当て部は、蓄積メモリが書き込み可能メモリブロックの蓄積メモリアロケーションであるように、書き込み可能メモリブロックを割り当て得る。割り当て部が仮想バンクを有する場合、割り当て部は、蓄積メモリアロケーションの各バンクが、書き込み可能メモリブロックの連続したバンクの仮想的な組み合わせであるように、蓄積メモリアロケーションに対して書き込み可能メモリブロックを割り当てる。
【0099】
S1188で、割り当て部またはそのサブセクションは、全てのメモリアロケーションが形成されたかを判定する。形成する必要のあるメモリアロケーションが残っていれば、動作フローは、S1184の別のイテレーションに進む前に、次のアロケーションを選択する(S1189)未形成のメモリアロケーションがなければ、動作フローは終了する。
【0100】
図12は、本発明の実施形態に係る、アクセラレータランタイム再構成可能性を利用した、推論の構成および実行用のハードウェア構成を示す。例示的なハードウェア構成は、外部メモリ1205および集積回路1200と通信するホストプロセッサ1201を含む。ホストプロセッサ1201、外部メモリ1205および集積回路1200は、オンプレミスアプリケーションを実行するサーバコンピュータまたはメインフレームコンピュータ等のホストコンピュータおよびそれを用いるホストクライアントコンピュータの一部であり得る。ホストプロセッサ1201、外部メモリ1205、および集積回路1200は、ユーザに対してアプリケーションを実行する、パーソナルコンピュータ、モバイルコンピュータ、または小規模演算デバイスの一部であり得る。
【0101】
本実施形態において、ホストプロセッサ1201は、様々な部の動作をプロセッサまたはプログラマブル回路に実行させるためにプロセッサまたはプログラマブル回路により実行可能であるプログラム命令を集合的に格納する1つまたは複数のコンピュータ可読記憶媒体を含むコンピュータプログラム製品等のロジック部として考えられ得る。ホストプロセッサ1201は、代替的に、アナログプログラマブル回路もしくはデジタルプログラマブル回路またはそれらの任意の組み合わせであり得る。ホストプロセッサ1201は、通信を通じて相互作用する物理的に分離されたストレージまたは回路から構成され得る。外部メモリ1205は、本明細書におけるプロセスの実行時にホストプロセッサ1201によるアクセスのためのデータを格納することが可能な揮発性または非揮発性のコンピュータ可読媒体であり得る。集積回路1200は、
図1のデバイス100、
図3のデバイス300、または
図4のデバイス400のような、ニューラルアーキテクチャ推論および再構成を実行可能なアクセラレータであり得る。
【0102】
ホストプロセッサ1201は、取得部1202と、決定部1203と、生成部1204と、を備える。外部メモリ1205は、ニューラルネットワーク1231、集積回路パラメータ1206、推論パラメータ1207、コンパイルパラメータ1208、および集積回路命令1209を含む。
【0103】
取得部1202は、ニューラルネットワーク推論の構成および実行用の情報を取得するホストプロセッサ1201の一部のである。例えば、取得部1202は、ニューラルネットワークおよび集積回路構成を取得するように構成され得る。取得部1202は、取得された情報を、ニューラルネットワーク1231および集積回路パラメータ1206として、外部メモリ1205に格納し得る。取得部1202は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連する名前で称され得る。
【0104】
決定部1203は、ニューラルネットワーク推論の構成および実行用の、接続スキーム、メモリアロケーション、タイルサイズ、カーネル特性等の各種決定を行うホストプロセッサ1201の一部である。決定時、決定部1203は、ニューラルネットワーク1231、集積回路パラメータ1206、および推論パラメータ1207にアクセスし得る。決定部1203は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連する名前で称され得る。
【0105】
生成部1204は、集積回路1200がニューラルネットワーク推論を実行するために実行する命令を生成およびコンパイルする、ホストプロセッサ1201の一部である。命令の生成およびコンパイル時、生成部1204は、ニューラルネットワーク1231、集積回路パラメータ1206、推論パラメータ1207、コンパイルパラメータ1208、および集積回路命令1209にアクセスし得る。生成部1204は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連する名前で称され得る。
【0106】
集積回路1200は、受信部1211と、割り当て部1221と、再構成部1214と、推論部1219と、書き込み可能メモリ1220と、を備える。
【0107】
受信部1211は、ニューラルネットワーク推論を実行する命令のような命令を受信する集積回路1200の一部である。命令の受信時、受信部1211は、集積回路命令1209にアクセスし得る、または生成部1204から命令を直接受信し得る。受信部1211は、命令を書き込み可能メモリ1220に格納し得る。上述のフローチャートにおいて説明したように、受信部1211は、追加の機能を実行するサブセクションを含み得る。そのようなサブセクションは、それらの機能に関連する名前で称され得る。
【0108】
割り当て部1221は、集積回路命令1209に応じて、書き込み可能メモリ1220を割り当てる、集積回路1200の一部である。例えば、割り当て部1221は、蓄積メモリアロケーションおよび/または入力データメモリアロケーションを含むように、書き込み可能メモリ1220を割り当て得る。割り当て部1221は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連する名前で称され得る。
【0109】
再構成部1214は、少なくともニューラルネットワークの層の群を推論するため、集積回路1200を再構成する集積回路1200の一部である。例えば、再構成部1214は、スキームに応じて出力インターコネクトおよび/または入力インターコネクトを再構成し得る。再構成部1214は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連する名前で称され得る。
【0110】
推論部1219は、集積回路にニューラルネットワークの推論を実行させる、集積回路1200の一部である。例えば、推論部1219は、読み取りモジュールと、畳み込みモジュール、加算器モジュール、書き込みモジュール等を調整して、入力データを読み取り、ニューラルネットワークに応じて出力データに処理し得る。推論部1219は、外部メモリ1205のニューラルネットワーク1231にアクセスし、入力データを読み取り得る。推論部1219は、上記フローチャートで記載されたように、追加の機能を実行するためのサブセクションを含んでよい。そのようなサブセクションは、それらの機能に関連する名前で称され得る。
【0111】
書き込み可能メモリ1220は、ニューラルネットワーク推論の実行時に受信部1211、割り当て部1221、再構成部1214、および推論部1219がアクセスするデータを格納可能な、RAM、フラッシュメモリ等のコンピュータ可読媒体、またはその他内蔵書き込み可能メモリであり得る。書き込み可能メモリ1220は、別個のメモリブロックによる複合体であり得、または任意の数の再構成可能メモリブロックの複合体であり得、あるいはそれらの任意の混合であり得る。
【0112】
別の実施形態では、命令の生成およびコンパイルを担うホストプロセッサは、命令を集積回路に送るホストプロセッサと別であり得る。
【0113】
上述の実施形態では、単一の外部メモリがホストプロセッサおよび集積回路に共有され、その両方に直接接続される。別の実施形態では、ホストプロセッサは独自の個別外部メモリを有する。そのような実施形態では、命令および構成は、バスを通じてホスト外部メモリからデバイス外部メモリに送られる。ホスト外部メモリと、デバイス外部メモリとが同一の物理的メモリである、
図12等の実施形態は、共有メモリSoCボードを使用して実施され得る。
【0114】
上述の実施形態では、受信部は、命令を書き込み可能メモリに格納する。別の実施形態では、DDR等の外部メモリに格納された命令が後にオンチップFIFOキューにロードされる。受信部は、外部DDRメモリから命令をロードし、命令が別のモジュールに消費される際にそれらをFIFOに格納する専用の命令取得モジュールを備え得る。
【0115】
他の実施形態において、ホストプロセッサは、本明細書におけるプロセスを実行すべくロジック機能を処理することが可能な任意の他のデバイスであり得る。外部メモリは、1つまたは複数のコンピュータ可読媒体であり得る。例えば、ホストプロセッサは、中央処理装置(CPU)であり得、外部メモリは、本明細書におけるプロセスの実行時にCPUによる実行のためにコンピュータ実行可能命令の全部または一部がコピーされ得るダイナミックランダムアクセスメモリ(DRAM)であり得る。
【0116】
装置がコンピュータである実施形態において、当該コンピュータにインストールされるプログラムは、当該コンピュータに、本発明の実施形態の装置またはそれらの1つまたは複数のセクション(モジュール、コンポーネント、要素等を含む)として機能させ、または、それらに関連付けられた操作を実行させ、および/または、当該コンピュータに本発明の実施形態の処理またはそれらのステップを実行させ得る。上記プログラムはプロセッサによって実行され、コンピュータに、本明細書に記載のフローチャートおよびブロック図のブロックの一部または全てに関連付けられた特定の操作を実行させ得る。
【0117】
本発明の様々な実施形態は、ブロックが(1)動作が実行されるプロセスの段階または(2)動作の実行を担う装置のセクションを表し得るフローチャートおよびブロック図を参照して説明され得る。特定の段階およびセクションは、専用回路、コンピュータ可読媒体に格納されたコンピュータ可読命令が供給されているプログラマブル回路、および/またはコンピュータ可読媒体に格納されたコンピュータ可読命令が供給されているプロセッサにより実装され得る。専用回路は、デジタルおよび/またはアナログハードウェア回路を含んでいてよく、集積回路(IC)および/またはディスクリート回路を含んでよい。プログラマブル回路は、例えばフィールドプログラマブルゲートアレイ(FPGA)、プログラマブルロジックアレイ(PLA)等といった、論理AND、OR、XOR、NAND、NOR、および他の論理演算、フリップ-フロップ、レジスタ、メモリ要素等を含む再構成可能なハードウェア回路を含み得る。
【0118】
本発明は、システム、方法および/またはコンピュータプログラム製品であり得る。コンピュータプログラム製品は、プロセッサに本発明の態様を実現させるためのコンピュータ可読プログラム命令を有する(または1つまたは複数の)コンピュータ可読記憶媒体を含み得る。
【0119】
コンピュータ可読記憶媒体は、命令実行デバイスにより使用される命令を保持および格納可能な物理的デバイスであり得る。コンピュータ可読記憶媒体は、例えば電子ストレージデバイス、磁気ストレージデバイス、光ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、または上述のものの任意の適切な組み合わせであり得るが、これらに限定されるものではない。コンピュータ可読記憶媒体のより具体的な例の非包括的な列挙は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリメモリ(EPROMまたはフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスク、パンチカードまたは記録された命令を有する溝内の隆起構造等の機械的に暗号化されたデバイス、および上述のものの任意の適切な組み合わせを含む。コンピュータ可読記憶媒体は、本明細書において用いられる場合、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバケーブルを通過するする光パルス)または、ワイヤを通じて伝送される電気信号等の一時的な信号それ自体とは解釈されない。
【0120】
本明細書において説明するコンピュータ可読プログラム命令は、例えばインターネット、ローカルエリアネットワーク、ワイドエリアネットワークおよび/または無線ネットワーク等のネットワークを介して、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスへダウンロードされ得るか、または、外部コンピュータもしくは外部ストレージデバイスへダウンロードされ得る。当該ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータおよび/またはエッジサーバを備え得る。各コンピューティング/処理デバイスにおけるネットワークアダプターカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に格納するためのコンピュータ可読プログラム命令を転送する。
【0121】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、例えばSmalltalk(登録商標)、C++等のオブジェクト指向プログラミング言語と、「C」プログラミング言語もしくは同様のプログラミング言語等の従来の手続き型プログラミング言語とを含む1つまたは複数のプログラミング言語の任意の組み合わせで書き込まれたソースコードもしくはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全て実行され得るか、スタンドアロンのソフトウェアパッケージとして部分的にユーザのコンピュータ上で実行され得るか、部分的にユーザのコンピュータ上で、かつ、部分的にリモートコンピュータ上で実行され得るか、または、リモートコンピュータもしくはサーバ上で全て実行され得る。後者のシナリオにおいて、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意の種類のネットワークを通じてユーザのコンピュータに接続されてもよく、接続は、外部コンピュータに対して(例えば、インターネットサービスプロバイダを用いるインターネットを通じて)行われてもよい。いくつかの実施形態において、例えば、プログミング可能論理回路、フィールドプログラマブルゲートアレイ(FPGA)またはプログラマブルロジックアレイ(PLA)を含む電子回路は、本発明の態様を実行するため、電子回路を適合させるコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行してよい。
【0122】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施形態には限定されない。上記実施形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた実施形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【0123】
特許請求の範囲、実施形態、または図面中において示した装置、システム、プログラム、および方法によって実行される各処理の動作、手順、段階、およびステージは、その順序が特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実行しうることに留意すべきである。特許請求の範囲、実施形態および図面において、処理フローを、「まず」または「次に」等の表現を用いて説明したとしても、この順で処理を実行することが必須であることを意味するものではない。
【外国語明細書】