(57)【要約】  Power Lowに従うデータを格納した疎行列に対する行列ベクトル積を、ベクトル計算機上で高速に演算可能とすること。情報処理装置は、行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持する第１の変換部と、前記行列のそれ以外の列に対する部分行列を第２の形式で保持する第２の変換部と、を備えている。
2017154946.tif 000002
【特許請求の範囲】
【請求項１】
行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持する第１の変換部と、
前記行列のそれ以外の列に対する部分行列を第２の形式で保持する第２の変換部と、を備える、
ことを特徴とする情報処理装置。
【請求項２】
前記第１の形式は、列優先で前記行列の要素を格納する形式である、
請求項１に記載の情報処理装置。
【請求項３】
前記第１の形式は、ＪＤＳ（Jagged Diagonal Storage）形式である、
請求項２に記載の情報処理装置。
【請求項４】
前記第２の形式は、行優先で前記行列の要素を格納する形式である、
請求項１ないし３のいずれか１項に記載の情報処理装置。
【請求項５】
前記第２の形式は、ＣＲＳ（Compressed Row Storage）形式である、
請求項４に記載の情報処理装置。
【請求項６】
前記第１の変換部は、前記行列の非ゼロ要素を左詰めにし、左詰めにした行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持し、
前記第２の変換部は、前記左詰めにした行列のそれ以外の列に対する部分行列を前記第２の形式で保持する、
請求項１ないし５のいずれか１項に記載の情報処理装置。
【請求項７】
前記第１の形式で保持した部分行列とベクトルの積を計算するとともに、前記第２の形式で保持した部分行列と前記ベクトルの積を計算し、前記計算した積を足し合わせることにより、前記行列と前記ベクトルの積を求める行列ベクトル積演算部を備える、
請求項１ないし６のいずれか１項に記載の情報処理装置。
【請求項８】
行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持するステップと、
前記行列のそれ以外の列に対する部分行列を第２の形式で保持するステップと、を含む、
ことを特徴とする情報処理方法。
【請求項９】
行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持するとともに、
前記行列のそれ以外の列に対する部分行列を第２の形式で保持する、
ことを特徴とするデータ構造。
【請求項１０】
行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持する処理と、
前記行列のそれ以外の列に対する部分行列を第２の形式で保持する処理と、をコンピュータに実行させる、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願についての記載）
本発明は、日本国特許出願：特願２０１６−０４６０２８号（２０１６年３月９日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は情報処理装置、情報処理方法、データ構造およびプログラムに関し、特に、ベクトル計算機、ベクトル計算機用の行列格納方法および行列ベクトル積演算方法、ベクトル計算機用のデータ構造、ならびに、ベクトル計算機用のプログラムに関する。
【背景技術】
【０００２】
疎行列とは、データの大半が０（ゼロ）の行列をいう。疎行列に含まれる０の部分をスキップして（飛ばして）保存することで、容量削減および行列ベクトル積演算の高速化を行う方法が知られている。例えば、非特許文献１には疎行列格納方法および疎行列ベクトル積演算方法が記載されている。【０００３】
関連技術として、特許文献１には、行列から対角要素を取り除き、上三角行列と下三角行列に分解し、ＪＤＳ（Jagged Diagonal Storage）形式で保存する技術が記載されている。【０００４】
また、特許文献２には、ＣＲＳ（Compressed Row Storage）形式で入力された行列をＪＤＳ形式に変換する技術が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０３−２６２０７７号公報
【特許文献２】特開２００１−２０９６３１号公報
【非特許文献】
【０００６】
【非特許文献１】Richard Barrett, et. al “Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods, 2nd Edition”, SIAM, pp.57-63<URL: http://www.netlib.org/templates/templates.pdf>.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記特許文献および非特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明者によってなされたものである。【０００８】
図８は、ＣＲＳ（Compressed Row Storage）形式 による疎行列格納方法を例示する。ＣＲＳ形式による疎行列格納方法では、ゼロでない要素（以下「非ゼロ要素」という。）の値を１次元配列に格納する。また、非ゼロ要素を行方向に連続して格納し、その行の非ゼロ要素がなくなると、次の行の非ゼロ要素を格納する。例えば、図８の例では、１，２，３，４，…，１０という順序で非ゼロ要素が１次元配列に保存される。また、これらの非ゼロ要素の元の行列における列番号も、同様に１次元配列に格納する。例えば、図８の例では、「１」が保存されていた列は０番目の列であるため、０が保存される。なお、ここでは、列番号および行番号は０からスタート（開始）するものとする。また、「２」が保存されていた列は２番目の列であるため、次の値として２が保存される。さらに、行の区切りを保存するため、「いくつ目の要素から行が始まるか」を表すオフセット値を１次元配列に保存する。例えば、０行目は０番目の要素から始まるため、最初の要素は０となる。また、０行目の非ゼロ要素数が３個であるため、１行目は３番目の要素から始まる。したがって、この配列の次の要素は３となる。【０００９】
図９は、ＣＲＳ形式による疎行列格納方法において、疎行列ベクトル積を実行する場合を例示する。例えば、行列ベクトル積の第０要素を計算するには、行列の第０行とベクトルの内積を計算すればよい。第０行の非ゼロ要素は１，２，３であり、それぞれの列番号は０，２，４であることが図８の右側に示した配列（値、列番号）から分かる。また、行の切れ目は、図８に示したオフセット値から知ることができる。これらを用いて、値１，２，３と、ベクトルの第０要素、第２要素、第４要素である１，３，５との積をそれぞれ求め、求めた積の和を計算することで、行列ベクトル積の第０要素を計算することができる。行列ベクトル積の他の要素についても、同様に計算することができる。【００１０】
ベクトル計算機を用いて上述の行列ベクトル積を計算する場合、各行および対応するベクトルの値がベクトルレジスタにロードされた上で計算が行われる。ここで、各行の非ゼロ要素の数が必ずしも多くない場合には、ベクトルレジスタ長に満たないケースが起こり得る。しかしながら、ベクトル計算機では演算時のベクトルレジスタ上の有効なデータ長（すなわち、ベクトル長）が長くないと、計算を高速に実行できないという問題がある。【００１１】
かかる問題を解決するための手法として、ＪＤＳ（Jagged Diagonal Storage）形式による疎行列格納方法が知られている。図１０は、ＪＤＳ形式による疎行列格納方法を例示する。ＪＤＳ形式による疎行列格納方法では、非ゼロ要素を同一行で左に詰める。次に、各行の非ゼロ要素の数が小さくなる順に、行を並べ替える（ソートする）。図１０に示す例では、第１行と第２行を入れ替えることで、非ゼロ要素数が３，３，２，２となる。その上で、列方向に非ゼロ要素を１次元配列に保存する。図１０に示す例では、１，６，４，９、…という順にデータを保存する。また、ＣＲＳ形式と同様、対応する値の列番号も１次元配列に保存する。例えば、値１が保存されていた列は０番目の列であるため、０を保存する。次の値６が保存されていた列も０番目の列であるため、０を保存する。また、左詰めにした後の列の区切りを保存するため、オフセット値を１次元配列に保存する。例えば、最初の列は配列の最初の要素から始まるため０が保存される。最初の列の要素数が４個であるため、次の列は４要素目からスタートする。したがって、この配列の次の要素は４となる。さらに、ＪＤＳ形式の場合、列をどのように入れ替えたかを表す情報も保持する必要がある。図１０に示す例の場合、行を入れ替えた後の０，１，２，３行が元の行列の０，２，１，３行目に相当するため、これらの値を保存している。なお、これらの値を保存する代わりに、元の行列の行が入れ替えた行列の何行目に相当するかを表す情報を保存してもよい。【００１２】
図１１はＪＤＳ形式による疎行列格納方法において、疎行列ベクトル積を実行する場合を例示する。この場合、各列と入力ベクトルの内容を掛け合わせたものを、行列ベクトル積の結果を表すベクトルに足し込むことになる。例えば、最初の列を参照すると、最初の行の値は１であり、その値が存在した列が０番目の列であることが図１０の配列から分かる。そこで、行列要素の値１と入力ベクトルの０番目の要素である１を掛け合わせた１×１を、行列ベクトル積の結果を表すベクトルの最初の値に足し込む。次の行の値は６であり、その値が存在した列も０番目の列であるため、結果を表すベクトルの次の値に６×１を足し込む。このような操作をすべての列について行う。その後、行の入れ替え情報に基づいて、値を入れ替えることで、疎行列ベクトル積を求めることができる。【００１３】
かかる行列ベクトル積をベクトル計算機で計算する場合、列ごとにデータがベクトルレジスタにロードされた上で計算が実行される。ＪＤＳ形式によると、各列を左詰めにしたことで、ＣＲＳ形式の１行よりも長くすることができる。したがって、ＪＤＳ形式によると、ＣＲＳ形式と比較してベクトル長を長くすることができる。【００１４】
しかしながら、上述の疎行列格納方法および疎行列ベクトル積演算方法によると、ベクトル長が十分に長くならない場合がある。その理由を以下に説明する。【００１５】
近年、ビッグデータ分析等と呼ばれるように、大規模なデータを対象に機械学習が行われる場合が増えてきている。ここで、機械学習は行列演算によって記述される場合が多い。また、大規模な機械学習では、対象とする行列が疎行列となる場合が多い。図１２および図１３は、このようなケースを例示する。【００１６】
図１２は、文書を疎行列で表したものである。図１２の行列の行は「単語」を表し、列は「文」を表す。また、行列の要素は各文において各単語が登場した回数を示す。この行列を対象に「特異値分解」と呼ばれる操作を行うと、各文を構成するトピックや各トピックを構成する単語を分析することができる。かかる分析は、潜在意味解析と呼ばれている。【００１７】
一方、図１３はオンラインストア等での各ユーザの購買行動を疎行列で表したものである。図１３の行列の行は「アイテム」を表し、列は「ユーザ」を表す。行列の要素は、各ユーザが各アイテムを購入した回数を表す。この行列を対象として「特異値分解」を行うことで、ユーザが購入しそうなアイテムを推薦することが可能となる。【００１８】
ここで、疎行列に対して特異値分解を行うには、その計算の途中で疎行列ベクトル積を行う必要がある。また、特異値分解以外の演算においても、疎行列に対する演算としては疎行列ベクトル積が中心となることが多い。【００１９】
ところで、図１２および図１３に示す行列をＪＤＳ形式に変換すると、図１４に示す形となる。ここで、グレーの部分は非ゼロ要素が存在する部分を表す。このような行列の場合、行列の右側の部分に、列の長さがベクトル長に満たない列が大量に生じ得る。【００２０】
この理由は、対象とするデータがPower Law（またはZipf分布）と呼ばれるデータの分布に従うためである。例えば、一部の単語の出現回数は他の単語に比べて極めて多いことが知られている。Zipf分布に従う場合、単語の出現回数順にソートした場合、２番目に多く現れる単語の出現回数は最も多く現れる単語の出現回数の１／２回となり、３番目に多く現れる単語の出現回数は最も多く現れる単語の１／３回等となる。同様に、一部のアイテムの購入回数は、通常他のアイテムに比べて極めて多くなる傾向がある。【００２１】
これらの場合には、ベクトル長が十分に長くならない領域が生じ、ベクトル計算機によるベクトル行列積の計算の高速化の妨げとなるおそれがある。なお、特許文献１、２に記載された技術はかかる問題に対処するものではない。【００２２】
そこで、Power Lowに従うデータを格納した疎行列に対する行列ベクトル積を、ベクトル計算機上で高速に演算可能とすることが課題となる。本発明の目的は、かかる課題解決に寄与する情報処理方法、情報処理装置、プログラムおよびデータ構造を提供することにある。
【課題を解決するための手段】
【００２３】
本発明の第１の態様に係る情報処理装置は、行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持する第１の変換部を備えている。この情報処理装置は、さらに、前記行列のそれ以外の列に対する部分行列を第２の形式で保持する第２の変換部を備えている。【００２４】
本発明の第２の態様に係る情報処理方法は、行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持するステップと、前記行列のそれ以外の列に対する部分行列を第２の形式で保持するステップと、を含む。本方法は、上記した第１の変換部と、第２の変換部とを備える情報処理装置という、特定の機械に結びつけられている。【００２５】
本発明の第３の態様に係るデータ構造は、行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持するとともに、前記行列のそれ以外の列に対する部分行列を第２の形式で保持する。【００２６】
本発明の第４の態様に係るプログラムは、行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を第１の形式で保持する処理と、前記行列のそれ以外の列に対する部分行列を第２の形式で保持する処理と、をコンピュータに実行させる。【００２７】
なお、上記データ構造およびプログラムは、非一時的なコンピュータ可読記録媒体（non-transitory computer-readable storage medium）に記録されたプログラム製品として提供することもできる。
【発明の効果】
【００２８】
本発明に係る情報処理方法、情報処理装置、プログラムおよびデータ構造によると、Power Lowに従うデータを格納した疎行列に対する行列ベクトル積を、ベクトル計算機上で高速に演算することができる。
【図面の簡単な説明】
【００２９】
【図１】一実施形態に係る情報処理装置の構成を例示するブロック図である。
【図２】一実施形態においてＪＤＳ形式とＣＲＳ形式を組み合せて保存する様子を説明するための図である。
【図３】第１の実施形態に係る計算機の構成を例示するブロック図である。
【図４】第１の実施形態における行列形式変換部の動作を例示するフロー図である。
【図５】第１の実施形態における行列形式変換部の動作を説明するための図である。
【図６】第１の実施形態における行列ベクトル積演算部の動作を例示するフロー図である。
【図７】第１の実施形態における行列ベクトル積演算部の動作を説明するための図である。
【図８】ＣＲＳ形式の疎行列格納方法を説明する図である。
【図９】ＣＲＳ形式の疎行列格納方法での疎行列ベクトル積演算を説明する図である。
【図１０】ＪＤＳ形式の疎行列格納方法を説明する図である。
【図１１】ＪＤＳ形式の疎行列格納方法での疎行列ベクトル積演算を説明する図である。
【図１２】文書から作成された疎行列の例を示す図である。
【図１３】購買行動から作成された疎行列の例を示す図である。
【図１４】ＪＤＳ形式でベクトル長が短くなる様子を説明するための図である。
【発明を実施するための形態】
【００３０】
はじめに、一実施形態の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。また、以下の説明で用いる図面中のブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。
【００３１】
図１は、一実施形態に係る情報処理装置８の構成を例示するブロック図である。図１を参照すると、情報処理装置８（例えばベクトル計算機）は、行列の列のうちの非ゼロ要素の数が所定の数（例えばベクトル計算機のベクトルレジスタ長）以上の列に対する部分行列を第１の形式（例えば列優先で行列の要素を格納するＪＤＳ（Jagged Diagonal Storage）形式）で保持する第１の変換部１０と、行列のそれ以外の列に対する部分行列を第２の形式（例えば行優先で行列の要素を格納するＣＲＳ（Compressed Row Storage）形式）で保持する第２の変換部１２を備えている。
【００３２】
図２に示すように、例えば、列長が十分長い部分をＪＤＳ形式で保存し、それ以外の部分をＣＲＳ形式で保存することで、いずれの領域でもベクトル長を長くすることができる。ＪＤＳ形式のみを用いて疎行列を格納すると、疎行列ベクトル積を演算する際、ベクトル長が短くなり実行速度が低下する場合がある。一方、一実施形態によると、かかる場合であってもベクトル長を長くし、疎行列ベクトル積を高速に演算することが可能となる。
【００３３】
＜実施形態１＞
［構成］
次に、第１の実施形態に係る計算機について図面を参照して詳細に説明する。
【００３４】
図３を参照すると、本実施形態に係る計算機２（例えばベクトル計算機）は、他の形式の行列を、本実施形態で提案する形式に変換する行列形式変換部４と、提案する形式の行列およびベクトルを入力とし行列ベクトル積を出力する行列ベクトル積演算部６を備えている。
【００３５】
行列形式変換部４は、入力した行列を本実施形態で提案する形式に変換する。また、行列形式変換部４は、変換した行列をメモリ、外部記憶等に保存する。
【００３６】
一方、行列ベクトル積演算部６は、メモリ等に保存された本実施形態で提案する形式の行列と、ベクトルを入力とし、行列ベクトル積を計算する。
【００３７】
［動作］
次に、図４のフロー図および図５の例を参照して、行列形式変換部４の動作について詳細に説明する。
【００３８】
まず、行列形式変換部４は、ＪＤＳ形式の行列を作成する場合と同様に、非ゼロ要素を左詰めにする（ステップＡ１）。
【００３９】
次に、行列形式変換部４は、各行の非ゼロ要素の数が小さくなる順に行を並べ替える（すなわちソートする）。また、行列形式変換部４はどのように並べ替えたかを表す情報（並べ替え情報）を別途保存する（ステップＡ２）。
【００４０】
次に、行列形式変換部４は各列の非ゼロ要素数を確認し、「所定の値」以上の所までをＪＤＳ形式とし、それ未満の部分をＣＲＳ形式とする（ステップＡ３）。例えば計算機２がベクトル計算機である場合、「所定の値」としてベクトル計算機のベクトルレジスタ長を用いることができる。ただし、本発明における所定の値はこれに限定されない。
【００４１】
図５に例示するケースでは、「所定の値」として４を用いている。このとき、行列形式変換部４は第０列および第１列をＪＤＳ形式で保存し、第２列、第３列および第４列をＣＲＳ形式で保存する。
【００４２】
このような手順で行列を保存した場合、ＣＲＳ形式で保存される部分に関しては、通常のＣＲＳ形式とは異なり、行の順序が元の行列とは入れ替わることになる。また、非ゼロ要素が存在しない部分に関しては、保存する必要はない。したがって、図５に示す場合には、２行分だけ保存すればよい。すなわち、オフセットを短くすることができる。
【００４３】
なお、ＣＲＳ形式で保存される部分について、行の順序を入れ替えない方法も考えられる。この場合、オフセットとして元の行列の行数分が必要となる。
【００４４】
次に、図６のフロー図および図７の例を参照して、行列ベクトル積演算部６の動作について詳細に説明する。
【００４５】
まず、行列ベクトル積演算部６は、ＪＤＳ形式の行列とベクトルとの行列ベクトル積を計算する（ステップＢ１）。ただし、行列ベクトル積演算部６は、この時点では行の入れ替え情報に基づく結果の入れ替えを行わない。
【００４６】
また、行列ベクトル積演算部６は、ＣＲＳ形式の行列とベクトルとの行列ベクトル積についても計算する（ステップＢ２）。なお、ステップＢ１とステップＢ２の計算の順序は、図６に示す順序に限定されない。
【００４７】
次に、行列ベクトル積演算部６は、ステップＢ１、Ｂ２の結果の和を計算する（ステップＢ３）。ここで、ＣＲＳ形式の行列は、行数が短いものになっている。したがって、結果のベクトルの要素数も少ないものになるが、第０要素から順に足し合わせればよい。要素数が足りない残りの部分は値が０であるため、足し合わせる必要はない。図７の場合、行列ベクトル積演算部６は、ＣＲＳ形式の行列ベクトル積の結果の第０要素の１７３と、ＪＤＳ形式の行列ベクトル積の結果の第０要素である２３を足し合わせる。同様に、行列ベクトル積演算部６は、ＣＲＳ形式の行列ベクトル積の結果の第１要素の３９と、ＪＤＳ形式の行列ベクトル積の結果の第１要素である７を足し合わせる。
【００４８】
次に、行列ベクトル積演算部６は行の入れ替え情報に基づき、結果を入れ替える（ステップＢ４）。これにより、最終的な行列ベクトル積の結果を得ることができる。
【００４９】
なお、ＣＲＳ形式で保存される部分について、行の順序を入れ替えない場合には、結果の行列ベクトル積の要素数は元の行列の行数分となる。また、この場合、並べ替え済の結果が得られるため、ＪＤＳ形式の行列ベクトル積の結果について並べ替えを行った後、和を計算すればよい。
【００５０】
［効果］
本実施形態の計算機２によると、図２に示すように、列長が十分長い部分をＪＤＳ形式で保存し、それ以外の部分をＣＲＳ形式で保存することで、いずれの領域でもベクトル長を長くすることができる。したがって、本実施形態の計算機２によると、ベクトル長を長くし、疎行列ベクトル積を高速に演算することが可能となる。
【００５１】
＜変形例＞
上記実施形態では、一例として、行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列をＪＤＳ形式で保持し、一方それ以外の列に対する部分行列をＣＲＳ形式で保持するものとした。しかし、行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を保持する形式はＪＤＳ形式に限定されず、列優先で行列の要素を格納する他の形式を用いてもよい。例えば、ＣＣＳ（Compressed Column Storage）形式や、ＥＬＬＰＡＣＫ（ＥＬＬ）形式も利用可能である。同様に、それ以外の列に対する部分行列を保持する形式はＣＲＳ形式に限定されず、行優先で行列の要素を格納する他の形式を用いてもよい。例えば、ＪＤＳ形式やＥＬＬ形式を行方向に転置した形式を用いてもよい。
【００５２】
また、上記実施形態において、行方向と列方向を入れ替えた場合についても、本発明の技術思想に含まれることは言うまでもない。
【００５３】
本発明は、例えばベクトル計算機を用いた疎行列ベクトル積を計算する用途に適用することができる。また、本発明はＧＰＵ（Graphics Processing Unit）を用いた疎行列ベクトル積を計算する用途にも適用可能である。さらに、これらの疎行列ベクトル積は、機械学習を用いた文書分析やレコメンド、あるいはWebサイトでの広告におけるクリック率予測等の用途に適用可能である。
【００５４】
なお、本発明において、下記の形態が可能である。
［形態１］
上記第１の態様に係る情報処理装置のとおりである。
［形態２］
上記した形態において、
前記第１の形式は、列優先で前記行列の要素を格納する形式であることが好ましい。
［形態３］
上記した形態において、
前記第１の形式は、ＪＤＳ（Jagged Diagonal Storage）形式であることが好ましい。
［形態４］
上記した形態において、
前記第２の形式は、行優先で前記行列の要素を格納する形式であることが好ましい。
［形態５］
上記した形態において、
前記第２の形式は、ＣＲＳ（Compressed Row Storage）形式であることが好ましい。
［形態６］
上記した形態において、
前記第１の変換部は、前記行列の非ゼロ要素を左詰めにし、左詰めにした行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持し、
前記第２の変換部は、前記左詰めにした行列のそれ以外の列に対する部分行列を前記第２の形式で保持する、
構成を採ることができる。
［形態７］
上記した形態において、
前記第１の変換部は、前記左詰めにした行列の行を各行に含まれる非ゼロ要素の数の降順に並び替え、前記降順に並び替えた行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持し、
前記第２の変換部は、前記降順に並び替えた行列のそれ以外の列に対する部分行列を前記第２の形式で保持する、
構成を採ることができる。
［形態８］
上記した形態において、
前記第１の形式で保持した部分行列とベクトルの積を計算するとともに、前記第２の形式で保持した部分行列と前記ベクトルの積を計算し、前記計算した積を足し合わせることにより、前記行列と前記ベクトルの積を求める行列ベクトル積演算部を備える、
構成を採ることができる。
［形態９］
上記した形態において、
前記所定の数は、前記行列とベクトルの積を計算するベクトル計算機のベクトルレジスタ長であることが好ましい。
［形態１０］
上記した形態において、
行方向と列方向とを入れ替えることができる。
［形態１１］
上記した形態において、
前記行列は、疎行列であることが好ましい。
［形態１２］
上記した形態において、
前記行列の列ごとの非ゼロ要素の数は、Zipf分布に従うことが好ましい。
［形態１３］
上記した形態において、
情報処理装置が、ベクトル計算機であることが好ましい。
［形態１４］
上記第２の態様に係る情報処理方法のとおりである。
［形態１５］
上記した形態において、
前記第１の形式は、列優先で前記行列の要素を格納する形式であることが好ましい。
［形態１６］
上記した形態において、
前記第１の形式は、ＪＤＳ（Jagged Diagonal Storage）形式であることが好ましい。
［形態１７］
上記した形態において、
前記第２の形式は、行優先で前記行列の要素を格納する形式であることが好ましい。
［形態１８］
上記した形態において、
前記第２の形式は、ＣＲＳ（Compressed Row Storage）形式であることが好ましい。
［形態１９］
上記した形態において、
前記行列の非ゼロ要素を左詰めにし、左詰めにした行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持するステップと、
前記左詰めにした行列のそれ以外の列に対する部分行列を前記第２の形式で保持するステップと、を含む、ことができる。
［形態２０］
上記した形態において、
前記左詰めにした行列の行を各行に含まれる非ゼロ要素の数の降順に並び替え、前記降順に並び替えた行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持するステップと、
前記降順に並び替えた行列のそれ以外の列に対する部分行列を前記第２の形式で保持するステップと、を含むことができる。
［形態２１］
上記した形態において、
前記第１の形式で保持した部分行列とベクトルの積を計算するステップと、
前記第２の形式で保持した部分行列と前記ベクトルの積を計算するステップと、
前記計算した積を足し合わせることにより、前記行列と前記ベクトルの積を求めるステップと、を含むことができる。
［形態２２］
上記した形態において、
前記所定の数は、前記行列とベクトルの積を計算するベクトル計算機のベクトルレジスタ長であることが好ましい。
［形態２３］
上記した形態において、
行方向と列方向とを入れ替えることができる。
［形態２４］
上記した形態において、
前記行列は、疎行列であることが好ましい。
［形態２５］
上記した形態において、
前記行列の列ごとの非ゼロ要素の数は、Zipf分布に従うことが好ましい。
［形態２６］
上記第３の態様に係るデータ構造のとおりである。
［形態２７］
上記した形態において、
前記第１の形式は、列優先で前記行列の要素を格納する形式であることが好ましい。
［形態２８］
上記した形態において、
前記第１の形式は、ＪＤＳ（Jagged Diagonal Storage）形式であることが好ましい。
［形態２９］
上記した形態において、
前記第２の形式は、行優先で前記行列の要素を格納する形式であることが好ましい。
［形態３０］
上記した形態において、
前記第２の形式は、ＣＲＳ（Compressed Row Storage）形式であることが好ましい。
［形態３１］
上記した形態において、
前記行列の非ゼロ要素を左詰めにし、左詰めにした行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持するとともに、
前記第２の変換部は、前記左詰めにした行列のそれ以外の列に対する部分行列を前記第２の形式で保持する、
構成を採ることができる。
［形態３２］
上記した形態において、
前記左詰めにした行列の行を各行に含まれる非ゼロ要素の数の降順に並び替え、前記降順に並び替えた行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持するとともに、
前記降順に並び替えた行列のそれ以外の列に対する部分行列を前記第２の形式で保持する、
構成を採ることができる。
［形態３３］
上記した形態において、
前記所定の数は、前記行列とベクトルの積を計算するベクトル計算機のベクトルレジスタ長であることが好ましい。
［形態３４］
上記した形態において、
行方向と列方向とを入れ替えることができる。
［形態３５］
上記した形態において、
前記行列は、疎行列であることが好ましい。
［形態３６］
上記した形態において、
前記行列の列ごとの非ゼロ要素の数は、Zipf分布に従うことが好ましい。
［形態３７］
上記第４の態様に係るプログラムのとおりである。
［形態３８］
上記した形態において、
前記第１の形式は、列優先で前記行列の要素を格納する形式であることが好ましい。
［形態３９］
上記した形態において、
前記第１の形式は、ＪＤＳ（Jagged Diagonal Storage）形式であることが好ましい。
［形態４０］
上記した形態において、
前記第２の形式は、行優先で前記行列の要素を格納する形式であることが好ましい。
［形態４１］
上記した形態において、
前記第２の形式は、ＣＲＳ（Compressed Row Storage）形式であることが好ましい。
［形態４２］
上記した形態において、
前記行列の非ゼロ要素を左詰めにし、左詰めにした行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持する処理と、
前記左詰めにした行列のそれ以外の列に対する部分行列を前記第２の形式で保持する処理と、を前記コンピュータに実行させることができる。
［形態４３］
上記した形態において、
前記左詰めにした行列の行を各行に含まれる非ゼロ要素の数の降順に並び替え、前記降順に並び替えた行列の列のうちの非ゼロ要素の数が所定の数以上の列に対する部分行列を前記第１の形式で保持する処理と、
前記降順に並び替えた行列のそれ以外の列に対する部分行列を前記第２の形式で保持する処理と、を前記コンピュータに実行させることができる。
［形態４４］
上記した形態において、
前記第１の形式で保持した部分行列とベクトルの積を計算する処理と、
前記第２の形式で保持した部分行列と前記ベクトルの積を計算する処理と、
前記計算した積を足し合わせることにより、前記行列と前記ベクトルの積を求める処理と、を前記コンピュータに実行させることができる。
［形態４５］
上記した形態において、
前記所定の数は、前記行列とベクトルの積を計算するベクトル計算機のベクトルレジスタ長であることが好ましい。
［形態４６］
上記した形態において、
行方向と列方向とを入れ替えることができる。
［形態４７］
上記した形態において、
前記行列は、疎行列であることが好ましい。
［形態４８］
上記した形態において、
前記行列の列ごとの非ゼロ要素の数は、Zipf分布に従うことが好ましい。
【００５５】
なお、上記特許文献および非特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【００５６】
２    計算機
４    行列形式変換部
６    行列ベクトル積演算部
８    情報処理装置
１０    第１の変換部
１２    第２の変換部
【図１】
2017154946.tif 000003
【図２】
2017154946.tif 000004
【図３】
2017154946.tif 000005
【図４】
2017154946.tif 000006
【図５】
2017154946.tif 000007
【図６】
2017154946.tif 000008
【図７】
2017154946.tif 000009
【図８】
2017154946.tif 000010
【図９】
2017154946.tif 000011
【図１０】
2017154946.tif 000012
【図１１】
2017154946.tif 000013
【図１２】
2017154946.tif 000014
【図１３】
2017154946.tif 000015
【図１４】
2017154946.tif 000016
【国際調査報告】
2017154946.tif 000017
2017154946.tif 000018