(58)【調査した分野】(Int.Cl.,DB名)
前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合、前記目標演算操作の目標出力データを前記第1のメモリと第2のメモリに記憶するステップを含み、
前記第2のメモリは、前記プロセッサから離れて配置され、前記第1のメモリの記憶容量は、前記第2のメモリの記憶容量より小さいことを特徴とする請求項1に記載のデータ前処理方法。
前記目標演算操作は、1つ以上の演算操作を含み、各前記演算操作には、それぞれサブ目標入力データが対応され、前記目標演算操作及び第1のメモリの使用可能な記憶容量に基づいて、前記目標演算操作に対応する目標入力データを決定するステップは、更に、
前記第1のメモリの使用可能な記憶容量及び処理されるべき演算の各演算操作の融合属性に基づいて、融合可能な演算操作の数を決定し、融合数閾値を得ることと、
前記融合数閾値より大きくない選択された数の前記融合可能な演算操作の組み合わせを、前記目標演算操作とすることと、
前記選択された数の各融合可能な演算操作に対応するサブ目標入力データを、前記目標演算操作に対応する目標入力データとすることと、を含むことを特徴とする請求項1に記載のデータ前処理方法。
前記処理されるべき演算は、複数の演算層を含むニューラルネットワーク演算であり、各前記演算層それぞれは、1つの前記演算操作を表し、前記データ前処理方法は、更に、
前記ニューラルネットワーク演算の各演算層の間の接続関係に基づいて、各前記演算操作の融合属性を決定するステップを含むことを特徴とする請求項3に記載のデータ前処理方法。
前記目標演算操作の現在の演算操作によって出力された中間計算結果が前記目標演算操作の他の演算操作の入力データとされる必要がある場合、或いは、前記現在の演算操作によって出力された中間計算結果が他の目標演算操作の入力データとされる必要がある場合、前記現在の演算操作によって出力された中間計算結果を第1のメモリに記憶し、或いは、前記現在の演算操作によって出力された中間計算結果を第1のメモリと第2のメモリとに記憶するステップを更に含むことを特徴とする請求項3に記載のデータ前処理方法。
前記目標演算操作に対応する入力データは、複数の入力データブロックを含み、各前記目標入力データそれぞれは、1つ以上の前記入力データブロックを含み、前記目標演算操作に対応する目標入力データの数は、1つ以上であることを特徴とする請求項1乃至5の何れか1項に記載のデータ前処理方法。
前記目標演算操作以降の他の全ての演算操作に前記目標演算操作の目標入力データを使用する必要がない場合、前記目標演算操作を完了させた後、前記目標演算操作に対応する目標入力データの記憶アドレスの一部又は全部を、前記目標演算操作の目標出力データに割り当てるステップを更に含むことを特徴とする請求項1乃至5の何れか1項に記載のデータ前処理方法。
コンピュータ機器であって、第1のメモリと、第2のメモリと、プロセッサと、を含み、前記第1のメモリは、前記プロセッサに近接して配置され、前記第1のメモリと前記第2のメモリは、データの読み書きを行うことができ、前記第1のメモリ又は第2のメモリには、コンピュータプログラムが記憶されており、前記プロセッサは前記コンピュータプログラムを実行すると、請求項1乃至8の何れか1項に記載の方法のステップを実現することを特徴とするコンピュータ機器。
【発明の概要】
【発明が解決しようとする課題】
【0006】
そこで、上記の技術的な問題点に対して、演算中のI/O読み書きの操作回数を減らし、プロセッサの処理効率を向上させることができるデータ前処理方法、装置、コンピュータ機器及び記憶媒体を提供する必要がある。
【課題を解決するための手段】
【0007】
データ前処理方法であって、
第1のメモリの使用可能な記憶容量及び目標演算操作を取得するステップと、
目標演算操作及び第1のメモリの使用可能な記憶容量に基づいて、前記目標演算操作に対応する目標入力データ、即ち、前記目標演算操作に対応する全入力データの一部又は全部である目標入力データを決定するステップと、
前記目標演算操作及び前記目標入力データに基づいて、前記目標演算操作の目標出力データを決定するステップと、
前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合、前記目標演算操作の目標出力データをプロセッサに近接して配置された前記第1のメモリに記憶するステップと、を含むデータ前処理方法である。
【0008】
データ前処理装置であって、
第1のメモリの使用可能な記憶容量及び目標演算操作を取得するように構成される取得モジュールと、
前記目標演算操作及び前記第1のメモリの使用可能な記憶容量に基づいて、前記目標演算操作に対応する目標入力データを決定するように構成される入力決定モジュールと、
前記目標演算操作及び前記目標入力データに基づいて、前記目標演算操作の目標出力データを決定するように構成される出力決定モジュールと、
前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合、前記目標演算操作の目標出力データをプロセッサに近接して配置された前記第1のメモリに記憶するように構成される記憶割当モジュールと、を含むデータ前処理装置である。
【0009】
コンピュータ機器であって、第1のメモリと、第2のメモリと、プロセッサと、を含み、前記第1のメモリは、前記プロセッサに近接して配置され、前記第1のメモリと前記第2のメモリは、データの読み書きを行うことができ、前記第2のメモリには、コンピュータプログラムが記憶されており、前記プロセッサは前記コンピュータプログラムを実行すると、上記の方法のステップが実現される、ことを特徴とするコンピュータ機器である。
【0010】
プロセッサによって実行されると、上記の方法のステップが実現されるコンピュータプログラムが記憶されているコンピュータ可読記憶媒体である。
【0011】
上記のデータ前処理方法、装置、コンピュータ機器及び記憶媒体によれば、目標演算操作の目標出力データがそれ以降の他の演算操作の入力データである場合、目標演算操作に対応する目標出力データをプロセッサに近接した第1のメモリに記憶することができるため、目標出力データの読み取りの回数を減らすことによって、演算中のI/O読み書き操作がかかる時間を減らし、プロセッサの速度及び効率を向上させることができる。
【0012】
データ前処理方法であって、
メインメモリの使用可能な記憶容量、スレーブメモリの使用可能な記憶容量、及び目標演算操作を取得するステップと、
前記メインメモリの使用可能な記憶容量、前記スレーブメモリの使用可能な記憶容量、及び前記目標演算操作に基づいて、前記目標演算操作に対応する目標入力データを決定するステップと、
前記目標演算操作及び前記目標入力データに基づいて、前記目標演算操作に対応する目標出力データを決定するステップと、
前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合、前記目標出力データを前記メインメモリに対応して記憶するステップと、を含むデータ前処理方法である。
【0013】
一実施例において、前記メインメモリの使用可能な記憶容量、前記スレーブメモリの使用可能な記憶容量、及び前記目標演算操作に基づいて、前記目標演算操作に対応する目標入力データを決定するステップは、更に、
前記メインメモリの使用可能な記憶容量と各前記スレーブメモリの使用可能な記憶容量とを比較し、最も小さい使用可能な記憶容量を第1のメモリの使用可能な記憶容量とすることと、
前記第1のメモリの使用可能な記憶容量及び目標演算操作に基づいて、目標演算操作に対応する目標入力データを決定することと、を含む。
【0014】
一実施例において、前記目標演算操作は、1つ以上の演算操作を含み、各前記演算操作には、それぞれサブ目標入力データが対応され、前記目標演算操作及び第1のメモリの使用可能な記憶容量に基づいて、前記目標演算操作に対応する目標入力データを決定するステップは、更に、
前記第1のメモリの使用可能な記憶容量及び処理されるべき演算の各演算操作の融合属性に基づいて、融合可能な演算操作の数を決定し、融合数閾値を得ることと、
前記融合数閾値より大きくない選択された数の前記融合可能な演算操作の組み合わせを、前記目標演算操作とすることと、
前記選択された数の各融合可能な演算操作に対応するサブ目標入力データを、前記目標演算操作に対応する目標入力データとすることと、を含む。
【0015】
一実施例において、前記処理されるべき演算は、複数の演算層を含むニューラルネットワーク演算であり、各前記演算層それぞれは、1つの前記演算操作を表し、前記方法は、更に、
前記ニューラルネットワーク演算の各演算層の間の接続関係に基づいて、各前記演算操作の融合属性を決定するステップを含む。
【0016】
一実施例において、前記目標演算操作に対応する入力データは、複数の入力データブロックを含み、各前記目標入力データそれぞれは、1つ以上の前記入力データブロックを含み、前記目標演算操作に対応する目標入力データの数は、1つ以上である。
【0017】
一実施例において、前記目標演算操作は、1つ以上のサブ目標演算操作を含み、各前記サブ目標演算操作は、それぞれ1つの前記目標入力データに対応し、前記方法は、更に、
各前記サブ目標演算操作の目標入力データのデータ容量及び目標出力データのデータ容量に応じて、各前記サブ目標演算操作に必要とされる目標記憶容量をそれぞれ決定するステップと、
前記第1のメモリの使用可能な記憶容量及び現在のサブ目標演算操作に必要とされる目標記憶容量に基づいて、前記第1のメモリの残り記憶容量を決定するステップと、
前記第1のメモリの残り記憶容量及び前記現在のサブ目標演算操作以外の他のサブ目標演算操作に必要とされる目標記憶容量に応じて、前記サブ目標演算操作の数を決定するステップと、を含む。
【0018】
一実施例において、前記目標入力データは、第1の目標入力データと、第2の目標入力データとを含み、前記方法は、更に、
予め設定された演算割当規則に基づいて、前記メインメモリに対応する第1の目標入力データ、及び各前記スレーブメモリに対応する第2の目標入力データを決定するステップを含む。
【0019】
一実施例において、前記方法は、
前記メインメモリの使用可能な記憶容量及び前記第1の目標入力データのデータ容量に基づいて、前記第1の目標入力データの、前記メインメモリにおける記憶アドレスを決定するステップと、
各前記スレーブメモリの使用可能な記憶容量及び対応する前記第2の目標入力データのデータ容量に基づいて、各前記第2の目標入力データの、前記スレーブメモリにおける記憶アドレスをそれぞれ決定するステップと、を含む。
【0020】
一実施例において、前記目標出力データは、第1の目標出力データ及び第2の目標出力データを含み、前記目標演算操作及び前記目標入力データに基づいて、前記目標演算操作に対応する目標出力データを決定する前記ステップは、更に、
前記目標演算操作及び前記第1の目標入力データに基づいて、前記第1の目標出力データ、及び前記第1の目標出力データの、前記メインメモリにおける記憶アドレスを決定することと、
前記目標演算操作及び各前記第2の目標入力データに基づいて、各前記第2の目標出力データ、及び各前記第2の目標出力データの、対応する前記スレーブメモリにおける記憶アドレスをそれぞれ決定することと、
各前記第2の目標出力データに基づいて、各前記第2の目標出力データの、前記メインメモリにおける記憶アドレスをそれぞれ決定するステップと、を含む。
【0021】
一実施例において、前記方法は、更に、
前記スレーブ処理回路で実行された他の目標演算操作に前記第2の目標出力データを使用する必要がある場合、前記第2の目標出力データを前記スレーブ処理回路に対応するスレーブメモリに記憶するステップ、を含む。
【0022】
一実施例において、前記方法は、更に、
前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合、前記目標出力データを前記メインメモリ及び前記第2のメモリに対応して記憶するステップ、を含む。
【0023】
データ前処理装置であって、
メインメモリの使用可能な記憶容量、スレーブメモリの使用可能な記憶容量、及び目標演算操作を取得するように構成される取得モジュールと、
前記メインメモリの使用可能な記憶容量、前記スレーブメモリの使用可能な記憶容量、及び前記目標演算操作に基づいて、前記目標演算操作に対応する目標入力データを決定するように構成される入力決定モジュールと、
前記目標演算操作及び前記目標入力データに基づいて、前記目標演算操作に対応する目標出力データを決定するように構成される出力決定モジュールと、
前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合、前記目標出力データを前記メインメモリに対応して記憶するように構成される記憶割当モジュールと、を含む。
【0024】
一実施例において、前記データ前処理装置は、更に、前記メインメモリの使用可能な記憶容量と各前記スレーブメモリの使用可能な記憶容量とを比較し、最も小さい使用可能な記憶容量を第1のメモリの使用可能な記憶容量とするように構成される記憶容量決定モジュールを含む。
入力決定モジュールは、具体的には、前記第1のメモリの使用可能な記憶容量及び目標演算操作に基づいて、目標演算操作に対応する目標入力データを決定するように構成される。
【0025】
一実施例において、前記目標演算操作は、1つ以上の演算操作を含み、各前記演算操作には、それぞれサブ目標入力データが対応され、前記入力決定モジュールは、更に、
前記第1のメモリの使用可能な記憶容量及び前記処理されるべき演算の各演算操作の融合属性に基づいて、融合可能な演算操作の数を決定し、融合数閾値を得るように構成される融合決定ユニットと、
前記融合数閾値より大きくない選択された数の前記融合可能な演算操作の組み合わせを前記目標演算操作とし、前記選択された数の各融合可能な演算操作に対応するサブ目標入力データを前記目標演算操作に対応する目標入力データとするように構成される入力決定ユニットと、を含む。
【0026】
一実施例において、前記処理されるべき演算は、複数の演算層を含むニューラルネットワーク演算であり、各前記演算層それぞれは、1つの前記演算操作を表し、前記融合決定ユニットは、更に、前記ニューラルネットワーク演算の各演算層の間の接続関係に基づいて、各前記演算操作の融合属性を決定するように構成される。
【0027】
一実施例において、前記目標演算操作は、1つ以上のサブ目標演算操作を含み、各前記サブ目標演算操作は、それぞれ1つの前記目標入力データに対応し、前記目標演算操作に対応する全入力データは、複数の入力データブロックを含み、各前記目標入力データそれぞれは、1つ以上の前記入力データブロックを含み、前記目標演算操作に対応する目標入力データの数は、1つ以上であり、前記入力決定モジュールは、更に、
各前記サブ目標演算操作の目標入力データのデータ容量及び目標出力データのデータ容量に応じて、各前記サブ目標演算操作に必要とされる目標記憶容量をそれぞれ決定するステップと、
前記第1のメモリの使用可能な記憶容量及び現在のサブ目標演算操作に必要とされる目標記憶容量に基づいて、前記第1のメモリの残り記憶容量を決定するステップと、
前記第1のメモリの残り記憶容量及び前記現在のサブ目標演算操作以外の他のサブ目標演算操作に必要とされる目標記憶容量に応じて、前記サブ目標演算操作の数を決定するステップと、を含む。
【0028】
一実施例において、前記目標入力データは、第1の目標入力データと、第2の目標入力データとを含み、
前記入力決定モジュールは、更に、予め設定された演算割当規則に基づいて、前記メインメモリに対応する第1の目標入力データ及び各前記スレーブメモリに対応する第2の目標入力データを決定するように構成され、
前記記憶割当モジュールは、更に、前記メインメモリの使用可能な記憶容量及び前記第1の目標入力データのデータ容量に応じて、前記第1の目標入力データの前記メインメモリにおける記憶アドレスを決定し、それぞれ各前記スレーブメモリの使用可能な記憶容量及び対応する前記第2の目標入力データのデータ容量に基づいて、各前記第2の目標入力データの前記スレーブメモリにおける記憶アドレスを決定するステップと、を含む。
【0029】
一実施例において、前記目標出力データは、第1の目標出力データと第2の目標出力データを含み、前記出力決定モジュールは、更に、
前記目標演算操作及び前記第1の目標入力データに基づいて、前記第1の目標出力データ及び前記第1の目標出力データの前記メインメモリにおける記憶アドレスを決定することと、
前記目標演算操作及び各前記第2の目標入力データに基づいて、各前記第2の目標出力データ及び各前記第2の目標出力データの対応する前記スレーブメモリにおける記憶アドレスをそれぞれ決定することと、
各前記第2の目標出力データに基づいて、各前記第2の目標出力データの前記メインメモリにおける記憶アドレスをそれぞれ決定するステップと、を含む。
【0030】
一実施例において、前記記憶割当モジュールは、更に、前記スレーブ処理回路で実行された他の目標演算操作に前記第2の目標出力データを使用する必要がある場合、前記第2の目標出力データを、前記スレーブ処理回路に対応するスレーブメモリに記憶するように構成される。
【0031】
コンピュータ機器であって、
コントローラユニットと演算ユニットを含み、前記コントローラユニットが演算ユニットに接続され、前記演算ユニットが1つのメイン処理回路及び複数のスレーブ処理回路を含むプロセッサと、
前記メインプロセッサに近接して配置されたメインメモリと、複数の前記スレーブ処理回路に対応して配置された複数のスレーブメモリと、を含み、各前記スレーブプロセッサは、対応する前記スレーブ処理回路にそれぞれ近接して配置される複数の第1のメモリと、
第2のメモリと、を含み、前記第1のメモリ及び前記第2のメモリは、データの読み書きを行うことができ、
前記第1のメモリ又は第2のメモリには、前記プロセッサによって実行される際に本発明の実施例における方法のステップを実現するコンピュータプログラムが記憶されている。
【0032】
プロセッサによって実行される際に本発明の実施例における方法のステップを実現するコンピュータプログラムが記憶されているコンピュータ可読記憶媒体である。
【0033】
上記のデータ前処理方法、装置、コンピュータ機器及び記憶媒体によれば、当該目標演算操作の目標出力データがそれ以降の他の演算操作の入力データである場合には、目標演算操作に対応する目標出力データをメインメモリに記憶することができるため、メインメモリと第2のメモリとの間のデータのやり取りを減らすことで、目標出力データの読み取りの回数を減らし、それにより、演算中のI/O読み取り操作がかかる時間を減らし、プロセッサの速度及び効率を向上させることができる。また、当該データ前処理方法は、メインメモリとスレーブメモリとの間のデータのやり取りを減らし、演算中のI/O読み取り操作がかかる時間を更に減らし、プロセッサの速度及び効率を向上させることができる。
【発明を実施するための形態】
【0035】
本発明の目的、技術案及び利点をより明確にするために、以下、添付図面及び実施例を参照して本発明をより詳細に説明する。なお、本稿で説明される具体的な実施例は、本発明を説明するためのものであり、本発明を限定するものではない。
【0036】
また、本発明の特許請求の範囲、明細書及び添付図面における用語「第1」、「第2」、「第3」、及び「第4」などは、異なる対象を区別するためのものであり、特定の順序を説明するものではない 。本発明の明細書及び特許請求の範囲で使用される用語「含む」及び「含み」は、説明される特徴、全体、ステップ、操作、要素及び/又は部品の存在を意味するが、1つ又は複数の他の特徴、全体、ステップ、操作、要素、部品及び/又はそれらの組み合わせの存在又は追加を排除しない。
【0037】
なお、本発明の明細書で使用される用語は、特定の実施例を説明するためのものであり、本発明を限定することを意図しない 。本発明の明細書及び特許請求の範囲で使用されるように、本稿で他の状況が明記されない限り、単数形の「一」、「1つ」及び「当該」は、複数形を含むことを意図する。また、本発明の明細書及び特許請求の範囲で使用される用語「及び/又は」は、挙げられた関連項目のうちの1つ又は複数の任意な組み合わせ及びあらゆる可能な組み合わせを指し、且つ、それらの組み合わせを含む。
【0038】
本明細書及び特許請求の範囲で使用されるように、用語「…場合」は、文脈に応じて、「…ときに」又は「一度…」又は「…に応じて決定したら」又は「…に応じて検出したら」と解釈されてもよい。同様に、「…決定した場合」又は「[上述した条件又はイベントた]を検出した場合」というフレーズは、文脈に応じて、「一度決定したら」又は「…に応じて決定したら」又は「一度[上述した条件又はイベントた]を検出したら」又は「…に応じて[上述した条件又はイベントた]を検出したら」と解釈されてもよい。
【0039】
図1に示すように、本発明の一実施例に係るコンピュータ機器は、プロセッサ100と、第1のメモリ200と、第2のメモリ300とを含んでもよい。第1のメモリ200は、プロセッサ100の近くに配置されてもよい。プロセッサ100は、第1のメモリ200と直接データを交換することができ、即ち、プロセッサ100は、第1のメモリ200から入力データを直接読み取って、上記の入力データから得られた出力データを当該第1のメモリ200に書き込むことができる。当該第1のメモリ200は、当該第2のメモリ300と直接データを交換することができ、即ち、当該第1のメモリ200は、第2のメモリ300からデータを読み取ったり、当該第2のメモリにデータを書き込んだりすることができる。また、当該第1のメモリ200のアクセス速度は第2のメモリ300のアクセス速度より大きく、当該第1のメモリ200の記憶容量は第2のメモリ300の記憶容量より小さい。
【0040】
好ましくは、当該コンピュータ機器は、スマートフォン又はタブレットPCなどのモバイル端末、或いは、デスクトップPC、ボード又はクラウドサーバなどの端末であってもよい。もちろん、当該コンピュータ機器は、クラウドサーバとスマートフォンやPCなどの端末とによって形成されるコンピュータシステムであってもよい。当該コンピュータ機器は、ロボット、プリンター、スキャナー、ドライブレコーダー、ナビゲーター、カメラ、ビデオカメラ、プロジェクター、時計、モバイルストレージ、ウェアラブル機器、乗り物、家電製品、及び/又は医療機器に適用することができる。乗り物は、飛行機、船及び/又は車両を含んでもよい。家電製品は、テレビ、エアコン、電子レンジ、冷蔵庫、炊飯器、加湿器、洗濯機、電灯、ガスストーブ、レンジフードを含んでもよい。医療機器は、核磁気共鳴装置、超音波診断装置(Bモード)及び/又は心電計などを含んでもよい。
【0041】
好ましくは、当該第1のメモリ200は、内蔵メモリであり、当該第2のメモリ300は、ハードディスクなどの外部メモリであってもよい。例えば、当該第1のメモリ200は、RAM(Random−Access Memory、ランダムアクセス第1のメモリ200)などであり、第2のメモリ300は、DDR(Double Data Rate、データ倍速同期動的ランダムアクセス第1のメモリ200)などであってもよい。好ましくは、当該第1のメモリ200は、当該プロセッサ100と統合されてもよく、即ち、当該第1のメモリ200は、例えば、キャッシュ(Cache)であるオンチップメモリであり、当該第2のメモリ300は、例えば、RAMなどの内蔵メモリであるオフチップメモリであってもよい。
【0042】
好ましくは、第2のメモリ300は、特定の演算を実行するためにコンピュータ機器に必要とされるデータやコンピュータプログラムなどを記憶するように構成されてもよい。また、当該データは、例えば、ニューラルネットワークデータなどの機械学習データであってもよい。第1のメモリ200の記憶容量はより小さいので、プロセッサ100は、特定の演算を実行しようとする場合、第2のメモリ300に記憶された特定の演算を完成するのに必要なデータを第1のメモリ200に書き込んでもよい。それにより、プロセッサ100は、特定の演算に必要とされる入力データを第1のメモリ200から読み取って演算を行い、演算結果を第1のメモリ200に書き込むことができる。
【0043】
一実施例において、
図2に示すように、プロセッサ100は、コントローラユニット110と演算ユニット120とを含み、コントローラユニット110は演算ユニット120に接続され、当該演算ユニット120は、1つのメイン処理回路121及び複数のスレーブ処理回路122を含んでもよく、当該メイン処理回路121とスレーブ処理回路122とによって、メインスレーブ構造が形成される。これに対応して、第1のメモリ200の数は複数であってもよく、複数の第1のメモリ200によってメインスレーブ構造の記憶システムが形成できる。例えば、複数の第1のメモリ200は、1つのメインメモリと複数のスレーブメモリとを含み、当該メインメモリはメイン処理回路に近接して配置され、当該スレーブメモリはスレーブ処理回路に近接して配置されてもよい。好ましくは、当該メインメモリは、メイン処理回路のオンチップメモリであり、当該スレーブメモリは、スレーブ処理回路のオンチップメモリであってもよい。また、当該メインメモリの記憶容量は、各スレーブメモリの記憶容量より小さい。更に、各スレーブプロセッサには、1つ以上のスレーブメモリが対応して配置されてもよく、本明細書では特に限定されない。
【0044】
好ましくは、上記のコントローラユニット110は、データ及び計算命令を取得するように構成される。当該データは、具体的には、機械学習データを含んでもよい。好ましくは、当該機械学習データは、ニューラルネットワークデータであってもよい。コントローラユニット110は、更に、取得された計算命令を解析して演算命令を得て、複数の演算命令及びデータをメイン処理回路に送信するように構成される。メイン処理回路121は、データ及びメイン処理回路121と複数のスレーブ処理回路122との間で伝送されたデータ及び演算命令に対して事前処理を実行するように構成される。複数のスレーブ処理回路122は、メイン処理回路121から伝送されたデータ及び演算命令に応じて中間演算を並列に実行して複数の中間結果を得て、複数の中間結果をメイン処理回路121に伝送するように構成される。メイン処理回路121は、更に、複数の中間結果に対して後続処理を実行して計算命令の計算結果を得るように構成される。当該メイン処理回路121及び各スレーブ処理回路122両方には、第1のメモリが統合されており、即ち、複数の第1のメモリはメイン処理回路及びスレーブ処理回路のオンチップメモリであり、第2のメモリはプロセッサのオフチップメモリであってもよい。
【0045】
好ましくは、当該コントローラユニット110は、機械学習データに関連する計算命令を記憶するように構成される命令キャッシュユニット111と、計算命令を解析して複数の演算命令を得るように構成される命令処理ユニット112と、キューの順序で実行されるべき複数の演算命令又は計算命令を含む命令キューを記憶するように構成される記憶キューユニット114と、を含んでもよい。好ましくは、コントローラユニット110は、複数の演算命令がある場合には、第1の演算命令と第1の演算命令の前の第0の演算命令との間に関連関係があるかどうかを判定し、第1の演算命令と第0の演算命令との間に関連関係があれば、第1の演算命令を命令記憶ユニットにキャッシュし、第0の演算命令の実行が終了した後、第1の演算命令を命令記憶ユニットから抽出して演算ユニットに伝送するように構成される依存関係処理ユニット113を更に含んでもよい。具体的には、依存関係処理ユニット113は、第1の演算命令に応じて第1の演算命令に必要とされるデータ(例えば、行列)の第1の記憶アドレス区間を抽出し、第0の演算命令に応じて第0の演算命令に必要とされる行列の第0の記憶アドレス区間を抽出する場合に、第1の記憶アドレス区間と第0の記憶アドレス区間との間に重なる領域があれば、第1の演算命令と第0の演算命令との間に関連関係があると判定し、第1の記憶アドレス区間と第0の記憶アドレス区間との間に重なる領域がなければ、第1の演算命令と第0の演算命令との間に関連関係がないと判定する。
【0046】
一実施例において、
図3に示すように、演算ユニット120は、分岐処理回路123を更に含んでもよく、メイン処理回路121は分岐処理回路123に接続され、分岐処理回路123は複数のスレーブ処理回路122に接続され、分岐処理回路123は、メイン処理回路121とスレーブ処理回路122との間のデータ又は命令の転送を実行するように構成される。本実施例において、メイン処理回路121は、具体的には、1つの入力ニューロンを複数のデータブロックに割り当て、複数のデータブロックのうちの少なくとも1つのデータブロック、重み値、及び複数の演算命令のうちの少なくとも1つの演算命令を分岐処理回路に送信するように構成され、分岐処理回路123は、メイン処理回路121と複数のスレーブ処理回路122との間のデータブロック、重み値、及び演算命令を転送するように構成され、複数のスレーブ処理回路122は、受信されたデータブロック及び重み値に対して当該演算命令に応じて演算を実行して中間結果を得て、中間結果を分岐処理回路123に伝送するように構成され、メイン処理回路121は、更に、分岐処理回路によって送信された中間結果に対して後続処理を行って計算命令の結果を得て、当該計算命令の結果を前記コントローラユニットに送信するように構成される。好ましくは、各分岐処理回路123にも第1のメモリが統合されている。
【0047】
他の実施例において、
図4に示すように、演算ユニット120は、1つのメイン処理回路121と複数のスレーブ処理回路122を含んでもよい。複数のスレーブ処理回路はアレイ状に配列され、各スレーブ処理回路は、隣接する他のスレーブ処理回路に接続され、メイン処理回路は、複数のスレーブ処理回路のうちのk個のスレーブ処理回路に接続され、k個のスレーブ処理回路は、1行目にあるn個のスレーブ処理回路、m行目にあるn個のスレーブ処理回路、及び1列目にあるm個のスレーブ処理回路である。 なお、
図1Cに示されるK個のスレーブ処理回路は、1行目にあるn個のスレーブ処理回路、m行目にあるn個のスレーブ処理回路、及び1列目にあるm個のスレーブ処理回路のみを含み、即ち、当該k個のスレーブ処理回路は、複数のスレーブ処理回路のうちの、メイン処理回路に直接接続されたスレーブ処理回路である。K個のスレーブ処理回路は、メイン処理回路と複数のスレーブ処理回路との間のデータ及び命令を転送するように構成される。
【0048】
本発明によって提供されたプロセッサにより、演算ユニットは、シングルマスタ・マルチスレーブの構造と配置され、フォワード演算の計算命令に対しては、フォワード演算の計算命令に応じてデータが分割され、複数のスレーブ処理回路により計算量の多い部分に対して並列演算を行うことができるため、演算速度が向上し、演算時間が短縮され、消費電力が低減される。
【0049】
好ましくは、上記の機械学習計算は、具体的には、人工ニューラルネットワーク演算を含み、上記の入力データは、具体的には、入力ニューロンデータ及び重み値データを含んでもよい。上記の計算結果は、具体的には、人工ニューラルネットワーク演算の結果、即ち、出力ニューロンデータであってもよい。
【0050】
ニューラルネットワークにおける演算は、ニューラルネットワークにおける1層の演算であってもよく、多層ニューラルネットワークの実現プロセスは、次の通りである。順演算において、前の層の人工ニューラルネットワークの実行が完了した後、次の層の演算命令は、演算ユニットで算出された出力ニューロンを次の層の入力ニューロンとして演算し(或いは、当該出力ニューロンに対していくつかの操作を実行して、また次の層の入力ニューロンとし)、それとともに、重み値も次の層の重み値に置き換える。逆演算において、前の層の人工ニューラルネットワークの逆演算が完了した後、次の演算命令は、演算ユニットで算出された入力ニューロンの勾配を次の層の出力ニューロンの勾配として演算し(或いは、当該入力ニューロンの勾配に対していくつかの操作を実行して、また次の層の出力ニューロンの勾配とし)、それとともに、重み値を次の層の重み値に置き換える。
【0051】
上記の機械学習計算は、サポートベクターマシン演算、k最近傍(k−nn)演算、k平均(k−means)演算、主成分分析演算などを更に含んでもよい。以下、説明の便宜上、人工ニューラルネットワーク演算を例として機械学習計算の具体的なスキームを説明する。
【0052】
人工ニューラルネットワーク演算については、人工ニューラルネットワーク演算が多層演算を備える場合、多層演算の入力ニューロン及び出力ニューロンは、ニューラルネットワーク全体における入力層内のニューロン及び出力層内のニューロンを指すことではなく、ネットワークにおける任意の2つの隣接層に対して、ネットワークの順演算における下層にあるニューロンは入力ニューロンであり、ネットワークの順演算における上層にあるニューロンは出力ニューロンである。畳み込みニューラルネットワークを例として、畳み込みニューラルネットワークはL層を備え、K=1,2,...,L−1であるとすると、第K層及び第K+1層について、第K層を入力層と呼び、その中のニューロンは前記入力ニューロンであり、第K+1層を出力層と呼び、その中のニューロンは前記出力ニューロンである。つまり、最上層を除いて、各層は入力層とされることができ、次の層は対応する出力層である。
【0053】
一実施例において、当該第2のメモリは、コンピュータプログラムを記憶するように構成され、当該プロセッサによって上記のコンピュータプログラムが実行されると、本発明の実施例に係るデータ前処理方法が実現され、それにより、処理されるべき演算の実行中の様々なデータの記憶域スペース割当規則が得られる。具体的には、上記のコンピュータ機器は、以下のデータ前処理方法を実行し、処理されるべき演算(例えば、ニューラルネットワーク演算など)に対して前処理を実行し、当該処理されるべき演算の入力データ、出力データ、及び中間計算結果などのデータの第1のメモリにおける記憶域スペース割当規則を得るように構成されてもよい。このように、プロセッサによって当該処理されるべき演算が実行されると、当該処理されるべき演算に係るデータ(入力データ、出力データ、中間計算結果など)は、上記の記憶域スペース割当規則に基づいて第1のメモリに記憶されることができる。このように、演算過程における記憶資源を事前に割り当てることで、第1のメモリの記憶域スペースを合理的に利用できるだけでなく、処理の演算速度及び精度を向上させることもできる。当該記憶域スペース割当規則は、処理されるべき演算の実行中の入力データの記憶アドレス、出力データの記憶アドレス、中間計算結果の記憶アドレス、および各記憶域スペースにデータを記憶するための更新規則を含んでもよい。具体的には、以下の説明を参照する。
【0054】
本発明の実施例において、演算過程におけるデータの読み書き操作を減らす(即ち、I/O操作の回数を減らす)ために、上記のコンピュータ機器に適用できるデータ前処理方法が提供される。具体的には、
図5に示すように、当該データ前処理方法は以下のステップを含んでもよい。
【0055】
S100:第1のメモリの使用可能な記憶容量及び目標演算操作を取得する。
【0056】
具体的には、プロセッサは、当該第1のメモリの構成情報(例えば、当該第1のメモリのモデルなどの情報)に応じて、当該第1のメモリの総記憶容量を取得してもよい。また、プロセッサは、当該第1のメモリの総記憶容量及び当該第1のメモリの占められた記憶容量に応じて、当該第1のメモリの使用可能な記憶容量を取得してもよい。
【0057】
本発明の実施例において、プロセッサは、処理されるべき演算を取得して、当該処理されるべき演算及び第1のメモリの使用可能な記憶容量に応じて目標演算操作を決定してもよい。当該処理されるべき演算は、1つ又は複数の演算操作を含んでもよく、当該処理されるべき演算は、ニューラルネットワークなどの演算であってもよい。例えば、当該処理されるべき演算に含まれた演算操作は、加算、減算、乗算、除算、畳み込み、プーリング(Pooling)、及び活性化(例えば、Relu)などの演算であってもよい。当該目標演算操作は、処理されるべき演算のうちの1つ又は複数の演算操作の組み合わせであってもよい。
【0058】
S200:目標演算操作及び第1のメモリの使用可能な記憶容量に応じて、目標演算操作に対応する目標入力データを決定し、目標入力データは、目標演算操作に対応する全入力データの一部又は全部である。
【0059】
具体的には、プロセッサは、当該目標演算操作に基づいて、当該目標演算操作を完成させるのに必要な全入力データ及び当該全入力データのデータ容量(即ち、当該全入力データに必要とされる記憶域スペースの大きさ)を決定してもよい。更に、プロセッサは、第1のメモリの使用可能な記憶容量及び当該目標演算操作の全入力データのデータ容量に応じて、当該目標演算操作に対応する目標入力データ及びそのデータ容量を決定してもよく、当該目標入力データのデータ容量は、第1のメモリの記憶容量より大きくない。当該目標入力データは、当該目標演算操作に対応する全入力データの一部又は全部であり、即ち、当該目標入力データのデータ容量は、当該目標演算操作に対応する全入力データのデータ容量より大きくない。目標入力データのデータ容量が当該目標演算操作の全入力データのデータ容量より小さい場合、当該目標演算操作の全入力データの一部のみを第1のメモリ上にロードすることで、第1のメモリ上には、当該目標演算操作の目標出力データや中間計算結果などのデータを記憶するための一定の記憶域スペースを確保することができる。目標入力データのデータ容量が当該目標演算操作の全入力データのデータ容量と等しい場合、記憶域スペースの再利用により、当該目標演算操作の目標出力データや中間計算結果などのデータを記憶することが実現できる。
【0060】
S300:目標演算操作と目標入力データに応じて、目標演算操作の目標出力データを決定する。
具体的には、処理されるべき演算の計算量は静的な解析が可能であるため、プロセッサは、当該目標演算操作の目標入力データ及び当該目標演算操作に基づいて、当該目標演算操作の目標出力データや当該目標出力データのデータ容量などの情報を取得することができ、即ち、プロセッサは、当該目標演算操作の目標出力データに必要とされる記憶域スペースを取得することができる。
【0061】
S400:目標演算操作の目標出力データが当該目標演算操作以降の他の演算操作の入力データである場合、当該目標出力データの読み取りの回数を減らすように、目標出力データを第1のメモリに記憶する。
【0062】
具体的には、当該目標演算操作の目標出力データが当該目標演算操作以降の他の演算操作の入力データである場合には、即ち、当該目標演算操作以降に当該目標出力データを使用し続ける必要がある場合には、当該目標出力データを前記第1のメモリ上に記憶することで、目標出力データの読み取りの回数を減らし、プロセッサの速度及び効率を向上させることができる。
【0063】
従来技術では、プロセッサは、当該目標演算操作を実行して上記の目標出力データを取得した後、当該目標出力データを第1のメモリから第2のメモリに転送することで、第1のメモリの目標出力データによって占められた記憶域スペースを解放する。当該目標演算操作以降の演算操作は当該目標出力データを使用し続ける必要がある場合、プロセッサは、当該目標出力データを第2のメモリから第1のメモリに再度転送する必要がある。この方法において、目標出力データのI /O読み取り操作が複数回実行される必要があるため、演算時間が長く、プロセッサの効率及び速度が低い結果が生じやすい。従来技術と比較して、本発明の実施例に係るデータ前処理方法によれば、目標出力データの読み取りの回数を減らすことで、演算過程におけるI/O読み取り操作がかかる時間を減らし、プロセッサの速度及び効率を向上させることができる。
【0064】
例えば、
図8に示すように、プロセッサは、目標演算操作OP1を取得してもよく、その目標演算操作OP1の全入力データは、入力データXであり、入力データXは、サブ入力データX11、X21、X12及びX22を含み、サブ入力データX11とX12によって入力データX1が構成され、サブ入力データX21とX22によって入力データX2が構成され、当該入力データX1とX2は、ベクター又は行列データなどであってもよい。プロセッサは、目標演算操作OP1及び第1のメモリの使用可能な記憶容量に基づいて、サブ入力データX11とX21を当該目標演算操作OP1の目標入力データとしてもよい。また、当該プロセッサは、目標演算操作OP1及び目標入力データX11とX21に基づいて、目標出力データY1及び目標出力データY1のデータ容量を決定してもよい。
【0065】
更に、プロセッサは、予め設定された演算規則に基づいて、当該標出力データY1が目標演算操作OP1以降の他の演算操作によって使用される必要があるかどうかを判断し、当該目標出力データY1が目標演算操作OP1以降の他の演算操作によって使用される必要がある場合、例えば、当該目標出力データY1が目標演算操作OP1以降の演算操作OP2の入力データである場合、当該目標出力データY1を第1のメモリに一時的に記憶してもよい。このように、演算操作OP2が次の目標演算操作である場合には、プロセッサは、次の演算操作OP2を実行する前に、当該演算操作OP2に必要とされる入力データY3を予め設定された規則に基づいて第2のメモリから第1のメモリに移動すればよく、当該目標出力データY1の移動ステップを再度実行する必要がない。更に、当該目標出力データY1は、目標演算操作OP1以降の演算操作OP2の入力データであり、それと同時に、当該目標出力データY1は、演算操作OP3の入力データである。この場合、当該目標出力データY1を演算操作OP2、OP3が完了するまで第1のメモリに記憶し、その後、第1のメモリの目標出力データY1によって占められたた記憶域スペースを解放するように、当該目標出力データY1を第1のメモリから削除してもよい。
【0066】
本発明の一実施例に係るデータ前処理方法によれば、演算操作OP1が終了した後に目標出力データY1を第1のメモリから第2のメモリに移動する過程、及び演算操作OP2を行う際に目標出力データY1を第2のメモリから第1のメモリに移動する過程を削減したので、目標出力データの読み取りの回数を減らすことで、演算過程におけるI/O読み取り操作がかかる時間を減らし、プロセッサの速度及び効率を向上させることができる。
【0067】
好ましくは、上記の処理されるべき演算は、複数の演算層を含むニューラルネットワーク演算であり、
図8に示すように、上記の演算操作OP1とOP2は、ニューラルネットワーク演算の演算層であってもよい。上記の入力データXは、入力ニューロンデータや重み値データなどを含み、入力データX1とX2を含んでもよい。好ましくは、上記の入力データX1とX2は、それぞれ異なる演算層に属していてもよい。また、プロセッサは、当該目標演算層OP1及び第1のメモリの使用可能な記憶容量に基づいて、サブ入力データX11とX21を当該目標演算層OP1の目標入力データとしてもよい。更に、当該プロセッサは、目標演算層OP1及び目標入力データX11とX21に応じて、演算層OP1の出力データの一部である目標出力データY1及び当該目標出力データY1のデータ容量を決定し、当該出力データは、演算層OP1の出力ニューロンデータや重み値などを含んでもよい。
【0068】
他の例として、
図9に示すように、当該処理されるべき演算は、ニューラルネットワーク演算などの演算であり、畳み込み層、プーリング層、及び活性化層を含み、上記の各演算層の実行順序は、畳み込み演算操作−プーリング演算操作−活性化演算操作である。つまり、畳み込み演算操作の出力データは、プーリング演算操作の入力データであり、プーリング演算操作の出力データは、活性化演算操作の入力データである。各演算層の入力データは、演算層に対応する入力ニューロンデータや重み値などのデータを含んでもよい。
【0069】
現在の目標演算操作がプーリング演算操作である場合、プロセッサは、第1のメモリの使用可能な記憶容量及び目標演算操作に基づいて、当該プーリング演算操作に対応する目標入力データを取得して、C1−C2区間内のデータとしてもよい(C1−C2区間内のデータは、畳み込み演算の出力データを表し、畳み込み演算操作に対応する出力ニューロンデータ及び重み値等を含んでもよい)。当該目標入力データC1−C2に対応する目標出力データは、B1−B2区間内のデータである(ここで、B1−B2区間内の目標出力データは、プーリング演算操作に対応する出力ニューロンデータ及び重み値等を含んでもよい)。また、当該プーリング演算操作の目標出力データB1−B2が活性化演算操作の入力データであるため、当該プーリング演算操作の目標出力データB1−B2を第1のメモリに記憶してもよい。このように、プーリング演算操作が完了した後、目標出力データB1−B2を第1のメモリから第2のメモリに移動して、第1のメモリ上の記憶域スペースを解放する必要がなくなる。そして、活性化演算操作を実行する前に、当該目標出力データB1−B2を第2のメモリから第1のメモリに再度移動する必要がなくなる。
【0070】
従来技術では、プロセッサは、目標出力データB1−B2を取得した後、まず、当該目標出力データB1−B2を第1のメモリから第2のメモリに移動することで、第1のメモリの記憶域スペースを解放する。活性化演算操作の入力データはプーリング演算操作の出力データに依存するため、プロセッサは、活性化演算操作を実行しようとする前に、当該プーリング演算操作に対応する目標出力データB1−B2であるデータブロックを第2のメモリから第1のメモリに再度移動する。I/O帯域幅が限られた場合、このような頻繁なデータの読み取り操作はプロセッサの処理効率に影響を与える。このため、先行技術と比較して、本発明の実施例に係るデータ前処理方法は、目標出力データの読み取りの回数を減らす(即ち、目標出力データのロード及び記憶の操作を減らす)ことで、I/O読み取り操作がかかる時間を減少し、プロセッサの速度及び効率を向上させることができる。
【0071】
一実施例において、前記方法は、更に、以下のステップを含む。
【0072】
目標演算操作の目標出力データは目標演算操作以降の他の演算操作の入力データである(即ち、当該目標演算操作の出力データは当該処理されるべき演算の中間結果データである)場合には、当該目標演算操作の目標出力データを第1のメモリ又は第1のメモリと第2のメモリ両方に記憶する。具体的には、目標演算操作の目標出力データは目標演算操作以降の他の演算操作の入力データである場合には、当該目標出力データを第1のメモリに記憶することで、目標出力データの繰り返しロード操作を減らす(目標出力データのロード操作を減らす)ことができる。同時に、第1のメモリにおけるデータと第2のメモリにおけるデータとの間の一貫性を保証するように、当該目標出力データを第1のメモリから第2のメモリにコピーしてもよい。好ましくは、当該目標演算操作に対応する目標出力データを第2のメモリに同期に記憶する必要があるかどうかは、具体的な演算要求に応じて決定されてもよい。
【0073】
当該目標出力データを第2のメモリに同期に記憶する必要がない場合、当該目標出力データを第1のメモリのみに記憶することで、目標出力データのロード及び記憶の操作を同時に減らすことができる。当該目標出力データを第2のメモリに同期に記憶する必要がある場合、目標出力データを第1のメモリと第2のメモリ両方に同期に記憶することで、当該目標出力データのロード操作を減らし、それにより、データの読み取り操作が過剰にI/O帯域幅を占めてプロセッサの処理速度に影響することを避けることができる。
【0074】
図8に示すように、当該目標出力データY1が目標演算操作OP1以降の他の演算操作によって使用される必要がある場合、例えば、当該標出力データY1は目標演算操作OP1以降の演算操作OP2の入力データである場合、当該目標出力データY1を第1のメモリに一時的に記憶してもよい。このように、演算操作OP2が次の目標演算操作である場合には、プロセッサは、次の演算操作OP2を実行する前に、当該演算操作OP2に必要とされる入力データY3を予め設定された規則に基づいて第2のメモリから第1のメモリに移動すればよく、当該目標出力データY1の移動ステップを再度実行する必要がない。更に、プロセッサは、第1のメモリにおけるデータと第2のメモリにおけるデータとの間に一貫性があるように、目標出力データY1を第1のメモリから第2のメモリにコピーしてもよい。このように、本発明の一実施例に係るデータ前処理方法は、演算操作OP1の計算が終了した後に目標出力データY1を第1のメモリから第2のメモリに移動する過程を削減したので、目標出力データの読み取りの回数を減らすことで、演算過程におけるI/O読み取り操作がかかる時間を減らし、プロセッサの速度及び効率を向上させることができる。
【0075】
図9に示すように、当該プーリング演算操作の目標出力データB1−B2が活性化演算操作の入力データであるため、当該プーリング演算操作の目標出力データB1−B2を第1のメモリと第2のメモリ両方に同時に記憶してもよい。このように、活性化演算操作を実行する前に、当該目標出力データB1−B2を第2のメモリから第1のメモリに再度移動する必要がなくなる。それとともに、プーリング演算操作が完了した後、目標出力データB1−B2を第1のメモリから第2のメモリにコピーすることで、第1のメモリにおけるデータと第2のメモリにおけるデータとの間の一貫性を保証することができる。先行技術と比較して、本発明の実施例に係るデータ前処理方法は、目標出力データB1−B2を第2のメモリから第1のメモリに再度移動する過程を削減したので、目標出力データの読み取りの回数を減らすことによって、演算過程におけるI/O読み取り操作がかかる時間を減らし、プロセッサの速度及び効率を向上させることができる。
【0076】
一実施例において、処理されるべき演算の各目標演算操作に必要とされる全入力データのデータ容量が大きいので、プロセッサは、各目標演算操作に係る全入力データを分割し、即ち、第1のメモリの使用可能な記憶容量に基づいて、各目標演算操作に係る全入力データ(入力ニューロンデータ及び重み値等を含み)を複数の入力データブロックに分割し、目標演算操作の計算結果を得るように各入力データブロックに対してそれぞれ目標演算操作を実行してもよい。最後に、各入力データブロックに対応する計算結果を融合することで、当該目標演算操作に対応する出力データを得ることができる。当該入力データブロックは、上記の目標入力データであり、各入力データブロックに対応する出力データは、上記の目標出力データである。好ましくは、上記のステップS200は、具体的には、
【0077】
プロセッサは、第1のメモリの使用可能な記憶容量及び当該目標演算操作に必要とされる入力データのデータ容量に基づいて、当該目標演算操作に対応する入力データブロックを決定して、当該入力データブロックを当該目標演算操作に対応する目標入力データとすることを含む。具体的には、当該目標演算操作に必要とされる全入力データのデータ容量が第1のメモリの使用可能記憶容量より大きい場合、プロセッサは、第1のメモリの使用可能な記憶容量に基づいて、当該目標演算操作の全入力データの一部である、目標演算操作に対応する入力データブロックを決定してもよい。当該目標演算操作に必要とされる全入力データのデータ容量が第1のメモリの使用可能な記憶容量より大きくない場合、当該目標演算操作の全入力データを1つの入力データブロック、即ち、その目標入力データとしてもよい。
【0078】
例えば、
図8に示すように、プロセッサは、現在の目標演算操作OP1を取得してもよく、当該目標演算操作OP1の全入力データは、入力データX1およびX2を含む全入力データXである。プロセッサは、当該目標演算操作OP1及び第1のメモリの使用可能なメモリ容量に基づいて、サブ入力データX21及び入力データのサブ入力データX21を、当該目標演算操作OP1の目標入力データとしてもよく、当該サブ入力データX21のデータ容量とサブ入力データX11のデータ容量との和は、第1のメモリの使用可能な記憶容量より小さい。もちろん、他の実施例において、当該目標演算操作に対応する全入力データXのデータ容量が第1のメモリの使用可能な記憶容量より小さい場合、当該目標演算操作に対応する全入力データをすべて第1のメモリにロードしてもよい。
【0079】
他の例として、
図9に示すように、現在の目標演算操作がプーリング演算操作である場合、プロセッサは、第1のメモリの使用可能な記憶容量及び目標演算操作に基づいて、C1−C2区間内のデータ(C1−C2区間内のデータは、畳み込み演算の出力データを表し)を1つの入力データブロックとし、当該入力データブロックを当該プーリング演算操作に対応する目標入力データとしてもよい。現在の目標演算操作が活性化演算操作である場合、プロセッサは、第1のメモリの使用可能な記憶容量に基づいて、B1−B2区間内のデータを活性化演算操作の1つの入力データブロックとし、当該入力データブロックを当該活性化演算操作の目標入力データをとしてもよい。
【0080】
一実施例において、各目標演算操作に係る全入力データが複数の入力データブロックに分割された場合、各入力データブロックのデータ容量は第1のメモリの記憶容量より小さいため、当該目標演算操作は、処理されるべき演算の複数の演算操作と融合することができ、それにより、第1のメモリの記憶域スペースを最大化させて演算の効率を向上させることができる。好ましくは、上記の目標演算操作は1つ以上の演算操作を含み、即ち、当該目標演算操作は、1つ以上の演算操作の組み合わせである。一般に、当該目標演算操作に含まれる各演算操作は、異なる演算を実現するための異なる演算操作である。この場合、プロセッサは、第1のメモリの使用可能な記憶容量に基づいて各演算操作に対応するサブ目標入力データを決定して、各演算操作に対応するサブ目標入力データに基づいて当該目標演算操作に対応する目標入力データを決定してもよい。具体的には、
図6に示すように、上記のステップS200において目標演算操作に対応する入力データブロックを決定するステップは、更に、以下のステップを含む。
【0081】
S210:第1のメモリの使用可能な記憶容量及び各演算操作の融合属性に応じて、融合可能な演算操作の数を決定し、融合数閾値を得る。各演算操作の融合属性は、各演算操作に係る入力データ及び/又は出力データの間のデータ依存関係などを含んでもよい。
【0082】
なお、1つ又は複数の演算操作はプロセッサによって一緒に実行されることができる場合、当該1つ又は複数の演算操作は融合されることができ、即ち、融合度が高いと見なしてもよい。1つ又は複数の演算操作はプロセッサによって一緒に実行されることができない場合、当該1つ又は複数の演算操作は融合されることができなく、即ち、融合度が低いと見なしてもよい。各演算操作の間の融合度は、予め設定された演算規則によって決定されてもよく、本明細書では特に限定されない。
【0083】
S220:融合数閾値より大きくない選択された数の融合可能な1つ以上の演算操作の組み合わせを、1つの目標演算操作とする。
【0084】
例えば、選択された数は、融合数閾値に等しく、即ち、第1のメモリの記憶容量によって決定された融合可能な複数の演算操作を、1つの目標演算操作に相当する。
【0085】
S230:選択された数の各演算操作に対応するサブ目標入力データを、当該目標演算操作に対応する目標入力データとする。
【0086】
例えば、
図8に示すように、処理されるべき演算は、2つの演算操作の融合属性に基づいてプロセッサによって一緒に実行されることができる演算操作OP1及びOP2を含んでもよく、第1のメモリの使用可能な記憶容量は 演算操作OP1の目標入力データと目標出力データ、及び演算OP2の目標入力データと目標出力データを収容できる場合、当該目標演算操作によって融合可能な演算操作の数は2つであると見なし、当該演算操作OP1とOP2を1つの目標演算操作としてもよい。それとともに、演算操作OP1とOP2とに対応するサブ目標入力データX11、X21、及びY3を当該目標演算操作の目標入力データとする。
【0087】
演算操作OP1とOP2とがお互いに融合できるが、第1のメモリの使用可能な記憶容量は、演算操作OP1の目標入力データと目標出力データのみを収容でき、演算操作OP2の目標入力データと目標出力データを完全に収容できない場合、当該目標演算操作によって融合可能な演算操作の数は1つであると見なし、当該演算操作OP1を1つの目標演算操作としてもよい。それとともに、当該演算操作OP1に対応するサブ目標入力データX11、X21を当該目標演算操作の目標入力データとする。
【0088】
当然、他の実施例において、当該目標演算操作に含まれる演算操作の数は、2つ以上であってもよい。例えば、当該処理されるべき演算の深さ方向には、演算操作OP2以降に他の融合可能な演算操作が存在し、且つ、上記の融合可能な演算操作に対応する目標入力データ及び目標出力データのデータ容量は、当該第1のメモリの使用可能な記憶容量を満たすことができる場合、当該目標演算操作に含まれる演算操作の数は、OP1、OP2、OPn(nは、2より大きい正の整数である)であってもよい。OP1、OP2、OPnに対応する目標入力データのデータ容量と目標出力データのデータ容量との和は、当該第1のメモリの使用可能な記憶容量より大きくない。
【0089】
また、当該処理されるべき演算は、ニューラルネットワークなどの演算であり、当該ニューラルネットワーク演算は、複数の演算層を含み、各演算層は、1つの演算操作を表してもよい。例えば、プロセッサは、ニューラルネットワーク等に対して演算を行う必要がある場合、ニューラルネットワークの各演算層が1つの演算操作とされることができ、ニューラルネットワークの各演算層の接続関係に基づいて、各演算操作の融合属性を決定することができ、即ち、 ニューラルネットワークの各演算層の間の接続関係に基づいて、どの演算層が融合できるか及び融合可能な演算層の数を決定して、1つ以上の融合可能な演算層の組み合わせを1つの目標演算操作とすることができる。このように、ニューラルネットワークの深さ方向に複数の演算層を融合させて1つの目標演算操作とすることにより、演算の回数及びデータの読み取りの回数を減らし、プロセッサの処理効率を更に向上させることができる。
【0090】
例えば、
図9に示すように、当該ニューラルネットワークの各演算層の接続関係に基づいて、ニューラルネットワークの深さ方向に畳み込み演算操作、プーリング演算操作、及び活性化演算操作は、お互いに融合できると決定することができる。この場合、プロセッサは、第1のメモリの使用可能な記憶容量、及び各演算操作の目標入力データ容量等に基づいて、融合数閾値を決定することができる。具体的には、第1のメモリの使用可能な記憶容量は、プーリング演算操作の目標入力データC1−C2及び活性化演算操作の目標入力データB1−B2を収容できる場合、融合数閾値は2つであると決定し、プーリング演算操作と活性化演算操作を、1つの目標演算操作に相当させることができる。この場合、当該目標演算操作の目標入力データは、C1−C2区間内にあるデータであってもよい。他の実施例において、当該目標演算操作は、畳み込み演算操作、プーリング演算操作、及び活性化演算操作3つの融合であってもよい。
【0091】
あるいは、当該活性化演算操作以降に他の演算操作を実行する必要がある場合、当該目標演算操作は、第1のメモリの使用可能な記憶容量に基づいて、より多くの演算操作を融合し続けてもよい。例えば、当該ニューラルネットワークは、N個の演算層を含み、プロセッサは、第1のメモリの使用可能な記憶容量に基づいて、融合閾値がn個(nは、1より小さくなくてNより大きくない)であると決定して、n個の演算層を1つの目標演算操作としてもよい。これは例として説明するためのものだけであり、限定するものではない。
【0092】
更に、当該目標演算操作が複数の演算操作を含む場合には、当該目標演算操作の実行過程の中間計算結果を第1のメモリに記憶してもよい。具体的には、上記の方法は、以下のステップを更に含む。
【0093】
当該目標演算操作において、現在の演算操作によって出力された中間演算結果をそれ以降の他の演算操作の入力データとし、或いは、現在の演算操作によって出力された中間演算結果を他の目標演算操作の入力データとする必要がある場合、プロセッサは、現在の演算操作によって出力された中間演算結果を第1のメモリに一時的に記憶してもよい。具体的には、プロセッサは、現在の演算操作によって出力された中間結果のデータ容量に基づいて、第1のメモリにおいて現在の演算操作によって出力された中間結果に記憶アドレスを割り当ててもよい。
【0094】
現在の演算操作以降の他の演算操作又は他の目標演算操作は、当該現在の演算操作によって出力された中間計算結果を使用する必要がない場合、当該現在の演算操作によって出力された中間結果によって占められた記憶域スペースを割り当て直し、即ち、当該現在の演算操作の中間結果によって占められた記憶アドレスを他のデータに割り当ててもよい。
【0095】
例えば、
図8に示すように、現在の演算操作OP1によって出力された中間計算結果Y1が次の演算操作OP2の入力データである場合、プロセッサは、現在の演算操作によって出力された中間結果Y1を一時的に第1のメモリに記憶してもよい。これにより、中間計算結果Y1の読み取りの回数を減らし、プロセッサの処理効率及び処理速度を向上させることができる。当該演算操作OP2が当該中間計算結果を使用し続ける必要がなく、且つ、目標演算操作以降の他の目標演算操作が当該中間計算結果Y1を再利用する必要がない場合、第1のメモリ上の記憶域スペースの再利用を実現するように、当該中間計算結果Y1によって占められた記憶域スペースを解放して、当該中間計算結果Y1によって占められた記憶アドレスを他のデータに割り当て、例えば、現在の目標演算操作以降の他の目標演算操作の目標出力データを中間計算結果によって占められた記憶域スペースに記憶してもよい。
【0096】
他の例として、
図9に示すように、プーリング演算操作の目標入力データはC1−C2区間内にあるデータであり、当該目標入力データに対応する目標出力データはB1−B2区間内にあるデータである。そして、目標出力データB1−B2は活性化演算操作の目標入力データである場合、プロセッサは、当該中間計算結果B1−B2を第1のメモリに一時的に記憶してもよい。これにより、中間計算結果B1−B2の読み取りの回数を減らし、プロセッサの処理効率及び処理速度を向上させることができる。活性化演算操作は当該目標出力データB1−B2を使用する必要がない場合、第1のメモリ上の記憶域スペースの再利用を実現するように、目標出力データB1−B2によって占められた記憶域スペースを他のデータに割り当ててもよい。
【0097】
一実施例において、目標演算操作の目標入力データは当該目標演算操作に対応する全入力データの一部のみである場合、当該目標演算操作の各目標入力データは、当該目標演算操作の一部の演算を完成するためにのみ使用される。当該目標演算操作の処理速度を向上させ、第1のメモリの記憶域スペースを十分に利用するために、当該目標演算操作に対応する目標入力データの数は1つ以上であり、各目標入力データは全入力データの一部であり、即ち、各目標入力データは、全入力データの1つ以上の入力データブロックを含んでもよい。つまり、1つ以上の目標入力データを同時に第1のメモリにロードしてもよい。更に、当該目標入力データの数に応じて、当該目標演算操作を複数のサブ目標演算操作に分割してもよい。好ましくは、各サブ目標演算操作は、同じ演算を実現することができる。具体的には、
図7に示すように、上記の方法は、以下のステップを更に含む。
【0098】
S500:各前記サブ目標演算操作に対応する目標入力データの容量及び目標出力データのデータ容量に応じて、等しくても等しくなくてもよい、各サブ目標演算操作に必要とされる目標記憶容量をそれぞれ決定する。
【0099】
S510:第1のメモリの使用可能な記憶容量及び現在のサブ目標演算操作に必要とされる目標記憶容量に基づいて、第1のメモリの残り記憶容量を決定する。
【0100】
S520:第1のメモリの残り記憶容量及び各サブ目標演算操作に必要とされる目標記憶容量に応じて、前記サブ目標演算操作の数を決定する。
【0101】
好ましくは、当該第1のメモリの残り記憶容量及び現在のサブ目標演算操作以外の他のサブ目標演算操作の目標記憶容量に応じて、第1のメモリ上にいくつのサブ目標演算操作を収容できるかと決定してもよい。そして、現在のサブ目標演算操作及びそれ以外の他のサブ目標演算操作の数に基づいて、サブ目標演算操作の総数を決定してもよい。
【0102】
具体的には、現在のサブ目標演算操作の目標入力データのデータ容量と目標出力データのデータ容量との和が第1のメモリの使用可能な記憶容量より小さい場合、第1のメモリの残り記憶容量に応じて、1つ以上のサブ目標演算操作を実行できるかどうかを判断してもよい。YESであれば、プロセッサは、1つ以上のサブ目標演算操作に対応する目標入力データを同時に処理することができる。このように、複数の目標入力データを同時に処理することで、プロセッサの処理速度及び効率を更に向上させることができる。
【0103】
図8に示すように、目標演算操作(図の左側の演算操作)は、演算操作OP1、OP2を含み、プロセッサは、当該目標演算操作を決定するための現在のサブ目標演算操作の目標入力データX11、X21及びY3のデータ容量に基づいて、現在のサブ目標演算操作の目標出力データY1及びZ1のデータ容量を決定し、現在のサブ目標演算操作の目標入力データのデータ容量と目標出力データのデータ容量との和に基づいて、現在のサブ目標演算操作に必要とされる目標記憶容量を決定してもよい。現在のサブ目標演算操作の目標記憶容量が第1のメモリの使用可能な記憶容量より小さい場合、第1のメモリの残り記憶容量を計算してもよい。第1のメモリの残り記憶容量は、第1のメモリの使用可能な記憶容量から現在のサブ目標演算操作の目標記憶容量を引いたものに等しい。その後、プロセッサは、第1のメモリの残り記憶容量に応じてサブ目標演算操作の数を決定してもよい。
【0104】
具体的には、第1のメモリの残り記憶容量は、他のサブ目標演算操作の目標入力データX12、X22、及びY4、演算操作OP1によって出力された中間計算結果Y2、及び演算操作OP2によって出力された目標出力データZ2を更に収容できる場合には、目標演算操作の数が2つであると決定して、サブ入力データX21、X22、及びY4をそのうちの1つの目標演算操作の目標入力データとしてもよい。このように、処理されるべき演算の横方向に同一の目標演算操作の複数の目標入力データを同時にロードすることで、プロセッサは、複数の目標入力データを並列に処理し、プロセッサの処理速度及び効率を更に向上させることができる。
【0105】
また、第1のメモリの残り記憶容量は、他のサブ目標演算操作の目標入力データX12、X22、及びY4、演算操作OP1によって出力された中間計算結果Y2、及び演算操作OP2によって出力された目標出力データZ2だけでなく、演算操作OP3の出力データYを更に収容できる場合には、演算を1回実行することで計算結果Yを得るように、演算操作OP1、OP2、OP3を融合させてもよい。
【0106】
他の例として、
図9に示すように、当該処理されるべき演算は、ニューラルネットワークなどの演算であり、畳み込み層、プーリング層、及び活性化層を含み、上記の各演算層の実行順序は、畳み込み演算操作−プーリング演算操作−活性化演算操作である。目標演算操作が活性化演算操作である場合、プロセッサは、第1のメモリの記憶容量に基づいて現在のサブ目標演算操作の目標入力データを取得し、現在のサブ目標演算操作の目標入力データはプーリング層のB1−B2区間内の入力データであってもよい。現在のサブ目標演算操作の目標出力データは、A1である。現在のサブ目標演算操作の目標入力データのデータ容量B1−B2とそれに対応する目標出力データのデータ容量との和が第1のメモリの記憶容量より小さい場合、即ち、現在のサブ目標演算操作に必要とされる目標記憶容量が第1のメモリの記憶容量より小さい場合、プロセッサは、更に、第1のメモリの残り記憶容量に基づいて当該サブ目標演算操作の数を決定してもよい。例えば、プロセッサは、第1のメモリの残り記憶容量に基づいて、第1のメモリの残り記憶容量が活性化演算A1−A2の空間の演算量を満たすことができると決定した場合、サブ目標演算操作の数は2つであると決定して、目標入力データB2−B3区間内のデータを、活性化演算操作の1つの目標演算操作に対応する目標入力データとしてもよい。
【0107】
また、1つ以上のサブ目標演算操作の目標入力データがお互いに交差する場合、現在のサブ目標演算操作の目標入力データと他のサブ目標演算操作の目標入力データとの間の交差部分を決定し、その交差部分を第1のメモリに一時的に記憶する。即ち、現在のサブ目標演算操作の目標入力データの一部又は全部を他の演算操作の目標入力データとする必要がある場合には、この一部のデータの複数回の読み取り操作を避けるように、当該交差部分を第1のメモリに一時的に記憶し、それにより、プロセッサの処理効率及び処理速度を向上させることができる。
【0108】
例えば、
図9に示すように、目標演算操作がプーリング演算操作であり、かつ、当該目標演算操作のサブ目標演算操作の数が2つである場合、それに対応して、プーリング演算操作に対応する目標入力データの数は、2つであり、1つはC1−C2であり、もう1つはC3−C4であってもよい。目標入力データC1−C2に対応する目標出力データはB1−B2であり、目標入力データC3−C4に対応する目標出力データはB2−B3である。添付図面から分かるように、入力データC3−C2区間のデータは、目標入力データC1−C2の一部であり、それと同時に、目標入力データC3−C4の一部でもあり、即ち、2つの目標入力データの間には、交差部分C3−C2がある。この場合、データの読み取りの回数を減らすために、目標入力データC1〜C2に対応するプーリング演算操作を終了した後でも、その一部のデータの複数回の読み取り操作を避けるよに、入力データC3−C2を第1のメモリに記憶してもよく、それにより、プロセッサの処理効率及び速度を向上させることができる。
【0109】
一実施例において、前記方法は、更に、以下のステップを含む。
【0110】
目標演算操作以降の演算操作と目標演算操作との間の演算間隔が予め設定された範囲内にある場合には、目標出力データの読み取りの回数を減らすように、当該目標出力データを第1のメモリに記憶する。
【0111】
具体的には、目標演算操作以降の他の演算操作と当該目標演算操作との間の演算間隔が予め設定された範囲内にある場合、例えば、目標演算操作とそれ以降の他の演算操作との間の演算間隔が3〜5つの演算操作である場合には、目標出力データの読み取りの回数を減らすように、当該目標出力データを第1のメモリに記憶してもよい。目標演算操作以降の他の演算操作と目標演算操作との間の間隔が予め設定された範囲を超える場合、第1のメモリの記憶域スペースが目標演算操作の目標出力データによって長時間で占められることを避けるために、当該目標出力データを第1のメモリから第2のメモリに移動してもよい。
【0112】
一実施例において、前記方法は、更に、以下のステップを含む。
【0113】
プロセッサは、目標演算操作の目標入力データのデータ容量に応じて目標入力データの第1のメモリにおける記憶アドレスを決定し、目標演算操作の目標出力データのデータ容量に応じて目標出力データの第1のメモリにおける記憶アドレスを決定してもよい。
【0114】
具体的には、プロセッサは、目標演算操作の目標入力データのデータ容量に応じて、第1のメモリにおいて目標入力データにそのデータ容量と一致する記憶域スペースを割り当て、その記憶域スペースの記憶アドレスを当該標入力データに割り当てる。このように、実際の演算過程では、目標入力データを第1のメモリ上の指定された記憶域スペースにロードすることができる。同様に、プロセッサは、目標演算操作の目標出力データのデータ容量に応じて、第1のメモリにおいて目標入力データにそのデータ容量と一致する記憶域スペースを割り当て、その記憶域スペースの記憶アドレスを当該標出力データに割り当てる。このように、実際の演算過程では、目標出力データを第1のメモリの指定された記憶域スペースに記憶することができる。
【0115】
一実施例において、前記方法は、更に、以下のステップを含む。
【0116】
目標演算操作の目標入力データを使用し続ける必要がない場合、プロセッサは、目標入力データの記憶アドレスの一部又は全部を目標演算操作の目標出力データに割り当ててもよい。このように、1つの記憶域スペースを複数回再利用することで、第1のメモリのスペースの使用率を向上させることができる。
【0117】
好ましくは、プロセッサは、上記の各目標演算操作の目標入力データの記憶アドレス、目標出力データの記憶アドレス、中間計算結果の記憶アドレス、及び第1のメモリ上の各記憶域スペースの更新規則などを記録し、上記のデータに対応する記憶アドレスに基づいて、処理されるべき演算に対応する記憶割当規則を取得してもよい。プロセッサは、当該処理されるべき演算を実行する必要がある場合、当該処理されるべき演算に対応する記憶割当規則を取得し、当該記憶割当規則に基づいて、演算過程の様々なデータの読み書き操作や記憶場所などを決定してもよい。
【0118】
一実施例において、上記のデータ前処理方法は、
図2−
図4に示されるコンピュータ機器にも適用することができる。この場合、予め設定された演算割当規則に基づいて、当該演算操作の一部がメイン処理回路によって実行され、当該演算操作の他の一部がスレーブ処理回路によって実行される必要がある。それに対応して、複数の第1のメモリは、メインメモリとスレーブメモリとを含み、当該メインメモリは、メイン処理回路に近接して配置され、更に、メイン処理回路のオンチップメモリであってもよい。当該スレーブメモリは、スレーブ処理回路に近接して配置され、更に、スレーブ処理回路のオンチップメモリであってもよい。この場合、当該目標演算操作に対応する目標入力データの一部は、メインメモリにロードされてメイン処理回路によって実行され、当該目標演算操作に対応する目標入力データの他の一部は、1つ以上のスレーブメモリにロードされて各スレーブメモリに対応するスレーブ処理回路によって実行される必要がある。
【0119】
具体的には、
図10に示すように、
図2−
図4に示されるコンピュータ機器は上記のデータ前処理方法を実行する場合、以下のステップを含む。
【0120】
S600:メインメモリの使用可能な記憶容量、スレーブメモリの使用可能な記憶容量、及び目標演算操作を取得する。
【0121】
具体的には、プロセッサは、当該メインメモリの構成情報(例えば、当該メインメモリのモデルなどの情報)に応じて、当該メインメモリの総記憶容量を取得してもよい。更に、プロセッサは、当該メインメモリの総記憶容量及び当該メインメモリの占められた記憶容量に基づいて、当該メインメモリの使用可能な記憶容量を取得してもよい。同様に、プロセッサは、当該スレーブメモリの構成情報に基づいて、スレーブメモリの総記憶容量を取得し、当該スレーブメモリの総記憶容量及びスレーブメモリの占められた記憶容量に基づいて、スレーブメモリの使用可能な記憶容量を取得してもよい。好ましくは、プロセッサのメイン処理回路は、メインメモリの使用可能な記憶容量を取得し、各スレーブ処理回路は、対応するスレーブメモリの使用可能な記憶容量を取得し、対応するスレーブメモリの使用可能な記憶容量をメイン処理回路に伝送してもよい。
【0122】
それと同時に、プロセッサのコントローラユニットは、処理されるべき演算を取得して、当該処理されるべき演算の解析結果などのデータをメイン処理回路に送信してもよい。メイン処理回路は、処理されるべき演算、メインメモリの使用可能な記憶容量、及びスレーブメモリの使用可能な記憶容量に基づいて、目標演算操作を決定してもよい。好ましくは、当該処理されるべき演算に含まれた演算操作は、加算、減算、乗算、除算、畳み込み、プーリング(Pooling)、及び活性化(例えば、Relu)などの演算であってもよい。当該目標演算操作は、処理されるべき演算のうちの1つ又は複数の演算操作の組み合わせであってもよい。
【0123】
S700:前記メインメモリの使用可能な記憶容量、前記スレーブメモリの使用可能な記憶容量、及び前記目標演算操作に基づいて、前記目標演算操作に対応する目標入力データを決定し、前記目標入力データは、前記目標演算操作に対応する全入力データの一部又は全部である。
【0124】
具体的には、プロセッサのメイン処理回路は、当該目標演算操作に基づいて、当該目標演算操作を完成させるのに必要な全入力データ及び当該全入力データのデータ容量(即ち、当該全入力データに占められる記憶域スペースの大きさ)を決定してもよい。また、メイン処理回路は、メインメモリの使用可能な記憶容量、各スレーブメモリの使用可能な記憶容量、及び当該目標演算操作の全入力データのデータ容量に基づいて、当該目標演算操作に対応する目標入力データ及びそのデータ容量を決定してもよい。
【0125】
S800:前記目標演算操作と前記目標入力データに基づいて、前記目標演算操作に対応する目標出力データを決定する。
【0126】
具体的には、処理されるべき演算の計算量は静的な解析が可能であるため、プロセッサのメイン処理回路は、当該目標演算操作の目標入力データ及び当該目標演算操作に基づいて、当該目標演算操作の目標出力データや当該目標出力データのデータ容量などの情報を取得することができ、即ち、プロセッサのメイン処理回路は、当該目標演算操作の目標出力データに占められる記憶域スペースを取得することができる。
【0127】
S900:前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合には、前記目標出力データを対応して前記メインメモリに記憶する。
【0128】
具体的には、メイン処理回路は、予め設定された演算割当規則に基づいて、当該メイン処理回路に対応する目標入力データをメインメモリ及びスレーブメモリに割り当ててもよく、それにより、メイン処理回路とスレーブ処理回路とは互いに協力して目標演算操作を実行することができる。当該目標演算操作の実行中、スレーブ処理回路は、そのスレーブメモリ上の目標入力データを処理して中間計算結果を得てもよい。スレーブ処理回路は、当該中間計算結果をメイン処理回路に伝送してもよい。メイン処理回路は、そのメインメモリ上の目標入力データを処理して、各スレーブ処理回路によって伝送された中間計算結果に基づいて、当該目標演算操作の目標出力データを得てもよい。当該目標演算操作に対応する目標出力データはそれ以降の他の演算操作の入力データである場合には、当該目標出力データをメインメモリに記憶してもよく、それにより、データの読み取りの回数を減らし、プロセッサの演算速度を向上させることができる。
【0129】
一実施例において、
図11に示すように、上記のステップS700は、更に、
前記メインメモリの使用可能な記憶容量と各前記スレーブメモリの使用可能な記憶容量とを比較し、最も小さい使用可能な記憶容量を第1のメモリの使用可能な記憶容量とするステップS710と、
当該第1のメモリの使用可能な記憶容量及び目標演算操作に基づいて、目標演算操作に対応する目標入力データを決定するステップS720と、を含んでよい。
【0130】
具体的には、当該目標演算操作を実行するためには、マスタ処理回路とスレーブ処理回路とがお互いに協力する必要があるので、メインメモリとスレーブメモリとが目標演算操作の目標入力データに占められるスペースを同時に満たすことを確保しなければならない。即ち、当該目標入力データのデータ容量は、メインメモリの使用可能な記憶容量より小さく、且つ、当該目標入力データのデータ容量は、スレーブメモリの使用可能な記憶容量より小さい。したがって、メインメモリの使用可能な記憶容量と各スレーブメモリの使用可能な記憶容量とを比較して、メインメモリ及び各スレーブメモリの最も小さい使用可能な記憶容量をプロセッサの第1のメモリの使用可能な記憶容量としてもよい。次いて、メイン処理回路は、第1のメモリの使用可能な記憶容量及び目標演算操作に基づいて、当該目標演算操作に対応する目標入力データを決定する。
【0131】
一実施例において、メイン処理回路は、予め設定された演算割当規則に基づいて目標入力データを分割し、当該目標入力データを複数のデータブロックに割り当て、各データブロックに対応する処理回路を決定してもよい。目標入力データのうちメイン処理回路によって処理されたデータブロックを第1の目標入力データとして記録してもよい。目標入力データのうちスレーブ処理回路で処理されたデータブロックを第2の目標入力データとして記録してもよい。更に、各スレーブ処理回路に対応する第2の目標入力データのデータ容量は等しくなくてもよく、具体的には、演算割当規則によって決定される。具体的には、前記方法は、以下のステップを更に含む。
【0132】
予め設定された演算割当規則に基づいて、前記メインメモリに対応する第1の目標入力データ、及び各前記スレーブメモリに対応する第2の目標入力データを決定する。具体的には、メイン処理回路は、予め設定された演算割当規則に基づいて、目標演算操作のどの目標入力データがメイン処理回路によって処理されるか、目標演算操作のどの目標入力データが各スレーブ処理回路によって処理されるかを決定してもよい。
【0133】
例えば、
図9に示すように、現在の目標演算操作は、プーリング演算操作であり、プーリング層のB1−B2区間の演算を完了しようとする場合には、当該目標演算操作に必要とされる目標入力データはC1−C2である。メインプロセッサは、予め設定された演算割当規則に基づいて、入力データC1−C3を第2の目標入力データとして、当該第2の目標入力データC1−C3をスレーブメモリに記憶してもよい。入力データC3−C2を第1の目標入力データとして、当該第1の目標入力データC3−C2をメインメモリに記憶する。
【0134】
更に、上記の方法は、以下のステップを更に含む。
【0135】
プロセッサは、更に、メインメモリの使用可能な記憶容量及び前記第1の目標入力データのデータ容量に基づいて、第1の目標入力データのメインメモリにおける記憶アドレスを決定してもよい。具体的には、メイン処理回路は、メインメモリの使用可能な記憶容量及び第1の目標入力データのデータ容量に基づいて、当該第1の目標入力データのメインメモリにおける記憶アドレスを決定してもよい。また、メイン処理回路は、更に、第1の目標入力データのデータ容量及び目標演算操作に基づいて、第1の目標入力データに対応する第1の目標出力データ及びそのデータ容量を決定し、第1の目標出力データのメインメモリにおける記憶アドレスを決定してもよい。
【0136】
プロセッサは、更に、スレーブメモリの使用可能な記憶容量及び前記第2の目標入力データのデータ容量に基づいて、第2の目標入力データのスレーブメモリにおける記憶アドレスを決定してもよい。具体的には、メイン処理回路は、各スレーブメモリの使用可能な記憶容量及びそれに対応する第2の目標入力データのデータ容量に基づいて、各第2の目標入力データのそれに対応するスレーブメモリにおける記憶アドレスを決定してもよい。また、メイン処理回路は、更に、各第2の目標入力データのデータ容量及び目標演算操作に基づいて、各第2の目標入力データに対応する第2の目標出力データ及びそのデータ容量を決定し、各第2の目標出力データのそれに対応するスレーブメモリにおける記憶アドレスを決定してもよい。
【0137】
更に、各スレーブ処理回路は、計算で得られた第2の目標出力データをメイン処理回路に伝送し、メイン処理回路は、各第2の目標出力データのメインメモリにおける記憶アドレスを更に決定してもよい。
【0138】
一実施例において、当該スレーブ処理回路で実行された他の目標演算操作はそれに対応する第2の目標出力データを使用し続ける必要がある場合には、当該第2の目標出力データを、スレーブ処理回路に対応するスレーブメモリに一時的に記憶してもよい。これにより、メインメモリとスレーブメモリとの間のデータの読み取り操作を減らし、プロセッサの演算速度を更に向上させることができる。
【0139】
一実施例において、上記の目標演算操作は1つ以上の演算操作を含み、即ち、当該目標演算操作は、1つ以上の演算操作の組み合わせである。一般に、当該目標演算操作に含まれる各演算操作は、異なる演算を実現するための異なる演算操作である。この場合、プロセッサのメイン処理回路は、第1のメモリの使用可能な記憶容量に基づいて各演算操作に対応するサブ目標入力データを決定して、各演算操作に対応するサブ目標入力データに基づいて当該目標演算操作に対応する目標入力データを決定してもよい。具体的には、当該目標入力データを決定する過程は、上記の方法のステップS210〜S230と一致し、詳細については、上記の説明を参照し、ここでは再度説明しない。
【0140】
また、当該目標演算操作は1つ以上の演算操作を含む場合、その1つ以上の演算操作は、第1の目標演算操作と第2の目標演算操作とに分けられてもよい。メイン処理回路は、予め設定された演算割当規則に基づいて、目標演算操作の第1の目標演算操作をメイン処理回路に割り当て、目標演算操作の第2の目標演算操作をスレーブ処理回路に割り当ててもよい。これに対応して、メイン処理回路は、第1の目標演算操作に必要とされる入力データをメインメモリに記憶し、第2の目標演算操作に必要とされる入力データを対応するスレーブメモリに記憶してもよい。
【0141】
例えば、
図9に示すように、第1のメモリの使用可能な記憶容量はプーリング演算操作の目標入力データC1−C2及び活性化演算操作の目標入力データB1−B2を収容できる場合、当該プーリング演算操作と活性化演算操作を、1つの目標演算操作に相当させてもよい。この場合、当該目標演算操作の目標入力データは、C1−C2区間内にあるデータであってもよい。この場合、メイン処理回路は、予め設定された演算規則に基づいて、活性化演算操作を第1の目標演算操作としてメイン処理回路自体に割り当て、プーリング演算操作を第2の目標演算操作としてスレーブ処理回路に割り当ててもよい。これに対応して、プーリング演算操作に必要とされる入力データC1−C2をスレーブメモリにロードし、活性化演算操作に必要とされる入力データB1−B2をメインメモリにロードしてもよい。プーリング演算操作と活性化演算操作との間には依存関係があるため、プーリング演算操作を完成させた後、活性化演算操作に必要とされる入力データB1−B2をメインメモリにロードしてもよい。
【0142】
一実施例において、目標演算操作の目標入力データは当該目標演算操作に対応する全入力データの一部のみである場合、当該目標演算操作の各目標入力データは、当該目標演算操作の一部の演算を完成させるためにのみ使用される。当該目標演算操作の処理速度を向上させ、第1のメモリの記憶域スペースを十分に利用するために、当該目標演算操作に対応する目標入力データの数は1つ以上であり、各目標入力データは全入力データの一部であり、即ち、各目標入力データは、全入力データの1つ以上の入力データブロックを含んでもよい。つまり、1つ以上の目標入力データを同時に第1のメモリにロードしてもよい。更に、当該目標入力データの数に応じて、当該目標演算操作を複数のサブ目標演算操作に分割してもよい。好ましくは、各サブ目標演算操作は、同じ演算を実現することができる。
【0143】
メイン処理回路は、第1のメモリの使用可能な記憶容量及び各目標演算操作に必要とされる目標記憶容量の大きさに基づいて、目標演算操作の数を決定してもよく、それにより、1つ以上の目標演算操作の目標入力データを第1のメモリに同時にロードすることができる。具体的には、目標演算操作の数を決定する過程は、上記の方法のステップS500〜S520と一致し、詳細については、上記の説明を参照し、ここでは再度説明しない。
【0144】
当業者であれば分かるように、
図5−
図7のフローチャート及び
図10−
図11の各ステップは矢印のように順番に示されるが、必ずしも矢印のように順番に実行される必要はない。本明細書で特に説明しない限り、上記ステップの実行順番は厳密には限定されず、他の順番で実行されてもよい。更に、
図5−
図7及び
図10−
図11のステップの少なくとも一部は、複数のサブステップ又は複数の段階を含んでもよい。当該サブステップ又は段階は、必ずしも同じタイミングで実行される必要はなく、異なるタイミングで実行されてもよい。更に、当該サブステップ又は段階の実行も、必ずしも順次行われる必要はなく、他のステップ又は他のステップにおけるサブステップ又は段階の少なくとも一部と順番に又は交互に実行されてもよい。
【0145】
当業者であれば分かるように、
図5−
図7のフローチャート及び
図10−
図11の各ステップは矢印のように順番に示されるが、必ずしも矢印のように順番に実行される必要はない。本明細書で特に説明しない限り、上記ステップの実行順番は厳密には限定されず、他の順番で実行されてもよい。更に、
図5−
図7及び
図10−
図11のステップの少なくとも一部は、複数のサブステップ又は複数の段階を含んでもよい。当該サブステップ又は段階は、必ずしも同じタイミングで実行される必要はなく、異なるタイミングで実行されてもよい。更に、当該サブステップ又は段階の実行も、必ずしも順次行われる必要はなく、他のステップ又は他のステップにおけるサブステップ又は段階の少なくとも一部と順番に又は交互に実行されてもよい。
【0146】
当業者であれば分かるように、上記の実施例に係る方法のフローの全部又は一部は、コンピュータプログラムにより関連するハードウェアを指示することで実現されてもよい。前記コンピュータプログラムは、不揮発性コンピュータ可読記憶媒体に記憶されてもよく、当該コンピュータプログラムが実行されると、上記の方法の実施例のフローを実現することができる。本明細書で提供される各実施例で用いられるメモリ、記憶装置、データベース、又は他の媒体への任意の言及は、不揮発性及び/又は揮発性メモリを含んでもよい。不揮発性メモリとして、読み出し専用メモリ(Read Only Memory、ROM)、プログラマブルROM(Programmable Read Only Memory、PROM)、電気的にプログラマブルROM(Electrically Programmable Read Only Memory、EPROM)、電気的に消去可能なプログラマブルROM(Electrically Erasable Programmable Read Only Memory、EEPROM)、又はフラッシュメモリが挙げられる。揮発性メモリは、ランダムアクセスメモリ(RAM)又は外部キャッシュメモリであってもよい。限定ではなく説明するためのRAMとして、スタティックRAM(Static RAM、SRAM)、ダイナミックRAM(Dynamic RAM、DRAM)、シンクロナスDRAM(Synchronous DRAM、SDRAM)、ダブルデータレートSDRAM(Double−Data−Rate SDRAM、DDRSDRAM)、エンハンストSDRAM(Enhanced SDRAM、ESDRAM)、シンクリンクDRAM(Synchlink DRAM、SLDRAM)、ラムバスダイレクトRAM(Rambus Direct RAM、RDRAM)、ダイレクトラムバスダイナミックRAM(Direct Rambus Dynamic RAM、DRDRAM)、及びラムバスダイナミックRAM(Rambus Dynamic RAM、RDRAM)等が挙げられる。
【0147】
一実施例において、
図12に示すように、本発明の実施例により、取得モジュール410、入力決定モジュール420、出力決定モジュール430、及び記憶割当モジュール440を含むデータ前処理装置が提供される。取得モジュール410は、第1のメモリの使用可能な記憶容量及び目標演算操作を取得するように構成され、入力決定モジュール420は、前記目標演算操作及び前記第1のメモリの使用可能な記憶容量に基づいて、前記目標演算操作に対応する目標入力データを決定するように構成され、出力決定モジュール430は、前記目標演算操作と前記目標入力データに基づいて、前記目標演算操作の目標出力データを決定するように構成され、記憶割当モジュール440は、前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合には、前記目標演算操作の目標出力データをプロセッサに近接して配置された前記第1のメモリに記憶するように構成される。
【0148】
好ましくは、前記目標演算操作は、1つ以上の演算操作を含み、各前記演算操作は、それぞれサブ目標入力データに対応する。
図13に示すように、前記入力決定モジュール420は、融合決定ユニット421と入力決定ユニット422とを更に含む。融合決定ユニット421は、前記第1のメモリの使用可能な記憶容量及び前記処理されるべき演算のうちの各演算操作の融合属性に基づいて、融合可能な演算操作の数を決定し、融合数閾値を得るように構成される。入力決定ユニット422は、前記融合数閾値より大きくない選択された数の前記融合可能な演算操作の組み合わせを前記目標演算操作とし、前記選択された数の融合可能な演算操作に対応するサブ目標入力データを前記目標演算操作に対応する目標入力データとするように構成される。
【0149】
好ましくは、前記処理されるべき演算は、複数の演算層を含むニューラルネットワーク演算であり、各前記演算層は、1つの前記演算操作を表し、前記融合決定ユニット421は、更に、前記ニューラルネットワーク演算の各演算層の間の接続関係に応じて、各前記演算操作の融合属性を決定するように構成される。
【0150】
好ましくは、記憶割当モジュール440は、更に、前記目標演算操作のうちの現在の演算操作によって出力された中間計算結果が前記目標演算操作のうちの他の演算操作の入力データとされる必要がある場合、或いは、前記現在の演算操作によって出力された中間計算結果が他の演算操作の入力データとされる必要がある場合、前記現在の演算操作によって出力された中間計算結果を第1のメモリに記憶し、或いは、前記現在の演算操作によって出力された中間計算結果を第1のメモリと第2のメモリとに記憶するように構成される。
【0151】
好ましくは、前記目標演算操作は、1つ以上のサブ目標演算操作を含み、各前記サブ目標演算操作は、それぞれ1つの前記目標入力データに対応し、前記目標演算操作に対応する全入力データは、複数の入力データブロックを含み、前記目標演算操作に対応する目標入力データの数は、1つ以上であり、各前記目標入力データは、それぞれ1つ以上の前記入力データブロックを含む。入力決定モジュール420は、各前記サブ目標演算操作の目標入力データのデータ容量及び目標出力データのデータ容量に応じて、それぞれ各前記サブ目標演算操作に必要とされる目標記憶容量を決定し、前記第1のメモリの使用可能な記憶容量及び現在のサブ目標演算操作に必要とされる目標記憶容量に基づいて、前記第1のメモリの残り記憶容量を決定し、前記第1のメモリの残り記憶容量及び前記現在のサブ目標演算操作以外の他のサブ目標演算操作に必要とされる目標記憶容量に応じて、前記サブ目標演算操作の数を決定するように構成される。
【0152】
好ましくは、前記記憶割当モジュール440は、更に、1つ以上の前記サブ目標演算操作の目標入力データの間に交差部分がある場合、前記1つ以上のサブ目標演算操作の目標入力データの間の交差部分を前記第1のメモリに記憶するように構成される。
【0153】
好ましくは、前記記憶割当モジュール440は、更に、前記目標演算操作の目標入力データのデータ容量に応じて、前記目標入力データの前記第1のメモリにおける記憶アドレスを決定し、前記目標演算操作の目標出力データのデータ容量に応じて、前記目標出力データの前記第1のメモリにおける記憶アドレスを決定し、前記目標演算操作以降の他の演算操作が前記目標演算操作の目標入力データを使用する必要がない場合、前記目標演算操作を完了させた後、前記目標演算操作に対応する目標入力データの記憶アドレスの一部又は全部を、前記目標演算操作の目標出力データに割り当てるように構成される。
【0154】
他の実施例において、
図12に示すように、取得モジュール410は、メインメモリの使用可能な記憶容量、スレーブメモリの使用可能な記憶容量、及び目標演算操作を取得するように構成され、入力決定モジュール420は、前記メインメモリの使用可能な記憶容量、前記スレーブメモリの使用可能な記憶容量、及び前記目標演算操作に基づいて、前記目標演算操作に対応する目標入力データを決定するように構成され、出力決定モジュール430は、前記目標演算操作及び前記目標入力データに基づいて、前記目標演算操作に対応する目標出力データを決定するように構成され、記憶割当モジュール440は、前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合には、前記目標出力データを対応して前記メインメモリに記憶するように構成される。
【0155】
好ましくは、
図14に示すように、前記データ前処理装置は、前記メインメモリの使用可能な記憶容量と各前記スレーブメモリの使用可能な記憶容量とを比較し、最も小さい使用可能な記憶容量を第1のメモリの使用可能な記憶容量とするように構成される記憶容量決定モジュール450を更に含む。入力決定モジュール420は、具体的には、前記第1のメモリの使用可能な記憶容量及び目標演算操作に基づいて、目標演算操作に対応する目標入力データを決定するように構成される。
【0156】
好ましくは、前記目標演算操作は、1つ以上の演算操作を含み、各前記演算操作は、それぞれサブ目標入力データに対応し、前記入力決定モジュール420は、融合決定ユニット421と入力決定ユニット422を更に含む。融合決定ユニット421は、前記第1のメモリの使用可能な記憶容量及び前記処理されるべき演算の各演算操作の融合属性に基づいて、融合可能な演算操作の数を決定し、融合数閾値を得るように構成される。入力決定ユニット422は、前記融合数閾値より大きくない選択された数の前記融合可能な演算操作の組み合わせを前記目標演算操作とし、前記選択された数の各融合可能な演算操作に対応するサブ目標入力データを、前記目標演算操作に対応する目標入力データとするように構成される。
【0157】
好ましくは、前記処理されるべき演算は、複数の演算層を含むニューラルネットワーク演算であり、各前記演算層は、1つの前記演算操作を表し、前記融合決定ユニット421は、更に、前記ニューラルネットワーク演算の各演算層の間の接続関係に応じて、各前記演算操作の融合属性を決定するように構成される。
【0158】
好ましくは、前記目標演算操作は、1つ以上のサブ目標演算操作を含み、各前記サブ目標演算操作は、それぞれ1つの前記目標入力データに対応し、前記目標演算操作に対応する全入力データは複数の入力データブロックを含み、前記目標演算操作に対応する目標入力データの数は1つ以上であり、各前記目標入力データは、それぞれ1つ以上の前記入力データブロックを含む。前記入力決定モジュールは、更に、各前記サブ目標演算操作の目標入力データのデータ容量及び目標出力データのデータ容量に応じて、それぞれ各前記サブ目標演算操作に必要とされる目標記憶容量を決定し、前記第1のメモリの使用可能な記憶容量及び現在のサブ目標演算操作に必要とされる目標記憶容量に基づいて、前記第1のメモリの残り記憶容量を決定し、前記第1のメモリの残り記憶容量及び前記現在のサブ目標演算操作以外の他のサブ目標演算操作に必要とされる目標記憶容量に応じて、前記サブ目標演算操作の数を決定するように構成される。
【0159】
好ましくは、前記目標入力データは、第1の目標入力データと、第2の目標入力データとを含み、前記入力決定モジュール420は、更に、予め設定された演算割当規則に基づいて、前記メインメモリに対応する第1の目標入力データ及び各前記スレーブメモリに対応する第2の目標入力データを決定するように構成され、前記記憶割当モジュール440は、更に、前記メインメモリの使用可能な記憶容量及び前記第1の目標入力データのデータ容量に応じて、前記第1の目標入力データの前記メインメモリにおける記憶アドレスを決定し、各前記スレーブメモリの利用可能な記憶容量および対応する前記第2の目標入力データのデータ容量に応じて、それぞれ各前記第2の目標入力データの前記スレーブメモリにおける記憶アドレスを決定するように構成される。
【0160】
好ましくは、前記目標出力データは、第1の目標出力データと、第2の目標出力データとを含み、前記出力決定モジュール430は、更に、前記目標演算操作及び前記第1の目標入力データに基づいて、前記第1の目標出力データ及び前記第1の目標出力データの前記メインメモリにおける記憶アドレスを決定し、前記目標演算操作及び各前記第2の目標入力データに基づいて、各前記第2の目標出力データ及び各前記第2の目標出力データの対応する前記スレーブメモリにおける記憶アドレスをそれぞれ決定し、各前記第2の目標出力データに基づいて、各前記第2の目標出力データの前記メインメモリにおける記憶アドレスをそれぞれ決定するように構成される。
【0161】
好ましくは、前記記憶割当モジュール440は、更に、前記スレーブ処理回路で実行された他の目標演算操作は前記第2の目標出力データを使用する必要がある場合には、前記第2の目標出力データを、前記スレーブ処理回路に対応するスレーブメモリに記憶するように構成される。また、前記記憶割当モジュール440は、更に、前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合には、前記目標出力データを対応して前記メインメモリと前記第2のメモリに記憶するように構成される。
【0162】
当業者であれば分かるように、当該装置の動作原理は上記の方法の各ステップの実行過程と一致し、詳細については、上記の説明を参照し、ここでは再度説明しない。
【0163】
一実施例において、本発明は、プロセッサによって実行されると、上記の実施例何れか一項に記載の方法のステップを実現するコンピュータプログラムが記憶されているコンピュータ可読記憶媒体を提供する。具体的には、当該コンピュータープログラムがプロセッサによって実行される際に、
第1のメモリの使用可能な記憶容量及び目標演算操作を取得するステップと、
目標演算操作及び第1のメモリの使用可能な記憶容量に基づいて、前記目標演算操作に対応する目標入力データ、即ち、前記目標演算操作に対応する全入力データの一部又は全部である目標入力データを決定するステップと、
前記目標演算操作及び前記目標入力データに基づいて、前記目標演算操作の目標出力データを決定するステップと、
前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合、前記目標演算操作の目標出力データをプロセッサに近接して配置された前記第1のメモリに記憶するステップと、を実現する。
【0164】
また、プロセッサは、メイン処理回路とスレーブ処理回路を含むマスタスレーブ構造であってもよく、この場合、プロセッサは上記のコンピュータプログラムを実行すると、具体的には、
メインメモリの使用可能な記憶容量、スレーブメモリの使用可能な記憶容量、及び目標演算操作を取得するステップと、
目標演算操作及び第1のメモリの使用可能な記憶容量に基づいて、前記目標演算操作に対応する目標入力データ、即ち、前記目標演算操作に対応する全部の入力データの一部又は全部である目標入力データを決定するステップと、
前記目標演算操作及び前記目標入力データに基づいて、前記目標演算操作に対応する目標出力データを決定するステップと、
前記目標演算操作の目標出力データが前記目標演算操作以降の他の演算操作の入力データである場合、前記目標出力データを対応して前記メインメモリに記憶するステップと、を実現する。
【0165】
当業者であれば分かるように、プロセッサによってコンピュータプログラムを実行するプロセスは、上記の方法の各ステップの実行プロセスと一致し、詳細については、上記の説明を参照し、ここでは再度説明しない。
【0166】
前記実施例の各技術特徴は任意に組み合わせることができ、説明の便宜上、前記実施例の各技術特徴の全ての組合せを説明していないが、これらの技術特徴の組合せは矛盾しなければ、本明細書に記載範囲に含まれると理解されるのが当然である。
【0167】
以上、前記実施例により本発明のいくつかの実施形態を具体的に説明したが、本発明はこれらに限定されていない。当業者にとっては、本発明の精神を逸脱しないかぎり、様々の変形や改良も本発明の保護範囲に含まれる。よって、本発明の保護範囲は特許請求の範囲によるものである。