(57)【要約】      （修正有）【課題】行列演算を効率良く行う演算装置を提供する。【解決手段】演算装置であって、第１ベクトルを分割した第１の複数の部分ベクトルのうち、第１部分ベクトルを少なくとも記憶するベクトル記憶部と、第１ベクトルに乗じる第１行列を行方向および列方向に分割した第１の複数の部分行列のうち、第１部分ベクトルに乗じるべき第１部分行列を少なくとも記憶する行列記憶部とパイプライン演算により、行列記憶部に記憶された部分行列とベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部と、パイプライン演算部が、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算中に、第１部分ベクトルまたは第１部分行列を用いた他の行列ベクトル積の演算の実行をパイプライン演算部に指示する演算制御部とを備える。【選択図】図３
2020201659.tif 000002
【特許請求の範囲】
【請求項１】
第１ベクトルを分割した第１の複数の部分ベクトルのうち、第１部分ベクトルを少なくとも記憶するベクトル記憶部と、
前記第１ベクトルに乗じる第１行列を行方向および列方向に分割した第１の複数の部分行列のうち、前記第１部分ベクトルに乗じるべき第１部分行列を少なくとも記憶する行列記憶部と、
パイプライン演算により、前記行列記憶部に記憶された部分行列と前記ベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部と、
前記パイプライン演算部が、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積のパイプライン演算中に、前記第１部分ベクトルまたは前記第１部分行列を用いた他の行列ベクトル積の演算の実行を前記パイプライン演算部に指示する演算制御部と
を備える演算装置。
【請求項２】
前記ベクトル記憶部は、前記第１の複数の部分ベクトルのうち、第２部分ベクトルを更に記憶し、
前記行列記憶部は、前記第１の複数の部分行列のうち、前記第２部分ベクトルに乗じるべき第２部分行列を更に記憶し、
前記演算制御部は、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積の演算結果が遅延なく利用可能となるサイクル以降に、前記第２部分行列および前記第２部分ベクトルの行列ベクトル積を、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積の演算結果に加える演算の実行を前記パイプライン演算部に指示する
請求項１に記載の演算装置。
【請求項３】
前記ベクトル記憶部は、前記第１行列を乗じるべき第２ベクトルを分割した第２の複数の部分ベクトルのうち、前記第１部分行列を乗じるべき第３部分ベクトルを更に記憶し、
前記演算制御部は、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積のパイプライン演算中に、前記他の行列ベクトル積の演算として、前記第１部分行列および前記第３部分ベクトルの行列ベクトル積の演算の実行を前記パイプライン演算部に指示する
請求項１または２に記載の演算装置。
【請求項４】
前記第１ベクトルおよび前記第２ベクトルは、前記第１行列に乗じるべき第２行列に含まれる列ベクトルである請求項３に記載の演算装置。
【請求項５】
前記ベクトル記憶部は、前記第２行列に含まれる複数の前記第２ベクトルを記憶し、
前記演算制御部は、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、前記第１部分行列および前記複数の第２ベクトルのそれぞれからの前記第３部分ベクトルの行列ベクトル積の演算で充填する
請求項４に記載の演算装置。
【請求項６】
前記行列記憶部は、前記第１の複数の部分行列のうち、前記第１部分ベクトルに乗じるべき第３部分行列を更に記憶し、
前記演算制御部は、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積のパイプライン演算中に、前記他の行列ベクトル積の演算として、前記第３部分行列および前記第１部分ベクトルの行列ベクトル積の演算の実行を前記パイプライン演算部に指示する
請求項１または２に記載の演算装置。
【請求項７】
前記行列記憶部は、複数の前記第３部分行列を記憶し、
前記演算制御部は、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、前記複数の第３部分行列のそれぞれおよび前記第１部分ベクトルの行列ベクトル積の演算で充填する
請求項６に記載の演算装置。
【請求項８】
ベクトル記憶部が、第１ベクトルを分割した第１の複数の部分ベクトルのうち、第１部分ベクトルを少なくとも記憶し、
行列記憶部が、前記第１ベクトルに乗じる第１行列を行方向および列方向に分割した第１の複数の部分行列のうち、前記第１部分ベクトルに乗じるべき第１部分行列を少なくとも記憶し、
パイプライン演算により、前記行列記憶部に記憶された部分行列と前記ベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部が、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積のパイプライン演算中に、前記第１部分ベクトルまたは前記第１部分行列を用いた他の行列ベクトル積の演算の実行を開始する
演算方法。
【請求項９】
演算装置によって実行される演算プログラムであって、
前記演算装置は、
第１ベクトルを分割した第１の複数の部分ベクトルのうち、第１部分ベクトルを少なくとも記憶するベクトル記憶部と、
前記第１ベクトルに乗じる第１行列を行方向および列方向に分割した第１の複数の部分行列のうち、前記第１部分ベクトルに乗じるべき第１部分行列を少なくとも行列記憶部と、
パイプライン演算により、前記行列記憶部に記憶された部分行列と前記ベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部と
を備え、
当該演算プログラムは、前記演算装置に、前記第１部分行列および前記第１部分ベクトルの行列ベクトル積のパイプライン演算中に、前記第１部分ベクトルまたは前記第１部分行列を用いた他の行列ベクトル積の演算の実行を開始させるためのものである
演算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置、演算方法、および演算プログラムに関する。
【背景技術】
【０００２】
例えば数値計算および深層学習といった種々の応用において、行列行列積（以下、「行列積」と示す。）および行列ベクトル積は、計算量の大部分を占める。このため、このような行列演算を効率良く実行する演算装置および演算方法が開発されている（特許文献１〜３参照）。また、行列演算を実行可能なプロセッサも開発されている。
［先行技術文献］
［特許文献］
［特許文献１］国際公開第２０１８／２０７９２６号
［特許文献２］特開２０１８−１３９０４５号公報
［特許文献３］特開２０１８−１９７９０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ｎ次元正方行列およびｎ次元ベクトルの行列ベクトル積は、ｎ２の乗算および約ｎ２の加算を含み、約２ｎ２の演算量となる。このため、ｎ次元正方行列が固定である場合、行列ベクトル積の演算量は、ｎ次元ベクトルの入力に対してｎ２オーダーとなる。したがって、行列サイズを大きくして行列演算器を大きくすれば、演算量に対するデータのロード量の比率を小さくすることができる。しかし、行列演算器を大きくすると、レジスタファイル等のロード／ストア能力が相対的に低くなり、サイズが小さい行列の演算および行列以外の演算の処理性能が相対的に低くなってしまう。
【課題を解決するための手段】
【０００４】
上記課題を解決するために、本発明の第１の態様においては、演算装置を提供する。演算装置は、第１ベクトルを分割した第１の複数の部分ベクトルのうち、第１部分ベクトルを少なくとも記憶するベクトル記憶部を備えてよい。演算装置は、第１ベクトルに乗じる第１行列を行方向および列方向に分割した第１の複数の部分行列のうち、第１部分ベクトルに乗じるべき第１部分行列を少なくとも記憶する行列記憶部を備えてよい。演算装置は、パイプライン演算により、行列記憶部に記憶された部分行列とベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部を備えてよい。演算装置は、パイプライン演算部が、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算中に、第１部分ベクトルまたは第１部分行列を用いた他の行列ベクトル積の演算の実行をパイプライン演算部に指示する演算制御部を備えてよい。
【０００５】
ベクトル記憶部は、第１の複数の部分ベクトルのうち、第２部分ベクトルを更に記憶してよい。行列記憶部は、第１の複数の部分行列のうち、第２部分ベクトルに乗じるべき第２部分行列を更に記憶してよい。演算制御部は、第１部分行列および第１部分ベクトルの行列ベクトル積の演算結果が遅延なく利用可能となるサイクル以降に、第２部分行列および第２部分ベクトルの行列ベクトル積を、第１部分行列および第１部分ベクトルの行列ベクトル積の演算結果に加える演算の実行をパイプライン演算部に指示してよい。
【０００６】
ベクトル記憶部は、第１行列を乗じるべき第２ベクトルを分割した第２の複数の部分ベクトルのうち、第１部分行列を乗じるべき第３部分ベクトルを更に記憶してよい。演算制御部は、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算中に、他の行列ベクトル積の演算として、第１部分行列および第３部分ベクトルの行列ベクトル積の演算の実行をパイプライン演算部に指示してよい。
【０００７】
第１ベクトルおよび第２ベクトルは、第１行列に乗じるべき第２行列に含まれる列ベクトルであってよい。
【０００８】
ベクトル記憶部は、第２行列に含まれる複数の第２ベクトルを記憶してよい。演算制御部は、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、第１部分行列および複数の第２ベクトルのそれぞれからの第３部分ベクトルの行列ベクトル積の演算で充填してよい。
【０００９】
行列記憶部は、第１の複数の部分行列のうち、第１部分ベクトルに乗じるべき第３部分行列を更に記憶してよい。演算制御部は、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算中に、他の行列ベクトル積の演算として、第３部分行列および第１部分ベクトルの行列ベクトル積の演算の実行をパイプライン演算部に指示してよい。
【００１０】
行列記憶部は、複数の第３部分行列を記憶してよい。演算制御部は、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、複数の第３部分行列のそれぞれおよび第１部分ベクトルの行列ベクトル積の演算で充填してよい。
【００１１】
本発明の第２の態様においては、演算方法を提供する。演算方法は、ベクトル記憶部が、第１ベクトルを分割した第１の複数の部分ベクトルのうち、第１部分ベクトルを少なくとも記憶することを備えてよい。演算方法は、行列記憶部が、第１ベクトルに乗じる第１行列を行方向および列方向に分割した第１の複数の部分行列のうち、第１部分ベクトルに乗じるべき第１部分行列を少なくとも記憶することを備えてよい。演算方法は、パイプライン演算により、行列記憶部に記憶された部分行列とベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部が、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算中に、第１部分ベクトルまたは第１部分行列を用いた他の行列ベクトル積の演算の実行を開始することを備えてよい。
【００１２】
本発明の第３の態様においては、演算装置によって実行される演算プログラムを提供する。演算装置は、第１ベクトルを分割した第１の複数の部分ベクトルのうち、第１部分ベクトルを少なくとも記憶するベクトル記憶部を備えてよい。演算装置は、第１ベクトルに乗じる第１行列を行方向および列方向に分割した第１の複数の部分行列のうち、第１部分ベクトルに乗じるべき第１部分行列を少なくとも行列記憶部を備えてよい。演算装置は、パイプライン演算により、行列記憶部に記憶された部分行列とベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部を備えてよい。演算プログラムは、演算装置に、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算中に、第１部分ベクトルまたは第１部分行列を用いた他の行列ベクトル積の演算の実行を開始させるためのものであってよい。
【００１３】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【図面の簡単な説明】
【００１４】
【図１】本実施形態に係る行列演算の一例を示す。
【図２】本実施形態に係る行列演算を、部分行列および部分ベクトルの行列ベクトル積に分解した計算式の一例を示す。
【図３】本実施形態に係る演算装置３００の構成を示す。
【図４】本実施形態に係る演算装置３００によるパイプライン処理の第１例を示す。
【図５】本実施形態に係る演算装置３００によるパイプライン処理の第２例を示す。
【図６】本実施形態に係る演算装置３００によるパイプライン処理の第３例を示す。
【図７】本実施形態に係る演算装置３００によるパイプライン処理の第４例を示す。
【図８】図８は、本発明の複数の態様が全体的または部分的に具現化されてよいコンピュータ２２００の例を示す。
【発明を実施するための形態】
【００１５】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１６】
図１は、本実施形態に係る行列演算の一例を示す。本図は、行列Ａおよび行列Ｂの行列積を計算し、行列Ｃに代入する行列演算Ｃ＝Ａ×Ｂを示す。行列Ａ、Ｂ、およびＣは、８行８列の正方行列である。
【００１７】
ａｉｊ（ｉ＝１，２，…８、ｊ＝１，２，…８）は、行列Ａの成分（「要素」とも示す。）である。ｂｉｊ（ｉ＝１，２，…８、ｊ＝１，２，…８）は、行列Ｂの成分である。ｃｉｊ（ｉ＝１，２，…８、ｊ＝１，２，…８）は、行列Ｃの成分である。ｊ≧３の範囲について、ｂｉｊおよびｃｉｊの各成分の図示は省略している。
【００１８】
また、行列Ｂのｊ列の列ベクトル、すなわち行列Ｂのｊ列の各成分ｂｉｊ（ｉ＝１，２，…８）を成分とするベクトルをベクトルｖｂｊ、行列Ｃのｊ列の列ベクトルをベクトルｖｃｊと示す。すなわち、ベクトルｖｂｊ＝（ｂ１ｊ，ｂ２ｊ，…，ｂ８ｊ）Ｔ、ベクトルｖｃｊ＝（ｃ１ｊ，ｃ２ｊ，…，ｃ８ｊ）Ｔと示す。このとき、ベクトルｖｃｊは、行列Ａおよびベクトルｖｂｊの行列ベクトル積ｖｃｊ＝Ａ×ｖｂｊによって計算できる。
【００１９】
ここで、例えば４行４列の行列と４要素のベクトルとの行列ベクトル積を１単位の演算として実行可能な演算装置を用いる場合、行列演算Ｃ＝Ａ×Ｂを、演算装置が一度に演算できる単位に分割して行う。本図において、行列Ａを、行列Ａを行方向および列方向にそれぞれ２分割して得られる部分行列をＡ１１、Ａ２１、Ａ１２、およびＡ２２と示す。部分行列Ａｍｎ（ｍ＝１，２、ｎ＝１，２）は、行列Ａにおける、行方向に分割したｍ番目の行範囲、および列方向に分割したｎ番目の列範囲の成分を、その部分行列の成分とする。また、ベクトルｖｂｊを、行方向に２分割して得られる部分ベクトルをｖｂ１ｊおよびｖｂ２ｊと示す。ｖｂｍｊ（ｍ＝１，２）は、ベクトルｖｂｊにおける、行方向に分割したｍ番目の行範囲の成分を、その部分ベクトルの成分とする。また、ベクトルｖｃｊを、行方向に２分割して得られる部分ベクトルをｖｃ１ｊおよびｖｃ２ｊと示す。ｖｃｍｊ（ｍ＝１，２）は、ベクトルｖｃｊにおける、行方向に分割したｍ番目の行範囲の成分を、その部分ベクトルの成分とする。
【００２０】
なお、本図においては、行列演算の一例として行列積を示し、行列ベクトル積については行列積の一部に含まれるものとして説明した。行列積の演算に含まれない行列ベクトル積については、行列Ｂおよび行列Ｃの第１列に関する行列ベクトル積ｖｃ１＝Ａ×ｖｂ１等と同様である。また、本実施形態においては、行列Ａ、Ｂ、およびＣは、行方向および列方向に２のべき乗個の要素を有し、行列Ａが行方向および列方向において２のべき乗個に分割される場合について例示する。これに代えて、行列Ａ、Ｂ、およびＣは、行方向または列方向の少なくとも１つについて２のべき乗個以外の数の要素を有してもよく、行列Ａが行方向または列方向の少なくとも１つについて２のべき乗個以外の数に分割されてもよい（例えば３×３、５×５、９×９、３×５、５×９等）。
【００２１】
図２は、本実施形態に係る行列演算を、部分行列および部分ベクトルの行列ベクトル積に分解した計算式の一例を示す。行列Ａおよびベクトルｖｂｊの行列ベクトル積ｖｃｊ＝Ａ×ｖｂｊは、部分ベクトルｖｃ１ｊを計算するｖｃ１ｊ＝（Ａ１１  Ａ１２）×ｖｂｊ＝Ａ１１×ｖｂ１ｊ＋Ａ１２×ｖｂ２ｊと、部分ベクトルｖｃ２ｊを計算するｖｃ２ｊ＝（Ａ２１  Ａ２２）×ｖｂｊ＝Ａ２１×ｖｂ１ｊ＋Ａ２２×ｖｂ２ｊとに分けることができる。すなわち、ｊ＝１の場合、ｖｃ１１＝Ａ１１×ｖｂ１１＋Ａ１２×ｖｂ２１、ｖｃ２１＝Ａ２１×ｖｂ１１＋Ａ２２×ｖｂ２１となる。また、ｊ＝２の場合、ｖｃ１２＝Ａ１１×ｖｂ１２＋Ａ１２×ｖｂ２２、ｖｃ２２＝Ａ２１×ｖｂ１２＋Ａ２２×ｖｂ２２となる。以下、ｊ＝３，…，８も同様である。
【００２２】
このように、行列Ａを行方向および列方向にそれぞれｄ個に分割し、ベクトルｖｂをｄ個に分割すると、行列Aおよびベクトルｖｂの行列ベクトル積は、部分行列および部分ベクトルの行列ベクトル積をｄ×ｄ個含むものとなる。演算装置が単一の部分行列を格納可能なレジスタしか有しない場合、演算装置は、部分行列をメモリからレジスタに順次ロードしながら図２に示した行列演算を行うこととなり、処理性能が低下してしまう。
【００２３】
図３は、本実施形態に係る演算装置３００の構成を示す。演算装置３００は、仕様上定められた行数および列数までの行列と、仕様上定められた行数までのベクトルとの行列ベクトル積を１単位の演算としてパイプライン演算により実行可能である。演算装置３００は、１単位の演算で処理可能なサイズよりも大きい行列およびベクトルの行列ベクトル積を、１単位の演算で処理可能な部分行列および部分ベクトルの行列ベクトル積の複数組に分割して計算する。
【００２４】
演算装置３００は、ベクトル記憶部３１０と、行列記憶部３２０と、パイプライン演算部３３０と、結果記憶部３４０と、演算制御部３５０と、メインメモリ３６０と、メモリ制御部３７０とを備える。ベクトル記憶部３１０は、第１ベクトルを分割した第１の複数の部分ベクトルのうち、第１部分ベクトルを少なくとも記憶する。本実施形態において、ベクトル記憶部３１０は、一例としてレジスタである。これに代えて、ベクトル記憶部３１０は、キャッシュメモリ等の、パイプライン的に部分ベクトルをパイプライン演算部３３０に供給できる他の記憶装置であってもよい。
【００２５】
ここで、第１ベクトルは、少なくとも１つの部分行列が行列記憶部３２０に記憶された１行列を乗じる対象となる対象ベクトルである。第１ベクトルは、演算装置３００が１単位の演算で処理可能なサイズよりも大きい。第１の複数の部分ベクトルは、第１ベクトルを、１単位の演算で処理可能な大きさに分割したものである。図１の行列演算において、第１ベクトルは、ベクトルｖｂｊのいずれか（例えばｖｂ１）に相当する。第１の複数の部分ベクトルは、第１ベクトルｖｂｊを分割して得られる部分ベクトルｖｂｉｊ（ｉ＝１，２）に相当する。第１ベクトルがさらに大きい場合、第１ベクトルは、３以上の部分ベクトルに分割されてもよい。
【００２６】
また、ベクトル記憶部３１０は、第１の複数の部分ベクトルのうち、第２部分ベクトル、およびその他の部分ベクトルを更に記憶するべく、十分な記憶領域を有してもよい。例えば、図１の行列演算において、ベクトル記憶部３１０は、部分ベクトルｖｂ１ｊおよび部分ベクトルｖｂ２ｊを記憶してもよい。
【００２７】
行列記憶部３２０は、第１ベクトルに乗じる第１行列を行方向および列方向に分割した第１の複数の部分行列のうち、第１部分ベクトルに乗じるべき第１部分行列を少なくとも記憶する。本実施形態において、行列記憶部３２０は、一例としてレジスタである。これに代えて、行列記憶部３２０は、キャッシュメモリ等の、パイプライン的に部分行列をパイプライン演算部３３０に供給できる他の記憶装置であってもよい。
【００２８】
ここで、第１行列は、少なくとも１つの部分ベクトルがベクトル記憶部３１０に記憶された第１ベクトルに乗じる対象となる対象行列である。第１行列は、演算装置３００が１単位の演算で処理可能なサイズよりも大きい。第１の複数の部分行列は、第１行列を、演算装置３００が１単位の演算で処理可能な大きさに分割したものである。図１の行列演算において、第１行列は、行列Ａに相当する。第１の複数の部分行列は、第１行列Ａを行方向および列方向に分割して得られる部分行列Ａｉｊ（ｉ＝１，２、ｊ＝１，２）に相当する。第１行列がさらに大きい場合、第１行列は、行方向および列方向のそれぞれにおいて３以上に分割されてもよい。
【００２９】
また、行列記憶部３２０は、第１の複数の部分行列のうち、第２部分ベクトルに乗じるべき第２部分行列、およびその他の部分行列を更に記憶するべく、十分な記憶領域を有してもよい。例えば、図１の行列演算において、行列記憶部３２０は、部分ベクトルｖｂ１ｊに乗じるべき部分行列Ａ１１と、部分ベクトルｖｂ２ｊに乗じるべき部分行列Ａ１２を記憶してもよい。ここで、第１部分ベクトルおよび第２部分ベクトルは、第１ベクトルにおける異なる行範囲に位置する。このため、第１部分行列および第２部分行列は、対象行列における異なる列範囲に位置する。なお、第１部分行列および第２部分行列は、対象行列における同じ行範囲に位置してよい。
【００３０】
パイプライン演算部３３０は、ベクトル記憶部３１０および行列記憶部３２０に接続され、ベクトル記憶部３１０に記憶された演算対象の部分ベクトルをベクトル記憶部３１０から受け取り、行列記憶部３２０に記憶された演算対象の部分行列を行列記憶部３２０から受け取る。パイプライン演算部３３０は、パイプライン演算により、演算対象の部分行列および部分ベクトルの行列ベクトル積に、中間ベクトルを加える演算を実行可能である。本実施形態において、パイプライン演算部３３０は、４行４列の部分行列と４行の部分ベクトルとの行列ベクトル積を算出し、この行列ベクトル積に４行の中間ベクトルを加えて演算結果となる部分ベクトル（「結果ベクトル」とも示す。）を算出する演算を１単位の演算として実行可能である。
【００３１】
ここで、１単位の演算として実行可能とは、パイプライン演算部３３０が、例えば外部からの指示または命令の実行等の要求に応じて、演算対象の部分行列および部分ベクトルの行列ベクトル積に、中間ベクトルを加える演算をまとめて実行し、その結果を出力することを意味する。パイプライン演算部３３０は、この演算に含まれる全ての基本演算（例えば、値同士の乗算、加算）を別個の演算器で行うべく多数の演算器を有してもよく、これに代えて一部の演算を同じ演算器で行ってもよい。
【００３２】
また、パイプライン演算部３３０がパイプラン演算を行うとは、パイプライン演算部３３０が演算の開始後複数のステージにおける処理を経て結果を出力するところ、各ステージは並列に動作可能であることを意味する。すなわち、パイプライン演算部３３０は、ある演算の開始後結果を出力するまでの各サイクルにおいて、特に実行上の障害がなければ順次他の演算を開始することができる。
【００３３】
例えば、パイプライン演算部３３０は、１サイクル目に、部分行列および部分ベクトルを入力し、２サイクル目に、部分行列および部分ベクトルの対応する要素同士を乗算し、３サイクル目に、結果ベクトルに含まれるべき各要素について２サイクル目に計算した積を合計し、４サイクル目に、演算結果の部分ベクトルを出力してもよい。パイプライン演算部３３０は、必要に応じて任意の段数のパイプライン構造をとることができる。
【００３４】
結果記憶部３４０は、パイプライン演算部３３０に接続される。結果記憶部３４０は、パイプライン演算部３３０が出力する結果ベクトルを受け取って、格納する。結果ベクトルは、例えば図２におけるｖｃ１１およびｖｃ２１等である。本実施形態において、結果記憶部３４０は、一例としてレジスタである。これに代えて、結果記憶部３４０は、キャッシュメモリ等の、パイプライン的にパイプライン演算部３３０からの部分ベクトルを格納できる他の記憶装置であってもよい。なお、ベクトル記憶部３１０、行列記憶部３２０、および結果記憶部３４０は、同一の記憶装置として実装されてもよい。
【００３５】
演算制御部３５０は、ベクトル記憶部３１０、行列記憶部３２０、パイプライン演算部３３０、および結果記憶部３４０に接続される。演算制御部３５０は、例えば演算装置３００の外部からの指示を受けたこと、または演算装置３００におけるプログラム実行中に行列演算命令をデコードしたこと等のような行列演算の実行要求に応じて、要求された行列演算を実行するべくベクトル記憶部３１０、行列記憶部３２０、パイプライン演算部３３０、および結果記憶部３４０を制御する。
【００３６】
メインメモリ３６０は、行列演算の対象となる行列および演算結果を格納する。メモリ制御部３７０は、ベクトル記憶部３１０、行列記憶部３２０、および結果記憶部３４０と、メインメモリ３６０との間に接続される。メモリ制御部３７０は、外部からの指示、または演算装置３００におけるプログラム実行中のメモリアクセス命令に応じて、ベクトル記憶部３１０、行列記憶部３２０、および結果記憶部３４０と、メインメモリ３６０との間のデータ転送を行う。
【００３７】
例えば、メモリ制御部３７０は、メインメモリ３６０からベクトル記憶部３１０へのベクトルロードが要求されたことに応じて、メインメモリ３６０に記憶された部分ベクトルのうちベクトルロードによって指定された部分ベクトルをメインメモリ３６０から読み出して、ベクトル記憶部３１０へと格納する。また、メモリ制御部３７０は、メインメモリ３６０から行列記憶部３２０への行列ロードが要求されたことに応じて、メインメモリ３６０に記憶された部分行列のうち行列ロードによって指定された部分行列をメインメモリ３６０から読み出して、行列記憶部３２０へと格納する。また、メモリ制御部３７０は、結果記憶部３４０からメインメモリ３６０への行列またはベクトルストアが要求されたことに応じて、結果記憶部３４０に記憶された、演算結果の行列またはベクトルを読み出して、メインメモリ３６０へと格納する。なお、演算装置３００の設計によっては、ベクトル記憶部３１０および行列記憶部３２０に加えてメインメモリ３６０を設けず、ベクトル記憶部３１０および行列記憶部３２０として機能する比較的大きいメモリを設けて、当該メモリから直接パイプライン的にパイプライン演算部３３０に部分ベクトルおよび部分行列を供給できるようにしてもよい。
【００３８】
以上に示した構成において、パイプライン演算部３３０は、パイプライン処理により、行列ベクトル積の演算を実行する。例えば図２に示したｖｃ１１＝Ａ１１×ｖｂ１１＋Ａ１２×ｖｂ２１の演算を行う場合には、パイプライン演算部３３０は、第１部分行列Ａ１１および第１部分ベクトルｖｂ１１の演算を開始した後に演算結果を得るまでに、複数サイクルを要する。このため、パイプライン演算部３３０は、第１部分行列Ａ１１および第１部分ベクトルｖｂ１１の行列ベクトル積を計算する第１演算を開始したサイクルの次のサイクルに、第２部分行列Ａ１２および第２部分ベクトルｖｂ２１の行列ベクトル積を第１演算の結果に加える第２演算が投入されたとしても、第２演算の実行に障害が生じ（パイプラインハザード）、第１演算の演算結果が利用可能となるまで第２演算の処理を待たせる必要が生じてしまう。
【００３９】
なお、パイプラインの設計によっては、第１演算の結果をレジスタに書き込むのを待たずに第２演算へと供給する（バイパスまたはフォワーディング）等により、第２演算の処理待ちをある程度は削減することができる。しかし、第１演算および第２演算の間に依存関係がある以上、パイプラインハザードによってパイプライン演算部３３０のパイプラインに生じる空きを完全になくすことは難しい。
【００４０】
そこで、演算制御部３５０は、パイプライン演算部３３０が、第１部分行列および第１部分ベクトルの行列ベクトル積（例えばＡ１１×ｖｂ１１）のパイプライン演算中に、第１部分ベクトルまたは第１部分行列を用いた他の行列ベクトル積の演算の実行をパイプライン演算部３３０に指示する。ここで「他の行列ベクトル積」は、第１部分行列および第１部分ベクトルの行列ベクトル積の演算結果を使用しない演算であり、行列ベクトル積を含む演算、すなわち例えば行列ベクトル積に第１部分行列および第１部分ベクトルの行列ベクトル積以外の演算結果を加えるような演算であってもよい。これにより、演算制御部３５０は、パイプライン演算部３３０が第１演算の演算結果を待ってから第２演算を実行開始するまでの間に、第１演算の演算結果に依存しない１または複数の他の行列ベクトル積をパイプライン演算部３３０へと投入し、これによってパイプライン演算部３３０の利用効率を高めることができる。
【００４１】
さらに、演算制御部３５０は、第１部分行列および第１部分ベクトルの行列ベクトル積の演算結果が遅延なく利用可能となるサイクル以降に、第２部分行列および第２部分ベクトルの行列ベクトル積を、第１部分行列および第１部分ベクトルの行列ベクトル積の演算結果に加える演算の実行をパイプライン演算部３３０に指示してもよい。これにより、演算制御部３５０は、第２演算にパイプラインハザードが生じるのを防ぐことができ、第１演算および第２演算の間に他の行列ベクトル積の演算を投入可能とすることができる。
【００４２】
図４は、本実施形態に係る演算装置３００によるパイプライン処理の第１例を示す。サイクル０と示した演算において、演算制御部３５０は、第１部分ベクトルの一例であるｖｂ１１の読み出しをベクトル記憶部３１０に指示し、第１部分行列の一例であるＡ１１の読み出しを行列記憶部３２０に指示するとともに、第１部分行列Ａ１１および第１部分ベクトルｖｂ１１の行列ベクトル積を計算し、計算途中の中間ベクトルとしてパイプライン演算部３３０が有する中間レジスタ（テンポラリレジスタ）ｖｃｔｍｐ１に格納する演算の実行をパイプライン演算部３３０に指示する。
【００４３】
サイクル１の実行開始までに、ベクトル記憶部３１０は、第１部分ベクトルの一例であるｖｂ１１および第２部分ベクトルの一例であるｖｂ２１に加えて、第１行列Ａを乗じるべき第２ベクトル（一例としてｖｂ２）を分割した第２の複数の部分ベクトルｖｂｉ２のうち、第１部分行列Ａ１１を乗じるべき第３部分ベクトル（一例としてｖｂ１２）を更に記憶する。本例において、第１ベクトルおよび第２ベクトルは、第１行列Ａに乗じるべき第２行列Ｂに含まれる列ベクトルであり、例えば第１ベクトルはｖｂ１、第２ベクトルはｖｂ２である。第３部分ベクトルは、第２ベクトルｖｂ２を分割した第２の複数の部分ベクトルｖｂｉ２のうち第１部分行列Ａ１１を乗じるべきｖｂ１２である。これに代えて、第１ベクトルおよび第２ベクトルは、それぞれ行列Ａを乗じるべき別個のベクトルであってもよい。
【００４４】
サイクル１と示した演算において、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算中に、演算制御部３５０は、第３部分ベクトルｖｂ１２の読み出しをベクトル記憶部３１０に指示し、第１部分行列Ａ１１の読み出しを行列記憶部３２０に指示するとともに、パイプラインハザードを生じさせない他の行列ベクトル積の演算として、第１部分行列および第３部分ベクトルの行列ベクトル積の演算の実行をパイプライン演算部３３０に指示する。これを受けて、パイプライン演算部３３０は、第１部分行列および第３部分ベクトルの行列ベクトル積を、計算途中の中間ベクトルとしてパイプライン演算部３３０が有する中間レジスタｖｃｔｍｐ２に格納する演算を実行する。この演算は、図２の第３行目における１つ目の行列ベクトル積の演算に相当し、サイクル０および１の行列ベクトル積は、互いに異なる結果ベクトルｖｃ１１およびｖｃ１２に反映されるものである。したがって、これらの演算の間に依存関係はないから、パイプライン演算部３３０は、これらの演算を、パイプラインハザードを発生させることなく実行することができる。
【００４５】
サイクル２と示した演算において、演算制御部３５０は、第２部分ベクトルの一例であるｖｂ２１の読み出しをベクトル記憶部３１０に指示し、第２部分行列の一例であるＡ１２の読み出しを行列記憶部３２０に指示するとともに、第２部分行列Ａ１２および第２部分ベクトルｖｂ２１の行列ベクトル積を計算し、サイクル０の演算の演算結果ｖｃｔｍｐ１を加える演算の実行をパイプライン演算部３３０に指示し、演算の結果得られる部分ベクトルｖｃ１１を格納することを結果記憶部３５０に指示する。ここで、サイクル２の演算はサイクル０の演算に依存するところ、演算制御部３５０は、サイクル０の演算に依存しないサイクル１の演算をサイクル０およびサイクル２の演算の間に挿入することで、パイプライン演算部３３０のパイプラインの利用効率を上げることができる。
【００４６】
サイクル３の実行開始までに、ベクトル記憶部３１０は、第２の複数の部分ベクトルのうち、第２部分行列Ａ１２を乗じるべき第４部分ベクトルを更に記憶してよい。サイクル３と示した演算において、演算制御部３５０は、第４部分ベクトルの一例であるｖｂ２２の読み出しをベクトル記憶部３１０に指示し、第２部分行列の一例であるＡ１２の読み出しを行列記憶部３２０に指示するとともに、第２部分行列Ａ１２および第４部分ベクトルｖｂ２２の行列ベクトル積を計算し、サイクル１の演算の演算結果ｖｃｔｍｐ２を加える演算の実行をパイプライン演算部３３０に指示し、演算の結果得られる部分ベクトルｖｃ１２を格納することをメインメモリ３６０に指示する。ここで、サイクル３の演算はサイクル１の演算に依存するところ、演算制御部３５０は、サイクル１の演算に依存しないサイクル２の演算をサイクル１およびサイクル３の演算の間に挿入することで、パイプライン演算部３３０のパイプラインの利用効率を上げることができる。
【００４７】
本図の例では、サイクル０〜３において行列Ｃの複数の列ベクトル（ｖｃ１、ｖｃ２）における第１行範囲（第１〜４行）の部分ベクトル（ｖｃ１１、ｖｃ１２）を計算し、サイクル４〜７において行列Ｃの複数の列ベクトル（ｖｃ１、ｖｃ２）における第２行範囲（第５〜８行）の部分ベクトル（ｖｃ２１、ｖｃ２２）を計算する。サイクル４〜７の演算は、部分行列Ａ１１、Ａ１２に代えて部分行列Ａ２１、Ａ２２を用い、部分ベクトルｖｃ１１、ｖｃ１２に代えて部分ベクトルｖｃ２１、ｖｃ２２を用いる他は同様であるので説明を省略する。
【００４８】
本例において、演算制御部３５０は、第１部分行列および第１部分ベクトルの行列ベクトル積の第１演算と、その演算結果を利用する第２演算との間に、第１部分行列を用いた他の行列ベクトル積の演算、すなわち本例においては第１部分行列および第３部分ベクトルの行列ベクトル積の演算、を挿入する。これによって、演算制御部３５０は、第１演算および第２演算の間に必要となる空きサイクルを１つ利用することができる。
【００４９】
第１演算および第２演算の間に複数の空きサイクルが生じる場合、演算制御部３５０は、第１部分行列および複数の第３部分ベクトルのそれぞれの行列ベクトル積を第１演算および第２演算の間に挿入してよい。例えば、ベクトル記憶部３１０は、第２行列Ｂに含まれる複数の第２ベクトルｖｂ２、ｖｂ３、…を更に記憶しておく。演算制御部３５０は、第１部分行列Ａ１１および第１部分ベクトルｖｂ１１の行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、第１部分行列Ａ１１および複数の第２ベクトルｖｂ２、ｖｂ３、…のそれぞれからの第３部分ベクトルｖｂ１２、ｖｂ１３、…の行列ベクトル積Ａ１１×ｖｂ１２、Ａ１１×ｖｂ１３、…の演算で充填する。なお、第１ベクトルおよび複数の第２ベクトルは、第２行列の列順または列順の逆順に並んでいてもよく、また第２行列の列順に並んでおらず、それぞれ任意の列の列ベクトルであってよい。
【００５０】
図５は、本実施形態に係る演算装置３００によるパイプライン処理の第２例を示す。パイプライン演算部３３０がより多くの中間レジスタを有する場合、または演算結果を一旦メインメモリ３６０に格納した後に利用可能となる場合等においては、演算制御部３５０は、図４におけるサイクル４〜５の演算を、サイクル２〜３の演算の前に行うように制御してもよい。この場合、演算制御部３５０は、第１部分行列Ａ１１および第１部分ベクトルｖｂ１１の行列ベクトル積を演算する第１演算のパイプライン演算の実行中に、第１部分行列を用いた他の行列ベクトル積の演算である図５中のサイクル１の演算と、第１部分ベクトルを用いた他の行列ベクトル積の演算である図５中のサイクル２の演算とをパイプライン演算部３３０に実行させる。また、演算制御部３５０は、サイクル２の演算に用いた第２部分行列Ａ２１と、サイクル１の演算に用いた第２部分ベクトルｖｂ１２との行列ベクトル積の演算であるサイクル３の演算を、第１演算および第２演算の間に実行させてよい。これにより、演算制御部３５０は、第１演算および第２演算の間の空きサイクルを更に充填することが可能となる。なお、サイクル０〜３の演算同士の実行順序は任意であってよく、サイクル４〜７の演算同士の実行順序はサイクル０〜３における対応する演算の実行順序に応じて決定されてよい。
【００５１】
図６は、本実施形態に係る演算装置３００によるパイプライン処理の第３例を示す。サイクル０と示した演算において、演算制御部３５０は、図４のサイクル０と同様の制御を行う。
【００５２】
サイクル１の実行開始までに、行列記憶部３２０は、第１部分行列の一例であるＡ１１および第２部分行列の一例であるＡ１２に加えて、第１行列Ａを行方向および列方向に分割した第１の複数の部分行列Ａｉｊのうち、第１部分ベクトルｖｂ１１に乗じるべき第３部分行列（一例としてＡ２１）を更に記憶する。これに代えて、第３部分行列は、第１行列Ａ以外の行列に含まれる部分行列であってもよい。
【００５３】
サイクル１と示した演算において、第１部分行列および第１部分ベクトルの行列ベクトル積のパイプライン演算中に、演算制御部３５０は、第１部分ベクトルｖｂ１１の読み出しをベクトル記憶部３１０に指示し、第３部分行列Ａ２１の読み出しを行列記憶部３２０に指示するとともに、パイプラインハザードを生じさせない他の行列ベクトル積の演算として、第３部分行列Ａ２１および第１部分ベクトルｖｂ１１の行列ベクトル積の演算の実行をパイプライン演算部３３０に指示する。これを受けて、パイプライン演算部３３０は、第３部分行列Ａ２１および第１部分ベクトルｖｂ１１の行列ベクトル積を、計算途中の中間ベクトルとしてパイプライン演算部３３０が有する中間レジスタｖｃｔｍｐ２に格納する演算を実行する。この演算は、図２の第２行目における１つ目の行列ベクトル積の演算に相当し、サイクル０および１の行列ベクトル積は、互いに異なる結果ベクトルｖｃ１１およびｖｃ２１に反映されるものである。したがって、これらの演算の間に依存関係はないから、パイプライン演算部３３０は、これらの演算を、パイプラインハザードを発生させることなく実行することができる。
【００５４】
サイクル２と示した演算において、演算制御部３５０は、図４のサイクル２と同様の制御を行う。ここで、サイクル２の演算はサイクル０の演算に依存するところ、演算制御部３５０は、サイクル０の演算に依存しないサイクル１の演算をサイクル０およびサイクル２の演算の間に挿入することで、パイプライン演算部３３０のパイプラインの利用効率を上げることができる。
【００５５】
サイクル３の実行開始までに、ベクトル記憶部３１０は、第１の複数の部分行列Ａｉｊのうち、第２部分ベクトルｖｂ２１に乗じるべき第４部分行列を更に記憶してよい。サイクル３と示した演算において、演算制御部３５０は、第２部分ベクトルの一例であるｖｂ２１の読み出しをベクトル記憶部３１０に指示し、第４部分行列の一例であるＡ２２の読み出しを行列記憶部３２０に指示するとともに、第４部分行列Ａ２２および第２部分ベクトルｖｂ２１の行列ベクトル積を計算し、サイクル１の演算の演算結果ｖｃｔｍｐ２を加える演算の実行をパイプライン演算部３３０に指示し、演算の結果得られる部分ベクトルｖｃ２１を格納することをメインメモリ３６０に指示する。ここで、サイクル３の演算はサイクル１の演算に依存するところ、演算制御部３５０は、サイクル１の演算に依存しないサイクル２の演算をサイクル１およびサイクル３の演算の間に挿入することで、パイプライン演算部３３０のパイプラインの利用効率を上げることができる。
【００５６】
本図の例では、サイクル０〜３において行列Ｃの１つの列ベクトルｖｃ１に含まれる２つの部分ベクトルｖｃ１１、ｖｃ２１を計算し、サイクル４〜７において行列Ｃの別の列ベクトルｖｃ２に含まれる２つの部分ベクトルｖｃ１２、ｖｃ２２を計算する。サイクル４〜７の演算は、部分ベクトルｖｂ１１、ｖｂ２１に代えて部分ベクトルｖｂ１２、ｖｂ２２を用い、部分ベクトルｖｃ１１、ｖｃ２１に代えて部分ベクトルｖｃ１２、ｖｃ２２を用いる他は同様であるので説明を省略する。
【００５７】
本例において、演算制御部３５０は、第１部分行列および第１部分ベクトルの行列ベクトル積の第１演算と、その演算結果を利用する第２演算との間に、第１部分ベクトルを用いた他の行列ベクトル積の演算、すなわち本例においては第３部分行列および第１部分ベクトルの行列ベクトル積の演算、を挿入する。これによって、演算制御部３５０は、第１演算および第２演算の間に必要となる空きサイクルを１つ利用することができる。
【００５８】
第１演算および第２演算の間に複数の空きサイクルが生じる場合、演算制御部３５０は、複数の第３部分行列のそれぞれおよび第１部分ベクトルの行列ベクトル積を第１演算および第２演算の間に挿入してよい。例えば、行列記憶部３２０は、第１行列Ａに含まれる、第１部分ベクトルに乗じるべき複数の第３部分行列Ａ２１、Ａ３１、…を記憶しておく。演算制御部３５０は、第１部分行列Ａ１１および第１部分ベクトルｖｂ１１の行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、複数の第３部分行列Ａ２１、Ａ３１、…のそれぞれおよび第１部分ベクトルｖｂ１１の行列ベクトル積の演算で充填する。なお、第１部分行列および複数の第３部分行列は、第１行列の同一の行範囲において列順または列順の逆順に並んでいてもよく、また第２行列の列順に並んでおらず、それぞれ任意の列範囲の部分行列であってよい。
【００５９】
図７は、本実施形態に係る演算装置３００によるパイプライン処理の第４例を示す。パイプライン演算部３３０がより多くの中間レジスタを有する場合、または演算結果を一旦メインメモリ３６０に格納した後に利用可能となる場合等においては、演算制御部３５０は、図６におけるサイクル４〜５の演算を、サイクル２〜３の演算の前に行うように制御してもよい。この場合、演算制御部３５０は、第１部分行列Ａ１１および第１部分ベクトルｖｂ１１の行列ベクトル積を演算する第１演算のパイプライン演算の実行中に、第１部分ベクトルを用いた他の行列ベクトル積の演算である図７中のサイクル１の演算と、第１部分行列を用いた他の行列ベクトル積の演算である図７中のサイクル２の演算とをパイプライン演算部３３０に実行させる。また、演算制御部３５０は、サイクル１の演算に用いた第３部分行列Ａ２１と、サイクル２の演算に用いた第２部分ベクトルｖｂ１２との行列ベクトル積の演算であるサイクル３の演算を、第１演算および第２演算の間に実行させてよい。これにより、演算制御部３５０は、第１演算および第２演算の間の空きサイクルを更に充填することが可能となる。なお、サイクル０〜３の演算同士の実行順序は任意であってよく、サイクル４〜７の演算同士の実行順序はサイクル０〜３における対応する演算の実行順序に応じて決定されてよい。ここで、図７のパイプライン処理は、図５のパイプライン処理におけるサイクル１および２の演算を入れ換え、サイクル５および６の演算を入れ換えたものと実質的に同一である。
【００６０】
以上に示した第１例から第４例を含む任意のパイプライン処理において、演算制御部３５０は、パイプライン演算部３３０が使用する部分ベクトルおよび部分行列を、パイプライン演算部３３０が必要とするよりも前にメインメモリ３６０からベクトル記憶部３１０および行列記憶部３２０へと転送するようにメモリ制御部３７０に指示してよい。例えば、図４の例において、メインメモリ３６０は、サイクル０の前に、部分ベクトルｖｂ１１、ｖｂ１２、ｖｂ２１、ｖｂ２２をベクトル記憶部３１０へと転送し、部分行列Ａ１１およびＡ１２を行列記憶部３２０へと転送してもよい。これに代えて、メインメモリ３６０は、サイクル０の前に、部分ベクトルｖｂ１１、ｖｂ１２をベクトル記憶部３１０へと転送し、部分行列Ａ１１を行列記憶部３２０へと転送し、サイクル２の前に、部分ベクトルｖｂ２１、ｖｂ２２をベクトル記憶部３１０へと転送し、部分行列Ａ１２を行列記憶部３２０へと転送してもよい。
【００６１】
第１例および第２例に示したパイプライン処理の場合、パイプライン演算部３３０は、サイクル毎に異なる部分ベクトルｖｂ１１、ｖｂ１２、ｖｂ２１、ｖｂ２２を使用するが、部分行列Ａ１１、Ａ１２、Ａ２１、Ａ２２は２サイクルに１つずつ使用する。このため、行列記憶部３２０は、２サイクルに１つずつ部分行列を出力できるスループットを有すればよく、行列記憶部３２０の消費電力および回路規模を低減することができる。
【００６２】
第３例および第４例に示したパイプライン処理の場合、パイプライン演算部３３０は、サイクル毎に異なる部分行列Ａ１１、Ａ１２、Ａ２１、Ａ２２を使用するが、部分ベクトルｖｂ１１、ｖｂ１２、ｖｂ２１、ｖｂ２２は２サイクルに１つずつ使用する。このため、行列記憶部３２０は、２サイクルに１つずつ部分ベクトルを出力できるスループットを有すればよく、ベクトル記憶部３１０の消費電力および回路規模を低減することができる。
【００６３】
演算装置３００の設計者または演算装置３００を使用するユーザは、演算装置３００の回路規模をより小さくできるように、または、演算装置３００の消費電力をより小さくできるように、パイプライン処理の実行順序を選択してよい。
【００６４】
本発明の様々な実施形態は、フローチャートおよびブロック図を参照して記載されてよく、ここにおいてブロックは、（１）操作が実行されるプロセスの段階または（２）操作を実行する役割を持つ装置のセクションを表わしてよい。特定の段階およびセクションが、専用回路、コンピュータ可読媒体上に格納されるコンピュータ可読命令と共に供給されるプログラマブル回路、およびコンピュータ可読媒体上に格納されるコンピュータ可読命令と共に供給されるプロセッサのいずれかによって実装されてよい。専用回路は、デジタルおよびアナログのいずれかのハードウェア回路を含んでよく、集積回路（ＩＣ）およびディスクリート回路の何れかを含んでよい。プログラマブル回路は、論理ＡＮＤ、論理ＯＲ、論理ＸＯＲ、論理ＮＡＮＤ、論理ＮＯＲ、および他の論理操作、フリップフロップ、レジスタ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブルロジックアレイ（ＰＬＡ）等のようなメモリ要素等を含む、再構成可能なハードウェア回路を含んでよい。
【００６５】
コンピュータ可読媒体は、適切なデバイスによって実行される命令を格納可能な任意の有形なデバイスを含んでよく、その結果、そこに格納される命令を有するコンピュータ可読媒体は、フローチャートまたはブロック図で指定された操作を実行するための手段を作成すべく実行され得る命令を含む、製品を備えることになる。コンピュータ可読媒体の例としては、電子記憶媒体、磁気記憶媒体、光記憶媒体、電磁記憶媒体、半導体記憶媒体等が含まれてよい。コンピュータ可読媒体のより具体的な例としては、フロッピー（登録商標）ディスク、ディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭまたはフラッシュメモリ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、静的ランダムアクセスメモリ（ＳＲＡＭ）、コンパクトディスクリードオンリメモリ（ＣＤ-ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、ブルーレイ（ＲＴＭ）ディスク、メモリスティック、集積回路カード等が含まれてよい。
【００６６】
コンピュータ可読命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＳｍａｌｌｔａｌｋ、ＪＡＶＡ（登録商標）、Ｃ＋＋等のようなオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語のような従来の手続型プログラミング言語を含む、１または複数のプログラミング言語の任意の組み合わせで記述されたソースコードまたはオブジェクトコードのいずれかを含んでよい。
【００６７】
コンピュータ可読命令は、汎用コンピュータ、特殊目的のコンピュータ、若しくは他のプログラム可能なデータ処理装置のプロセッサまたはプログラマブル回路に対し、ローカルにまたはローカルエリアネットワーク（ＬＡＮ）、インターネット等のようなワイドエリアネットワーク（ＷＡＮ）を介して提供され、フローチャートまたはブロック図で指定された操作を実行するための手段を作成すべく、コンピュータ可読命令を実行してよい。プロセッサの例としては、コンピュータプロセッサ、処理ユニット、マイクロプロセッサ、デジタル信号プロセッサ、コントローラ、マイクロコントローラ等を含む。
【００６８】
図８は、本発明の複数の態様が全体的または部分的に具現化されてよいコンピュータ２２００の例を示す。コンピュータ２２００にインストールされたプログラムは、コンピュータ２２００に、本発明の実施形態に係る装置に関連付けられる操作または当該装置の１または複数のセクションとして機能させることができてもよいし、または当該操作または当該１または複数のセクションを実行させることができてもよいし、コンピュータ２２００に、本発明の実施形態に係るプロセスまたは当該プロセスの段階を実行させることができてもよい。そのようなプログラムは、コンピュータ２２００に、本明細書に記載のフローチャートおよびブロック図のブロックのうちのいくつかまたはすべてに関連付けられた特定の操作を実行させるべく、ＣＰＵ２２１２によって実行されてよい。
【００６９】
本実施形態によるコンピュータ２２００は、ＣＰＵ２２１２、ＲＡＭ２２１４、グラフィックコントローラ２２１６、およびディスプレイデバイス２２１８を含み、それらはホストコントローラ２２１０によって相互に接続されている。コンピュータ２２００はまた、通信インターフェイス２２２２、ハードディスクドライブ２２２４、ＤＶＤ−ＲＯＭドライブ２２２６、およびＩＣカードドライブのような入出力ユニットを含み、それらは入出力コントローラ２２２０を介してホストコントローラ２２１０に接続されている。コンピュータはまた、ＲＯＭ２２３０およびキーボード２２４２のようなレガシの入出力ユニットを含み、それらは入出力チップ２２４０を介して入出力コントローラ２２２０に接続されている。
【００７０】
ＣＰＵ２２１２は、ＲＯＭ２２３０およびＲＡＭ２２１４内に格納されたプログラムに従い動作し、それにより各ユニットを制御する。グラフィックコントローラ２２１６は、ＲＡＭ２２１４内に提供されるフレームバッファ等またはそれ自体の中にＣＰＵ２２１２によって生成されたイメージデータを取得し、イメージデータがディスプレイデバイス２２１８上に表示されるようにする。
【００７１】
通信インターフェイス２２２２は、ネットワークを介して他の電子デバイスと通信する。ハードディスクドライブ２２２４は、コンピュータ２２００内のＣＰＵ２２１２によって使用されるプログラムおよびデータを格納する。ＤＶＤ−ＲＯＭドライブ２２２６は、プログラムまたはデータをＤＶＤ−ＲＯＭ２２０１から読み取り、ハードディスクドライブ２２２４にＲＡＭ２２１４を介してプログラムまたはデータを提供する。ＩＣカードドライブは、プログラムおよびデータをＩＣカードから読み取り、プログラムおよびデータをＩＣカードに書き込む。
【００７２】
ＲＯＭ２２３０はその中に、アクティブ化時にコンピュータ２２００によって実行されるブートプログラム等、およびコンピュータ２２００のハードウェアに依存するプログラムのいずれかを格納する。入出力チップ２２４０はまた、様々な入出力ユニットをパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して、入出力コントローラ２２２０に接続してよい。
【００７３】
プログラムが、ＤＶＤ−ＲＯＭ２２０１またはＩＣカードのようなコンピュータ可読媒体によって提供される。プログラムは、コンピュータ可読媒体から読み取られ、コンピュータ可読媒体の例でもあるハードディスクドライブ２２２４、ＲＡＭ２２１４、またはＲＯＭ２２３０にインストールされ、ＣＰＵ２２１２によって実行される。これらのプログラム内に記述される情報処理は、コンピュータ２２００に読み取られ、プログラムと、上記様々なタイプのハードウェアリソースとの間の連携をもたらす。装置または方法が、コンピュータ２２００の使用に従い情報の操作または処理を実現することによって構成されてよい。
【００７４】
例えば、通信がコンピュータ２２００および外部デバイス間で実行される場合、ＣＰＵ２２１２は、ＲＡＭ２２１４にロードされた通信プログラムを実行し、通信プログラムに記述された処理に基づいて、通信インターフェイス２２２２に対し、通信処理を命令してよい。通信インターフェイス２２２２は、ＣＰＵ２２１２の制御下、ＲＡＭ２２１４、ハードディスクドライブ２２２４、ＤＶＤ−ＲＯＭ２２０１、またはＩＣカードのような記録媒体内に提供される送信バッファ処理領域に格納された送信データを読み取り、読み取られた送信データをネットワークに送信し、またはネットワークから受信された受信データを記録媒体上に提供される受信バッファ処理領域等に書き込む。
【００７５】
また、ＣＰＵ２２１２は、ハードディスクドライブ２２２４、ＤＶＤ−ＲＯＭドライブ２２２６（ＤＶＤ−ＲＯＭ２２０１）、ＩＣカード等のような外部記録媒体に格納されたファイルまたはデータベースの全部または必要な部分がＲＡＭ２２１４に読み取られるようにし、ＲＡＭ２２１４上のデータに対し様々なタイプの処理を実行してよい。ＣＰＵ２２１２は次に、処理されたデータを外部記録媒体にライトバックする。
【００７６】
様々なタイプのプログラム、データ、テーブル、およびデータベースのような様々なタイプの情報が記録媒体に格納され、情報処理を受けてよい。ＣＰＵ２２１２は、ＲＡＭ２２１４から読み取られたデータに対し、本開示の随所に記載され、プログラムの命令シーケンスによって指定される様々なタイプの操作、情報処理、条件判断、条件分岐、無条件分岐、情報の検索および置換等のいずれかを含む、様々なタイプの処理を実行してよく、結果をＲＡＭ２２１４に対しライトバックする。また、ＣＰＵ２２１２は、記録媒体内のファイル、データベース等における情報を検索してよい。例えば、各々が第２の属性の属性値に関連付けられた第１の属性の属性値を有する複数のエントリが記録媒体内に格納される場合、ＣＰＵ２２１２は、第１の属性の属性値が指定される、条件に一致するエントリを当該複数のエントリの中から検索し、当該エントリ内に格納された第２の属性の属性値を読み取り、それにより予め定められた条件を満たす第１の属性に関連付けられた第２の属性の属性値を取得してよい。
【００７７】
上で説明したプログラムまたはソフトウェアモジュールは、コンピュータ２２００上またはコンピュータ２２００近傍のコンピュータ可読媒体に格納されてよい。また、専用通信ネットワークまたはインターネットに接続されたサーバーシステム内に提供されるハードディスクまたはＲＡＭのような記録媒体が、コンピュータ可読媒体として使用可能であり、それによりプログラムを、ネットワークを介してコンピュータ２２００に提供する。
【００７８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【００７９】
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【符号の説明】
【００８０】
３００  演算装置
３１０  ベクトル記憶部
３２０  行列記憶部
３３０  パイプライン演算部
３４０  結果記憶部
３５０  演算制御部
３６０  メインメモリ
３７０  メモリ制御部
２２００  コンピュータ
２２０１  ＤＶＤ−ＲＯＭ
２２１０  ホストコントローラ
２２１２  ＣＰＵ
２２１４  ＲＡＭ
２２１６  グラフィックコントローラ
２２１８  ディスプレイデバイス
２２２０  入出力コントローラ
２２２２  通信インターフェイス
２２２４  ハードディスクドライブ
２２２６  ＤＶＤ−ＲＯＭドライブ
２２３０  ＲＯＭ
２２４０  入出力チップ
２２４２  キーボード
【図１】
2020201659.tif 000003
【図２】
2020201659.tif 000004
【図３】
2020201659.tif 000005
【図４】
2020201659.tif 000006
【図５】
2020201659.tif 000007
【図６】
2020201659.tif 000008
【図７】
2020201659.tif 000009
【図８】
2020201659.tif 000010