(57)【特許請求の範囲】
【請求項１】
少なくともデータを記憶する記憶手段と、
演算対象のデータであり、複数の要素からなるブロックとして構成される第２の行列を複数含む第１の行列を受け付ける入力手段と、
複数の前記第２の行列から、それぞれの前記第２の行列を構成するブロックにおいて同じ相対位置に配置された要素を表すデータを選択し、
当該選択したデータを、前記第１の行列におけるそれぞれの前記第２の行列の列方向の位置に応じて、前記第１の行列における列方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置するか、又は、
当該選択したデータを、前記第１の行列におけるそれぞれの前記第２の行列の行方向の位置に応じて、前記第１の行列における行方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置する配置手段と、を備える
情報処理装置。
【請求項２】
前記配置手段は、
前記第１の行列に含まれる列を前記ブロックの列数ごとにまとめてブロック列とし、
前記第１の行列に含まれる行を前記ブロックの行数ごとにまとめてブロック行とし、
それぞれの前記第２の行列から、それぞれの前記第２の行列を構成するブロックにおいて同じ相対位置に配置された要素を表すデータを選択し、
当該選択したデータを、前記第２の行列を構成するブロックにおける相対位置毎に、前記ブロック列における鉛直方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置するか、又は、前記ブロック行における水平方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置する
請求項１に記載の情報処理装置。
【請求項３】
前記配置手段は、
前記第１の行列における上端側に配置された前記ブロック行から、前記第１の行列における下端側に配置された前記ブロック行に向かって同じ前記ブロック列に含まれる前記第２の行列を順次選択し、
当該選択されたデータを、前記第２の行列を構成するブロックにおける相対位置毎に、前記ブロック列における鉛直方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置する請求項２に記載の情報処理装置。
【請求項４】
前記配置手段は、
前記第１の行列における左端側に配置された前記ブロック列から、前記第１の行列における右端側に配置された前記ブロック列に向かって同じ前記ブロック行に含まれる前記第２の行列を順次選択し、
当該選択されたデータを、前記第２の行列を構成するブロックにおける相対位置毎に、前記ブロック行における水平方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置する請求項２に記載の情報処理装置。
【請求項５】
前記配置手段は、
前記第２の行列を、前記第１の行列におけるブロック列の左端側の領域に詰めて配置し、
前記第１の行列における前記ブロック行を、当該ブロック行に含まれる前記第２の行列の数が多い順に並べ替え、
前記ブロック列ごとに、当該並べ替えた前記第１の行列における上端側に配置された前記ブロック行から、下端側に配置された前記ブロック行に向かって、前記ブロック列に含まれる前記第２の行列を順次選択し、
当該選択されたデータを、前記第２の行列を構成するブロックにおける相対位置毎に、前記ブロック列における鉛直方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置する請求項３に記載の情報処理装置。
【請求項６】
前記第２の行列は、複数の要素からなる正方行列である
請求項１乃至請求項５のいずれかに記載の情報処理装置。
【請求項７】
前記配置手段は、
前記選択したデータを、前記第２の行列を構成するブロックにおける当該データの相対位置毎に、それぞれが前記記憶手段において連続してアクセス可能な連続したアドレスを有する、相異なる配列に配置する
請求項２乃至請求項６のいずれかに記載の情報処理装置。
【請求項８】
前記配置手段は、
前記選択したデータを、前記第２の行列を構成するブロックにおける当該データの相対位置毎に、前記記憶手段において連続してアクセス可能な連続したアドレスに配置された一つの配列における相異なる領域に配置する
請求項２乃至請求項６のいずれかに記載の情報処理装置。
【請求項９】
データを記憶する記憶手段を備える情報処理装置が、
演算対象のデータであり、複数の要素からなるブロックとして構成される第２の行列を複数含む第１の行列を受け付け、
複数の前記第２の行列から、それぞれの前記第２の行列を構成するブロックにおいて同じ相対位置に配置された要素を表すデータを選択し、
当該選択したデータを、前記第１の行列におけるそれぞれの前記第２の行列の列方向の位置に応じて、前記第１の行列における列方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置するか、又は、
当該選択したデータを、前記第１の行列におけるそれぞれの前記第２の行列の行方向の位置に応じて、前記第１の行列における行方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置する
情報処理方法。
【請求項１０】
データを記憶する記憶手段を備えるコンピュータに、
演算対象のデータであり、複数の要素からなるブロックとして構成される第２の行列を複数含む第１の行列を受け付ける処理と、
複数の前記第２の行列から、それぞれの前記第２の行列を構成するブロックにおいて同じ相対位置に配置された要素を表すデータを選択する処理と、
当該選択したデータを、前記第１の行列におけるそれぞれの前記第２の行列の列方向の位置に応じて、前記第１の行列における列方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置するか、又は、当該選択したデータを、前記第１の行列におけるそれぞれの前記第２の行列の行方向の位置に応じて、前記第１の行列における行方向の順に、前記記憶手段における連続してアクセス可能な連続したアドレスに配置する処理と、を実行させる
コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理方法等に関する。本発明は、特に、行列に含まれる要素が表すデータを記憶装置に効率的に配置可能な情報処理装置等に関する。
【背景技術】
【０００２】
近年、大規模行列の要素情報（行列に含まれる要素が表すデータ）を配列として記憶装置に配置（格納）する方法が、各種数値計算等の分野において用いられている。以下において、特定の行列を表すデータ（特定の行列に含まれる全要素が表すデータ）を、単に「行列データ」と称する場合がある。
【０００３】
このような技術として、例えば、ＪＤＳ（Ｊａｇｇｅｄ  Ｄｉａｇｏｎａｌ  Ｓｔｏｒａｇｅ）格納法（下記特許文献１参照）や、ＣＲＳ（Ｃｏｍｐｒｅｓｓｅｄ  Ｒｏｗ  Ｓｔｏｒａｇｅ）格納法等が知られている。
【０００４】
ここで、ＪＤＳ格納法について図１を参照して説明する。図１は、ＪＤＳ格納法を用いて、疎行列（図１における符号１００ａ）の行列データを記憶装置に格納する手順を例示する。図１においては、疎行列１００ａの鉛直方向（行方向）に行番号（１乃至８）が割り当てられる。また、疎行列１００ａの水平方向（列方向）に列番号(１乃至８）が割り当てられる。
【０００５】
図１（ａ）に例示した疎行列１００ａにおいて「＊」が配置されている箇所には、非零（ゼロ）要素が配置される。また、図１（ａ）に例示した疎行列１００ａにおいて、空白が設定されている箇所は、零（ゼロ）要素が配置される。
【０００６】
まず、ＪＤＳ格納法は、図１（ｂ）に例示するように、疎行列１００ａにおける非零要素のみを左方向（列方向左端側）に詰める。係る左詰めにされた疎行列を１００ｂとする。
【０００７】
次に、ＪＤＳ格納法は、図１（ｃ）に例示するように、上記左詰めにされた疎行列１００ｂにおける各行の行番号を、当該行に含まれる非零要素の個数の降順で並び変える。並び替えた疎行列を、１００ｃとする。
【０００８】
ＪＤＳ格納法は、図１（ｄ）に例示するように、元の疎行列１００ａに含まれる各非零要素の列番号を、別の配列（２次元配列）１００ｄに格納する。即ち、配列１００ｄの各要素に格納された列番号を参照することにより、特定の行番号が割り振られた行に含まれる各要素が、元の疎行列１００ａにおいてどの列に存在したかを特定可能である。
【０００９】
例えば、具体例として、疎行列１００ｃの行番号「３」の行について説明する。元の疎行列１００ａにおいて、行番号「３」に該当する行には、第１列目、第２列目、第３列目、第５列目、第７列目、及び、第８列目に非零要素が配置されている。このため、配列１００ｄにおいて行番号「３」に該当する行には、上記列番号を表すデータとして、「１、２、３、５、７、８」が設定されている。
【００１０】
ＪＤＳ格納法は、行列１００ｃの行列データと、配列１００ｄとを、それぞれ図１（ｅ）に例示する矢印ＤＡ１（行方向の上から下に向かう方向）の方向に沿って１列目から順に（即ち、１列目から８列目に向かって順番に）、記憶装置に対して一次元的に格納する。
【００１１】
また、ＪＤＳ格納法により格納した行列とベクトルとの積を計算する場合、行列１００ｃの行列データと、列番号１０１ｄを格納した配列とは、図１（ｅ）に示す矢印ＤＡ１の順序で参照され、係る積の計算に用いられる。
【００１２】
このような行列演算に関連する技術として、以下のような特許文献が開示されている。
【００１３】
特許文献１は、上記したように、計算機を構成する記憶装置に対して、ＪＤＳ格納法を用いて規模不規則疎行列の格納する方法を開示する。
【００１４】
特許文献２（特開２００８−０７０９２８号公報）は、連立一次方程式の解を数値計算により求める際、係数行列を記憶する領域がページアウトされずにメインメモリ内に保持するように制御する計算方法を開示する。特許文献２に開示された技術は、修正コレスキー分解法に基づく係数行列の三角分解演算において、メインメモリの空き容量を超えない範囲で、分解済み係数値の一部をメインメモリに保持する。特許文献２に開示された技術は、分解済み係数値の残りを２次記憶に保持する。なお、特許文献２に開示された技術は、係数行列を記憶するメモリ領域を削減するために、スカイライン法を用いて、係数行列を圧縮する。
【００１５】
特許文献３（特開２００２−１５７２３７号公報）は、反復法を用いて連立一次方程式の解を求める計算方法について開示する。特許文献３に開示された技術は、反復法を用いて連立一次方程式の近似解を計算する際、当該計算の収束を早めるように、Ｍ行列ではない係数行列に対してマルチレベル不完全ブロック分解を用いた前処理を行う。なお、特許文献３に開示された技術は、連立一次方程式の係数行列を、エルパック（Ｅｌｌｐａｃｋ）形式により圧縮して格納する。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特公平０６−０６６０６９号公報
【特許文献２】特開２００８−０７０９２８号公報
【特許文献３】特開２００２−１５７２３７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１７】
各種数値計算においては、１以上のブロックに区分可能な行列が演算の対象となる場合がある。以下「１以上のブロックに区分可能な行列」を「１以上のブロックを有する行列」と表す場合がある。また、係るブロックを「小行列」と表す場合がある。
【００１８】
１以上のブロックを有する疎行列（以下「ブロック疎行列」と称する場合がある）が各種計算の対象となる場合、係るブロック疎行列の行列データを記憶装置に効率よく配置（格納）する必要がある。より具体的には、係るブロック疎行列に含まれる要素（要素が表すデータ）を、記憶装置に効率よく配置（格納）する必要がある。
【００１９】
また、ブロック疎行列に含まれるブロックの単位で各種演算処理が繰り返し実行される場合、係るブロックの単位で、記憶装置に対するアクセス（参照）が発生する。例えば、大規模疎行列とベクトルとの積算が主たる計算コストを占めるような数値計算においては、ブロック疎行列に含まれるブロックの単位で各種演算処理が繰り返し実行される場合がある。
【００２０】
各種数値計算にける演算処理の効率（処理速度等）を向上するためには、係る記憶装置に格納されたブロック疎行列の行列データに対して、効率的にアクセス可能であることが望ましい。即ち、記憶装置に格納されたブロック疎行列の行列データに対して効率的なアクセスを可能とする、ブロック疎行列の格納技術が求められる。
【００２１】
以上より、ブロック疎行列を記憶する格納技術には、高い容量効率と演算効率とが求められる。
【００２２】
上記特許文献２、及び、特許文献３に開示された技術は、いずれも特定の連立方程式の解法に特化した技術を開示するにすぎず、ブロック疎行列に関する演算の効率化（高速化）と直接関係する技術ではない。それぞれの文献において開示された係数行列の記憶方法についても同様である。
【００２３】
本発明は、上記のような事情を鑑みてなされたものである。
【００２４】
本発明は、１以上のブロックを有する行列に含まれる要素を、記憶装置において効率よく配置（格納）可能な情報処理装置等を提供することを主たる目的とする。より具体的には、本発明は、１以上のブロックを有する行列に含まれる要素を、容量効率及び演算効率がよい行列格納方法を用いて記憶装置に配置可能な情報処理装置等を提供することを主たる目的とする。
【課題を解決するための手段】
【００２５】
上記の目的を達成すべく、本発明の一態様に係る情報処理装置は、以下の構成を備える。即ち、本発明の一態様に係る情報処理装置は、少なくともデータを記憶可能な記憶部と、第１の行列に少なくとも１以上含まれるブロックである第２の行列について、それぞれの上記第２の行列において同じ位置に配置された要素を表すデータを、上記記憶部における連続した領域に配置する配置部と、を備える。
【００２６】
また、本発明の一態様に係る情報処理方法は、以下の構成を備える。即ち、本発明の一態様に係る情報処理方法は、データを記憶可能な記憶部を備える情報処理装置が、第１の行列に少なくとも１以上含まれるブロックである第２の行列について、それぞれの上記第２の行列において同じ位置に配置された要素を表すデータを、上記記憶部における連続した領域に配置する。
【００２７】
また、同目的は、上記構成を有する情報処理装置、並びに対応する情報処理方法を、コンピュータによって実現するコンピュータ・プログラム、及び、そのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体等によっても達成される。
【発明の効果】
【００２８】
本発明によれば、１以上のブロックを有する行列に含まれる要素を、記憶装置に対して効率よく配置（格納）可能である。より具体的には、本発明によれば、１以上のブロックを有する行列に含まれる要素を、容量効率及び演算効率がよい行列格納方法を用いて記憶装置に配置可能な情報処理装置等を提供可能である。
【図面の簡単な説明】
【００２９】
【図１】図１は、ＪＤＳ格納法を用いて行列データを格納する手順について例示する図である。
【図２】図２は、１以上のブロックを有する行列データの具体例を示す図である。
【図３】図３は、ＪＤＳ格納法を用いて、１以上のブロックを有する行列の行列データを格納する手順について例示する図（１／３）である。
【図４】図４は、ＪＤＳ格納法を用いて、１以上のブロックを有する行列の行列データを格納する手順について例示する図（２／３）である。
【図５】図５は、ＪＤＳ格納法を用いて、１以上のブロックを有する行列の行列データを格納する手順について例示する図（３／３）である。
【図６】図６は、ＪＤＳ格納法を用いて格納された行列と、任意のベクトルとの間の積算処理を実装するソースコードの具体例を示す図である。
【図７】図７は、本発明の第１の実施形態における情報処理装置の機能的な構成を例示する図である。
【図８】図８は、１以上のブロックを有する行列データの具体例を示す図である。
【図９】図９は、１以上のブロックを有する行列の行列データを、本発明の第１の実施形態における行列格納法を用いて格納する手順について例示する図（１／３）である。
【図１０】図１０は、１以上のブロックを行列の行列データを、本発明の第１の実施形態における行列格納法を用いて格納する手順について例示する図（２／３）である。
【図１１】図１１は、１以上のブロックを有する行列の行列データを、本発明の第１の実施形態における行列格納法を用いて格納する手順について例示する図（３／３）である。
【図１２】図１２は、本発明の第１の実施形態における情報処理装置の動作を例示するフローチャートである。
【図１３】図１３は、本発明の第１の実施形態における行列格納法を用いて格納された行列と、任意のベクトルと間の積算処理を実装するソースコードの具体例を示す図である。
【図１４】図１４は、本発明の第１の実施形態における行列格納法を用いて格納された行列と、任意のベクトルと間の積算処理の過程を例示するフローチャートである。
【図１５】図１５は、本発明の第１の実施形態における行列格納法を用いて格納された行列と、任意のベクトルと間の積算処理が、特定の計算機アーキテクチャ向けに最適化された場合の処理の過程を例示するフローチャートである。
【図１６】図１６は、ＣＲＳ格納法を用いて、１以上のブロックを有する行列の行列データを格納する手順について例示する図である。
【図１７】図１７は、１以上のブロックを有する行列の行列データを本発明の第１の実施形態における行列格納法を用いて格納する手順について例示する図である。
【図１８】図１８は、１以上のブロックを有する行列の行列データをＥＬＬ（Ｅｌｌｐａｃｋ）格納法を用いて格納する手順について例示する図である。
【図１９】図１９は、１以上のブロックを有する行列の行列データを本発明の第１の実施形態における行列格納法を用いて格納する手順について例示する図である。
【図２０】図２０は、本発明の第１の実施形態における情報処理装置の機能的な構成を例示する図である。
【図２１】図２１は、本願発明の各実施形態における情報処理装置を実現可能なハードウェア構成を例示したブロック図である。
【発明を実施するための形態】
【００３０】
次に、本発明を実施する形態について図面を参照して詳細に説明する。以下の実施の形態に記載されている構成は単なる例示であり、本願発明の技術範囲はそれらには限定されない。
【００３１】
なお、各実施形態において説明する情報処理装置は、当該情報処理装置の１以上の構成要素が複数の物理的あるいは論理的に離間した装置（物理的なコンピュータや、仮想的なコンピュータ等）を用いて実現されたシステムとして構成されてもよい。
【００３２】
また、各実施形態において説明する情報処理装置は、当該情報処理装置の全ての構成要素が１つの装置（物理的なコンピュータや、仮想的なコンピュータ等）を用いて実現されたシステムとして構成されてもよい。
【００３３】
本発明の各実施形態に関する説明に先立って、本発明に関する技術的背景について説明する。
【００３４】
まず、上記ＪＤＳ格納法を、ブロック疎行列に対応するように単純に拡張する構成について図２乃至図４を参照して説明する。拡張したＪＤＳ格納法は、疎行列に含まれる全ての非零要素の行番号と列番号を参照テーブルとして持つのではなく、疎行列に含まれるブロックの位置の行番号あるいは列番号のみを参照テーブルとして保持する。
【００３５】
図２は、ＪＤＳ格納法の各非零要素（図１における「＊」印）がブロック（小行列）である場合の、疎行列を表す図である。即ち、図２に例示する行列２００は、（２行２列）型のブロック（２行２列の小行列）を有する、疎行列を例示する。図２に例示するように、行列２００は、（１６行１６列）の正方行列である。
【００３６】
図２においては、疎行列２００の鉛直方向（行方向）に、ブロック単位で行番号（ブロック行番号）が割り当てられる。また、疎行列１００の水平方向（列方向）にブロック単位で列番号(ブロック列番号）が割り当てられる。なお、図２に例示する疎行列２００においては、ブロック行番号として１乃至８、ブロック列番号として１乃至８が割り当てられている。
【００３７】
なお、（２行２列）型のブロックの各要素については、「＊１」、「＊２」、「＊３」、「＊４」の符号を用いて表す。係る符号は、単に（２行２列）型のブロックにおける要素の配置位置を表すものであり、特定のデータ（値）を表すものではない。（２行２列）型のブロックの各要素には、任意のデータ（値）が設定され得る。上記図１と同様、疎行列２００における空白要素は零要素である。
【００３８】
上記図１（ｂ）と同様に、当該疎行列２００に含まれる各ブロックを左方向（列方向の左端側の領域）に詰めることにより、図３に例示する行列３００が得られる。なお、行列３００は、行列２００を変形したものとしてもよい。
【００３９】
上記図１（ｃ）と同様に、図３に例示する行列３００について、各ブロック行に含まれる非零ブロックの個数の降順でブロック行番号を並び変えることにより、図４に例示する行列４００が得られる。なお、行列４００は、行列３００（あるいは行列２００）を変形したものとしてよい。なお、非零ブロックは、少なくとも零行列ではない小行列である。
【００４０】
図１に例示するＪＤＳ格納法を単純に拡張する場合、行列４００に含まれる各ブロック内の要素は、図５に例示するような配置により、記憶装置に格納される。即ち、各ブロック内の要素は、記憶装置において連続したアドレス領域に格納される。
【００４１】
具体例として、（ブロック行番号：３、ブロック列番号：１）のブロックに含まれる要素は、「＊１」「＊２」「＊３」「＊４」の順で、記憶装置において連続したアドレス領域に格納される。（ブロック行番号：３、ブロック列番号：１）のブロックが格納されたアドレス領域に連続する次のアドレス領域には、（ブロック行番号：１、ブロック列番号：１）のブロックに含まれる各要素が上記と同様に連続したアドレス領域に格納される。
【００４２】
例えば、ブロック疎行列とベクトルとの積を計算する際には、ブロック疎行列に含まれるブロックの単位で演算ループを実行する必要がある。ＪＤＳ格納法を単純に拡張した場合、あるブロックに対する演算処理から次のブロックに対する演算処理を実行する際、ブロックのサイズ分だけ離れた要素が参照される。即ち、記憶装置において連続した領域に配置されていない要素が参照される。このため、記憶装置において連続した領域にアクセスする場合と比べ、計算速度性能（演算効率）にロス（損失）が発生する。以下、図６に例示する具体的な実装例を用いて説明する。
【００４３】
図６は、ブロック行列のサイズが２の場合（即ち、（２行２列）型のブロックである場合）に、上記説明したＪＤＳ格納法を単純に拡張した方法により格納した疎行列と、任意のベクトルとの積を計算する、Ｆｏｒｔｒａｎプログラム（コンピュータ・プログラム）のソースコードの一部を例示する。なお、Ｆｏｒｔｒａｎは周知のプログラミング言語である。
【００４４】
図６に例示するソースコードにおいて、各変数と配列が表す内容は、以下の通りである。即ち、
・変数「Ｎ」は、元の行列（例えば、図２における行列２００））の行又は列方向のブロックの個数を表す。
【００４５】
・変数「ＮＺ」は、元の行列に含まる、全ての非零ブロックの個数を表す。
【００４６】
・配列「Ａ」は、元の行列における非零要素の値を格納する配列を表す。配列「Ａ」の添字は、例えば、元の行列を図５に例示する行列５００のように変形し、１列目から順番に行方向上端から下端に向けて一次元化して番号（インデックス）を付けたときの、当該番号を表す。
【００４７】
・配列「Ｘ」は、演算対象となるベクトル（Ｘ）を表す。
【００４８】
・配列「Ｙ」は、上記配列「Ａ」と上記配列「Ｘ」との積の計算結果を格納する配列を表す。
【００４９】
・配列「ＩＡ」は、元の行列Ａを図５に例示する行列５００のように変形した場合の、各ブロック列の先頭の番号を格納する。
【００５０】
・配列「ＪＡ」は、元の行列に含まれる、非零ブロックのブロック列番号を格納する。Ｋ番目のブロックのブロック列番号はＪＡ（Ｋ）となる。
【００５１】
・変数「ＭＪＡＤ」は、元の行列の各行に含まれる非零ブロックの個数の最大値を表す。
【００５２】
・配列「Ｗ」は、上記配列「Ａ」と配列「Ｘ」との積の結果を一時的に格納する作業配列を表す。
【００５３】
・配列ＩＯＲＤは、元の行列を、例えば、図４に例示するように並べ替えた場合のブロック行番号を格納した配列を表す。即ち、元の配列におけるブロック行番号が「Ｉ」のとき、並び替え後のブロック行番号はＩＯＲＤ（Ｉ）となる。
【００５４】
図６に例示するコードにおいて、最内の演算ループである２０番のＤＯループの添字Ｋが１増加すると、元の行列の非零要素を格納した配列Ａの添字ＫＩは４（＝２×２、「×」は乗算記号を表す、以下において同様。）増加する。したがって、ブロックのサイズがＭの場合（（Ｍ行Ｍ列）の場合）は、ブロックごとに処理される演算ループにおいては、Ｍ×Ｍ個の要素だけずれた（離れた）配列のアドレスが繰り返し参照される。この場合、記憶装置における非連続のアドレスが参照（アクセス）されることから、連続したアドレスにアクセスする場合と比べ、計算速度性能（演算効率）にロス（損失）が発生する。
【００５５】
以下に説明する各実施形態における情報処理装置は、演算対象の行列に含まれるそれぞれのブロック内において配置される位置が同じ要素を、記憶装置において連続した領域（アドレス）に格納する。これにより、ブロックを有する疎行列とベクトルとの積の計算を演算する際、ブロックごとに実行される演算ループにおいて参照されるデータ（疎行列の非零要素を格納した配列データ）は、記憶装置において連続した領域（アドレス）に配置される。
【００５６】
なお、以下において、演算対象の行列に含まれるブロック内における配置位置が同じ要素を、「ブロック内における相対位置が同じ要素」と表す場合がある。
【００５７】
以下、本発明の各実施形態について説明する。
【００５８】
＜第１の実施形態＞
本発明の第１の実施形態について説明する。以下においては、１以上のブロック（小行列）を有する不規則疎行列（スパース行列）を配列に格納する行列格納法について説明する。また、係る行列格納法を用いて格納された行列と、任意のベクトルとの積を計算する処理手順等について説明する。
【００５９】
まず本実施形態における情報処理装置７００の構成について図７を参照して説明する。図７は、本実施形態における情報処理装置７００の機能的な構成を例示するブロック図である。
【００６０】
本実施形態における情報処理措置７００は、記憶部７０１と、配置部７０２とを有する。また、本実施形態における情報処理装置７００は、演算処理部７０３と、入力部７０４とを有してもよい。情報処理装置７００を構成するこれらの構成要素の間は、任意の通信手段により通信可能に接続されていてもよい。また、情報処理装置７００は、物理的なコンピュータ等により構成されてもよく、周知の仮想化技術を用いて提供された仮想的なコンピュータ等により構成されてもよい。
【００６１】
記憶部７０１は、各種情報（データ）やプログラム（コンピュータ・プログラム）を記憶（格納）可能な記憶領域を提供する。記憶部７０１が提供する記憶領域における位置を特定可能な識別情報（例えば、アドレスやインデックス（索引）等）を用いることにより、当該記憶領域における任意の領域にアクセス可能であってもよい。
係る記憶部７０１は、例えば、物理的な半導体メモリ等（例えば、ＤＩＭＭ（Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）の形態で提供されるＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等）の記憶デバイスであってもよい。また、記憶部７０１は、仮想環境において提供される仮想的な記憶デバイスであってもよい。
【００６２】
記憶部７０１は、後述する配置部７０１によって配置される行列の行列データを保持（格納）する。また、記憶部７０１は、当該格納された行列データを、後述する演算処理部７０３に対して提供する。
【００６３】
配置部７０１は、演算対象の行列（以下、「演算対象行列」と称する場合がある）の行列データを、適切なデータ構造に格納して、記憶部７０１に配置（格納）する。配置部７０１は、後述する入力部７０４と通信可能に接続され、入力部７０４を介して演算対象行列を受け付けてもよい。
【００６４】
演算処理部７０３は、記憶部７０１に格納された行列データを用いて、各種演算処理を実行する。後述する具体例においては、演算処理部７０３は、上記演算対象行列と、任意のベクトルとの間の積算を実行する。なお、演算処理部７０３は、後述する入力部７０４から、各種演算に必要なデータ（例えば、演算対象のベクトルを表すデータ等）を受け付けてもよい。
【００６５】
入力部７０４は、情報処理装置７００に対する各種データの入力を受け付ける。入力部７０４は、例えば、各種入出力装置（キーボード、マウス、ディスプレイ）等を介して、上記各種データの入力を受け付けてもよい。また、入力部７０４は、任意の通信ネットワークを介して、上記各種データの入力を受け付けてもよい。
【００６６】
次に、上記のように構成された情報処理装置７００の動作について説明する。
【００６７】
まず、情報処理装置７００における、記憶部７０１に対する演算対象行列の格納手順について、図８乃至図１２を参照して説明する。以下に説明する具体例においては、演算対象行列は、１以上のブロックを有する疎行列であることを仮定する。なお、係る演算対象行列は、不規則疎行列であってもよい。
【００６８】
図８乃至図１１は、本実施形態において説明する行列格納法を用いて、演算対象行列の行列データを、記憶部７０１に格納するデータに変更する過程について例示する図である。また、図１２は、情報処理装置７００の具体的な動作を例示するフローチャートである。
【００６９】
まず図８に例示する１以上のブロックを有する演算対象行列８００が、演算処理の対象として情報処理装置に入力される。この場合、入力部７０４が、演算対象行列８００の各要素を表すデータの入力を受け付けてもよい（ステップＳ１２０１）。
【００７０】
本具体例において、演算対象行列に含まれるブロックは（２行２列）型の小行列である。各ブロックに含まれる要素は、図２と同様に、「＊１」、「＊２」、「＊３」、「＊４」の符号を用いて表す。係る符号は、単に（２行２列）型のブロックにおける要素の配置位置を表すものであり、特定のデータ（値）を表すものではない。（２行２列）型のブロックの各要素には、任意のデータ（値）が設定され得る。上記図２と同様、行列８００における空白要素は零要素である。なお、本具体例においては、ブロックを（２行２列）型の小行列としているが、本実施形態はこれには限定されない。即ち、ブロックのサイズは任意としてよい。また、演算対象行列のサイズも任意としてよい。
【００７１】
入力部７０４は、入力された演算対象行列８００の各要素を表すデータを、配置部７０２に受け渡す。
【００７２】
係るデータを受け付けた配置部７０２は、図９に例示するように、演算対象行列８００に含まれる各ブロックを、列方向の左端側の領域に詰める（集約する）（ステップＳ１２０２）。
【００７３】
配置部７０２は、図１０に例示するように、上記ステップＳ１２０２において特定の領域に集約された行列について、各ブロック行に含まれる非零ブロックの個数の降順でブロック行番号を並び変える（ステップＳ１２０３）。
【００７４】
上記ステップＳ１２０２乃至Ｓ１２０３の処理は、上記説明したＪＤＳ法と同様の方法を用いて実現してもよい。
【００７５】
次に、配置部７０２は、演算対象行列に含まれるブロックについて、それぞれのブロック内で同じ位置に配置される要素（相対位置が同じ要素）を、ステップＳ１２０３において並び替えた行列における行方向の下方に向かって、ブロック列番号の１列目から順に選択（抽出）する。そして、配置部７０２は、係る選択した要素（より具体的には、要素を表すデータ）を、記憶部７０１における連続した領域（記憶領域）に順番に配置（格納）する（ステップＳ１２０４）。ここで、記憶部７０１における連続した領域は、記憶部７０１が提供する記憶領域において論理的に連続した領域（アドレス）であってもよい。また、係る連続した領域は、例えば、記憶部７０１を構成する物理的な記憶デバイスにおける連続した領域（アドレス）であってもよい。
【００７６】
より具体的には、配置部７０２は、図１１の（ａ）乃至（ｄ）に例示するように、ブロック列番号の１列目から順に、ブロック列番号が同じ要素を、図１１に例示する矢印ＤＡ２の方向（行方向の上端側から下端側に向かう方向）に選択する。そして、配置部７０２は、選択した要素を記憶装置７０１における連続した領域に配置する。これにより、各ブロックにおいて配置位置が同じ要素は、記憶装置７０１における連続した領域に配置される。
【００７７】
具体的には、配置部７０２は、例えば、図１１の（ａ）に例示するように、ブロックにおける配置位置が”＊１”（（１、１）の位置）の要素をそれぞれのブロックから選択する。そして、配置部７０２は、係る選択した要素を、順番に記憶部７０１における連続した領域に配置する。同様に、各ブロックにおける配置位置が”＊２”（（１、２）の位置）、”＊３”（（２、１）の位置）、”＊４”（（２、２）の位置）に存在する要素を、それぞれ記憶部７０１における連続した領域に配置する。
【００７８】
換言すると、配置部７０２は、各ブロックを表す小行列の各行において、列方向の左端側の列から列方向の右端側に向けて順次、それぞれの列に配置された要素を表すデータを選択し、同じ列から選択されたデータを、記憶部７０１における連続した領域に配置する。
【００７９】
図８乃至図１０に例示する具体例を用いて説明する。配置部７０２は、例えば、各ブロックから、各ブロックの１行目に配置された各要素を列方向の左端側の列（１列目）から右端側（２列目）に向けて順次選択し、同じ列に配置された要素を表すデータを記憶部７０１における連続した領域に配置する。各ブロックの２行目に配置された要素についても同様である。
【００８０】
この場合、配置部７０２は、例えば、図１１に例示するように、ブロックにおける相対位置が同じ要素ごとに、格納する配列を分けてもよい（例えば、図１１に例示する１１０１、１１０２、１１０３、１１０４をそれぞれ格納する配列を設けてもよい）。
【００８１】
なお、各ブロックにおける特定の位置の要素を表すデータが配置される記憶部７０１おける領域と、各ブロックにおける他の位置の要素を表すデータが配置される記憶部７０１における領域とは、連続した領域であってもよい。また、各ブロックにおける特定の位置の要素を表すデータが配置される記憶部７０１における領域と、各ブロックにおける他の位置の要素を表すデータが配置される記憶部７０１における領域との間には、任意のデータ等が配置されてもよい。
【００８２】
上記ステップＳ１２０４の処理により、ブロックを有する演算対象行列と、任意のベクトルとの間の積を計算する演算ループにおいて、参照されるデータ（各ブロックの要素を格納した配列データ）は、記憶部７０１において連続した領域（アドレス）に配置される。なお、係る演算処理の具体例については、後述する。
【００８３】
演算対象行列（図８における符号８００）の列番号を格納する配列は、上記説明したＪＤＳ法と同様としてよい。即ち、配置部７０２は、上記説明した図１（ｄ）に例示した配列と同様、行列８００におけるブロック列番号を格納する配列を別途設ける。配置部７０２は、係る配列を、記憶部７０１に配置してもよい。
【００８４】
なお、上記ステップＳ１２０３において、配置部７０２は、演算対象行列に含まれるブロックの要素を記憶部７０１に直接配置してもよく、又は、記憶部７０１に配置可能な配置データを生成してもよい。
【００８５】
次に、上記のように記憶部７０２に配置された演算対象行列と、任意のベクトルとの間の積算を具体例として、本実施形態における行列格納法による演算処理の効率化について説明する。
【００８６】
図１３は、上記説明した行列格納方法を用いて格納した、（２行２列）型のブロックを有する演算対象行列と、任意のベクトルとの積を計算するＦｏｒｔｒａｎコードの一部である。各変数と配列は以下の意味を表す。
【００８７】
・変数「Ｎ」は、元の行列（例えば、図８における演算対象行列８００））の行又は列方向のブロックの個数を表す。
【００８８】
・変数「ＮＺ」は、元の行列に含まる、全ての非零ブロックの個数を表す。
【００８９】
・配列「Ａ」は、元の行列に含まれる各ブロック（の要素）の値を格納する２次元の配列を表す。配列「Ａ」の第１次元目の添字は、図１１に例示する行列の１列目から順番に矢印ＤＡ２の方向に一次元化して番号（インデックス）を付けたときの、当該番号を表す。第２次元目の添え字は、各ブロックにおける相対位置の違いを表す番号である。
【００９０】
・配列「Ｘ」は、演算対象となる入力ベクトル（Ｘ）を表す。
【００９１】
・配列「Ｙ」は、上記配列「Ａ」と上記配列「Ｘ」との積の計算結果を格納する配列を表す。
【００９２】
・配列「ＩＡ」は、元の行列Ａに含まれる各ブロックの要素を、図１１に例示するような順番で一次元化し、番号を付けて並べた際の、各ブロック列の先頭の番号を格納する。即ち、ブロック列番号がＩのブロックの番号はＩＡ（Ｉ）番目となる。また、ブロック列番号がＩのブロック行列の個数はＩＡ（Ｉ＋１）−ＩＡ（Ｉ）となる。
【００９３】
・配列「ＪＡ」は、元の行列に含まる非零ブロックのブロック列番号を格納する。Ｋ番目のブロックのブロック列番号はＪＡ（Ｋ）となる。
【００９４】
・変数「ＭＪＡＤ」は、元の行列の各行に含まれる非零ブロックの個数の最大値を表す。
【００９５】
・配列「Ｗ」は、上記配列「Ａ」と配列「Ｘ」との積の結果を一時的に格納する作業配列を表す。
【００９６】
・配列ＩＯＲＤは、元の行列を、例えば、図１０に例示するように並べ替えた場合のブロック行番号を格納した配列を表す。即ち、元の配列におけるブロック行番号が「Ｉ」のとき、並び替え後のブロック行番号はＩＯＲＤ（Ｉ）となる。
【００９７】
図１３に例示するソースコードにおいては、最内の演算ループである２０番のＤＯループの添字Ｋが１増加すると、演算対象行列の非零要素を格納した配列Ａの添字が１増加する。
【００９８】
図１４は、図１３に例示するＦｏｒｔｒａｎコードにおける、２０番のＤＯループ処理について、配列Ａに着目した処理をフローチャートとして表した図である。図１４に例示するフローチャートに係る処理は、演算処理部７０３により実行されてもよい。
【００９９】
図１３における２０番のＤＯループ処理は、図１４におけるステップ１４０２の分岐処理と、ステップＳ１４１１のＫをインクリメントする処理との間で実行される、繰り返し処理に相当する。
【０１００】
上記繰り返し処理において、ステップＳ１４０３乃至ステップＳ１４１０の間で、記憶装置７０１に配置された配列Ａの読み込みと、配列Ｘの要素との積の計算とが、交互に繰り返される。当該繰り返し処理音回数は、演算対象魚列に含まれるブロックが（Ｍ行Ｍ列）型の小行列である場合、Ｍ×Ｍ回である。
【０１０１】
しかしながら、例えば、情報処理装置７００の実行環境や、図１３に例示するＦｏｒｔｒａｎコードを翻訳するコンパイラの最適化によって、実際の処理順序が変更される場合がある。
【０１０２】
特に、一つの命令で複数のデータを処理するＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉ  Ｄａｔａ）命令を有する計算機アーキテクチャを対象に最適化されたコンパイラは、記憶装置からの読み込み処理や演算処理を複数まとめて処理するよう、最適化した実行コードを生成する。
【０１０３】
図１５は、図１３に例示するソースコードがコンパイルされた実行コードが、ＳＩＭＤ命令を持つ計算機アーキテクチャ向けに最適化された場合の処理順序を例示するフローチャートである。なお、図１５に例示するフローチャートに係る処理は、演算処理部７０３により実行されてもよい。
【０１０４】
ステップＳ１５０３における記号”Ｌ”は、ＳＩＭＤ命令で同時に処理する命令の個数を表す。ステップＳ１５０４乃至ステップＳ１５０６においては、上記配列Ａの値の読み込み処理が繰り返される。
【０１０５】
また、ステップＳ１５０８乃至ステップＳ１５１０においては、上記ステップＳ１５０４乃至ステップＳ１５０６において読み込んだ配列Ａの値と、配列Ｘとの積の計算が繰り返される。
【０１０６】
ステップＳ１５０４乃至ステップＳ１５０６、及び、ステップＳ１５０８乃至ステップＳ１５１０は、いずれも長さＬ以下の繰り返し処理になっている。ＳＩＭＤ命令を持つ計算機アーキテクチャ向けに最適化された場合、ステップＳ１５０４乃至ステップＳ１５０６、及び、ステップＳ１５０８乃至ステップＳ１５１０における繰り返しは、それぞれ１つの命令で処理される。
【０１０７】
この際、ステップＳ１５０４乃至ステップＳ１５０６における配列Ａのデータの読み込み処理は、配列Ａの添字Ｋが１だけインクリメントされる。これより、係る処理においては、記憶装置（例えば記憶部７０１）において連続した領域（アドレス）に配置されたデータが読み込まれる。
【０１０８】
上記説明したＪＤＳ格納法を用いる場合、ブロックを有する演算対象行列を表すデータ記憶装置（例えば記憶部７０１）に格納する際、同一ブロック内の要素が、記憶装置において連続した領域（アドレス）に格納される。演算対象行列を表すデータを読み込む処理が、ブロック単位で繰り返される場合、記憶装置において不連続な領域（アドレス）がアクセスされることになる。
【０１０９】
一方、上記説明した本実施形態における行列格納法によれば、ブロック単位で繰り返される処理を実行する際、記憶装置において連続した領域（アドレス）がアクセスされる。よって、本実施形態における行列格納法によれば、上記ＪＤＳ格納法に比して、記憶装置に対するアクセス性能が向上することが期待される。これに伴い、演算処理の性能も向上することが期待される。
【０１１０】
以上より、本実施形態における情報処理装置７００によれば、配置部７０２は、１以上の非零ブロックを有する演算対象行列の要素を記憶装置７０１に対して効率よく配置可能である。なぜならば、配置部７０２は、ＪＤＳ格納法と同様に演算対象行列における零要素を圧縮することが可能であり、容量効率を向上可能であるからである。
【０１１１】
また、配置部７０２は、各非零ブロック内における相対位置が同じ要素を記憶部７０１における連続した領域に格納する。これより、ブロック単位で繰り返される演算処理において記憶部７０１における連続した領域がアクセスされることから、配置部７０２は、演算効率を向上可能である。即ち、本実施形態によれば、１以上のブロックを有する行列に含まれる要素を、容量効率及び演算効率がよい方法により記憶部７０１に配置である。
【０１１２】
＜第１の実施形態の変形例＞
上記第１の実施形態において説明した行列格納法は、周知の行列格納法であるＣＲＳ格納法、あるいは、ＥＬＬ（Ｅｌｌｐａｃｋ）格納法等に対して適用することで、これらの格納法を拡張可能である。以下、上記第１の実施形態において説明した行列格納法を用いて、これらの格納法を拡張する方法について説明する。なお、本変形例における情報処理装置７００は、上記第1の実施形態における情報処理装置７００と同様としてよいので、説明を省略する。また、ＣＲＳ格納法及びＥＬＬ格納法は、周知の技術であることから、それぞれの格納法自体に関する詳細な説明は省略する。
【０１１３】
まず、上記第１の実施形態において説明した行列格納法を用いた、ＣＲＳ格納法の拡張について説明する。
【０１１４】
図１６は、図８に例示する演算対象行列を列方向の左端側に詰めた行列（図９）について、それぞれのブロックに含まれる要素を列方向の右側に向けて順番に並べた行列（図１６の符号１６００）を表す。
【０１１５】
周知のＣＲＳ格納法は、図１６に例示する行列１６００の１行目から順に、図１６に示す矢印ＤＡ３の方向（列方向の右側）に向けて、行列１６００の要素（要素が表すデータ）を記憶装置（例えば記憶部７０１）に連続して格納する。このため、各ブロック内の要素（「＊１」乃至「＊４」）は、記憶装置において連続した領域（アドレス）に配置される。この場合、上記説明した周知のＪＤＳ格納法と同様、演算対象行列（例えば、行列１６００）を表すデータを読み込む処理がブロック単位で繰り返されると、記憶装置において不連続な領域（アドレス）がアクセスされることになる。
【０１１６】
これに対して、本変形例における配置部７０１は、各ブロックにおいて相対位置が同じ要素を、記憶部７０１における連続した領域（アドレス）に配置する。より具体的には、本変形例における配置部７０２は、ブロック列番号の１列目から順に、図１７に例示する矢印ＤＡ４の方向（列方向右側）に、同じブロック行に含まれる要素を選択する。そして、配置部７０２は、選択した要素を記憶装置７０１における連続した領域に配置する。これにより、（２行２列）型のブロックにおける配置位置が同じ要素は、記憶部７０１における連続した領域（アドレス）に配置（格納）される。
【０１１７】
この場合、配置部７０２は、図１７に例示するように、各ブロックにおける相対位置が同じ要素ごとに、当該要素を一次元的に格納する配列を分けてもよい（例えば、図１７における１７０１、１７０２、１７０３、１７０４）。
【０１１８】
次に、上記第１の実施形態において説明した行列格納法を用いた、ＥＬＬ格納法の拡張について説明する。
【０１１９】
図１８は、図８に例示する演算対象行列を列方向の左端側に詰めた行列（図９）について、それぞれのブロックに含まれる要素を行方向の下側に向けて順番に並べた行列（図１８の符号１８００）を表す。なお、図１８における「＊０」は、零要素が格納されていることを表す。
【０１２０】
周知のＥＬＬ格納法は、図１８に例示する行列１８００の１列目から順に、図１８に示す矢印ＤＡ５の方向（行方向の下側）に向けて、行列１８００の要素（要素が表すデータ）を記憶装置（例えば記憶部７０１）に連続して格納する。各ブロック内の要素（「＊１」乃至「＊４」）は、記憶装置において連続した領域（アドレス）に配置される。この場合、上記説明した周知のＪＤＳ格納法と同様、演算対象行列（例えば、行列１８００）を表すデータを読み込む処理がブロック単位で繰り返されると、記憶装置において不連続な領域（アドレス）がアクセスされることになる。
【０１２１】
これに対して、本変形例における配置部７０１は、各ブロックにおいて相対位置が同じ要素を、記憶部７０１における連続した領域（アドレス）に配置する。より具体的には、本変形例における配置部７０２は、ブロック行番号の１行目から順に、図１９に例示する矢印ＤＡ６の方向（行方向の下側）に（２行２列）型のブロックにおける配置位置が同じ要素を、記憶部７０１における連続した領域（アドレス）に配置（格納）する。
【０１２２】
この場合、配置部７０２は、図１９に例示するように、各ブロックにおける相対位置が同じ要素ごとに、当該要素を一次元的に格納する配列を分けてもよい（例えば、図１９における１９０１、１９０２、１９０３、１９０４）。
【０１２３】
以上より、本実施形態によれば、ＣＲＳ格納法やＥＬＬ格納法を拡張することにより、１以上のブロックを有する行列に含まれる要素を、容量効率及び演算効率がよい方法で記憶装置に配置可能な情報処理装置７００を提供可能である。
【０１２４】
＜第２の実施形態＞
以下、本願発明の第２の実施形態について、図２０を参照して説明する。図２０は、本実施形態における情報処理装置２０００の機能的な構成を例示するブロック図である。
【０１２５】
図２０に例示するように本実施形態における情報処理装置２０００は、記憶部２００１と、配置部２００２とを有する。情報処理装置２０００を構成するこれらの構成要素の間は、任意の通信手段により通信可能に接続されていてもよい。また、情報処理装置２０００は、物理的なコンピュータ等により構成されてもよく、周知の仮想化技術を用いて提供された仮想的なコンピュータ等により構成されてもよい。
【０１２６】
記憶部２００１は、少なくともデータを記憶可能である。係る記憶部２００１は、例えば、物理的な半導体メモリ等の記憶デバイスであってもよい。また、記憶部２００１は、仮想環境において提供される仮想的な記憶デバイスであってもよい。なお、記憶部２００１は、上記第１の実施形態における記憶部７０１と同様としてもよい。
【０１２７】
配置部２００２は、第１の行列に少なくとも１以上含まれるブロックである第２の行列について、それぞれの前記第２の行列において同じ位置に配置された要素を表すデータを、記憶部２００１における連続した領域に配置する。なお、配置部２００２は、上記第１の実施形態における記憶部７０２と同様としてもよい。
【０１２８】
上記のように構成された、本実施形態における情報処理装置２０００によれば、配置部２００２は、１以上のブロック（第２の行列）を有する第１行列の要素を記憶装置２００１に対して効率よく配置可能である。
【０１２９】
また、配置部２００２は、第２の行列内における相対位置が同じ要素を記憶装置２００２における連続した領域に格納する。これより、ブロック単位で繰り返される演算処理において、記憶装置における連続した領域がアクセスされることから、配置部２００２は、演算効率を向上可能である。即ち、本実施形態によれば、１以上の第２の行列を有する第１の行列に含まれる要素を、容量効率及び演算効率がよい方法により記憶部２００１に配置可能である。
【０１３０】
＜ハードウェア及びソフトウェア・プログラム（コンピュータ・プログラム）の構成＞
以下、上記説明した各実施形態を実現可能なハードウェア構成について説明する。
【０１３１】
以下の説明において、上記各実施形態において説明した情報処理装置（７００、２０００）をまとめて、単に「情報処理装置」と称する場合がある。また、当該情報処理装置の各構成要素（例えば、記憶部（７０１、２００１）、配置部（７０２、２００２）、演算処理部７０３、入力部７０４）をまとめて、単に「情報処理装置の構成要素」と称する場合がある。
【０１３２】
上記各実施形態において説明した情報処理装置は、専用のハードウェア装置により構成してもよい。その場合、上記各図に示した各構成要素は、一部又は全部を統合したハードウェア（処理ロジックを実装した集積回路等）として実現してもよい。
【０１３３】
例えば、各構成要素をハードウェアにより実現する場合、各構成要素は、それぞれの機能を提供可能な集積回路をＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）等により実装されてもよい。この場合、例えば、各構成要素が保持するデータは、ＳｏＣとして統合されたＲＡＭ領域やフラッシュメモリ領域に記憶されてもよい。
【０１３４】
また、この場合、各構成要素を接続する通信回線としては、周知の通信バスを採用してもよい。また、各構成要素を接続する通信回線はバス接続に限らず、それぞれの構成要素間をピアツーピアで接続してもよい。
【０１３５】
また、上述した情報処理装置、あるいは、当情報処理装置の構成要素は、図２１に例示するようなハードウェアと、係るハードウェアによって実行される各種ソフトウェア・プログラム（コンピュータ・プログラム）とによって構成されてもよい。
【０１３６】
図２１における演算装置２１０１は、汎用のＣＰＵやマイクロプロセッサ等の演算処理装置である。演算装置２１０１は、例えば後述する不揮発性記憶装置２１０３に記憶された各種ソフトウェア・プログラムを記憶装置２１０２に読み出し、係るソフトウェア・プログラムに従って処理を実行してもよい。なお、上記第１の実施形態における演算処理部７０３は、演算装置２１０１を用いて、各種演算処理を実行してもよい。
【０１３７】
記憶装置２１０２は、演算装置２１０１から参照可能な、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメモリ装置であり、ソフトウェア・プログラムや各種データ等を記憶する。なお、記憶装置２１０２は、揮発性のメモリ装置であってもよい。なお、上記各実施形態における記憶部（７０１、２００１）は、記憶装置２１０２を用いて実現されてもよい。
【０１３８】
不揮発性記憶装置２１０３は、例えば磁気ディスクドライブや、フラッシュメモリによる半導体記憶装置のような、不揮発性の記憶装置である。不揮発性記憶装置２１０３は、各種ソフトウェア・プログラムやデータ等を記憶可能である。
【０１３９】
ネットワークインタフェース２１０６は、通信ネットワークに接続するインタフェース装置であり、例えば有線及び無線のＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）接続用インタフェース装置等を採用してもよい。なお、上記第１の実施形態における入力部７０４は、ネットワークインタフェース２１０６を介して、各種入力を受け付けてもよい。
【０１４０】
ドライブ装置２１０４は、例えば、後述する外部記憶媒体２１０５に対するデータの読み込みや書き込みを処理する装置である。
【０１４１】
外部記録媒体２１０５は、例えば光ディスク、光磁気ディスク、半導体フラッシュメモリ等、データを記録可能な任意の記録媒体である。
【０１４２】
入出力インタフェース２１０７は、外部装置との間の入出力を制御する装置である。例えば、情報処理装置のユーザあるいは管理者等は、当該入出力インタフェースを介して接続された各種入出力装置（例えば、キーボード、マウス、ディスプレイ装置、プリンタ等）を用いて、情報処理装置に対して各種操作の指示等を入力してもよい。なお、上記第１の実施形態における入力部７０４は、入出力インタフェース２１０７を介して、各種入力を受け付けてもよい。
【０１４３】
上述した各実施形態を例に説明した本発明は、例えば、図２１に例示したハードウェア装置により情報処理装置を構成し、係るハードウェア装置に対して、上記各実施形態において説明した機能を実現可能なソフトウェア・プログラムを供給することにより実現されてもよい。この場合、係る装置に対して供給したソフトウェア・プログラムを、演算装置２１０１が実行することによって、本願発明が実現されてもよい。
【０１４４】
上述した各実施形態において、上記各図（例えば、図７、図２０等）に示した各部は、上述したハードウェアにより実行されるソフトウェア・プログラムの機能（処理）単位である、ソフトウェアモジュールとして実現することができる。ただし、これらの図面に示した各ソフトウェアモジュールの区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。
【０１４５】
例えば、図７、及び、図２０に例示した各部をソフトウェアモジュールとして実現する場合、これらのソフトウェアモジュールを不揮発性記憶装置２１０３に記憶しておき、演算装置２１０１がそれぞれの処理を実行する際に、これらのソフトウェアモジュールを記憶装置２１０２に読み出すよう構成してもよい。
【０１４６】
また、これらのソフトウェアモジュール間は、共有メモリやプロセス間通信等の適宜の方法により、相互に各種データを伝達できるように構成してもよい。このような構成により、これらのソフトウェアモジュール間は、相互に通信可能に接続可能である。
【０１４７】
更に、上記各ソフトウェア・プログラムを外部記憶媒体２１０５に記録しておき、上記通信装置等の出荷段階、あるいは運用段階等において、適宜ドライブ装置２１０４を通じて当該ソフトウェア・プログラムを不揮発性メモリ２１０３に格納するよう構成してもよい。
【０１４８】
なお、上記の場合において、上記情報処理装置への各種ソフトウェア・プログラムの供給方法は、出荷前の製造段階、あるいは出荷後のメンテナンス段階等において、適当な治具を利用して当該装置内にインストールする方法を採用してもよい。また、各種ソフトウェア・プログラムの供給方法は、インターネット等の通信回線を介して外部からダウンロードする方法等のように、現在では一般的な手順を採用してもよい。
【０１４９】
そして、このような場合において、本発明は、係るソフトウェア・プログラムを構成するコード、あるいは係るコードが記録されたところの、コンピュータ読み取り可能な記憶媒体によって構成されると捉えることができる。
【０１５０】
また、上述した情報処理装置、あるいは、当情報処理装置の構成要素は、図２１に例示するハードウェア装置を仮想化した仮想化環境と、当該仮想化環境において実行される各種ソフトウェア・プログラム（コンピュータ・プログラム）とによって構成されてもよい。この場合、図２１に例示するハードウェア装置の構成要素は、当該仮想化環境における仮想デバイスとして提供される。なお、この場合も、図２１に例示するハードウェア装置を物理的な装置として構成した場合と同様の構成にて、本発明を実現可能である。
【０１５１】
以上、本発明を、上述した模範的な実施形態に適用した例として説明した。しかしながら、本発明の技術的範囲は、上述した各実施形態に記載した範囲には限定されない。当業者には、係る実施形態に対して多様な変更又は改良を加えることが可能であることは明らかである。そのような場合、係る変更又は改良を加えた新たな実施形態も、本発明の技術的範囲に含まれ得る。そしてこのことは、特許請求の範囲に記載した事項から明らかである。
【産業上の利用可能性】
【０１５２】
本発明は、例えば、有限要素法による数値解析処理において、大規模疎行列を係数行列とする行列方程式を、反復解法（例えばＣＧ（Ｃｏｎｊｕｇａｔｅ  Ｇｒａｄｉｅｎｔ）法（共役勾配法））を用いて解く場合に適用可能である。本発明は、特に、大規模疎行列とベクトルとの積算が主たる計算コストを占める数値計算処理等に適用可能である。
【符号の説明】
【０１５３】
７００  情報処理装置
７０１  記憶部
７０２  配置部
７０３  演算処理部
７０４  入力部
２０００  情報処理装置
２００１  記憶部
２００２  配置部
２１０１  演算装置
２１０２  記憶装置
２１０３  不揮発性記憶装置
２１０４  ドライブ装置
２１０５  外部記憶媒体
２１０６  ネットワークインタフェース
２１０７  入出力インタフェース
【図１】
0005954385.tif 000002
【図２】
0005954385.tif 000003
【図３】
0005954385.tif 000004
【図４】
0005954385.tif 000005
【図５】
0005954385.tif 000006
【図６】
0005954385.tif 000007
【図７】
0005954385.tif 000008
【図８】
0005954385.tif 000009
【図９】
0005954385.tif 000010
【図１０】
0005954385.tif 000011
【図１１】
0005954385.tif 000012
【図１２】
0005954385.tif 000013
【図１３】
0005954385.tif 000014
【図１４】
0005954385.tif 000015
【図１５】
0005954385.tif 000016
【図１６】
0005954385.tif 000017
【図１７】
0005954385.tif 000018
【図１８】
0005954385.tif 000019
【図１９】
0005954385.tif 000020
【図２０】
0005954385.tif 000021
【図２１】
0005954385.tif 000022