(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-03-09
(45)【発行日】2023-03-17
(54)【発明の名称】演算装置、演算方法、および演算プログラム
(51)【国際特許分類】
G06F 17/16 20060101AFI20230310BHJP
【FI】
G06F17/16 F
(21)【出願番号】P 2019107283
(22)【出願日】2019-06-07
【審査請求日】2021-12-16
(73)【特許権者】
【識別番号】503359821
【氏名又は名称】国立研究開発法人理化学研究所
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】牧野 淳一郎
(72)【発明者】
【氏名】戎崎 俊一
【審査官】坂東 博司
(56)【参考文献】
【文献】特開平2-266458(JP,A)
【文献】特開平6-044196(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
第1ベクトルを分割した第1の複数の部分ベクトルのうち、第1部分ベクトルを少なくとも記憶するベクトル記憶部と、
前記第1ベクトルに乗じる第1行列を行方向および列方向に分割した第1の複数の部分行列のうち、前記第1部分ベクトルに乗じるべき第1部分行列を少なくとも記憶する行列記憶部と、
パイプライン演算により、前記行列記憶部に記憶された部分行列と前記ベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部と、
前記パイプライン演算部が、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積のパイプライン演算中に、前記第1部分ベクトルまたは前記第1部分行列を用いた他の行列ベクトル積の演算の実行を前記パイプライン演算部に指示する演算制御部と
を備える演算装置。
【請求項2】
前記ベクトル記憶部は、前記第1の複数の部分ベクトルのうち、第2部分ベクトルを更に記憶し、
前記行列記憶部は、前記第1の複数の部分行列のうち、前記第2部分ベクトルに乗じるべき第2部分行列を更に記憶し、
前記演算制御部は、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積の演算結果が遅延なく利用可能となるサイクル以降に、前記第2部分行列および前記第2部分ベクトルの行列ベクトル積を、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積の演算結果に加える演算の実行を前記パイプライン演算部に指示する
請求項1に記載の演算装置。
【請求項3】
前記ベクトル記憶部は、前記第1行列を乗じるべき第2ベクトルを分割した第2の複数の部分ベクトルのうち、前記第1部分行列を乗じるべき第3部分ベクトルを更に記憶し、
前記演算制御部は、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積のパイプライン演算中に、前記他の行列ベクトル積の演算として、前記第1部分行列および前記第3部分ベクトルの行列ベクトル積の演算の実行を前記パイプライン演算部に指示する
請求項1または2に記載の演算装置。
【請求項4】
前記第1ベクトルおよび前記第2ベクトルは、前記第1行列に乗じるべき第2行列に含まれる列ベクトルである請求項3に記載の演算装置。
【請求項5】
前記ベクトル記憶部は、前記第2行列に含まれる複数の前記第2ベクトルを記憶し、
前記演算制御部は、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、前記第1部分行列および前記複数の第2ベクトルのそれぞれからの前記第3部分ベクトルの行列ベクトル積の演算で充填する
請求項4に記載の演算装置。
【請求項6】
前記行列記憶部は、前記第1の複数の部分行列のうち、前記第1部分ベクトルに乗じるべき第3部分行列を更に記憶し、
前記演算制御部は、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積のパイプライン演算中に、前記他の行列ベクトル積の演算として、前記第3部分行列および前記第1部分ベクトルの行列ベクトル積の演算の実行を前記パイプライン演算部に指示する
請求項1または2に記載の演算装置。
【請求項7】
前記行列記憶部は、複数の前記第3部分行列を記憶し、
前記演算制御部は、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、前記複数の第3部分行列のそれぞれおよび前記第1部分ベクトルの行列ベクトル積の演算で充填する
請求項6に記載の演算装置。
【請求項8】
ベクトル記憶部が、第1ベクトルを分割した第1の複数の部分ベクトルのうち、第1部分ベクトルを少なくとも記憶し、
行列記憶部が、前記第1ベクトルに乗じる第1行列を行方向および列方向に分割した第1の複数の部分行列のうち、前記第1部分ベクトルに乗じるべき第1部分行列を少なくとも記憶し、
パイプライン演算により、前記行列記憶部に記憶された部分行列と前記ベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部が、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積のパイプライン演算中に、前記第1部分ベクトルまたは前記第1部分行列を用いた他の行列ベクトル積の演算の実行を開始する
演算方法。
【請求項9】
演算装置によって実行される演算プログラムであって、
前記演算装置は、
第1ベクトルを分割した第1の複数の部分ベクトルのうち、第1部分ベクトルを少なくとも記憶するベクトル記憶部と、
前記第1ベクトルに乗じる第1行列を行方向および列方向に分割した第1の複数の部分行列のうち、前記第1部分ベクトルに乗じるべき第1部分行列を少なくとも行列記憶部と、
パイプライン演算により、前記行列記憶部に記憶された部分行列と前記ベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部と
を備え、
当該演算プログラムは、前記演算装置に、前記第1部分行列および前記第1部分ベクトルの行列ベクトル積のパイプライン演算中に、前記第1部分ベクトルまたは前記第1部分行列を用いた他の行列ベクトル積の演算の実行を開始させるためのものである
演算プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算装置、演算方法、および演算プログラムに関する。
【背景技術】
【0002】
例えば数値計算および深層学習といった種々の応用において、行列行列積(以下、「行列積」と示す。)および行列ベクトル積は、計算量の大部分を占める。このため、このような行列演算を効率良く実行する演算装置および演算方法が開発されている(特許文献1~3参照)。また、行列演算を実行可能なプロセッサも開発されている。
[先行技術文献]
[特許文献]
[特許文献1]国際公開第2018/207926号
[特許文献2]特開2018-139045号公報
[特許文献3]特開2018-197906号公報
【発明の概要】
【発明が解決しようとする課題】
【0003】
n次元正方行列およびn次元ベクトルの行列ベクトル積は、n2の乗算および約n2の加算を含み、約2n2の演算量となる。このため、n次元正方行列が固定である場合、行列ベクトル積の演算量は、n次元ベクトルの入力に対してn2オーダーとなる。したがって、行列サイズを大きくして行列演算器を大きくすれば、演算量に対するデータのロード量の比率を小さくすることができる。しかし、行列演算器を大きくすると、レジスタファイル等のロード/ストア能力が相対的に低くなり、サイズが小さい行列の演算および行列以外の演算の処理性能が相対的に低くなってしまう。
【課題を解決するための手段】
【0004】
上記課題を解決するために、本発明の第1の態様においては、演算装置を提供する。演算装置は、第1ベクトルを分割した第1の複数の部分ベクトルのうち、第1部分ベクトルを少なくとも記憶するベクトル記憶部を備えてよい。演算装置は、第1ベクトルに乗じる第1行列を行方向および列方向に分割した第1の複数の部分行列のうち、第1部分ベクトルに乗じるべき第1部分行列を少なくとも記憶する行列記憶部を備えてよい。演算装置は、パイプライン演算により、行列記憶部に記憶された部分行列とベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部を備えてよい。演算装置は、パイプライン演算部が、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算中に、第1部分ベクトルまたは第1部分行列を用いた他の行列ベクトル積の演算の実行をパイプライン演算部に指示する演算制御部を備えてよい。
【0005】
ベクトル記憶部は、第1の複数の部分ベクトルのうち、第2部分ベクトルを更に記憶してよい。行列記憶部は、第1の複数の部分行列のうち、第2部分ベクトルに乗じるべき第2部分行列を更に記憶してよい。演算制御部は、第1部分行列および第1部分ベクトルの行列ベクトル積の演算結果が遅延なく利用可能となるサイクル以降に、第2部分行列および第2部分ベクトルの行列ベクトル積を、第1部分行列および第1部分ベクトルの行列ベクトル積の演算結果に加える演算の実行をパイプライン演算部に指示してよい。
【0006】
ベクトル記憶部は、第1行列を乗じるべき第2ベクトルを分割した第2の複数の部分ベクトルのうち、第1部分行列を乗じるべき第3部分ベクトルを更に記憶してよい。演算制御部は、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算中に、他の行列ベクトル積の演算として、第1部分行列および第3部分ベクトルの行列ベクトル積の演算の実行をパイプライン演算部に指示してよい。
【0007】
第1ベクトルおよび第2ベクトルは、第1行列に乗じるべき第2行列に含まれる列ベクトルであってよい。
【0008】
ベクトル記憶部は、第2行列に含まれる複数の第2ベクトルを記憶してよい。演算制御部は、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、第1部分行列および複数の第2ベクトルのそれぞれからの第3部分ベクトルの行列ベクトル積の演算で充填してよい。
【0009】
行列記憶部は、第1の複数の部分行列のうち、第1部分ベクトルに乗じるべき第3部分行列を更に記憶してよい。演算制御部は、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算中に、他の行列ベクトル積の演算として、第3部分行列および第1部分ベクトルの行列ベクトル積の演算の実行をパイプライン演算部に指示してよい。
【0010】
行列記憶部は、複数の第3部分行列を記憶してよい。演算制御部は、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、複数の第3部分行列のそれぞれおよび第1部分ベクトルの行列ベクトル積の演算で充填してよい。
【0011】
本発明の第2の態様においては、演算方法を提供する。演算方法は、ベクトル記憶部が、第1ベクトルを分割した第1の複数の部分ベクトルのうち、第1部分ベクトルを少なくとも記憶することを備えてよい。演算方法は、行列記憶部が、第1ベクトルに乗じる第1行列を行方向および列方向に分割した第1の複数の部分行列のうち、第1部分ベクトルに乗じるべき第1部分行列を少なくとも記憶することを備えてよい。演算方法は、パイプライン演算により、行列記憶部に記憶された部分行列とベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部が、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算中に、第1部分ベクトルまたは第1部分行列を用いた他の行列ベクトル積の演算の実行を開始することを備えてよい。
【0012】
本発明の第3の態様においては、演算装置によって実行される演算プログラムを提供する。演算装置は、第1ベクトルを分割した第1の複数の部分ベクトルのうち、第1部分ベクトルを少なくとも記憶するベクトル記憶部を備えてよい。演算装置は、第1ベクトルに乗じる第1行列を行方向および列方向に分割した第1の複数の部分行列のうち、第1部分ベクトルに乗じるべき第1部分行列を少なくとも行列記憶部を備えてよい。演算装置は、パイプライン演算により、行列記憶部に記憶された部分行列とベクトル記憶部に記憶された部分ベクトルとの行列ベクトル積に、中間ベクトルを加える演算を実行可能なパイプライン演算部を備えてよい。演算プログラムは、演算装置に、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算中に、第1部分ベクトルまたは第1部分行列を用いた他の行列ベクトル積の演算の実行を開始させるためのものであってよい。
【0013】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【図面の簡単な説明】
【0014】
【
図2】本実施形態に係る行列演算を、部分行列および部分ベクトルの行列ベクトル積に分解した計算式の一例を示す。
【
図3】本実施形態に係る演算装置300の構成を示す。
【
図4】本実施形態に係る演算装置300によるパイプライン処理の第1例を示す。
【
図5】本実施形態に係る演算装置300によるパイプライン処理の第2例を示す。
【
図6】本実施形態に係る演算装置300によるパイプライン処理の第3例を示す。
【
図7】本実施形態に係る演算装置300によるパイプライン処理の第4例を示す。
【
図8】
図8は、本発明の複数の態様が全体的または部分的に具現化されてよいコンピュータ2200の例を示す。
【発明を実施するための形態】
【0015】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0016】
図1は、本実施形態に係る行列演算の一例を示す。本図は、行列Aおよび行列Bの行列積を計算し、行列Cに代入する行列演算C=A×Bを示す。行列A、B、およびCは、8行8列の正方行列である。
【0017】
aij(i=1,2,…8、j=1,2,…8)は、行列Aの成分(「要素」とも示す。)である。bij(i=1,2,…8、j=1,2,…8)は、行列Bの成分である。cij(i=1,2,…8、j=1,2,…8)は、行列Cの成分である。j≧3の範囲について、bijおよびcijの各成分の図示は省略している。
【0018】
また、行列Bのj列の列ベクトル、すなわち行列Bのj列の各成分bij(i=1,2,…8)を成分とするベクトルをベクトルvbj、行列Cのj列の列ベクトルをベクトルvcjと示す。すなわち、ベクトルvbj=(b1j,b2j,…,b8j)T、ベクトルvcj=(c1j,c2j,…,c8j)Tと示す。このとき、ベクトルvcjは、行列Aおよびベクトルvbjの行列ベクトル積vcj=A×vbjによって計算できる。
【0019】
ここで、例えば4行4列の行列と4要素のベクトルとの行列ベクトル積を1単位の演算として実行可能な演算装置を用いる場合、行列演算C=A×Bを、演算装置が一度に演算できる単位に分割して行う。本図において、行列Aを、行列Aを行方向および列方向にそれぞれ2分割して得られる部分行列をA11、A21、A12、およびA22と示す。部分行列Amn(m=1,2、n=1,2)は、行列Aにおける、行方向に分割したm番目の行範囲、および列方向に分割したn番目の列範囲の成分を、その部分行列の成分とする。また、ベクトルvbjを、行方向に2分割して得られる部分ベクトルをvb1jおよびvb2jと示す。vbmj(m=1,2)は、ベクトルvbjにおける、行方向に分割したm番目の行範囲の成分を、その部分ベクトルの成分とする。また、ベクトルvcjを、行方向に2分割して得られる部分ベクトルをvc1jおよびvc2jと示す。vcmj(m=1,2)は、ベクトルvcjにおける、行方向に分割したm番目の行範囲の成分を、その部分ベクトルの成分とする。
【0020】
なお、本図においては、行列演算の一例として行列積を示し、行列ベクトル積については行列積の一部に含まれるものとして説明した。行列積の演算に含まれない行列ベクトル積については、行列Bおよび行列Cの第1列に関する行列ベクトル積vc1=A×vb1等と同様である。また、本実施形態においては、行列A、B、およびCは、行方向および列方向に2のべき乗個の要素を有し、行列Aが行方向および列方向において2のべき乗個に分割される場合について例示する。これに代えて、行列A、B、およびCは、行方向または列方向の少なくとも1つについて2のべき乗個以外の数の要素を有してもよく、行列Aが行方向または列方向の少なくとも1つについて2のべき乗個以外の数に分割されてもよい(例えば3×3、5×5、9×9、3×5、5×9等)。
【0021】
図2は、本実施形態に係る行列演算を、部分行列および部分ベクトルの行列ベクトル積に分解した計算式の一例を示す。行列Aおよびベクトルvbjの行列ベクトル積vcj=A×vbjは、部分ベクトルvc1jを計算するvc1j=(A11 A12)×vbj=A11×vb1j+A12×vb2jと、部分ベクトルvc2jを計算するvc2j=(A21 A22)×vb
j=A21×vb1j+A22×vb2jとに分けることができる。すなわち、j=1の場合、vc11=A11×vb11+A12×vb21、vc21=A21×vb11+A22×vb21となる。また、j=2の場合、vc12=A11×vb12+A12×vb22、vc22=A21×vb12+A22×vb22となる。以下、j=3,…,8も同様である。
【0022】
このように、行列Aを行方向および列方向にそれぞれd個に分割し、ベクトルvbをd個に分割すると、行列Aおよびベクトルvbの行列ベクトル積は、部分行列および部分ベクトルの行列ベクトル積をd×d個含むものとなる。演算装置が単一の部分行列を格納可能なレジスタしか有しない場合、演算装置は、部分行列をメモリからレジスタに順次ロードしながら
図2に示した行列演算を行うこととなり、処理性能が低下してしまう。
【0023】
図3は、本実施形態に係る演算装置300の構成を示す。演算装置300は、仕様上定められた行数および列数までの行列と、仕様上定められた行数までのベクトルとの行列ベクトル積を1単位の演算としてパイプライン演算により実行可能である。演算装置300は、1単位の演算で処理可能なサイズよりも大きい行列およびベクトルの行列ベクトル積を、1単位の演算で処理可能な部分行列および部分ベクトルの行列ベクトル積の複数組に分割して計算する。
【0024】
演算装置300は、ベクトル記憶部310と、行列記憶部320と、パイプライン演算部330と、結果記憶部340と、演算制御部350と、メインメモリ360と、メモリ制御部370とを備える。ベクトル記憶部310は、第1ベクトルを分割した第1の複数の部分ベクトルのうち、第1部分ベクトルを少なくとも記憶する。本実施形態において、ベクトル記憶部310は、一例としてレジスタである。これに代えて、ベクトル記憶部310は、キャッシュメモリ等の、パイプライン的に部分ベクトルをパイプライン演算部330に供給できる他の記憶装置であってもよい。
【0025】
ここで、第1ベクトルは、少なくとも1つの部分行列が行列記憶部320に記憶された1行列を乗じる対象となる対象ベクトルである。第1ベクトルは、演算装置300が1単位の演算で処理可能なサイズよりも大きい。第1の複数の部分ベクトルは、第1ベクトルを、1単位の演算で処理可能な大きさに分割したものである。
図1の行列演算において、第1ベクトルは、ベクトルvbjのいずれか(例えばvb1)に相当する。第1の複数の部分ベクトルは、第1ベクトルvbjを分割して得られる部分ベクトルvbij(i=1,2)に相当する。第1ベクトルがさらに大きい場合、第1ベクトルは、3以上の部分ベクトルに分割されてもよい。
【0026】
また、ベクトル記憶部310は、第1の複数の部分ベクトルのうち、第2部分ベクトル、およびその他の部分ベクトルを更に記憶するべく、十分な記憶領域を有してもよい。例えば、
図1の行列演算において、ベクトル記憶部310は、部分ベクトルvb1jおよび部分ベクトルvb2jを記憶してもよい。
【0027】
行列記憶部320は、第1ベクトルに乗じる第1行列を行方向および列方向に分割した第1の複数の部分行列のうち、第1部分ベクトルに乗じるべき第1部分行列を少なくとも記憶する。本実施形態において、行列記憶部320は、一例としてレジスタである。これに代えて、行列記憶部320は、キャッシュメモリ等の、パイプライン的に部分行列をパイプライン演算部330に供給できる他の記憶装置であってもよい。
【0028】
ここで、第1行列は、少なくとも1つの部分ベクトルがベクトル記憶部310に記憶された第1ベクトルに乗じる対象となる対象行列である。第1行列は、演算装置300が1単位の演算で処理可能なサイズよりも大きい。第1の複数の部分行列は、第1行列を、演算装置300が1単位の演算で処理可能な大きさに分割したものである。
図1の行列演算において、第1行列は、行列Aに相当する。第1の複数の部分行列は、第1行列Aを行方向および列方向に分割して得られる部分行列Aij(i=1,2、j=1,2)に相当する。第1行列がさらに大きい場合、第1行列は、行方向および列方向のそれぞれにおいて3以上に分割されてもよい。
【0029】
また、行列記憶部320は、第1の複数の部分行列のうち、第2部分ベクトルに乗じるべき第2部分行列、およびその他の部分行列を更に記憶するべく、十分な記憶領域を有してもよい。例えば、
図1の行列演算において、行列記憶部320は、部分ベクトルvb1jに乗じるべき部分行列A11と、部分ベクトルvb2jに乗じるべき部分行列A12を記憶してもよい。ここで、第1部分ベクトルおよび第2部分ベクトルは、第1ベクトルにおける異なる行範囲に位置する。このため、第1部分行列および第2部分行列は、対象行列における異なる列範囲に位置する。なお、第1部分行列および第2部分行列は、対象行列における同じ行範囲に位置してよい。
【0030】
パイプライン演算部330は、ベクトル記憶部310および行列記憶部320に接続され、ベクトル記憶部310に記憶された演算対象の部分ベクトルをベクトル記憶部310から受け取り、行列記憶部320に記憶された演算対象の部分行列を行列記憶部320から受け取る。パイプライン演算部330は、パイプライン演算により、演算対象の部分行列および部分ベクトルの行列ベクトル積に、中間ベクトルを加える演算を実行可能である。本実施形態において、パイプライン演算部330は、4行4列の部分行列と4行の部分ベクトルとの行列ベクトル積を算出し、この行列ベクトル積に4行の中間ベクトルを加えて演算結果となる部分ベクトル(「結果ベクトル」とも示す。)を算出する演算を1単位の演算として実行可能である。
【0031】
ここで、1単位の演算として実行可能とは、パイプライン演算部330が、例えば外部からの指示または命令の実行等の要求に応じて、演算対象の部分行列および部分ベクトルの行列ベクトル積に、中間ベクトルを加える演算をまとめて実行し、その結果を出力することを意味する。パイプライン演算部330は、この演算に含まれる全ての基本演算(例えば、値同士の乗算、加算)を別個の演算器で行うべく多数の演算器を有してもよく、これに代えて一部の演算を同じ演算器で行ってもよい。
【0032】
また、パイプライン演算部330がパイプラン演算を行うとは、パイプライン演算部330が演算の開始後複数のステージにおける処理を経て結果を出力するところ、各ステージは並列に動作可能であることを意味する。すなわち、パイプライン演算部330は、ある演算の開始後結果を出力するまでの各サイクルにおいて、特に実行上の障害がなければ順次他の演算を開始することができる。
【0033】
例えば、パイプライン演算部330は、1サイクル目に、部分行列および部分ベクトルを入力し、2サイクル目に、部分行列および部分ベクトルの対応する要素同士を乗算し、3サイクル目に、結果ベクトルに含まれるべき各要素について2サイクル目に計算した積を合計し、4サイクル目に、演算結果の部分ベクトルを出力してもよい。パイプライン演算部330は、必要に応じて任意の段数のパイプライン構造をとることができる。
【0034】
結果記憶部340は、パイプライン演算部330に接続される。結果記憶部340は、パイプライン演算部330が出力する結果ベクトルを受け取って、格納する。結果ベクトルは、例えば
図2におけるvc11およびvc21等である。本実施形態において、結果記憶部340は、一例としてレジスタである。これに代えて、結果記憶部340は、キャッシュメモリ等の、パイプライン的にパイプライン演算部330からの部分ベクトルを格納できる他の記憶装置であってもよい。なお、ベクトル記憶部310、行列記憶部320、および結果記憶部340は、同一の記憶装置として実装されてもよい。
【0035】
演算制御部350は、ベクトル記憶部310、行列記憶部320、パイプライン演算部330、および結果記憶部340に接続される。演算制御部350は、例えば演算装置300の外部からの指示を受けたこと、または演算装置300におけるプログラム実行中に行列演算命令をデコードしたこと等のような行列演算の実行要求に応じて、要求された行列演算を実行するべくベクトル記憶部310、行列記憶部320、パイプライン演算部330、および結果記憶部340を制御する。
【0036】
メインメモリ360は、行列演算の対象となる行列および演算結果を格納する。メモリ制御部370は、ベクトル記憶部310、行列記憶部320、および結果記憶部340と、メインメモリ360との間に接続される。メモリ制御部370は、外部からの指示、または演算装置300におけるプログラム実行中のメモリアクセス命令に応じて、ベクトル記憶部310、行列記憶部320、および結果記憶部340と、メインメモリ360との間のデータ転送を行う。
【0037】
例えば、メモリ制御部370は、メインメモリ360からベクトル記憶部310へのベクトルロードが要求されたことに応じて、メインメモリ360に記憶された部分ベクトルのうちベクトルロードによって指定された部分ベクトルをメインメモリ360から読み出して、ベクトル記憶部310へと格納する。また、メモリ制御部370は、メインメモリ360から行列記憶部320への行列ロードが要求されたことに応じて、メインメモリ360に記憶された部分行列のうち行列ロードによって指定された部分行列をメインメモリ360から読み出して、行列記憶部320へと格納する。また、メモリ制御部370は、結果記憶部340からメインメモリ360への行列またはベクトルストアが要求されたことに応じて、結果記憶部340に記憶された、演算結果の行列またはベクトルを読み出して、メインメモリ360へと格納する。なお、演算装置300の設計によっては、ベクトル記憶部310および行列記憶部320に加えてメインメモリ360を設けず、ベクトル記憶部310および行列記憶部320として機能する比較的大きいメモリを設けて、当該メモリから直接パイプライン的にパイプライン演算部330に部分ベクトルおよび部分行列を供給できるようにしてもよい。
【0038】
以上に示した構成において、パイプライン演算部330は、パイプライン処理により、行列ベクトル積の演算を実行する。例えば
図2に示したvc11=A11×vb11+A12×vb21の演算を行う場合には、パイプライン演算部330は、第1部分行列A11および第1部分ベクトルvb11の演算を開始した後に演算結果を得るまでに、複数サイクルを要する。このため、パイプライン演算部330は、第1部分行列A11および第1部分ベクトルvb11の行列ベクトル積を計算する第1演算を開始したサイクルの次のサイクルに、第2部分行列A12および第2部分ベクトルvb21の行列ベクトル積を第1演算の結果に加える第2演算が投入されたとしても、第2演算の実行に障害が生じ(パイプラインハザード)、第1演算の演算結果が利用可能となるまで第2演算の処理を待たせる必要が生じてしまう。
【0039】
なお、パイプラインの設計によっては、第1演算の結果をレジスタに書き込むのを待たずに第2演算へと供給する(バイパスまたはフォワーディング)等により、第2演算の処理待ちをある程度は削減することができる。しかし、第1演算および第2演算の間に依存関係がある以上、パイプラインハザードによってパイプライン演算部330のパイプラインに生じる空きを完全になくすことは難しい。
【0040】
そこで、演算制御部350は、パイプライン演算部330が、第1部分行列および第1部分ベクトルの行列ベクトル積(例えばA11×vb11)のパイプライン演算中に、第1部分ベクトルまたは第1部分行列を用いた他の行列ベクトル積の演算の実行をパイプライン演算部330に指示する。ここで「他の行列ベクトル積」は、第1部分行列および第1部分ベクトルの行列ベクトル積の演算結果を使用しない演算であり、行列ベクトル積を含む演算、すなわち例えば行列ベクトル積に第1部分行列および第1部分ベクトルの行列ベクトル積以外の演算結果を加えるような演算であってもよい。これにより、演算制御部350は、パイプライン演算部330が第1演算の演算結果を待ってから第2演算を実行開始するまでの間に、第1演算の演算結果に依存しない1または複数の他の行列ベクトル積をパイプライン演算部330へと投入し、これによってパイプライン演算部330の利用効率を高めることができる。
【0041】
さらに、演算制御部350は、第1部分行列および第1部分ベクトルの行列ベクトル積の演算結果が遅延なく利用可能となるサイクル以降に、第2部分行列および第2部分ベクトルの行列ベクトル積を、第1部分行列および第1部分ベクトルの行列ベクトル積の演算結果に加える演算の実行をパイプライン演算部330に指示してもよい。これにより、演算制御部350は、第2演算にパイプラインハザードが生じるのを防ぐことができ、第1演算および第2演算の間に他の行列ベクトル積の演算を投入可能とすることができる。
【0042】
図4は、本実施形態に係る演算装置300によるパイプライン処理の第1例を示す。サイクル0と示した演算において、演算制御部350は、第1部分ベクトルの一例であるvb11の読み出しをベクトル記憶部310に指示し、第1部分行列の一例であるA11の読み出しを行列記憶部320に指示するとともに、第1部分行列A11および第1部分ベクトルvb11の行列ベクトル積を計算し、計算途中の中間ベクトルとしてパイプライン演算部330が有する中間レジスタ(テンポラリレジスタ)vctmp1に格納する演算の実行をパイプライン演算部330に指示する。
【0043】
サイクル1の実行開始までに、ベクトル記憶部310は、第1部分ベクトルの一例であるvb11および第2部分ベクトルの一例であるvb21に加えて、第1行列Aを乗じるべき第2ベクトル(一例としてvb2)を分割した第2の複数の部分ベクトルvbi2のうち、第1部分行列A11を乗じるべき第3部分ベクトル(一例としてvb12)を更に記憶する。本例において、第1ベクトルおよび第2ベクトルは、第1行列Aに乗じるべき第2行列Bに含まれる列ベクトルであり、例えば第1ベクトルはvb1、第2ベクトルはvb2である。第3部分ベクトルは、第2ベクトルvb2を分割した第2の複数の部分ベクトルvbi2のうち第1部分行列A11を乗じるべきvb12である。これに代えて、第1ベクトルおよび第2ベクトルは、それぞれ行列Aを乗じるべき別個のベクトルであってもよい。
【0044】
サイクル1と示した演算において、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算中に、演算制御部350は、第3部分ベクトルvb12の読み出しをベクトル記憶部310に指示し、第1部分行列A11の読み出しを行列記憶部320に指示するとともに、パイプラインハザードを生じさせない他の行列ベクトル積の演算として、第1部分行列および第3部分ベクトルの行列ベクトル積の演算の実行をパイプライン演算部330に指示する。これを受けて、パイプライン演算部330は、第1部分行列および第3部分ベクトルの行列ベクトル積を、計算途中の中間ベクトルとしてパイプライン演算部330が有する中間レジスタvctmp2に格納する演算を実行する。この演算は、
図2の第3行目における1つ目の行列ベクトル積の演算に相当し、サイクル0および1の行列ベクトル積は、互いに異なる結果ベクトルvc11およびvc12に反映されるものである。したがって、これらの演算の間に依存関係はないから、パイプライン演算部330は、これらの演算を、パイプラインハザードを発生させることなく実行することができる。
【0045】
サイクル2と示した演算において、演算制御部350は、第2部分ベクトルの一例であるvb21の読み出しをベクトル記憶部310に指示し、第2部分行列の一例であるA12の読み出しを行列記憶部320に指示するとともに、第2部分行列A12および第2部分ベクトルvb21の行列ベクトル積を計算し、サイクル0の演算の演算結果vctmp1を加える演算の実行をパイプライン演算部330に指示し、演算の結果得られる部分ベクトルvc11を格納することを結果記憶部350に指示する。ここで、サイクル2の演算はサイクル0の演算に依存するところ、演算制御部350は、サイクル0の演算に依存しないサイクル1の演算をサイクル0およびサイクル2の演算の間に挿入することで、パイプライン演算部330のパイプラインの利用効率を上げることができる。
【0046】
サイクル3の実行開始までに、ベクトル記憶部310は、第2の複数の部分ベクトルのうち、第2部分行列A12を乗じるべき第4部分ベクトルを更に記憶してよい。サイクル3と示した演算において、演算制御部350は、第4部分ベクトルの一例であるvb22の読み出しをベクトル記憶部310に指示し、第2部分行列の一例であるA12の読み出しを行列記憶部320に指示するとともに、第2部分行列A12および第4部分ベクトルvb22の行列ベクトル積を計算し、サイクル1の演算の演算結果vctmp2を加える演算の実行をパイプライン演算部330に指示し、演算の結果得られる部分ベクトルvc12を格納することをメインメモリ360に指示する。ここで、サイクル3の演算はサイクル1の演算に依存するところ、演算制御部350は、サイクル1の演算に依存しないサイクル2の演算をサイクル1およびサイクル3の演算の間に挿入することで、パイプライン演算部330のパイプラインの利用効率を上げることができる。
【0047】
本図の例では、サイクル0~3において行列Cの複数の列ベクトル(vc1、vc2)における第1行範囲(第1~4行)の部分ベクトル(vc11、vc12)を計算し、サイクル4~7において行列Cの複数の列ベクトル(vc1、vc2)における第2行範囲(第5~8行)の部分ベクトル(vc21、vc22)を計算する。サイクル4~7の演算は、部分行列A11、A12に代えて部分行列A21、A22を用い、部分ベクトルvc11、vc12に代えて部分ベクトルvc21、vc22を用いる他は同様であるので説明を省略する。
【0048】
本例において、演算制御部350は、第1部分行列および第1部分ベクトルの行列ベクトル積の第1演算と、その演算結果を利用する第2演算との間に、第1部分行列を用いた他の行列ベクトル積の演算、すなわち本例においては第1部分行列および第3部分ベクトルの行列ベクトル積の演算、を挿入する。これによって、演算制御部350は、第1演算および第2演算の間に必要となる空きサイクルを1つ利用することができる。
【0049】
第1演算および第2演算の間に複数の空きサイクルが生じる場合、演算制御部350は、第1部分行列および複数の第3部分ベクトルのそれぞれの行列ベクトル積を第1演算および第2演算の間に挿入してよい。例えば、ベクトル記憶部310は、第2行列Bに含まれる複数の第2ベクトルvb2、vb3、…を更に記憶しておく。演算制御部350は、第1部分行列A11および第1部分ベクトルvb11の行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、第1部分行列A11および複数の第2ベクトルvb2、vb3、…のそれぞれからの第3部分ベクトルvb12、vb13、…の行列ベクトル積A11×vb12、A11×vb13、…の演算で充填する。なお、第1ベクトルおよび複数の第2ベクトルは、第2行列の列順または列順の逆順に並んでいてもよく、また第2行列の列順に並んでおらず、それぞれ任意の列の列ベクトルであってよい。
【0050】
図5は、本実施形態に係る演算装置300によるパイプライン処理の第2例を示す。パイプライン演算部330がより多くの中間レジスタを有する場合、または演算結果を一旦メインメモリ360に格納した後に利用可能となる場合等においては、演算制御部350は、
図4におけるサイクル4~5の演算を、サイクル2~3の演算の前に行うように制御してもよい。この場合、演算制御部350は、第1部分行列A11および第1部分ベクトルvb11の行列ベクトル積を演算する第1演算のパイプライン演算の実行中に、第1部分行列を用いた他の行列ベクトル積の演算である
図5中のサイクル1の演算と、第1部分ベクトルを用いた他の行列ベクトル積の演算である
図5中のサイクル2の演算とをパイプライン演算部330に実行させる。また、演算制御部350は、サイクル2の演算に用いた第2部分行列A21と、サイクル1の演算に用いた第2部分ベクトルvb12との行列ベクトル積の演算であるサイクル3の演算を、第1演算および第2演算の間に実行させてよい。これにより、演算制御部350は、第1演算および第2演算の間の空きサイクルを更に充填することが可能となる。なお、サイクル0~3の演算同士の実行順序は任意であってよく、サイクル4~7の演算同士の実行順序はサイクル0~3における対応する演算の実行順序に応じて決定されてよい。
【0051】
図6は、本実施形態に係る演算装置300によるパイプライン処理の第3例を示す。サイクル0と示した演算において、演算制御部350は、
図4のサイクル0と同様の制御を行う。
【0052】
サイクル1の実行開始までに、行列記憶部320は、第1部分行列の一例であるA11および第2部分行列の一例であるA12に加えて、第1行列Aを行方向および列方向に分割した第1の複数の部分行列Aijのうち、第1部分ベクトルvb11に乗じるべき第3部分行列(一例としてA21)を更に記憶する。これに代えて、第3部分行列は、第1行列A以外の行列に含まれる部分行列であってもよい。
【0053】
サイクル1と示した演算において、第1部分行列および第1部分ベクトルの行列ベクトル積のパイプライン演算中に、演算制御部350は、第1部分ベクトルvb11の読み出しをベクトル記憶部310に指示し、第3部分行列A21の読み出しを行列記憶部320に指示するとともに、パイプラインハザードを生じさせない他の行列ベクトル積の演算として、第3部分行列A21および第1部分ベクトルvb11の行列ベクトル積の演算の実行をパイプライン演算部330に指示する。これを受けて、パイプライン演算部330は、第3部分行列A21および第1部分ベクトルvb11の行列ベクトル積を、計算途中の中間ベクトルとしてパイプライン演算部330が有する中間レジスタvctmp2に格納する演算を実行する。この演算は、
図2の第2行目における1つ目の行列ベクトル積の演算に相当し、サイクル0および1の行列ベクトル積は、互いに異なる結果ベクトルvc11およびvc21に反映されるものである。したがって、これらの演算の間に依存関係はないから、パイプライン演算部330は、これらの演算を、パイプラインハザードを発生させることなく実行することができる。
【0054】
サイクル2と示した演算において、演算制御部350は、
図4のサイクル2と同様の制御を行う。ここで、サイクル2の演算はサイクル0の演算に依存するところ、演算制御部350は、サイクル0の演算に依存しないサイクル1の演算をサイクル0およびサイクル2の演算の間に挿入することで、パイプライン演算部330のパイプラインの利用効率を上げることができる。
【0055】
サイクル3の実行開始までに、ベクトル記憶部310は、第1の複数の部分行列Aijのうち、第2部分ベクトルvb21に乗じるべき第4部分行列を更に記憶してよい。サイクル3と示した演算において、演算制御部350は、第2部分ベクトルの一例であるvb21の読み出しをベクトル記憶部310に指示し、第4部分行列の一例であるA22の読み出しを行列記憶部320に指示するとともに、第4部分行列A22および第2部分ベクトルvb21の行列ベクトル積を計算し、サイクル1の演算の演算結果vctmp2を加える演算の実行をパイプライン演算部330に指示し、演算の結果得られる部分ベクトルvc21を格納することをメインメモリ360に指示する。ここで、サイクル3の演算はサイクル1の演算に依存するところ、演算制御部350は、サイクル1の演算に依存しないサイクル2の演算をサイクル1およびサイクル3の演算の間に挿入することで、パイプライン演算部330のパイプラインの利用効率を上げることができる。
【0056】
本図の例では、サイクル0~3において行列Cの1つの列ベクトルvc1に含まれる2つの部分ベクトルvc11、vc21を計算し、サイクル4~7において行列Cの別の列ベクトルvc2に含まれる2つの部分ベクトルvc12、vc22を計算する。サイクル4~7の演算は、部分ベクトルvb11、vb21に代えて部分ベクトルvb12、vb22を用い、部分ベクトルvc11、vc21に代えて部分ベクトルvc12、vc22を用いる他は同様であるので説明を省略する。
【0057】
本例において、演算制御部350は、第1部分行列および第1部分ベクトルの行列ベクトル積の第1演算と、その演算結果を利用する第2演算との間に、第1部分ベクトルを用いた他の行列ベクトル積の演算、すなわち本例においては第3部分行列および第1部分ベクトルの行列ベクトル積の演算、を挿入する。これによって、演算制御部350は、第1演算および第2演算の間に必要となる空きサイクルを1つ利用することができる。
【0058】
第1演算および第2演算の間に複数の空きサイクルが生じる場合、演算制御部350は、複数の第3部分行列のそれぞれおよび第1部分ベクトルの行列ベクトル積を第1演算および第2演算の間に挿入してよい。例えば、行列記憶部320は、第1行列Aに含まれる、第1部分ベクトルに乗じるべき複数の第3部分行列A21、A31、…を記憶しておく。演算制御部350は、第1部分行列A11および第1部分ベクトルvb11の行列ベクトル積のパイプライン演算の開始後から演算結果が遅滞なく利用可能となる前までの間の各サイクルを、複数の第3部分行列A21、A31、…のそれぞれおよび第1部分ベクトルvb11の行列ベクトル積の演算で充填する。なお、第1部分行列および複数の第3部分行列は、第1行列の同一の行範囲において列順または列順の逆順に並んでいてもよく、また第2行列の列順に並んでおらず、それぞれ任意の列範囲の部分行列であってよい。
【0059】
図7は、本実施形態に係る演算装置300によるパイプライン処理の第4例を示す。パイプライン演算部330がより多くの中間レジスタを有する場合、または演算結果を一旦メインメモリ360に格納した後に利用可能となる場合等においては、演算制御部350は、
図6におけるサイクル4~5の演算を、サイクル2~3の演算の前に行うように制御してもよい。この場合、演算制御部350は、第1部分行列A11および第1部分ベクトルvb11の行列ベクトル積を演算する第1演算のパイプライン演算の実行中に、第1部分ベクトルを用いた他の行列ベクトル積の演算である
図7中のサイクル1の演算と、第1部分行列を用いた他の行列ベクトル積の演算である
図7中のサイクル2の演算とをパイプライン演算部330に実行させる。また、演算制御部350は、サイクル1の演算に用いた第3部分行列A21と、サイクル2の演算に用いた第2部分ベクトルvb12との行列ベクトル積の演算であるサイクル3の演算を、第1演算および第2演算の間に実行させてよい。これにより、演算制御部350は、第1演算および第2演算の間の空きサイクルを更に充填することが可能となる。なお、サイクル0~3の演算同士の実行順序は任意であってよく、サイクル4~7の演算同士の実行順序はサイクル0~3における対応する演算の実行順序に応じて決定されてよい。ここで、
図7のパイプライン処理は、
図5のパイプライン処理におけるサイクル1および2の演算を入れ換え、サイクル5および6の演算を入れ換えたものと実質的に同一である。
【0060】
以上に示した第1例から第4例を含む任意のパイプライン処理において、演算制御部350は、パイプライン演算部330が使用する部分ベクトルおよび部分行列を、パイプライン演算部330が必要とするよりも前にメインメモリ360からベクトル記憶部310および行列記憶部320へと転送するようにメモリ制御部370に指示してよい。例えば、
図4の例において、メインメモリ360は、サイクル0の前に、部分ベクトルvb11、vb12、vb21、vb22をベクトル記憶部310へと転送し、部分行列A11およびA12を行列記憶部320へと転送してもよい。これに代えて、メインメモリ360は、サイクル0の前に、部分ベクトルvb11、vb12をベクトル記憶部310へと転送し、部分行列A11を行列記憶部320へと転送し、サイクル2の前に、部分ベクトルvb21、vb22をベクトル記憶部310へと転送し、部分行列A12を行列記憶部320へと転送してもよい。
【0061】
第1例および第2例に示したパイプライン処理の場合、パイプライン演算部330は、サイクル毎に異なる部分ベクトルvb11、vb12、vb21、vb22を使用するが、部分行列A11、A12、A21、A22は2サイクルに1つずつ使用する。このため、行列記憶部320は、2サイクルに1つずつ部分行列を出力できるスループットを有すればよく、行列記憶部320の消費電力および回路規模を低減することができる。
【0062】
第3例および第4例に示したパイプライン処理の場合、パイプライン演算部330は、サイクル毎に異なる部分行列A11、A12、A21、A22を使用するが、部分ベクトルvb11、vb12、vb21、vb22は2サイクルに1つずつ使用する。このため、行列記憶部320は、2サイクルに1つずつ部分ベクトルを出力できるスループットを有すればよく、ベクトル記憶部310の消費電力および回路規模を低減することができる。
【0063】
演算装置300の設計者または演算装置300を使用するユーザは、演算装置300の回路規模をより小さくできるように、または、演算装置300の消費電力をより小さくできるように、パイプライン処理の実行順序を選択してよい。
【0064】
本発明の様々な実施形態は、フローチャートおよびブロック図を参照して記載されてよく、ここにおいてブロックは、(1)操作が実行されるプロセスの段階または(2)操作を実行する役割を持つ装置のセクションを表わしてよい。特定の段階およびセクションが、専用回路、コンピュータ可読媒体上に格納されるコンピュータ可読命令と共に供給されるプログラマブル回路、およびコンピュータ可読媒体上に格納されるコンピュータ可読命令と共に供給されるプロセッサのいずれかによって実装されてよい。専用回路は、デジタルおよびアナログのいずれかのハードウェア回路を含んでよく、集積回路(IC)およびディスクリート回路の何れかを含んでよい。プログラマブル回路は、論理AND、論理OR、論理XOR、論理NAND、論理NOR、および他の論理操作、フリップフロップ、レジスタ、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブルロジックアレイ(PLA)等のようなメモリ要素等を含む、再構成可能なハードウェア回路を含んでよい。
【0065】
コンピュータ可読媒体は、適切なデバイスによって実行される命令を格納可能な任意の有形なデバイスを含んでよく、その結果、そこに格納される命令を有するコンピュータ可読媒体は、フローチャートまたはブロック図で指定された操作を実行するための手段を作成すべく実行され得る命令を含む、製品を備えることになる。コンピュータ可読媒体の例としては、電子記憶媒体、磁気記憶媒体、光記憶媒体、電磁記憶媒体、半導体記憶媒体等が含まれてよい。コンピュータ可読媒体のより具体的な例としては、フロッピー(登録商標)ディスク、ディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリメモリ(EPROMまたはフラッシュメモリ)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、静的ランダムアクセスメモリ(SRAM)、コンパクトディスクリードオンリメモリ(CD-ROM)、デジタル多用途ディスク(DVD)、ブルーレイ(RTM)ディスク、メモリスティック、集積回路カード等が含まれてよい。
【0066】
コンピュータ可読命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk、JAVA(登録商標)、C++等のようなオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語のような従来の手続型プログラミング言語を含む、1または複数のプログラミング言語の任意の組み合わせで記述されたソースコードまたはオブジェクトコードのいずれかを含んでよい。
【0067】
コンピュータ可読命令は、汎用コンピュータ、特殊目的のコンピュータ、若しくは他のプログラム可能なデータ処理装置のプロセッサまたはプログラマブル回路に対し、ローカルにまたはローカルエリアネットワーク(LAN)、インターネット等のようなワイドエリアネットワーク(WAN)を介して提供され、フローチャートまたはブロック図で指定された操作を実行するための手段を作成すべく、コンピュータ可読命令を実行してよい。プロセッサの例としては、コンピュータプロセッサ、処理ユニット、マイクロプロセッサ、デジタル信号プロセッサ、コントローラ、マイクロコントローラ等を含む。
【0068】
図8は、本発明の複数の態様が全体的または部分的に具現化されてよいコンピュータ2200の例を示す。コンピュータ2200にインストールされたプログラムは、コンピュータ2200に、本発明の実施形態に係る装置に関連付けられる操作または当該装置の1または複数のセクションとして機能させることができてもよいし、または当該操作または当該1または複数のセクションを実行させることができてもよいし、コンピュータ2200に、本発明の実施形態に係るプロセスまたは当該プロセスの段階を実行させることができてもよい。そのようなプログラムは、コンピュータ2200に、本明細書に記載のフローチャートおよびブロック図のブロックのうちのいくつかまたはすべてに関連付けられた特定の操作を実行させるべく、CPU2212によって実行されてよい。
【0069】
本実施形態によるコンピュータ2200は、CPU2212、RAM2214、グラフィックコントローラ2216、およびディスプレイデバイス2218を含み、それらはホストコントローラ2210によって相互に接続されている。コンピュータ2200はまた、通信インターフェイス2222、ハードディスクドライブ2224、DVD-ROMドライブ2226、およびICカードドライブのような入出力ユニットを含み、それらは入出力コントローラ2220を介してホストコントローラ2210に接続されている。コンピュータはまた、ROM2230およびキーボード2242のようなレガシの入出力ユニットを含み、それらは入出力チップ2240を介して入出力コントローラ2220に接続されている。
【0070】
CPU2212は、ROM2230およびRAM2214内に格納されたプログラムに従い動作し、それにより各ユニットを制御する。グラフィックコントローラ2216は、RAM2214内に提供されるフレームバッファ等またはそれ自体の中にCPU2212によって生成されたイメージデータを取得し、イメージデータがディスプレイデバイス2218上に表示されるようにする。
【0071】
通信インターフェイス2222は、ネットワークを介して他の電子デバイスと通信する。ハードディスクドライブ2224は、コンピュータ2200内のCPU2212によって使用されるプログラムおよびデータを格納する。DVD-ROMドライブ2226は、プログラムまたはデータをDVD-ROM2201から読み取り、ハードディスクドライブ2224にRAM2214を介してプログラムまたはデータを提供する。ICカードドライブは、プログラムおよびデータをICカードから読み取り、プログラムおよびデータをICカードに書き込む。
【0072】
ROM2230はその中に、アクティブ化時にコンピュータ2200によって実行されるブートプログラム等、およびコンピュータ2200のハードウェアに依存するプログラムのいずれかを格納する。入出力チップ2240はまた、様々な入出力ユニットをパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して、入出力コントローラ2220に接続してよい。
【0073】
プログラムが、DVD-ROM2201またはICカードのようなコンピュータ可読媒体によって提供される。プログラムは、コンピュータ可読媒体から読み取られ、コンピュータ可読媒体の例でもあるハードディスクドライブ2224、RAM2214、またはROM2230にインストールされ、CPU2212によって実行される。これらのプログラム内に記述される情報処理は、コンピュータ2200に読み取られ、プログラムと、上記様々なタイプのハードウェアリソースとの間の連携をもたらす。装置または方法が、コンピュータ2200の使用に従い情報の操作または処理を実現することによって構成されてよい。
【0074】
例えば、通信がコンピュータ2200および外部デバイス間で実行される場合、CPU2212は、RAM2214にロードされた通信プログラムを実行し、通信プログラムに記述された処理に基づいて、通信インターフェイス2222に対し、通信処理を命令してよい。通信インターフェイス2222は、CPU2212の制御下、RAM2214、ハードディスクドライブ2224、DVD-ROM2201、またはICカードのような記録媒体内に提供される送信バッファ処理領域に格納された送信データを読み取り、読み取られた送信データをネットワークに送信し、またはネットワークから受信された受信データを記録媒体上に提供される受信バッファ処理領域等に書き込む。
【0075】
また、CPU2212は、ハードディスクドライブ2224、DVD-ROMドライブ2226(DVD-ROM2201)、ICカード等のような外部記録媒体に格納されたファイルまたはデータベースの全部または必要な部分がRAM2214に読み取られるようにし、RAM2214上のデータに対し様々なタイプの処理を実行してよい。CPU2212は次に、処理されたデータを外部記録媒体にライトバックする。
【0076】
様々なタイプのプログラム、データ、テーブル、およびデータベースのような様々なタイプの情報が記録媒体に格納され、情報処理を受けてよい。CPU2212は、RAM2214から読み取られたデータに対し、本開示の随所に記載され、プログラムの命令シーケンスによって指定される様々なタイプの操作、情報処理、条件判断、条件分岐、無条件分岐、情報の検索および置換等のいずれかを含む、様々なタイプの処理を実行してよく、結果をRAM2214に対しライトバックする。また、CPU2212は、記録媒体内のファイル、データベース等における情報を検索してよい。例えば、各々が第2の属性の属性値に関連付けられた第1の属性の属性値を有する複数のエントリが記録媒体内に格納される場合、CPU2212は、第1の属性の属性値が指定される、条件に一致するエントリを当該複数のエントリの中から検索し、当該エントリ内に格納された第2の属性の属性値を読み取り、それにより予め定められた条件を満たす第1の属性に関連付けられた第2の属性の属性値を取得してよい。
【0077】
上で説明したプログラムまたはソフトウェアモジュールは、コンピュータ2200上またはコンピュータ2200近傍のコンピュータ可読媒体に格納されてよい。また、専用通信ネットワークまたはインターネットに接続されたサーバーシステム内に提供されるハードディスクまたはRAMのような記録媒体が、コンピュータ可読媒体として使用可能であり、それによりプログラムを、ネットワークを介してコンピュータ2200に提供する。
【0078】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【0079】
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【符号の説明】
【0080】
300 演算装置
310 ベクトル記憶部
320 行列記憶部
330 パイプライン演算部
340 結果記憶部
350 演算制御部
360 メインメモリ
370 メモリ制御部
2200 コンピュータ
2201 DVD-ROM
2210 ホストコントローラ
2212 CPU
2214 RAM
2216 グラフィックコントローラ
2218 ディスプレイデバイス
2220 入出力コントローラ
2222 通信インターフェイス
2224 ハードディスクドライブ
2226 DVD-ROMドライブ
2230 ROM
2240 入出力チップ
2242 キーボード