(57)【要約】【課題】マルチコア・プロセッサを用いて行列演算を効率的に行う。【解決手段】このシステムは、行列およびベクトルの積を算出するために、システムメモリに、行列の非ゼロ要素を配列した要素行列、および、行列の非ゼロ要素の位置を示す配置行列を記憶し、第１局所メモリに第１部分ベクトルを記憶し、第２局所メモリに第２部分ベクトルを記憶する。そして、要素行列および配置行列の行列要素を一部ずつ順次読み出して第１局所メモリに格納し、その読み出し毎に、第１部分ベクトルのうち配置行列から読み出した行列要素に対応する要素を、要素行列から読み出した行列要素に乗じる。また、その演算毎に、第１局所メモリから要素行列および配置行列の一部の行列要素を読み出して第２の局所メモリに格納し、その読み出し毎に、第２部分ベクトルのうち配置行列から読み出した行列要素に対応する要素を、要素行列から読み出した行列要素に乗じ、演算結果を出力する。【選択図】図４
2008181386.tif 000002
【特許請求の範囲】
【請求項１】
システムメモリと、プロセッサおよび局所メモリを有するプロセッシング・エレメントを複数有するマルチコア・プロセッサとを備え、入力した行列およびベクトルの積を算出するシステムであって、
前記システムメモリは、入力した前記行列の非ゼロ要素を配列した要素行列、および、入力した前記行列の非ゼロ要素の位置を示す配置行列を記憶しており、
第１の前記プロセッシング・エレメントに含まれる第１の局所メモリは、入力した前記ベクトルの一部である第１部分ベクトルを記憶しており、
第２の前記プロセッシング・エレメントに含まれる第２の局所メモリは、入力した前記ベクトルの他の一部である第２部分ベクトルを記憶しており、
前記システムメモリに記憶された前記要素行列および前記配置行列のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて前記第１の局所メモリに格納する第１読出部と、
前記第１読出部により行列要素の一部が読み出される毎に、前記第１部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第１のプロセッシング・エレメントに含まれる第１プロセッサの動作により行う第１演算部と、
前記第１演算部により演算が行われる毎に、前記第１の局所メモリから前記要素行列および前記配置行列の一部の行列要素を読み出して、既に読み出した行列要素に代えて前記第２の局所メモリに格納する第２読出部と、
前記第２読出部により行列要素の一部が読み出される毎に、前記第２部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第２のプロセッシング・エレメントに含まれる第２プロセッサの動作により行う第２演算部と、
前記第２プロセッサの動作により、前記第１演算部および前記第２演算部による演算結果に基づいて、入力した前記行列および前記ベクトルの積を示すベクトルの各要素を生成して前記システムメモリに格納する出力部と
を備えるシステム。
【請求項２】
前記第１の局所メモリおよび前記第２の局所メモリのそれぞれは、読み出した行列要素を記憶するための第１記憶領域と、演算に用いている行列要素を記憶するための第２記憶領域と、既に演算に用いられた行列要素を記憶するための第３記憶領域とを有し、
前記第１読出部は、行列要素の一部ずつを前記システムメモリから順次読み出して、既に前記第１記憶領域に記憶された行列要素に代えて前記第１記憶領域に記憶し、
前記第１演算部は、前記第１記憶領域から行列要素を読み出して前記第２記憶領域に格納して、前記第１読出部が次の演算のために行列要素の他の一部を前記第１記憶領域に読み出す処理と並列に、前記第２記憶領域に格納した行列要素を用いて演算を行い、演算の完了を条件に、前記第２記憶領域から行列要素を読み出して第３記憶領域に格納し、
前記第２読出部は、前記第１演算部による次の演算処理と並列に、前記第１の局所メモリの前記第３記憶領域から一部の行列要素を読み出して、既に前記第２の局所メモリの前記第１記憶領域に記憶された行列要素に代えて当該第１記憶領域に格納し、
前記第２演算部は、前記第２の局所メモリの前記第１記憶領域から行列要素を読み出して前記第２記憶領域に格納して、前記第２読出部が次の演算のために行列要素を読み出す処理と並列に、当該第２記憶領域に格納した行列要素を用いて演算を行う
請求項１に記載のシステム。
【請求項３】
前記第１演算部は、前記第１部分ベクトルの要素と前記要素行列の各非ゼロ要素との積の合計値をさらに算出し、算出した当該合計値をさらに前記第３記憶領域に格納し、
前記第２読出部は、前記第１の局所メモリの前記第３記憶領域からさらに当該合計値を読み出して、既に前記第２の局所メモリの前記第１記憶領域に記憶された合計値に代えて当該第１記憶領域に格納し、
前記第２演算部は、前記第２の局所メモリの前記第１記憶領域に記憶された当該合計値を読み出して前記第２の記憶領域に格納し、前記第２の部分ベクトルの要素と前記要素行列の各非ゼロ要素との積の合計値をさらに算出し、算出した当該合計値を、当該第２記憶領域に格納した合計値に加算して、前記第２の局所メモリの前記第３記憶領域に格納し、
前記出力部は、前記第２の局所メモリの前記第３記憶領域から合計値を読み出して、入力した前記行列および前記ベクトルの積を示すベクトルの各要素として前記システムメモリに格納する
請求項２に記載のシステム。
【請求項４】
前記第２演算部は、前記第１演算部による前記第１の部分ベクトルの要素と前記要素行列の一部の要素とを乗じる演算と並行に、前記第２の部分ベクトルの要素と前記要素行列の他の一部の要素とを乗じる演算を行う
請求項１に記載のシステム。
【請求項５】
当該システムは、入力した前記行列に入力した前記ベクトルを右から乗じた積を算出するシステムであり、
前記要素行列は、入力した前記行列のそれぞれの行について、当該行に含まれる非ゼロ要素のそれぞれを要素とする行ベクトルを生成して配列したものであり、
前記配置行列は、入力した前記行列のそれぞれの行について、当該行におけるそれぞれの非ゼロ要素の位置を示す値を要素とする行ベクトルを生成して配列したものであり、
前記システムメモリに記憶された前記配置行列を走査して、入力した前記行列の各行を、前記第１部分ベクトルおよび前記第２部分ベクトルの何れに含まれる要素との間で乗算するべき非ゼロ要素を含む第１分類、前記第１部分ベクトルに含まれる要素との間で乗算するべき非ゼロ要素を含む第２分類、および、前記第２部分ベクトルに含まれる要素との間で乗算するべき非ゼロ要素を含む第３分類に分類する分類部と、
前記第１読出部は、前記システムメモリに記憶された前記要素行列および前記配置行列のうち前記第１分類又は前記第２分類の行に対応する行の中から、予め定められた行数の行ごとに順次行列要素を読み出し、
前記第２読出部は、前記第１の局所メモリから前記要素行列および前記配置行列のうち前記第１分類の行に対応する行の行列要素を読み出し、さらに、前記システムメモリに記憶された前記要素行列および前記配置行列のうち前記第３分類の行に対応する行の行列要素を読み出し、
前記出力部は、前記第１分類の行について前記第１および第２演算部により演算された演算結果、前記第２分類の行について前記第１演算部により演算された演算結果、および、前記第３分類の行について前記第２演算部により演算された演算結果に基づいて、積を示すベクトルの各要素を生成して前記システムメモリに格納する
請求項１に記載のシステム。
【請求項６】
各々の前記プロセッシング・エレメントは、
前記プロセッサと、
前記プロセッサに接続され、前記システムメモリと比較して当該プロセッサから高速にアクセスされる前記局所メモリと、
マルチコア・プロセッサの外部に接続される前記システムメモリと前記局所メモリとの間、および、当該局所メモリと他のプロセッシング・エレメントに含まれる他の局所メモリとの間で命令コード又はデータを転送するＤＭＡコントローラと
を有し、
前記第１読出部は、前記第１のプロセッシング・エレメントに含まれる第１の前記ＤＭＡコントローラに指示して、前記システムメモリから行列要素を読み出して前記第１の局所メモリに格納し、
前記第１演算部は、プログラムの制御を受けた前記第１プロセッサの動作により、前記第１の局所メモリに記憶された行列要素を用いて演算を行い、
前記第２読出部は、前記第１のＤＭＡコントローラ、および、前記第２のプロセッサ・エレメントに含まれる第２の前記ＤＭＡコントローラに指示して、前記第１の局所メモリから行列要素を読み出して前記第２の局所メモリに格納し、
前記第２演算部は、プログラムの制御を受けた前記第２プロセッサの動作により、前記第２の局所メモリに記憶された行列要素を用いて演算を行う
請求項１に記載のシステム。
【請求項７】
システムメモリと、プロセッサおよび局所メモリを有するプロセッシング・エレメントを複数有するマルチコア・プロセッサとを備えたシステムによって、入力した行列およびベクトルの積を算出する方法であって、
前記システムメモリは、入力した前記行列の非ゼロ要素を配列した要素行列、および、入力した前記行列の非ゼロ要素の位置を示す配置行列を記憶しており、
第１の前記プロセッシング・エレメントに含まれる第１の局所メモリは、入力した前記ベクトルの一部である第１部分ベクトルを記憶しており、
第２の前記プロセッシング・エレメントに含まれる第２の局所メモリは、入力した前記ベクトルの他の一部である第２部分ベクトルを記憶しており、
前記システムメモリに記憶された前記要素行列および前記配置行列のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて前記第１の局所メモリに格納する第１読出段階と、
前記第１読出段階において行列要素の一部が読み出される毎に、前記第１部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第１のプロセッシング・エレメントに含まれる第１プロセッサの動作により行う第１演算段階と、
前記第１演算段階において演算が行われる毎に、前記第１の局所メモリから前記要素行列および前記配置行列の一部の行列要素を読み出して、既に読み出した行列要素に代えて前記第２の局所メモリに格納する第２読出段階と、
前記第２読出段階において行列要素の一部が読み出される毎に、前記第２部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第２のプロセッシング・エレメントに含まれる第２プロセッサの動作により行う第２演算段階と、
前記第２プロセッサの動作により、前記第１演算段階および前記第２演算段階における演算結果に基づいて、入力した前記行列および前記ベクトルの積を示すベクトルの各要素を生成して前記システムメモリに格納する出力段階と
を備える方法。
【請求項８】
システムメモリと、プロセッサおよび局所メモリを有するプロセッシング・エレメントを複数有するマルチコア・プロセッサとを備え、入力した行列およびベクトルの積を算出するシステムとして、情報処理装置を機能させるプログラムであって、
前記システムメモリは、入力した前記行列の非ゼロ要素を配列した要素行列、および、入力した前記行列の非ゼロ要素の位置を示す配置行列を記憶しており、
第１の前記プロセッシング・エレメントに含まれる第１の局所メモリは、入力した前記ベクトルの一部である第１部分ベクトルを記憶しており、
第２の前記プロセッシング・エレメントに含まれる第２の局所メモリは、入力した前記ベクトルの他の一部である第２部分ベクトルを記憶しており、
前記情報処理装置を、
前記システムメモリに記憶された前記要素行列および前記配置行列のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて前記第１の局所メモリに格納する第１読出部と、
前記第１読出部により行列要素の一部が読み出される毎に、前記第１部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第１のプロセッシング・エレメントに含まれる第１プロセッサの動作により行う第１演算部と、
前記第１演算部により演算が行われる毎に、前記第１の局所メモリから前記要素行列および前記配置行列の一部の行列要素を読み出して、既に読み出した行列要素に代えて前記第２の局所メモリに格納する第２読出部と、
前記第２読出部により行列要素の一部が読み出される毎に、前記第２部分ベクトルのうち、前記配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、前記要素行列から読み出された各非ゼロ要素に乗じる演算を、前記第２のプロセッシング・エレメントに含まれる第２プロセッサの動作により行う第２演算部と、
前記第２プロセッサの動作により、前記第１演算部および前記第２演算部による演算結果に基づいて、入力した前記行列および前記ベクトルの積を示すベクトルの各要素を生成して前記システムメモリに格納する出力部と
して機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコア・プロセッサに関する。特に、本発明は、マルチコア・プロセッサにより行列演算を行う技術に関する。
【背景技術】
【０００２】
流体解析や構造解析などの多くの科学技術計算において、疎行列とベクトルの積を求める演算は頻繁に行われる。たとえば、共役勾配法（ｃｏｎｊｕｇａｔｅ  ｇｒａｄｉｅｎｔ  ｍｅｔｈｏｄ：ＣＧ法）においては、多次元連立一次方程式の解が反復解法により算出される（非特許文献１を参照。）。そしてこの反復解法において、疎行列とベクトルの積は解が収束するまで繰返し算出される。このような演算の効率化を目的として幾つかの技術が提案されている。例えばある技術では、ＣＰＵのキャッシュメモリにベクトルデータの一部しか格納できない場合に、当該ベクトルデータの一部が連続してアクセスされるように行列の行または列を予め並べ替えて、キャッシュミスを低減している。また、他の技術では、疎行列の非ゼロ要素を１つずつメモリやハードディスクから読み出すのではなく、２要素×２要素のブロックとして同時に４要素を読み出すことで、読み出し時間を節約している。
【０００３】
【非特許文献１】共役勾配法についての記事。ホームページＵＲＬ「http://en.wikipedia.org/wiki/Conjugate_gradient_method」、２００７年１月２５日検索
【発明の開示】
【発明が解決しようとする課題】
【０００４】
近年、マルチコア・プロセッサが普及してきている。マルチコア・プロセッサは複数のプロセッサ・エレメントを単一のプロセッサ・チップ上に成形したものであり、各プロセッサ・エレメントは他のプロセッサ・エレメントとは独立にかつ並列に動作する。また、マルチコア・プロセッサは各プロセッサ・エレメント内にキャッシュメモリを有する。プロセッサからキャッシュメモリには高速にアクセスできるので、同時期に用いるデータをキャッシュメモリに予め格納することができれば、演算処理は高速化される。但し、キャッシュメモリとシステムメモリとの間や、あるキャッシュメモリと他のキャッシュメモリとの間でデータの一貫性を保つ処理の実現は容易でなく、多くのハードウェア資源を必要としてマルチコア・プロセッサの構造を複雑化してしまう場合がある。
【０００５】
このため、データの一貫性をソフトウェアにより管理させてプロセッサの構造を簡略化するべく、一貫性保持の機能を省いたマルチコア・プロセッサが開発されている。例えば、出願人らによって開発されたＣｅｌｌプロセッサ（Ｃｅｌｌ  Ｂｒｏａｄｂａｎｄ  Ｅｎｇｉｎｅ（登録商標））は、キャッシュメモリに代えて、一貫性保持の機能を有しない局所メモリを当該プロセッサの内部に備えている。これにより、プロセッサ内部のハードウェア構造を簡略化することができ、他の機能を設けたり、プロセッサの動作速度を向上させることができる。但し、一貫性を維持しようとすればソフトウェアによる制御が必要となる。また、このような構造のプロセッサはこれまでにない全く新しいものなので、従来から研究されてきたソフトウェアの技術をそのまま適用することはできない。これは行列演算にも該当する。
【０００６】
例えば、Ｃｅｌｌプロセッサはキャッシュメモリを有しないので、キャッシュミスを低減する技術はそのまま適用できない。また、Ｃｅｌｌプロセッサを従来のマルチプロセッサ型の並列計算機と対比し、並列計算機に関する従来技術を応用できるとも考えられるが妥当ではない。第１に、局所メモリは並列計算機のメモリなどと比較すると極めてデータサイズが小さく、同じ技術を適用すれば局所メモリが頻繁に更新される場合がある。第２に、Ｃｅｌｌプロセッサにおいて局所メモリ間の通信はシステムメモリへのアクセスよりも極めて高速であるのに対し、並列計算機においてノード間の通信速度はメモリアクセスと同程度かそれより遅い場合もある。このため、並列計算機ではノード間の通信量の削減が有効であるのに対し、Ｃｅｌｌプロセッサでは通信をむしろ積極的に利用することが好ましい。
【０００７】
そこで本発明は、上記の課題を解決することのできるシステム、方法およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、一側面においては、システムメモリと、プロセッサおよび局所メモリを有するプロセッシング・エレメントを複数有するマルチコア・プロセッサとを備え、入力した行列およびベクトルの積を算出するシステムであって、システムメモリは、入力した行列の非ゼロ要素を配列した要素行列、および、入力した行列の非ゼロ要素の位置を示す配置行列を記憶しており、第１のプロセッシング・エレメントに含まれる第１の局所メモリは、入力したベクトルの一部である第１部分ベクトルを記憶しており、第２のプロセッシング・エレメントに含まれる第２の局所メモリは、入力したベクトルの他の一部である第２部分ベクトルを記憶しており、システムメモリに記憶された要素行列および配置行列のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて第１の局所メモリに格納する第１読出部と、第１読出部により行列要素の一部が読み出される毎に、第１部分ベクトルのうち、配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、要素行列から読み出された各非ゼロ要素に乗じる演算を、第１のプロセッシング・エレメントに含まれる第１プロセッサの動作により行う第１演算部と、第１演算部により演算が行われる毎に、第１の局所メモリから要素行列および配置行列の一部の行列要素を読み出して、既に読み出した行列要素に代えて第２の局所メモリに格納する第２読出部と、第２読出部により行列要素の一部が読み出される毎に、第２部分ベクトルのうち、配置行列から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、要素行列から読み出された各非ゼロ要素に乗じる演算を、第２のプロセッシング・エレメントに含まれる第２プロセッサの動作により行う第２演算部と、第２プロセッサの動作により、第１演算部および第２演算部による演算結果に基づいて、入力した行列およびベクトルの積を示すベクトルの各要素を生成してシステムメモリに格納する出力部とを備えるシステムを提供する。また、当該システムにより行列演算を行う方法、および、当該システムとして情報処理装置を機能させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【０００９】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１０】
図１は、演算システム１０の全体構成を示す。演算システム１０は、システムメモリ２０と、マルチコア・プロセッサ４０とを備え、疎行列である行列２２およびベクトルを入力し、マルチコア・プロセッサ４０が有する並列計算の機能を活用して、それらの積を効率的に算出することを目的とする。システムメモリ２０は、いわゆる主記憶メモリであり、マルチコア・プロセッサ４０の外部に接続され、後述のホストコントローラ１０８２を介してマルチコア・プロセッサ４０やその他の入出力デバイスからアクセスされる。システムメモリ２０は、演算処理に必要なデータやプログラムを記憶するものであり、具体的には、入力した行列２２を示す要素行列２４および配置行列２６と、入力したベクトル２８と、マルチコア・プロセッサ４０を制御する演算プログラム３０とを記憶している。
【００１１】
マルチコア・プロセッサ４０は、制御用エレメント４００と、複数のプロセッシング・エレメント（即ちプロセッシング・エレメント４１０−１〜Ｎ）と、これらのエレメントおよびシステムメモリ２０を接続するオンチップ・バス４５とを備え、これらは単一のマイクロプロセッサ・チップ上に一体に形成されている。制御用エレメント４００は、演算処理を支援するために設けられ、例えばオペレーティングシステムを動作させたり、演算の事前処理や事後処理を行ったりする。例えば制御用エレメント４００は、プロセッシング・エレメント４１０−１〜Ｎのそれぞれに予めプログラムやデータを供給して、演算の前処理を行ってもよい。具体的な構成として制御用エレメント４００はプロセッサ４５０とキャッシュメモリ４６０とを有する。一例として、マルチコア・プロセッサ４０がＣｅｌｌプロセッサの場合は制御用エレメント４００はＰｏｗｅｒＰＣ（登録商標）プロセッサであり、ＰｏｗｅｒＰＣの命令セットを用いて記述された既存のプログラムを実行することができる。
【００１２】
プロセッシング・エレメント４１０−１〜Ｎは、相互に独立かつ並列に動作する。プロセッシング・エレメント４１０−１〜Ｎのそれぞれは、システムメモリ２０又は他のプロセッシング・エレメント４１０からデータを受け取って、そのデータを用いて演算処理を行い、システムメモリ２０又は他のプロセッシング・エレメント４１０に対し演算結果を出力する。そのうちの１つである第１のプロセッシング・エレメント（以降プロセッシング・エレメント４１０−１と呼ぶ）は、第１プロセッサ（以降プロセッサ４２０−１と呼ぶ）と、第１の局所メモリ（以降局所メモリ４３０−１と呼ぶ）と、第１のＤＭＡコントローラ（以降ＤＭＡコントローラ４４０−１と呼ぶ）とを有する。プロセッサ４２０−１は、演算ユニットおよびレジスタを有しており、局所メモリ４３０−１にアクセスして演算処理を行う。局所メモリ４３０−１は、システムメモリ２０と比較してプロセッサ４２０−１から極めて高速にアクセスされるメモリである。但し、局所メモリ４３０−１の記憶容量はシステムメモリ２０と比較して極めて小さく、Ｃｅｌｌプロセッサの場合で２５６ＫＢ程度である。
【００１３】
ＤＭＡコントローラ４４０−１は、システムメモリ２０と局所メモリ４３０−１との間、および、当該局所メモリ４３０−１と他のプロセッシング・エレメント４１０に含まれる他の局所メモリ４３０との間で命令コード又はデータを転送する。したがって、プロセッサ４２０−１は、ＤＭＡコントローラ４４０−１に指示してシステムメモリ２０から局所メモリ４３０−１にデータやプログラムを読み込んでもよいし、他のプロセッシング・エレメント４１０の局所メモリ４３０からデータやプログラムを読み込んでもよい。この読み込み処理は、マルチコア・プロセッサ４０という一体に整形されたプロセッサ・チップ上で完結する処理なので、システムメモリ２０にアクセスする処理と比較して極めて高速である。
第２から第Ｎのプロセッシング・エレメントであるプロセッシング・エレメント４１０−２〜Ｎについても、プロセッシング・エレメント４１０−１と同様、第２から第Ｎプロセッサ４２０−２〜Ｎ、第２から第Ｎの局所メモリ４３０−２〜Ｎおよび第２から第ＮのＤＭＡコントローラ４４０−２〜Ｎをそれぞれ有し、プロセッサ４２０−１、局所メモリ４３０−１およびＤＭＡコントローラ４４０−１と略同一であるから説明を省略する。
【００１４】
図２は、行列２２、要素行列２４および配置行列２６の具体例を示す。図２を参照して、行列２２と、システムメモリ２０に記憶している要素行列２４および配置行列２６との関係を説明する。行列２２は、半数以上の要素を０とする疎行列であり、ここでは例えば６行×６列の正方行列である。要素行列２４は、行列２２の非ゼロ要素を配列した行列である。要素行列２４は、行列２２のそれぞれの行について、当該行に含まれる非ゼロ要素のそれぞれを要素とする行ベクトルを生成して配列したものである。この図では要素行列２４は６行×３列の行列ｖａｌであり、各行に行列２２におけるそれと同一の行の非ゼロ要素を配列している。例えば２行目について、行列２２には３、４および５の３つの非ゼロ要素が配列されているので、要素行列２４も３、４および５の３つの非ゼロ要素を配列している。
【００１５】
また、４行目について、行列２２には８および９の２つの非ゼロ要素がそれぞれ３列目・４列目に配列されているが、要素行列２４においてはこのような列位置に関わらず８および９の２つの非ゼロ要素を１列目・２列目に配列している。さらに、この４行目において行列２２では非ゼロ要素が２つであって要素行列２４の列数３より少ないので、要素行列２４では２つの非ゼロ要素の他にゼロを配列している。このように、要素行列２４は行列２２の非ゼロ要素を漏れなく含めばよく、非ゼロ要素の他にゼロを含んでいてもよい。なお、以降の説明において、要素行列２４の行数を変数Ｍにより示し、要素行列２４の列数を変数ＮＺにより示す。即ちここではＭ＝６およびＮＺ＝３である。
【００１６】
配置行列２６は、行列２２の非ゼロ要素の位置を示す行列であり、具体的には、行列２２のそれぞれの行について、当該行におけるそれぞれの非ゼロ要素の位置を示す値を要素とする行ベクトルを生成して配列したものである。要素行列２４は、この図では６行×３列の行列ｃｏｌであり、各行に行列２２におけるそれと同一の行の非ゼロ要素の列位置を配列している。例えば３行目について、行列２２は非ゼロ要素６および７のそれぞれを２列目・４列目に配列しているので、要素行列２４は列位置を示す２および４をこの順に配列する。同様に、６行目において、行列２２は非ゼロ要素２および３のそれぞれを３列目・６列目に配列しているので、要素行列２４は列位置を示す３および６をこの順に配列する。
【００１７】
このように、疎行列である行列２２を要素行列２４および配置行列２６により表せば、本来ゼロ要素を格納するために必要な記憶領域を削減することができ、また、ゼロ要素を対象とした不要な演算処理を省略することができる。この例では６行×６列の行列を例示したが、実際の科学技術計算では数万行×数万列の疎行列が用いられる場合もあり、ゼロ要素を省略することによる節約の効果は非常に大きい。なお、図２に行列２２として示したように、非ゼロ要素はある一定の箇所に集中しているとは限らず、様々な行位置・列位置に万遍なく分布している場合がある。このような行列とベクトルの積を、ゼロ要素についての演算を省略して効率的に算出しようとすると、ベクトル中の各要素はランダムにアクセスされ得る。図３にそのようなアクセスを行うプログラムの一例を示す。
【００１８】
図３は、演算プログラム３０の具体例を示す。（ａ）に、プロセッサ４２０−１において動作するプログラムを示し、（ｂ）に、プロセッサ４２０−２において動作するプログラムを示す。これらのプログラムは、疎行列である行列２２にベクトル２８を右から乗じた積を算出することを目的とする。（ａ）の１行目および７行目に示すように、２から６行目のプログラムは行数Ｍと同一の回数繰り返され、繰返しの回数は誘導変数ｉに格納される。２行目において、配列変数ｙが０に初期化される。この変数ｙは、演算結果のベクトルの各要素に対応して、その要素の演算の途中経過を格納する。３行目において、行列２２および要素行列２４のｉ行目がシステムメモリ２０から局所メモリ４３０−１に読み出される。
【００１９】
４行目から６行目において、５行目に示す演算が、列数ＮＺと同一の回数繰り返される。５行目において、まず、配置行列２６のｉ行ｊ列の要素が局所メモリ４３０−１から読み出される。そして、読み出したその要素が示す番号を添え字として、ベクトル２８を示す配列変数ｘからベクトル要素が読み出される。読み出された要素は、要素行列２４のｉ行ｊ列の要素と乗じられて、変数ｙのｉ要素に加えられる。なお、（ｂ）についても（ａ）とほぼ同一であるが、詳しくは、具体的な処理の説明において後に参照する。
【００２０】
なお、３行目に示すように、ここでは行列２２等の要素が行単位で１行ずつ読み出されるが、読み出しは一部の行列要素ずつ行われれば他の例でもよく、たとえば列単位で所定数の列ずつ読み出されてもよいし、行単位ではなく行をさらに分割した単位で読み出されてもよい。このような読み出し単位の変更は、ＬＯＡＤの対象となる要素やＬＯＡＤ処理のタイミングを変更することによって実現される。タイミングの変更は、たとえば、図３（ａ）の１行目から開始するループ処理をさらに小さい単位の多重ループ処理に分割して、外側ループ処理の度にＬＯＡＤ命令を発行することにより実現される。また、図３（ａ）の３行目から開始するループ処理の一部をループ展開することにより実現される。
【００２１】
（ａ）のプログラムの５行目において、配列変数ｘは、配置行列２６から順次読み出される要素の番号に応じてランダムにアクセスされる。即ち例えば、配置行列２６の６行目について、要素３および６が順次読み出された結果、配列変数ｘの３番目および６番目の要素が順次アクセスされる。このように、疎行列とベクトルとの掛け算において、ゼロ要素に関する演算を省略しようとすると、ベクトルの要素はランダムにアクセスされる。このため、ベクトルの要素の数が多くて局所メモリ４３０に格納しきれない場合には、局所メモリ４３０に記憶する要素を入替える処理が頻繁に必要となる。この処理のためにはシステムメモリ２０にアクセスしなければならず、処理効率が悪い。また、アクセスのタイミングも配置行列２６を読み出してみないと分からない。
これに対し、本実施形態に係る演算システム１０によれば、アクセス位置の予測が困難なベクトルを予め分割して、その一部ずつを複数の局所メモリ４３０に記憶しておく。そして、逐次的にアクセスされる行列についてはシステムメモリ２０からストリーム的に読み出すことで、局所メモリ４３０の必要容量を削減しつつも演算処理を効率化できる。以下、具体的に説明してゆく。
【００２２】
図４は、本実施形態に係るマルチコア・プロセッサ４０の機能構成を示す。本図ではマルチコア・プロセッサ４０が備える制御用エレメント４００、プロセッシング・エレメント４１０およびプロセッサ４２０に注目して行列演算の処理機能を説明する。マルチコア・プロセッサ４０は、プロセッサ４５０の制御によって動作する初期化処理部４５５を有する。この初期化処理部４５５は、演算プログラム３０またはオペレーティングシステム・プログラムの指令に基づき動作する。初期化処理部４５５は、後述のホストコントローラ１０８２、ハードディスクドライブ１０４０または通信インターフェイス１０３０などと協働して、演算処理を支援するための各種の処理を行う。たとえば、初期化処理部４５５は、行列２２を外部から入力したり、ハードディスクドライブ１０４０から要素行列２４または配置行列２６を読み出してもよい。また、局所メモリ４３０−１〜Ｎのそれぞれに、演算処理に必要なデータやプログラムを提供してもよい。
【００２３】
マルチコア・プロセッサ４０は、プロセッサ４２０−１の制御によって演算プログラム３０の指令に基づき動作する第１読出部４２２−１および第１演算部４２４−１を有する。また、局所メモリ４３０−１は、第１記憶領域４３２−１と、第２記憶領域４３４−１と、第３記憶領域４３６−１と、ベクトル記憶領域４３８−１とを有する。マルチコア・プロセッサ４０は、プロセッサ４２０−２の制御によって演算プログラム３０の指令に基づき動作する第２読出部４２５−２、第２演算部４２６−２および出力部４２８−２を有する。また、局所メモリ４３０−２は、第１記憶領域４３２−２と、第２記憶領域４３４−２と、第３記憶領域４３６−２と、ベクトル記憶領域４３８−２とを有する。
【００２４】
局所メモリ４３０−１は、ベクトル記憶領域４３８−１に、ベクトル２８の一部である第１部分ベクトルを記憶している。例えば局所メモリ４３０−１と局所メモリ４３０−２とでベクトル２８全体を記憶するべく、局所メモリ４３０−１は、ベクトル２８を２分割した先頭側の要素を記憶してもよい。そして局所メモリ４３０−２は、ベクトル２８の他の一部である第２部分ベクトルを記憶している。第２部分ベクトルは、ベクトル２８を分割した後半側の要素から構成されるベクトルであってもよい。
【００２５】
第１読出部４２２−１は、システムメモリ２０に記憶された要素行列２４および配置行列２６のそれぞれから、行列要素の一部ずつを順次読み出して、既に読み出した行列要素に代えて局所メモリ４３０−１に格納する。ハードウェアの側面から見ると、この処理は、第１読出部４２２−１がＤＭＡコントローラ４４０−１に読み出し・格納を指示することにより実現される。ソフトウェアの側面から見ると、この処理は図３（ａ）の３行目に相当し、このＬＯＡＤ命令は例えばシステムメモリ２０の記憶領域に割り当てられたアドレスに対し発行される。
【００２６】
また、第１記憶領域４３２−１は、読み出した行列要素を記憶するために設けられ、第２記憶領域４３４−１は、演算に用いている行列要素を記憶するために設けられ、第３記憶領域４３６−１は、既に演算に用いられた行列要素を記憶するために設けられる。即ち、読み出された行列要素は、まず第１記憶領域４３２−１に格納されて、演算処理の前に第２記憶領域４３４−１にコピーされ、演算処理の後にさらに第３記憶領域４３６−１にコピーされる。なお、第１−３記憶領域は並列処理の効率化のために設けられたものであり、局所メモリ４３０−１〜２のそれぞれはベクトル記憶領域のほかは単一の記憶領域、あるいは２つの記憶領域を有していてもよい。
【００２７】
第１演算部４２４−１は、第１読出部４２２−１により行列要素の一部が読み出される毎に、第１部分ベクトルのうち、配置行列２６から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、要素行列２４から読み出された各非ゼロ要素に乗じる演算を行う。例えば配置行列２６から行列要素３が読み出されると、第１部分ベクトルの第３要素が対応する要素として、要素行列２４の行列要素と乗算される。演算結果は合計されて、局所メモリ４３０−１の第２記憶領域４３４−１に格納される。この処理は図３（ａ）の４−６行目の処理に相当する。ここで、配列変数ｘが第１部分ベクトル中の要素数を超える添え字でアクセスされた場合には、そのアクセスの結果はゼロが読み出されるように予め設定しておくことが望ましい。
【００２８】
第２読出部４２５−２は、第１演算部４２４−１により演算が行われる毎に、局所メモリ４３０−１から要素行列２４および配置行列２６の一部の行列要素を読み出して、既に読み出した行列要素に代えて局所メモリ４３０−２に格納する。ハードウェアの側面から見ると、この処理は、第２読出部４２５−２がＤＭＡコントローラ４４０−１〜２に読み出し・格納を指示することにより実現される。ソフトウェアの側面から見ると、この処理は図３（ｂ）の３行目に相当し、このＬＯＡＤ命令は例えば局所メモリ４３０−１の記憶領域に割り当てられたアドレスに対し発行される。さらに、第２読出部４２５−２は、プロセッサ４２０−１による演算結果を局所メモリ４３０−１から読み出して局所メモリ４３０−２に格納する。この処理は図３（ｂ）の２行目の処理に相当する。
【００２９】
なお、第２読出部４２５−２による読み出し処理は、局所メモリ４３０−１から局所メモリ４３０−２へのデータ転送を意味するものであり、直接的な転送か間接的な転送かを問わない。即ち、局所メモリ４３０−１から読み出した行列要素が一旦他のプロセッシング・ユニットの局所メモリ（たとえば局所メモリ４３０−Ｍとする）に格納され、それを第２読出部４２５−２が読み出して局所メモリ４３０−２に格納してもよい。また、第２読出部４２５−２はプロセッサ４２０−２に代えてプロセッサ４２０−１に設けられ、第２読出部４２５−２は行列要素を局所メモリ４３０−１から読み出したうえで、局所メモリ４３０−２に対するその要素をデータとする書込み命令を発行してこのデータ転送を実現してもよい。
【００３０】
局所メモリ４３０−１の場合と同様に、読み出された行列要素は、まず第１記憶領域４３２−２に格納されて、演算処理の前に第２記憶領域４３４−２にコピーされ、演算処理の後にさらに第３記憶領域４３６−２にコピーされてもよい。
【００３１】
第２演算部４２６−２は、第２読出部４２５−２により行列要素の一部が読み出される毎に、第２部分ベクトルのうち、配置行列２６から読み出された各行列要素が示す非ゼロ要素の位置に対応する要素を、要素行列２４から読み出された各非ゼロ要素に乗じる演算を行う。例えば配置行列２６から行列要素５が読み出されると、第２部分ベクトルの第２要素（５から第１部分ベクトルの要素数３を減じたもの）が対応する要素として要素行列２４の要素と乗じられる。この結果はそれぞれプロセッサ４２０−１の演算結果に加算されて局所メモリ４３０−２に格納される。この処理は、図３（ｂ）の４−６行目の処理に対応する。出力部４２８−２は、第１演算部４２４−１および第２演算部４２６−２による演算結果に基づいて、行列２２およびベクトル２８の積を示すベクトルの各要素を生成して、システムメモリ２０に格納する。この図の例では演算結果は順次加算されてきているので、出力部４２８−２はその加算された演算結果を単にシステムメモリ２０に出力すればよい。図３（ｂ）の７行目は、この処理を行毎に行う例を示している。
【００３２】
図５は、本実施形態に係るマルチコア・プロセッサ４０による行列演算処理の流れを示す。マルチコア・プロセッサ４０は、ベクトル２８の一部である第１部分ベクトルをシステムメモリ２０から読み出して、ベクトル記憶領域４３８−１に予め格納する（Ｓ５００）。また、マルチコア・プロセッサ４０は、ベクトル２８の他の一部である第２部分ベクトルをシステムメモリ２０から読み出して、ベクトル記憶領域４３８−２に予め格納する。第１読出部４２２−１は、要素行列２４の行列要素の一部ずつをシステムメモリ２０から順次読み出して、既に第１記憶領域４３２−１に記憶された行列要素（即ち、前回要素行列２４から読み出した行列要素）に代えて第１記憶領域４３２−１に格納する（Ｓ５１０）。また、第１読出部４２２−１は、配置行列２６の行列要素の一部ずつをシステムメモリ２０から順次読み出して、既に第１記憶領域４３２−１に記憶された行列要素（即ち前回配置行列２６から読み出した行列要素）に代えて第１記憶領域４３２−１に格納する（Ｓ５１５）。
【００３３】
第１演算部４２４−１は、第１記憶領域４３２−１から行列要素を読み出して第２記憶領域４３４−１に格納する（Ｓ５２０）。そして、第１演算部４２４−１は、第１読出部４２２−１が次の演算のために行列要素の他の一部を第１記憶領域４３２−１に読み出す処理と並列に、第２記憶領域４３４−１に格納した行列要素を用いて演算を行う（Ｓ５３０、Ｓ５３５）。演算結果は第２記憶領域４３４−１に格納される。即ち、第１部分ベクトルの要素と要素行列２４の各非ゼロ要素の積の合計値ｙが第２記憶領域４３４−１に格納される。演算の完了を条件に、第１演算部４２４−１は、第２記憶領域４３４−１から行列要素および演算結果を読み出して第３記憶領域４３６−１に格納する（Ｓ５４０）。
【００３４】
第２読出部４２５−２は、第１演算部４２４−１による次の演算処理と並列に、局所メモリ４３０−１の第３記憶領域４３６−１から一部の行列要素を読み出して、既に局所メモリ４３０−２の第１記憶領域４３２−２に記憶された行列要素（即ち、前回第３記憶領域４３６−１から読み出された行列要素）に代えて当該第１記憶領域４３２−２に格納する（Ｓ５５０）。また、第２読出部４２５−１は、局所メモリ４３０−１の第３記憶領域４３６−１からさらに合計値ｙを読み出して、既に局所メモリ４３０−２の第１記憶領域４３２−２に記憶された合計値に代えて当該第１記憶領域４３２−２に格納する。
【００３５】
第２演算部４２６−２は、第１記憶領域４３２−２から行列要素および合計値ｙを読み出して第２記憶領域４３４−２に格納する（Ｓ５６０）。そして、第２演算部４２６−２は、第２読出部４２５−２が次の演算のために行列要素を第１記憶領域４３２−２に読み出す処理と並列に、第２記憶領域４３４−２に格納した行列要素を用いて演算を行う（Ｓ５７０、Ｓ５７５）。演算によって第２部分ベクトルの要素と要素行列２４の各非ゼロ要素との積が算出される。そして、その積は合計されて、局所メモリ４３０−１から読み出した合計値ｙに加算され、第２記憶領域４３４−２に格納される。第２演算部４２６−２は、演算の完了を条件に、合計値ｙを第２記憶領域４３４−２から読み出して第３記憶領域４３６−２に格納する（Ｓ５８０）。出力部４２８−２は、第３記憶領域４３６−２から合計値ｙを読み出して、行列２２およびベクトル２８の積を示すベクトルの各要素としてシステムメモリ２０に格納する（Ｓ５９０）。
【００３６】
以上、図５を参照して説明したように、演算システム１０は、予めアクセス位置が予想できないベクトルデータについては予め分割して複数の局所メモリ４３０に読み込んでおき、逐次的に端からアクセスされる行列データについてはストリーム的に読み出す。これにより、演算処理の途中で演算を中断してシステムメモリ２０にアクセスする必要が無いので、各プロセッサ４２０の演算能力を有効活用して処理を効率化できる。また、各演算部は並列に動作する。具体的には、第２演算部４２６−２は、第１演算部４２４−１による第１の部分ベクトルの要素と要素行列２４の一部の要素とを乗じる演算と並行に、第２の部分ベクトルの要素と要素行列２４の他の一部の要素とを乗じる演算を行う。これにより、本来処理するべき行列演算の一部ずつを複数のプロセッサ４２０が同時並行に行うことができ、単一のプロセッサにより処理する場合と比較して処理効率を極めて高くすることができる。
【００３７】
次に、図６から図１０を参照して、マルチコア・プロセッサ４０の処理能力をさらに有効に活用する手法を変形例として示す。
図６は、本実施形態の変形例に係るマルチコア・プロセッサ４０の機能構成を示す。マルチコア・プロセッサ４０は、図４の構成に加えて、さらに、プロセッサ４５０の制御によって動作する分類部４５８と、プロセッサ４２０−１の制御によって動作する出力部４２８−１とを有する。分類部４５８は、システムメモリ２０に記憶された配置行列２６を走査して、行列２２の各行を、第１から第３分類に分類する。第１分類は、第１部分ベクトルおよび第２部分ベクトルの何れに含まれる要素との間でも乗算するべき非ゼロ要素を含む行を示す。第２分類は、第１分類以外の行のうち、第１部分ベクトルに含まれる要素との間で乗算するべき非ゼロ要素を含む行を示す。第３分類は、第１分類以外の行のうち、第２部分ベクトルに含まれる要素との間で乗算するべき非ゼロ要素を含む行を示す。そして、分類部４５８は、分類毎に行が連続するように行の配列順序をシステムメモリ２０において並べ替える。
【００３８】
第１読出部４２２−１は、図４において説明した第１読出部４２２−１と同様に、システムメモリ２０に記憶された要素行列２４および配置行列２６のうち、予め定められた行数の行ごと（たとえば１行ごと）に順次行列要素を読み出す。但し、読み出されるのは要素行列２４および配置行列２６のうち第１分類又は第２分類の行に対応する行に限られる。第３分類の行に対応する行は読み出しの対象から除外される。分類部４５８が各行を第２分類、第１分類および第３分類の順に並べ替えていれば、第１読出部４２２−１は先頭の行から順に読み出して第１分類が完了した時点で読み出しを終了すればよい。第１演算部４２４−１は、第１読出部４２２−１によって行列要素が読み出される毎に演算処理を行う。この演算処理は、図４および図５に示したものと同様である。
【００３９】
第２読出部４２５−２は、図４と同様に、第１演算部４２４−１により演算が行われる毎に、局所メモリ４３０−１に記憶された行列要素を読み出す。但し、読み出されるのは要素行列２４および配置行列２６のうち第１分類の行に対応する行に限られ、第２分類の行に対応する行は含まれない。さらに、第２読出部４２５−２は、要素行列２４および配置行列２６のうち第３分類の行に対応する行の行列要素をシステムメモリ２０から順次読み出す。第２演算部４２６−２は、第２読出部４２５−２によって行列要素が読み出される毎に演算処理を行う。この演算処理は図４および図５に示したものと同様である。
【００４０】
出力部４２８−１〜２は、協働して、本発明に係る出力部として機能する。そして、出力部４２８−２は、第１分類の行について第１演算部４２４−１および第２演算部４２６−２により演算された演算結果、および、第３分類の行について第２演算部４２６−２により演算された演算結果について、積を示すベクトルの各要素を生成してシステムメモリ２０に格納させる。また、出力部４２８−１は、第２分類の行について第１演算部４２４−１により演算された演算結果をシステムメモリ２０に格納する。
【００４１】
図７は、本実施形態の変形例に係るマルチコア・プロセッサ４０による行列演算処理の流れを示す。分類部４５８は、行列２２の各行を第１から第３分類に分類する（Ｓ７００）。好ましくは、分類部４５８は、第２分類、第１分類および第３分類の順に、分類した各行をシステムメモリ２０において並べ替える。次に、プロセッシング・エレメント４１０−１〜２は相互に並列に動作し、行列２２の右からベクトル２８を乗じる演算を行う（Ｓ７１０）。その後、好ましくは、出力部４２８−２は、演算結果であるベクトルの各要素を、分類部４５８による並べ替えの逆の処理によって元の順序に並べ替える（Ｓ７２０）。
【００４２】
図８は、図７のＳ７００における処理の具体例を示す。分類部４５８は、変数ｉの記憶領域をシステムメモリ２０などに確保してその値を０に初期化する（Ｓ８００）。次に、分類部４５８は、行列２２の行数Ｍを要素数とする配列変数Ｆの記憶領域を確保してその各要素を０に初期化し、変数ｊの記憶領域を確保してその値を０に初期化する（Ｓ８１０）。次に、分類部４５８は、第ｉ行を分類するべくＳ８２０およびＳ８３０の処理を繰り返す。具体的には、まず、分類部４５８は、配置行列２６のｉ行ｊ列の要素を読み出して定数Ｂで割り算する（Ｓ８２０）。この定数Ｂは、ベクトル２８の全要素を格納するために充分なプロセッシング・エレメント４１０の数を示し、本実施形態では２である。端数は切り捨てられて整数に丸められる。そして、分類部４５８は、割り算の結果の数値に応じて２進定数の１を左にビットシフトする。
【００４３】
この結果、ベクトル２８を２分割した先頭側の要素と乗じられるべき非ゼロ要素については、２進定数０１が算出される。一方ベクトル２８を２分割した末尾側の要素と乗じられるべき非ゼロ要素については、２進定数１０が算出される。算出結果はＦ（ｉ）の値と論理和演算されて、そのＦ（ｉ）に代入される。さらにその後、変数ｊはインクリメントされる。分類部４５８は、以上の処理を変数ｊが要素行列２４の列数ＮＺに達するまで繰り返す（Ｓ８３０）。続いて、分類部４５８は変数ｉをインクリメントし、変数ｉの値が行数Ｍに達したかどうかを判断する（Ｓ８５０）。Ｍに達していなければ（Ｓ８５０：ＹＥＳ）、分類部４５８はＳ８１０に処理を戻す。一方Ｍに達していれば（Ｓ８５０：ＮＯ）、分類部４５８は、行列２２の各行を配列変数Ｆの値で分類する（Ｓ８６０）。即ち例えば、Ｆ（ｉ）は２進数の１１、０１または１０の何れかであり、１１に対応する行が第１分類に、０１に対応する行が第２分類に、１０に対応する行が第３分類にそれぞれ分類される。
【００４４】
図９は、Ｓ７００の分類およびそれに基づくＳ７１０の処理を示す概念図である。（ｂ）に、分類部４５８による分類に基づく演算処理を示し、（ａ）に、図１から図５に示す実施形態における演算処理をこれと対比して示す。各図には、疎行列である行列２２を、その各要素についての演算を行うプロセッサ４２０に重ねて示している。図の斜線部分は非ゼロ要素であり、この疎行列は対角要素や副対角要素に非ゼロ要素を有している。
【００４５】
（ａ）に示すように、行列２２の各行はその先頭側と後尾側に分割されて、そのそれぞれがプロセッサ４２０−１およびプロセッサ４２０−２のそれぞれにより演算される。行方向に見れば各要素がプロセッサ４２０−１およびプロセッサ４２０−２により並列に計算されるが、列方向に見ると複数の行については第１読出部４２２−１により逐次的に読み出されて第１演算部４２４−１によって逐次的に計算される。このため、行の数に応じた計算時間がかかる。これを短縮するため、行列２２を行単位で２分割して、プロセッサ４２０−３〜４が末尾側の行についてプロセッサ４２０−１〜２と同様の演算を行えば、プロセッサ４２０−１〜２を含むグループとプロセッサ４２０−３〜４を含むグループは並行動作するので処理は効率的に完了する。しかしながら、プロセッサ４２０−２〜３に注目すると、処理の内容は行列要素の受渡が殆どであり、実質的な乗算処理が少なくて効率的ではない。
【００４６】
これに対し、（ｂ）に示すように、本変形例では、２分割した先頭側にのみ非ゼロ要素を有する第２分類の行についてはプロセッサ４２０−１のみにより演算を行う。また、２分割した後尾側にのみ非ゼロ要素を有する第３分類の行についてはプロセッサ４２０−４のみにより演算を行う。また、先頭側および後尾側の何れにも非ゼロ要素を有する第１分類の行についてはプロセッサ４２０−２〜３のそれぞれによって演算を行う。そして、これらの各分類の処理は相互に並列動作する。このように、本変形例によれば、演算全体の所要時間を短縮することができると共に、必要な計算資源、たとえば、各プロセッサ４２０の使用時間を合計したもの（図ではｃｏｒｅ０−３と書かれた部分の面積。）を節約することができる。
【００４７】
以上に示したように、本変形例においては第１−３分類についてそれぞれ異なる処理を行うことで処理を効率化している。このうち第１分類の処理の流れについては、図１から図５を参照して示したものと同様である。一方、第２−３分類についての処理の流れは、プロセッサ４２０を１つしか必要としないので図１から図５の処理とは異なる。続いて図１０を参照して、第２−３分類を代表して第２分類についての処理を示す。
【００４８】
図１０は、第２分類の行ベクトルに関する行列演算の処理の流れを示す。マルチコア・プロセッサ４０は、ベクトル２８の一部である第１部分ベクトルをシステムメモリ２０から読み出して、ベクトル記憶領域４３８−１に予め格納する（Ｓ１０００）。第１読出部４２２−１は、配置行列２６のうち第２分類の行列要素の一部ずつをシステムメモリ２０から順次読み出して、既に第１記憶領域４３２−１に記憶された行列要素（即ち前回配置行列２６から読み出した行列要素）に代えて第１記憶領域４３２−１に格納する（Ｓ１０１０、Ｓ１０１５）。
【００４９】
第１演算部４２４−１は、第１記憶領域４３２−１から行列要素を読み出して第２記憶領域４３４−１に格納する（Ｓ１０２０）。そして、第１演算部４２４−１は、第１読出部４２２−１が次の演算のために行列要素の他の一部を第１記憶領域４３２−１に読み出す処理と並列に、第２記憶領域４３４−１に格納した行列要素を用いて演算を行う（Ｓ１０３０、Ｓ１０３５）。演算結果は第２記憶領域４３４−１に格納される。即ち、第１部分ベクトルの要素と要素行列２４の各非ゼロ要素の積の合計値ｙが第２記憶領域４３４−１に格納される。演算の完了を条件に、第１演算部４２４−１は、第２記憶領域４３４−１から行列要素および演算結果を読み出して第３記憶領域４３６−１に格納する（Ｓ１０４０）。合計値ｙは出力部４２８−１等の指示に基づきシステムメモリ２０に出力される（Ｓ１０５０）。
【００５０】
なお、第３分類についての演算処理もこれと同様であり、上記記載の読み替えにより説明される。具体的には、第２分類を第３分類と、ベクトル記憶領域４３８−１をベクトル記憶領域４３８−２と、第１記憶領域４３２−１を第１記憶領域４３２−２と、第２記憶領域４３４−１を第２記憶領域４３４−２と、第３記憶領域４３６−１を第３記憶領域４３６−２と、第１読出部４２２−１を第２読出部４２５−２と、第１読出部４２２−１を第１読出部４２２−２と、第１演算部４２４−１を第１演算部４２４−２と、出力部４２８−１を出力部４２８−２とそれぞれ読み替えることにより説明される。これにより、ベクトル２８の先頭側半分又は後尾側半分の何れにかしか非ゼロ要素を有しない行については単一のプロセッサ４２０で演算を完結させて、計算機資源を有効活用できる。
【００５１】
図１１は、本実施形態又はその変形例に係る演算システム１０として機能する情報処理装置１１００のハードウェア構成の一例を示す。情報処理装置１１００は、ホストコントローラ１０８２により相互に接続されるマルチコア・プロセッサ４０、システムメモリ２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部と、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部と、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部とを備える。
【００５２】
ホストコントローラ１０８２は、システムメモリ２０と、高い転送レートでシステムメモリ２０をアクセスするマルチコア・プロセッサ４０及びグラフィックコントローラ１０７５とを接続する。マルチコア・プロセッサ４０は、ＲＯＭ１０１０及びシステムメモリ２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ１０７５は、マルチコア・プロセッサ４０等がシステムメモリ２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、マルチコア・プロセッサ４０等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【００５３】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、情報処理装置１１００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、システムメモリ２０又はハードディスクドライブ１０４０に提供する。
【００５４】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、情報処理装置１１００の起動時にマルチコア・プロセッサ４０が実行するブートプログラムや、情報処理装置１１００のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、入出力チップ１０７０を介してシステムメモリ２０またはハードディスクドライブ１０４０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【００５５】
情報処理装置１１００に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出され情報処理装置１１００にインストールされて実行される。プログラムが情報処理装置１１００等に働きかけて行わせる動作は、図１から図１０において説明した演算システム１０における動作と同一であるから、説明を省略する。
【００５６】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置１１００に提供してもよい。
【００５７】
このように、本実施形態およびその変形例に係る演算システム１０は、ランダムアクセスされるベクトルデータをマイクロプロセッサ・チップ内の局所メモリに格納し、アクセス順序が予め判明している行列データをストリーム的に読み出す。これにより、必要なデータを演算開始までに局所メモリに読み込むことができ、データ読み出しにより演算を中止しなくて済むようにすることができる。また、複数のプロセッシング・ユニットを並列に動作させることで、演算処理のスピードを大幅に向上できる。本願発明者の実験によれば、５つのプロセッシング・ユニットを用いた計算は１つのプロセッシング・ユニットを用いた場合と比較して４倍以上に効率化した。また、データの一貫性制御を行うマルチコア・プロセッサや、ソフトウェアによりデータの一貫性制御を行う手法と比較しても、本手法が極めて効率的であることが確かめられた。
【００５８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることのできることが当業者にとって明らかである。例えば、ベクトル２８が２つの局所メモリ４３０をもってしても格納しきれないほど大きいデータサイズの場合は、ベクトル２８を３以上に分割して、そのそれぞれを局所メモリ４３０のそれぞれに格納してもよい。また、要素行列２４および配置行列２６は図２に示したものに限られない。たとえば、要素行列２４は、行列２２の非ゼロ要素を列ごとに配列したものであって、配置行列２６は、非ゼロ要素の行位置を示す情報を列ごとに配列したものであってよい。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００５９】
【図１】図１は、演算システム１０の全体構成を示す。
【図２】図２は、行列２２、要素行列２４および配置行列２６の具体例を示す。
【図３】図３は、演算プログラム３０の具体例を示す。
【図４】図４は、本実施形態に係るマルチコア・プロセッサ４０の機能構成を示す。
【図５】図５は、本実施形態に係るマルチコア・プロセッサ４０による行列演算処理の流れを示す。
【図６】図６は、本実施形態の変形例に係るマルチコア・プロセッサ４０の機能構成を示す。
【図７】図７は、本実施形態の変形例に係るマルチコア・プロセッサ４０による行列演算処理の流れを示す。
【図８】図８は、図７のＳ７００における処理の具体例を示す。
【図９】図９は、Ｓ７００の分類およびそれに基づくＳ７１０の処理を示す概念図である。
【図１０】図１０は、第２分類の行ベクトルに関する行列演算の処理の流れを示す。
【図１１】図１１は、本実施形態又はその変形例に係る演算システム１０として機能する情報処理装置１１００のハードウェア構成の一例を示す。
【符号の説明】
【００６０】
１０  演算システム
２０  システムメモリ
２２  行列
２４  要素行列
２６  配置行列
２８  ベクトル
３０  演算プログラム
４０  マルチコア・プロセッサ
４５  オンチップ・バス
４００  制御用エレメント
４１０  プロセッシング・エレメント
４２０  プロセッサ
４２２  第１読出部
４２４  第１演算部
４２５  第２読出部
４２６  第２演算部
４２８  出力部
４３０  局所メモリ
４３２  第１記憶領域
４３４  第２記憶領域
４３６  第３記憶領域
４３８  ベクトル記憶領域
４４０  ＤＭＡコントローラ
４５０  プロセッサ
４５５  初期化処理部
４５８  分類部
４６０  キャッシュメモリ
１１００  情報処理装置
【図１】
2008181386.tif 000003
【図２】
2008181386.tif 000004
【図３】
2008181386.tif 000005
【図４】
2008181386.tif 000006
【図５】
2008181386.tif 000007
【図６】
2008181386.tif 000008
【図７】
2008181386.tif 000009
【図８】
2008181386.tif 000010
【図９】
2008181386.tif 000011
【図１０】
2008181386.tif 000012
【図１１】
2008181386.tif 000013