(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024077760
(43)【公開日】2024-06-10
(54)【発明の名称】情報処理プログラム、情報処理方法、および情報処理装置
(51)【国際特許分類】
G06F 16/28 20190101AFI20240603BHJP
【FI】
G06F16/28
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022189897
(22)【出願日】2022-11-29
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】河東 孝
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA07
(57)【要約】
【課題】行列データのいずれかの列の複数のデータを列方向に一括して初期化し易くすること。
【解決手段】情報処理装置は、複数の配列を表すペイロード行列データ510を記憶部に記憶する。情報処理装置は、ペイロード行列データ510のそれぞれのデータが、列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する列ビットマップ行列データ520を記憶部に記憶する。情報処理装置は、ペイロード行列データ510の各列に対応付けて、当該列の各データを一括して初期化する場合において当該列の各データの初期値と見做される列初期値を保持する列初期値行列データ530を記憶部に記憶する。情報処理装置は、ペイロード行列データ510の各行および各列の初期化順序を示す値を保持する順序管理行列データ540を記憶部に記憶する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
行方向に配列の成分のデータを保持する第1行列データを記憶部に記憶し、
前記第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する第2行列データを前記記憶部に記憶し、
前記第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する領域を含む第3行列データを前記記憶部に記憶し、
前記第1行列データの第1列の複数のデータを列方向に一括して初期化する第1初期化要求を受け付けたことに応じて、前記第1列の複数のデータにそれぞれ対応付けられた前記第2行列データの複数のフラグに、初期化状態であることを示す値を設定し、
前記第1初期化要求を受け付けたことに応じて、前記第1列に対応付けられた前記第3行列データのいずれかの領域に、第1初期値を設定する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項2】
前記第1行列データは、前記第1行列データの各行に対応付けて、当該行の複数のデータを行方向に一括して初期化する場合において当該行の各データの初期値と見做される、当該行の複数のデータに共通の初期値を、当該行の所定の領域に保持可能であって、
前記第1行列データの第1行の複数のデータを行方向に一括して初期化する第2初期化要求を受け付けたことに応じて、前記第1行の所定の領域に、第2初期値を設定する、
処理を前記コンピュータに実行させることを特徴とする請求項1に記載の情報処理プログラム。
【請求項3】
少なくとも、前記第1列と、前記第1行との順序関係を表す第4行列データを前記記憶部に記憶し、
前記第1初期化要求を受け付けたことに応じて、前記第1列が、先頭の順序になるよう、前記第4行列データを更新し、
前記第2初期化要求を受け付けたことに応じて、前記第1行が、先頭の順序になるよう、前記第4行列データを更新し、
前記第1行列データのうち、前記第1列と前記第1行との交点のデータを読み出す読出要求を受け付けたことに応じて、前記第1初期値および前記第2初期値が設定済みであれば、前記第4行列データを参照して、前記第1列が前記第1行より先頭側の順序である場合、前記第1初期値を読み出し、前記第1行が前記第1列より先頭側の順序である場合、前記第2初期値を読み出す、
処理を前記コンピュータに実行させることを特徴とする請求項2に記載の情報処理プログラム。
【請求項4】
前記読み出す処理は、
前記読出要求を受け付けたことに応じて、前記第1初期値が設定済み、かつ、前記第2初期値が未設定であれば、前記第1初期値を読み出し、前記第1初期値が未設定、かつ、前記第2初期値が設定済みであれば、前記第2初期値を読み出し、前記第1初期値が未設定、かつ、前記第2初期値が未設定であれば、前記交点のデータを読み出す、ことを特徴とする請求項3に記載の情報処理プログラム。
【請求項5】
前記交点のデータに指定の値を書き込む書込要求を受け付けたことに応じて、前記交点のデータが前記指定の値を示すよう、前記第1行列データを更新すると共に、前記交点のデータに対応付けられた前記第2行列データのいずれかのフラグに、初期化状態ではないことを示す値を設定する、
処理を前記コンピュータに実行させることを特徴とする請求項3または4に記載の情報処理プログラム。
【請求項6】
行方向に配列の成分のデータを保持する第1行列データを記憶部に記憶し、
前記第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する第2行列データを前記記憶部に記憶し、
前記第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する領域を含む第3行列データを前記記憶部に記憶し、
前記第1行列データの第1列の複数のデータを列方向に一括して初期化する第1初期化要求を受け付けたことに応じて、前記第1列の複数のデータにそれぞれ対応付けられた前記第2行列データの複数のフラグに、初期化状態であることを示す値を設定し、
前記第1初期化要求を受け付けたことに応じて、前記第1列に対応付けられた前記第3行列データのいずれかの領域に、第1初期値を設定する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【請求項7】
行方向に配列の成分のデータを保持する第1行列データを記憶部に記憶し、
前記第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する第2行列データを前記記憶部に記憶し、
前記第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する領域を含む第3行列データを前記記憶部に記憶し、
前記第1行列データの第1列の複数のデータを列方向に一括して初期化する第1初期化要求を受け付けたことに応じて、前記第1列の複数のデータにそれぞれ対応付けられた前記第2行列データの複数のフラグに、初期化状態であることを示す値を設定し、
前記第1初期化要求を受け付けたことに応じて、前記第1列に対応付けられた前記第3行列データのいずれかの領域に、第1初期値を設定する、
制御部を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
【背景技術】
【0002】
従来、複数の配列のそれぞれの配列の成分のデータを、行方向に保持する行列データが存在する。ここで、行列データのいずれかの行の複数のデータを行方向に一括して初期化すること、または、行列データのいずれかの列の複数のデータを列方向に一括して初期化することなどが望まれる場合がある。
【0003】
先行技術としては、例えば、複数のブロックを二分割した第1領域内の未書き込みブロックの数と、二分割した第2領域内の書き込み済みブロックの数とが整数比になる位置を境界とする、複数のブロックを連結して構成した配列を制御するものがある。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、行列データのいずれかの列の複数のデータを列方向に一括して初期化することが難しい。例えば、行列データのいずれかの列の複数のデータを列方向に一括して初期化する際、列の長さに応じた所要時間がかかってしまう。
【0006】
1つの側面では、本発明は、行列データのいずれかの列の複数のデータを列方向に一括して初期化し易くすることを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様によれば、行方向に配列の成分のデータを保持する第1行列データを記憶部に記憶し、前記第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する第2行列データを前記記憶部に記憶し、前記第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する領域を含む第3行列データを前記記憶部に記憶し、前記第1行列データの第1列の複数のデータを列方向に一括して初期化する第1初期化要求を受け付けたことに応じて、前記第1列の複数のデータにそれぞれ対応付けられた前記第2行列データの複数のフラグに、初期化状態であることを示す値を設定し、前記第1初期化要求を受け付けたことに応じて、前記第1列に対応付けられた前記第3行列データのいずれかの領域に、第1初期値を設定する情報処理プログラム、情報処理方法、および情報処理装置が提案される。
【発明の効果】
【0008】
一態様によれば、行列データのいずれかの列の複数のデータを列方向に一括して初期化し易くすることが可能になる。
【図面の簡単な説明】
【0009】
【
図1】
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
【
図2】
図2は、情報処理システム200の一例を示す説明図である。
【
図3】
図3は、情報処理装置100のハードウェア構成例を示すブロック図である。
【
図4】
図4は、情報処理装置100の機能的構成例を示すブロック図である。
【
図5】
図5は、情報処理装置100の記憶内容の一例を示す説明図である。
【
図6】
図6は、ペイロード行列データ510のデータ構造の一例を示す説明図(その1)である。
【
図7】
図7は、ペイロード行列データ510のデータ構造の一例を示す説明図(その2)である。
【
図8】
図8は、順序管理行列データ540のデータ構造の一例を示す説明図(その1)である。
【
図9】
図9は、順序管理行列データ540のデータ構造の一例を示す説明図(その2)である。
【
図10】
図10は、順序管理行列データ540のデータ構造の一例を示す説明図(その3)である。
【
図11】
図11は、順序管理行列データ540のデータ構造の一例を示す説明図(その4)である。
【
図12】
図12は、順序管理行列データ540のデータ構造の一例を示す説明図(その5)である。
【
図13】
図13は、ペイロード行列データ510全体を初期化する一例を示す説明図である。
【
図14】
図14は、ペイロード行列データ510の行を初期化する一例を示す説明図である。
【
図15】
図15は、ペイロード行列データ510の列を初期化する一例を示す説明図である。
【
図16】
図16は、配列の成分のデータを読み出す一例を示す説明図である。
【
図17】
図17は、配列の成分のデータを書き込む一例を示す説明図である。
【
図18】
図18は、情報処理装置100の適用例を示す説明図である。
【
図19】
図19は、情報処理装置100による効果の一例を示す説明図である。
【
図20】
図20は、全体初期化処理手順の一例を示すフローチャートである。
【
図21】
図21は、行初期化処理手順の一例を示すフローチャートである。
【
図22】
図22は、列初期化処理手順の一例を示すフローチャートである。
【
図23】
図23は、読み出し処理手順の一例を示すフローチャートである。
【
図24】
図24は、書き込み処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に、図面を参照して、本発明にかかる情報処理プログラム、情報処理方法、および情報処理装置の実施の形態を詳細に説明する。
【0011】
(実施の形態にかかる情報処理方法の一実施例)
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。情報処理装置100は、行列データを管理するためのコンピュータである。情報処理装置100は、例えば、サーバ、または、PC(Personal Computer)などである。
【0012】
行列データは、例えば、複数の配列のそれぞれの配列の成分のデータを、行方向に保持する。行列データの複数の行は、それぞれ異なる配列を表す。配列の成分のデータは、例えば、リアルタイム取引、オンラインゲーム、自動運転、または、セキュリティ対策などに活用されるデータであることが考えられる。配列の成分のデータは、例えば、値である。配列の成分のデータを活用する観点から、各種クエリを受け付け、行列データに対して、受け付けた各種クエリに対応する処理を実施することがある。
【0013】
クエリは、例えば、行列データに、配列の成分のデータを書き込むことを要求する書き込み要求であることがある。クエリは、例えば、行列データから、配列の成分のデータを読み出すことを要求する読み出し要求であることがある。クエリは、例えば、行列データのいずれかの行の複数のデータを、行方向に一括して初期化することを要求する行初期化要求であることがある。クエリは、例えば、行列データのいずれかの列の複数のデータを、列方向に一括して初期化することを要求する列初期化要求であることがある。クエリは、例えば、行列データ全体を、一括して初期化することを要求する全体初期化要求であることがある。
【0014】
ここで、行列データに対して、各種クエリに対応する処理を実施する際にかかる処理負担および処理時間の低減化を図ることが望まれる場合がある。例えば、リアルタイム取引のために、行列データに対して、各種クエリに対応する処理を実施する際に、各種クエリに対する一定以上の応答速度を担保することが望まれる場合がある。
【0015】
しかしながら、従来では、行列データに対して、クエリに対応する処理を実施する際にかかる処理負担および処理時間を、一定以下に抑制することが難しい場合がある。
【0016】
例えば、行列データの各行を、通常のデータ構造として扱う手法が考えられる。通常のデータ構造は、例えば、複数の配列のそれぞれの配列の成分のデータのみを直接的に持つデータ構造である。通常のデータ構造は、例えば、行列データのいずれかの行の複数のデータを、行方向に一括して初期化するための管理データを持たない。
【0017】
この手法では、行列データに対して、クエリに対応する処理を実施する際にかかる処理負担および処理時間を、一定以下に抑制することが難しい。
【0018】
例えば、行初期化要求に応じて、行列データのいずれかの行の複数のデータを、行方向に一括して初期化する際にかかる処理負担および処理時間は、O(MN)になってしまう。Mは、配列の数である。Nは、配列の成分の数である。従って、配列の数が多くなるほど、行列データのいずれかの行の複数のデータを、行方向に一括して初期化する際にかかる処理負担および処理時間が大きくなってしまう。
【0019】
例えば、列初期化要求に応じて、行列データのいずれかの列の複数のデータを、列方向に一括して初期化する際にかかる処理負担および処理時間は、O(MN)になってしまう。従って、配列の数が多くなるほど、および、配列の成分の数が多くなるほど、行列データのいずれかの列の複数のデータを、列方向に一括して初期化する際にかかる処理負担および処理時間が大きくなってしまう。
【0020】
例えば、全体初期化要求に応じて、行列データ全体を、一括して初期化する際にかかる処理負担および処理時間は、O(MN)になってしまう。従って、配列の数が多くなるほど、および、配列の成分の数が多くなるほど、行列データ全体を、一括して初期化する際にかかる処理負担および処理時間が大きくなってしまう。
【0021】
また、例えば、行列データの各行を、Optimal Space Initializable Arrayと呼ばれる特殊なデータ構造として扱う手法が考えられる。以下の説明では、Optimal Space Initializable Arrayを「OSIA」と表記する場合がある。例えば、OSIAと呼ばれる特殊なデータ構造に関しては、上述した特許文献1を参照することができる。
【0022】
この手法でも、行列データに対して、各種クエリに対応する処理を実施する際にかかる処理負担および処理時間を、一定以下に抑制することが難しい。
【0023】
例えば、列初期化要求に応じて、行列データのいずれかの列の複数のデータを、列方向に一括して初期化する際にかかる処理負担および処理時間は、O(M)になってしまう。Mは、配列の数である。従って、配列の数が多くなるほど、行列データのいずれかの列の複数のデータを、列方向に一括して初期化する際にかかる処理負担および処理時間が大きくなってしまう。
【0024】
例えば、全体初期化要求に応じて、行列データ全体を、一括して初期化する際にかかる処理負担および処理時間は、O(M)になってしまう。従って、配列の数が多くなるほど、行列データ全体を、一括して初期化する際にかかる処理負担および処理時間が大きくなってしまう。
【0025】
そこで、本実施の形態では、行列データのいずれかの列の複数のデータを列方向に一括して初期化し易くすることができる情報処理方法について説明する。
【0026】
図1において、情報処理装置100は、第1行列データ110を記憶する。記憶先は、例えば、情報処理装置100の記憶部である。第1行列データ110は、例えば、M行N列の行列状の領域群を含み、各領域にデータを保持する。Mは、例えば、配列の数に対応する。Nは、例えば、配列の成分の数に対応する。第1行列データ110は、例えば、行方向に、配列の成分のデータを保持する。第1行列データ110は、例えば、各行に、それぞれ異なる配列の成分のデータを保持する。
【0027】
情報処理装置100は、第2行列データ120を記憶する。記憶先は、例えば、情報処理装置100の記憶部である。第2行列データ120は、例えば、M行N列の行列状の領域群を含み、各領域にフラグを保持する。第2行列データ120は、例えば、第1行列データ110の各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する。フラグは、例えば、値が0であれば、初期化状態であることを示す。フラグは、例えば、値が1であれば、初期化状態ではないことを示す。第2行列データ120は、具体的には、第1行列データ110のi行j列目のデータが列方向に一括して初期化された初期化状態であるか否かを示すフラグを、第2行列データ120のi行j列目のデータとして保持する。
【0028】
情報処理装置100は、第3行列データ130を記憶する。記憶先は、例えば、情報処理装置100の記憶部である。第3行列データ130は、例えば、1行N列の領域群を含み、各領域に初期値を保持する。第3行列データ130は、例えば、第1行列データ110の各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する、1行N列の領域群を含む。第3行列データ130は、具体的には、第1行列データ110のj列の複数のデータを列方向に一括して初期化する場合における、当該j列の複数のデータに共通の初期値を、第3行列データ130のj列目のデータとして保持する。
【0029】
(1-1)情報処理装置100は、第1行列データ110の第1列111の複数のデータを列方向に一括して初期化する第1初期化要求を受け付ける。第1初期化要求は、例えば、第1列111のインデックスとして、列番号を含む。第1初期化要求は、例えば、第1列111の複数のデータの初期値として、第1初期値を含む。
【0030】
(1-2)情報処理装置100は、第1初期化要求を受け付けたことに応じて、第1列111の複数のデータにそれぞれ対応付けられた第2行列データ120の複数のフラグに、初期化状態であることを示す値を設定する。情報処理装置100は、例えば、第1列111に対応する第2行列データ120の第2列121の複数のフラグに、初期化状態であることを示す値=0を設定する。例えば、第1列111に対応する第2列121は、第1列111と列番号が同一である第2行列データ120のいずれかの列である。これにより、情報処理装置100は、第1列111の複数のデータを初期化したことを特定可能にすることができる。
【0031】
(1-3)情報処理装置100は、第1初期化要求を受け付けたことに応じて、第1列111に対応付けられた第3行列データ130のいずれかの領域131に、第1初期値を設定する。例えば、第1列111に対応する領域131は、第1列111の列番号が同一である第3行列データ130のいずれかの列の領域である。
【0032】
これにより、情報処理装置100は、第1行列データ110の第1列111の複数のデータそのものを書き換えずに、第1行列データ110の第1列111の複数のデータを、列方向に一括して初期化することができる。このため、情報処理装置100は、第1行列データ110の第1列111の複数のデータを、列方向に一括して初期化することを要求する列初期化要求を、適切に処理可能にすることができる。情報処理装置100は、第1行列データ110の第1列111の複数のデータを、列方向に一括して初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0033】
また、情報処理装置100は、以降、第1列111のいずれかのデータに対応する第2行列データ120の第2列121のいずれかのフラグに基づいて、当該データが、初期化状態であることを判定可能にすることができる。情報処理装置100は、第1列111のいずれかのデータが、初期化状態であれば、第1列111のいずれかのデータとして、領域131の第1初期値を読み出すことにより、第1列111のいずれかのデータを読み出すことができる。このため、情報処理装置100は、第1列111のいずれかのデータを読み出すことを要求する読み出し要求を、適切に処理可能にすることができる。
【0034】
また、情報処理装置100は、以降、第1列111のいずれかのデータに、任意の値を書き込んだ場合、第2行列データ120によって、当該いずれかのデータが、初期化状態ではなくなったことを管理可能にすることができる。このため、情報処理装置100は、第1列111のいずれかのデータに、任意の値を書き込むことを要求する書き込み要求を、適切に処理可能にすることができる。
【0035】
ここでは、情報処理装置100が、第1行列データ110のいずれかの列の複数のデータを、列方向に一括して初期化可能である場合について説明したが、これに限らない。情報処理装置100が、第1行列データ110のいずれかの行の複数のデータを、行方向に一括して初期化可能である場合があってもよい。
【0036】
ここでは、情報処理装置100が、単独で動作する場合について説明したが、これに限らない。例えば、情報処理装置100が、他のコンピュータと協働する場合があってもよい。具体的には、情報処理装置100が、第1行列データ110と、第2行列データ120と、第3行列データ130とを記憶する他のコンピュータを制御する場合があってもよい。例えば、複数のコンピュータが、協働して情報処理装置100としての機能を実現する場合があってもよい。具体的には、クラウド上に、情報処理装置100としての機能が実現される場合があってもよい。
【0037】
(情報処理システム200の一例)
次に、
図2を用いて、
図1に示した情報処理装置100を適用した、情報処理システム200の一例について説明する。
【0038】
図2は、情報処理システム200の一例を示す説明図である。
図2において、情報処理システム200は、情報処理装置100と、情報蓄積装置201と、クライアント装置202とを含む。
【0039】
情報処理システム200において、情報処理装置100と情報蓄積装置201とは、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。また、情報処理システム200において、情報処理装置100とクライアント装置202とは、有線または無線のネットワーク210を介して接続される。
【0040】
情報蓄積装置201は、各種行列データを記憶するためのコンピュータである。情報蓄積装置201は、例えば、第1行列データを記憶する。第1行列データは、例えば、M行N列の行列状の領域群を含み、各領域にデータを保持する。Mは、例えば、配列の数に対応する。Nは、例えば、配列の成分の数に対応する。第1行列データは、例えば、行方向に、配列の成分のデータを保持する。第1行列データは、例えば、各行に、それぞれ異なる配列の成分のデータを保持する。第1行列データの各行は、例えば、それぞれ配列の成分のデータを格納可能な所定数の領域を含むブロックを連結したブロック列である。ブロック列は、例えば、OSIAと呼ばれるデータ構造である。
【0041】
情報蓄積装置201は、例えば、第2行列データを記憶する。第2行列データは、例えば、M行N列の行列状の領域群を含み、各領域にフラグを保持する。第2行列データは、例えば、第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する。フラグは、例えば、値が0であれば、初期化状態であることを示す。フラグは、例えば、値が1であれば、初期化状態ではないことを示す。第2行列データは、具体的には、第1行列データのi行j列目のデータが列方向に一括して初期化された初期化状態であるか否かを示すフラグを、第2行列データのi行j列目のデータとして保持する。
【0042】
情報蓄積装置201は、例えば、第3行列データを記憶する。第3行列データは、例えば、1行N列の領域群を含み、各領域に初期値を保持する。第3行列データは、例えば、第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する、1行N列の領域群を含む。第3行列データは、具体的には、第1行列データのj列の複数のデータを列方向に一括して初期化する場合における、当該j列の複数のデータに共通の初期値を、第3行列データのj列目のデータとして保持する。
【0043】
情報蓄積装置201は、例えば、第4行列データを記憶する。第4行列データは、例えば、1行N+M列の領域群を含み、各領域に、第1行列データの各行および各列を順序付ける値を保持する。第4行列データは、例えば、第1行列データの各行に対応付けて、第1行列データの各行および各列のうち、当該行を一括して初期化した順序を示す値を保持する。第4行列データは、例えば、第1行列データの各列に対応付けて、第1行列データの各行および各列のうち、当該列を一括して初期化した順序を示す値を保持する。第4行列データは、例えば、第4行列データのi列目の領域に、第1行列データのi行を一括して初期化した順序を示す値を保持する。i=1~Mである。第4行列データは、例えば、第4行列データのM+j列目の領域に、第1行列データのj列を一括して初期化した順序を示す値を保持する。j=1~Nである。
【0044】
情報蓄積装置201は、例えば、情報処理システム200を管理するシステム管理者によって用いられる。情報蓄積装置201は、例えば、情報処理装置100の制御に従って、各種行列データを更新または利用する。情報蓄積装置201は、例えば、情報処理装置100の制御に従って、第1行列データに対して、配列の成分のデータを書き込む。情報蓄積装置201は、例えば、情報処理装置100の制御に従って、第1行列データから、配列の成分のデータを読み出す。
【0045】
情報蓄積装置201は、例えば、情報処理装置100の制御に従って、第1行列データのいずれかの行の複数のデータを初期化する。情報蓄積装置201は、例えば、情報処理装置100の制御に従って、第1行列データのいずれかの列の複数のデータを初期化する。情報蓄積装置201は、例えば、情報処理装置100の制御に従って、第1行列データ全体を初期化する。情報蓄積装置201は、例えば、サーバ、または、PCなどである。
【0046】
情報処理装置100は、情報蓄積装置201を制御するためのコンピュータである。情報処理装置100は、例えば、情報処理システム200を管理するシステム管理者によって用いられる。
【0047】
情報処理装置100は、クエリを取得する。情報処理装置100は、具体的には、クエリを、クライアント装置202から受信することにより取得する。情報処理装置100は、例えば、システム管理者の操作入力に基づき、クエリの入力を受け付けることにより、クエリを取得してもよい。クエリは、例えば、第1行列データに、配列の成分のデータを書き込むことを要求する書き込み要求であることがある。クエリは、例えば、第1行列データから、配列の成分のデータを読み出すことを要求する読み出し要求であることがある。
【0048】
クエリは、例えば、第1行列データのいずれかの行の複数のデータを、行方向に一括して初期化することを要求する行初期化要求であることがある。クエリは、例えば、第1行列データのいずれかの列の複数のデータを、列方向に一括して初期化することを要求する列初期化要求であることがある。クエリは、例えば、第1行列データ全体を、一括して初期化することを要求する全体初期化要求であることがある。情報処理装置100は、クエリに応じて、情報蓄積装置201を制御することにより、各種行列データを制御する。情報処理装置100は、例えば、サーバ、または、PCなどである。
【0049】
クライアント装置202は、情報処理システム200を利用するシステム利用者によって用いられるコンピュータである。クライアント装置202は、システム利用者の操作入力に基づき、書き込み要求、読み出し要求、行初期化要求、列初期化要求、または、全体初期化要求などのクエリを生成し、情報処理装置100に送信する。クライアント装置202は、例えば、PC、タブレット端末、または、スマートフォンなどである。
【0050】
ここでは、情報処理装置100が、情報蓄積装置201とは異なる装置である場合について説明したが、これに限らない。例えば、情報処理装置100が、情報蓄積装置201としての機能を有し、情報蓄積装置201としても動作する場合があってもよい。ここでは、情報処理装置100が、クライアント装置202とは異なる装置である場合について説明したが、これに限らない。例えば、情報処理装置100が、クライアント装置202としての機能を有し、クライアント装置202としても動作する場合があってもよい。
【0051】
(情報処理装置100のハードウェア構成例)
次に、
図3を用いて、情報処理装置100のハードウェア構成例について説明する。
【0052】
図3は、情報処理装置100のハードウェア構成例を示すブロック図である。
図3において、情報処理装置100は、CPU(Central Processing Unit)301と、メモリ302と、ネットワークI/F(Interface)303と、記録媒体I/F304と、記録媒体305とを有する。また、各構成部は、バス300によってそれぞれ接続される。
【0053】
ここで、CPU301は、情報処理装置100の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることにより、コーディングされている処理をCPU301に実行させる。
【0054】
ネットワークI/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F303は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F303は、例えば、モデムやLANアダプタなどである。
【0055】
記録媒体I/F304は、CPU301の制御に従って記録媒体305に対するデータのリード/ライトを制御する。記録媒体I/F304は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体305は、記録媒体I/F304の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体305は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体305は、情報処理装置100から着脱可能であってもよい。
【0056】
情報処理装置100は、上述した構成部の他、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を複数有していてもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を有していなくてもよい。
【0057】
(情報蓄積装置201のハードウェア構成例)
情報蓄積装置201のハードウェア構成例は、具体的には、
図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
【0058】
(クライアント装置202のハードウェア構成例)
クライアント装置202のハードウェア構成例は、具体的には、
図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
【0059】
(情報処理装置100の機能的構成例)
次に、
図4を用いて、情報処理装置100の機能的構成例について説明する。
【0060】
図4は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、記憶部400と、取得部401と、列初期化部402と、行初期化部403と、格納部404と、読出部405と、出力部406とを含む。
【0061】
記憶部400は、例えば、
図3に示したメモリ302や記録媒体305などの記憶領域によって実現される。以下では、記憶部400が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部400が、情報処理装置100とは異なる装置に含まれ、記憶部400の記憶内容が情報処理装置100から参照可能である場合があってもよい。
【0062】
取得部401~出力部406は、制御部の一例として機能する。取得部401~出力部406は、具体的には、例えば、
図3に示したメモリ302や記録媒体305などの記憶領域に記憶されたプログラムをCPU301に実行させることにより、または、ネットワークI/F303により、その機能を実現する。各機能部の処理結果は、例えば、
図3に示したメモリ302や記録媒体305などの記憶領域に記憶される。
【0063】
記憶部400は、各機能部の処理において参照され、または更新される各種情報を記憶する。記憶部400は、例えば、第1行列データを記憶する。第1行列データは、例えば、配列の成分のデータを保持する領域を含む。第1行列データは、具体的には、それぞれ配列の成分のデータを格納可能な、M行N列の行列状の複数の領域を含む。Mは、例えば、配列の数に対応する。Nは、例えば、配列の成分の数に対応する。第1行列データは、例えば、行方向に、配列の成分のデータを保持する。
【0064】
第1行列データは、例えば、第1行列データの各行に対応付けて、当該行の複数のデータを行方向に一括して初期化する場合において当該行の各データの初期値と見做される、当該行の複数のデータに共通の初期値を、当該行の所定の領域に保持可能であってもよい。第1行列データの各行は、例えば、それぞれ配列の成分のデータを格納可能な所定数の領域を含むブロックを連結したブロック列である。第1行列データの各行は、具体的には、行方向に、OSIAと呼ばれる特殊なデータ構造であることが考えられる。
【0065】
記憶部400は、例えば、第2行列データを記憶する。第2行列データは、例えば、第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する領域を含む。フラグは、例えば、値が0であれば、初期化状態であることを示す。フラグは、例えば、値が1であれば、初期化状態ではないことを示す。第2行列データは、具体的には、M行N列の行列状の領域群を含み、各領域にフラグを保持する。
【0066】
第2行列データは、具体的には、第1行列データのi行j列目のデータが列方向に一括して初期化された初期化状態であるか否かを示すフラグを、第2行列データのi行j列目のデータとして保持する。第2行列データの各列は、具体的には、列方向に、OSIAと呼ばれる特殊なデータ構造であることが考えられる。
【0067】
記憶部400は、例えば、第3行列データを記憶する。第3行列データは、例えば、第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する領域を含む。第3行列データは、具体的には、1行N列の領域群を含み、各領域に初期値を保持する。第3行列データは、具体的には、第1行列データのj列の複数のデータを列方向に一括して初期化する場合における、当該j列の複数のデータに共通の初期値を、第3行列データのj列目のデータとして保持する。
【0068】
記憶部400は、例えば、第4行列データを記憶する。第4行列データは、例えば、第1行列データの各行および各列を一括して初期化した順序関係を示す。第4行列データは、具体的には、少なくとも、第1行列データの第1列と、第1行列データの第1行とをそれぞれ一括して初期化した順序関係を示す。第4行列データは、例えば、1行N+M列の領域群を含み、各領域に、第1行列データの各行および各列を順序付ける値を保持する。
【0069】
第4行列データは、例えば、第1行列データの各行に対応付けて、第1行列データの各行および各列のうち、当該行を一括して初期化した順序を示す値を保持する。第4行列データは、例えば、第1行列データの各列に対応付けて、第1行列データの各行および各列のうち、当該列を一括して初期化した順序を示す値を保持する。第4行列データのi列目の領域に、第1行列データのi行を一括して初期化した順序を示す値を保持する。i=1~Mである。第4行列データのM+j列目の領域に、第1行列データのj列を一括して初期化した順序を示す値を保持する。j=1~Nである。
【0070】
取得部401は、各機能部の処理に用いられる各種情報を取得する。取得部401は、取得した各種情報を、記憶部400に記憶し、または、各機能部に出力する。また、取得部401は、記憶部400に記憶しておいた各種情報を、各機能部に出力してもよい。取得部401は、例えば、利用者の操作入力に基づき、各種情報を取得する。取得部401は、例えば、情報処理装置100とは異なる装置から、各種情報を受信してもよい。
【0071】
取得部401は、例えば、クエリを取得する。取得部401は、具体的には、クエリを、他のコンピュータから受信することにより取得する。他のコンピュータは、例えば、クライアント装置202などである。取得部401は、具体的には、利用者の操作入力に基づき、クエリの入力を受け付けることにより、クエリを取得してもよい。
【0072】
クエリは、例えば、第1行列データに、配列の成分のデータを書き込むことを要求する書き込み要求であることがある。クエリは、例えば、第1行列データから、配列の成分のデータを読み出すことを要求する読み出し要求であることがある。
【0073】
クエリは、例えば、第1行列データのいずれかの行の複数のデータを、行方向に一括して初期化することを要求する行初期化要求であることがある。クエリは、例えば、第1行列データのいずれかの列の複数のデータを、列方向に一括して初期化することを要求する列初期化要求であることがある。クエリは、例えば、第1行列データ全体を、一括して初期化することを要求する全体初期化要求であることがある。
【0074】
取得部401は、具体的には、第1行列データの第1列の複数のデータを列方向に一括して初期化することを要求する第1初期化要求を受け付ける。第1初期化要求は、例えば、第1列を特定可能にする情報を含む。第1初期化要求は、具体的には、第1列を特定可能にする情報として、第1列の列番号を含む。
【0075】
取得部401は、具体的には、第1行列データの第1行の複数のデータを行方向に一括して初期化することを要求する第2初期化要求を受け付ける。第2初期化要求は、例えば、第1行を特定可能にする情報を含む。第2初期化要求は、具体的には、第1行を特定可能にする情報として、第1行の行番号を含む。
【0076】
取得部401は、具体的には、第1行列データ全体を初期化することを要求する全体初期化要求を受け付ける。
【0077】
取得部401は、具体的には、第1行列データのうち、第1列と第1行との交点のデータに指定の値を書き込むことを要求する書き込み要求を受け付ける。書き込み要求は、例えば、第1列と第1行とを特定可能にする情報を含む。書き込み要求は、具体的には、第1列と第1行とを特定可能にする情報として、第1列の列番号と第1行の行番号との組み合わせを含む。書き込み要求は、例えば、指定の値を含む。
【0078】
取得部401は、具体的には、第1行列データのうち、第1列と第1行との交点のデータを読み出すことを要求する読み出し要求を受け付ける。読み出し要求は、例えば、第1列と第1行とを特定可能にする情報を含む。読み出し要求は、具体的には、第1列と第1行とを特定可能にする情報として、第1列の列番号と第1行の行番号との組み合わせを含む。
【0079】
取得部401は、いずれかの機能部の処理を開始する開始トリガーを受け付けてもよい。開始トリガーは、例えば、利用者による所定の操作入力があったことである。開始トリガーは、例えば、他のコンピュータから、所定の情報を受信したことであってもよい。開始トリガーは、例えば、いずれかの機能部が所定の情報を出力したことであってもよい。
【0080】
取得部401は、第1初期化要求を受け付けたことを、列初期化部402の処理を開始する開始トリガーとして受け付けてもよい。取得部401は、第2初期化要求を受け付けたことを、行初期化部403の処理を開始する開始トリガーとして受け付けてもよい。取得部401は、全体初期化要求を受け付けたことを、列初期化部402と行初期化部403との処理を開始する開始トリガーとして受け付けてもよい。取得部401は、書き込み要求を受け付けたことを、格納部404の処理を開始する開始トリガーとして受け付けてもよい。取得部401は、読み出し要求を受け付けたことを、読出部405の処理を開始する開始トリガーとして受け付けてもよい。
【0081】
列初期化部402は、第1初期化要求を受け付けたことに応じて、第1列の複数のデータにそれぞれ対応付けられた第2行列データの複数のフラグに、初期化状態であることを示す値を設定する。列初期化部402は、第1初期化要求を受け付けたことに応じて、第1列に対応付けられた第3行列データのいずれかの領域に、第1初期値を設定する。
【0082】
これにより、列初期化部402は、第1列の複数のデータを、列方向に一括して初期化することができる。列初期化部402は、第2行列データの各列が、OSIAと呼ばれる特殊なデータ構造であれば、第1列の複数のデータを、列方向に一括して初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。列初期化部402は、読出部405で、第1初期値を、第1列のいずれかのデータとして読み出し可能にすることができる。
【0083】
列初期化部402は、第1初期化要求を受け付けたことに応じて、第1列が、第1行列データの各行および各列のうち、先頭の順序になるよう、第4行列データを更新する。これにより、列初期化部402は、第1行列データの各行および各列を、どのような順序で初期化したかを特定可能にすることができる。このため、列初期化部402は、第1行列データから、第1列と第1行との交点のデータを適切に読み出すための指針を得ることができる。列初期化部402は、例えば、読出部405で、第1初期値を、第1列と第1行との交点のデータとして読み出すことが好ましいか否かを適切に判定可能にすることができる。
【0084】
行初期化部403は、第2初期化要求を受け付けたことに応じて、第1行の所定の領域に、第2初期値を設定する。所定の領域は、例えば、第1行の末尾のブロックのうち、まだ成分の値が格納されていない未使用領域である。行初期化部403は、第2初期化要求を受け付けたことに応じて、第1行に対応付けられた、第1行に含まれない所定の領域に、第2初期値を設定してもよい。
【0085】
これにより、行初期化部403は、第1行の複数のデータを、行方向に一括して初期化することができる。行初期化部403は、第1行列データの各行が、OSIAと呼ばれる特殊なデータ構造であれば、第1行の複数のデータを、行方向に一括して初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。行初期化部403は、読出部405で、第2初期値を、第1列のいずれかのデータとして読み出し可能にすることができる。
【0086】
行初期化部403は、第2初期化要求を受け付けたことに応じて、第1行が、第1行列データの各行および各列のうち、先頭の順序になるよう、第4行列データを更新する。これにより、行初期化部403は、第1行列データの各行および各列を、どのような順序で初期化したかを特定可能にすることができる。このため、行初期化部403は、第1行列データから、第1列と第1行との交点のデータを適切に読み出すための指針を得ることができる。行初期化部403は、例えば、読出部405で、第2初期値を、第1列と第1行との交点のデータとして読み出すことが好ましいか否かを適切に判定可能にすることができる。
【0087】
格納部404は、第1行列データのうち、第1列と第1行との交点のデータに指定の値を書き込むことを要求する書き込み要求を受け付けたことに応じて、当該交点のデータが指定の値を示すよう、第1行列データを更新する。格納部404は、第1列と第1行との交点のデータに指定の値を書き込むことを要求する書き込み要求を受け付けたことに応じて、当該交点のデータに対応付けられた第2行列データのいずれかのフラグに、初期化状態ではないことを示す値を設定する。
【0088】
これにより、格納部404は、第1行列データのうち、第1列と第1行との交点のデータに指定の値を書き込むことができる。格納部404は、第1行列データのうち、第1列と第1行との交点のデータに指定の値を書き込む際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0089】
格納部404は、第2行列データに基づいて、第1行列データのうち、第1列と第1行との交点のデータが、初期化状態ではなくなったことを管理することができる。このため、格納部404は、読出部405で、第1列と第1行との交点のデータそのものを読み出すことが好ましいか否かを適切に判定可能にすることができる。
【0090】
読出部405は、第1行列データのうち、第1列と第1行との交点のデータを読み出すことを要求する読み出し要求を受け付けたことに応じて、第1初期値および第2初期値が設定済みであるか否かを判定する。読出部405は、第1初期値が設定済み、かつ、第2初期値が設定済みであれば、第4行列データを参照して、第1列が第1行より先頭側の順序であるか否かを判定する。
【0091】
読出部405は、第1列が第1行より先頭側の順序である場合、第1列と第1行との交点のデータとして、第1初期値を読み出す。よ見出し部は、第1列が第1行より先頭側の順序ではなく、第1行が第1列より先頭側の順序である場合、第1列と第1行との交点のデータとして、第2初期値を読み出す。
【0092】
読出部405は、第1初期値が設定済み、かつ、第2初期値が未設定であれば、第1列と第1行との交点のデータとして、第1初期値を読み出す。読出部405は、第1初期値が未設定、かつ、第2初期値が設定済みであれば、第1列と第1行との交点のデータとして、第2初期値を読み出す。読出部405は、第1初期値が未設定、かつ、第2初期値が未設定であれば、第1行列データのうち、第1列と第1行との交点のデータをそのまま読み出す。
【0093】
これにより、読出部405は、第1列と第1行との交点のデータとなる値を、適切に読み出すことができる。読出部405は、第1列と第1行との交点のデータとなる値を読み出す際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0094】
出力部406は、少なくともいずれかの機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、出力部406は、少なくともいずれかの機能部の処理結果を利用者に通知可能にし、情報処理装置100の利便性の向上を図ることができる。
【0095】
出力部406は、例えば、第1行列データの第1列の複数のデータを列方向に一括して初期化することを要求する第1初期化要求に応じて、第1列の複数のデータを列方向に一括して初期化することに成功したことを示す第1応答を出力する。出力部406は、具体的には、第1応答を、利用者が参照可能に出力する。これにより、出力部406は、第1列の複数のデータを列方向に一括して初期化することに成功したことを、利用者が把握可能にすることができる。
【0096】
出力部406は、例えば、第1行列データの第1行の複数のデータを行方向に一括して初期化することを要求する第2初期化要求に応じて、第1行の複数のデータを行方向に一括して初期化することに成功したことを示す第2応答を出力する。出力部406は、具体的には、第2応答を、利用者が参照可能に出力する。これにより、出力部406は、第1行の複数のデータを行方向に一括して初期化することに成功したことを、利用者が把握可能にすることができる。
【0097】
出力部406は、例えば、第1行列データ全体を初期化することを要求する全体初期化要求に応じて、第1行列データ全体を初期化することに成功したことを示す第3応答を出力する。出力部406は、具体的には、第3応答を、利用者が参照可能に出力する。これにより、出力部406は、第1行列データ全体を初期化することに成功したことを、利用者が把握可能にすることができる。
【0098】
出力部406は、例えば、第1行列データのうち、第1列と第1行との交点のデータに指定の値を書き込むことを要求する書き込み要求に応じて、第1列と第1行との交点のデータに指定の値を書き込むことに成功したことを示す第4応答を出力する。出力部406は、具体的には、第4応答を、利用者が参照可能に出力する。これにより、出力部406は、第1列と第1行との交点のデータに指定の値を書き込むことに成功したことを、利用者が把握可能にすることができる。
【0099】
出力部406は、例えば、第1行列データのうち、第1列と第1行との交点のデータを読み出すことを要求する読み出し要求に応じて、読み出した第1列と第1行との交点のデータを出力する。出力部406は、具体的には、第1列と第1行との交点のデータを、利用者が参照可能に出力する。これにより、出力部406は、第1列と第1行との交点のデータを利用可能にすることができる。
【0100】
(情報処理装置100の動作例)
次に、
図5~
図19を用いて、情報処理装置100の動作例について説明する。具体的には、まず、
図5を用いて、情報処理装置100の記憶内容の一例について説明する。
【0101】
図5は、情報処理装置100の記憶内容の一例を示す説明図である。
図5において、情報処理装置100は、複数の配列を表すペイロード行列データ510を記憶する。ペイロード行列データ510の各行は、異なる配列を表す。ペイロード行列データ510は、M行N列の行列状の要素群を含む。ペイロード行列データ510は、例えば、要素として、配列の成分のデータを保持する。ペイロード行列データ510の各行は、例えば、所定数の要素を含むブロック単位に区分けされる。ブロックは、例えば、所定数の成分のデータに対応付けられ、所定数の要素として、所定数の成分のデータを保持可能である。
【0102】
ペイロード行列データ510は、例えば、行方向に対して、
図6および
図7を用いて後述するInitializable Multiple Arraysと呼ばれるデータ構造として扱われる。従って、ペイロード行列データ510の各行は、行方向に一括して初期化可能である。また、ペイロード行列データ510の各行を、行方向に一括して初期化する際にかかる処理負担および処理時間は、O(1)の大きさになると考えられる。ペイロード行列データ510は、例えば、上述した第1行列データに対応する。
【0103】
情報処理装置100は、列ビットマップ行列データ520を記憶する。列ビットマップ行列データ520は、M行N列の行列状の要素群を含む。要素は、1ビット値である。列ビットマップ行列データ520は、例えば、要素として、ペイロード行列データ510のいずれかの要素が、列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する。列ビットマップ行列データ520の各列は、例えば、所定数の要素を含むブロック単位に区分けされる。ブロックは、例えば、所定数のフラグに対応付けられ、所定数の要素として、所定数のフラグを保持可能である。
【0104】
列ビットマップ行列データ520は、例えば、列方向に対して、
図6および
図7を用いて後述するInitializable Multiple Arraysと呼ばれるデータ構造として扱われる。従って、ペイロード行列データ510の各列は、列方向に一括して初期化可能である。また、行列データの各列を、列方向に一括して初期化する際にかかる処理負担および処理時間は、O(1)の大きさになると考えられる。列ビットマップ行列データ520は、例えば、上述した第2行列データに対応する。
【0105】
情報処理装置100は、列初期値行列データ530を記憶する。列初期値行列データ530は、例えば、1行N列の要素群を含む。列初期値行列データ530は、例えば、ペイロード行列データ510の各列に対応付けて、要素として、当該列の各データを一括して初期化する場合において当該列の各データの初期値と見做される列初期値を保持する。
【0106】
列初期値行列データ530は、例えば、Initializable Arrayと呼ばれるデータ構造として扱われる。従って、列初期値行列データ530は、一括して初期化可能である。また、列初期値行列データ530を、一括して初期化する際にかかる処理負担および処理時間は、O(1)の大きさになると考えられる。列初期値行列データ530は、例えば、上述した第3行列データに対応する。
【0107】
情報処理装置100は、順序管理行列データ540を記憶する。順序管理行列データ540は、例えば、少なくとも、1行N+M列の要素群を含む。1列~M列の要素群542は、例えば、それぞれ、ペイロード行列データ510の1行~M行に対応する。M+1列~M+N列の要素群541は、例えば、それぞれ、ペイロード行列データ510の1列~N列に対応する。
【0108】
順序管理行列データ540は、要素として、ペイロード行列データ510の各行および各列の初期化順序を示す値を保持する。順序管理行列データ540は、例えば、ペイロード行列データ510の各行に対応付けて、ペイロード行列データ510の各行および各列のうち、当該行を一括して初期化した初期化順序を示す値を保持する。順序管理行列データ540は、例えば、ペイロード行列データ510の各列に対応付けて、ペイロード行列データ510の各行および各列のうち、当該列を一括して初期化した初期化順序を示す値を保持する。
【0109】
順序管理行列データ540は、例えば、
図8~
図12を用いて後述するComparable Ordered List on Initializable Arrayと呼ばれるデータ構造として扱われる。順序管理行列データ540は、例えば、上述した第4行列データに対応する。
【0110】
次に、
図6および
図7を用いて、情報処理装置100が記憶するペイロード行列データ510のデータ構造の一例について説明する。
【0111】
図6および
図7は、ペイロード行列データ510のデータ構造の一例を示す説明図である。
図6に示すように、情報処理装置100は、ペイロード行列データ510の各行を、ブロック列600として扱う。ブロック列600は、例えば、それぞれ配列の所定数の成分に対応付けられた複数のブロック610を連結して形成される。ブロック列600は、配列を表現する。ブロック列600は、具体的には、OSIAと呼ばれるデータ構造である。
【0112】
ブロック列600は、例えば、前後2つの範囲に分割される。ブロック列600を分割する位置は、例えば、スタックポインタ620によって示される。ブロック列600を分割する位置は、例えば、可変である。以下の説明では、ブロック列600を分割した2つの範囲のうち、前半の範囲を「M(Mild)領域」と表記する場合がある。以下の説明では、ブロック列600を分割した2つの範囲のうち、後半の範囲を「W(Wild)領域」と表記する場合がある。
【0113】
ブロック610は、所定数の領域を含む。領域は、例えば、成分の値を、ペイロード行列データ510の要素として格納可能である。領域は、例えば、いずれかのブロック610へのポインタを格納可能であってもよい。ブロック610は、例えば、バリュー状態と、オプション状態とのいずれかの状態を取る。ブロック610は、具体的には、当該ブロック610に対応付けられた所定数の成分の値がすべて未設定であれば、オプション状態である。例えば、オプション状態のブロック610に対応付けられた所定数の成分の値は、設定された行初期値として扱われる。例えば、オプション状態のブロック610に対応付けられた所定数の成分の値は、設定された列初期値として扱われることもある。ブロック610は、具体的には、当該ブロック610に対応付けられた少なくともいずれかの成分の値が設定されれば、バリュー状態である。
【0114】
ブロック列600に、配列の全成分が、要素として格納済みであり、オプション状態のブロックが存在しない場合、当該ブロック列600の状態を「フル状態(full)」と表記する場合がある。また、以下の説明では、値が未設定の配列の成分が存在し、ブロック列600に、オプション状態のブロックが存在する場合、当該ブロック列600の状態を「ノットフル状態(notfull)」と表記する場合がある。
【0115】
M領域のバリュー状態のブロック611は、例えば、当該ブロック611に対応付けられた少なくともいずれかの成分の値vを、そのまま格納する。M領域のバリュー状態のブロック611は、例えば、当該ブロック611に対応付けられた所定数の成分のうち、値が未設定の成分の値に関しては、設定された行初期値または列初期値を格納していてもよい。
図5の例では、M領域のバリュー状態のブロック611は、具体的には、当該ブロック611に対応付けられた所定数の成分のそれぞれの成分の値を、当該ブロック611の所定数の領域のそれぞれの領域に格納する。
【0116】
M領域のオプション状態のブロック612は、例えば、W領域のバリュー状態のブロック613に対応付けられた所定数の成分のうち、先頭から所定数-1個の成分の値を分配する分配先となる。M領域のオプション状態のブロック612は、例えば、当該ブロック612の所定数の領域のうち先頭の領域に、所定数-1個の成分の値を分配する分配元となるW領域のバリュー状態のブロック613へのポインタを格納する。M領域のオプション状態のブロック612は、例えば、上述した所定数-1個の成分のそれぞれの成分の値を、当該ブロック612の所定数の領域のうち先頭の領域以外の残余の領域に格納する。
【0117】
W領域のバリュー状態のブロック613は、例えば、当該ブロック613に対応付けられた所定数の成分のうち、先頭から所定数-1個の成分の値を、M領域のオプション状態のブロック612へと分配する分配元となる。W領域のバリュー状態のブロック613は、例えば、当該ブロック613の所定数の領域のうち先頭の領域に、所定数-1個の成分の値を分配する分配先となるM領域のオプション状態のブロック612へのポインタを格納する。W領域のバリュー状態のブロック613は、例えば、当該ブロック613に対応付けられた所定数の成分のうち、末尾の成分の値を、当該ブロック613の所定数の領域のうち先頭から2番目の領域に格納する。
【0118】
W領域のオプション状態のブロック614は、例えば、成分の値が格納されない。W領域のオプション状態のブロック614は、具体的には、いずれのブロック610へのポインタともならない任意の値を、当該ブロック614の所定数の領域のうち先頭の領域に格納する。W領域のオプション状態のブロック614は、具体的には、任意の値を、当該ブロック614の所定数の領域のうち先頭の領域以外の残余の領域に格納する。
【0119】
配列の成分の値が設定される都度、ブロック列600が更新される。例えば、配列の成分の値が設定されたことに応じて、ブロック列600に関するスタックポインタ620が示す位置が更新され、M領域と、W領域とが更新されることがある。例えば、配列の成分の値が設定されたことに応じて、ブロック610の状態が、バリュー状態、または、オプション状態に更新されることがある。
【0120】
配列のすべての成分の値が設定される直前までは、ブロック列600のうち末尾のブロック610は、W領域のバリュー状態、または、W領域のオプション状態のいずれかの状態になる。このため、配列のすべての成分の値が設定される直前までは、ブロック列600のうち末尾のブロック610の所定数の領域のうち、先頭から2個の領域を除いた、所定数-2個の領域は、成分の値を格納されない領域になる。配列のすべての成分の値が設定される直前までは、ブロック列600のうち末尾のブロック610の所定数の領域のうち、先頭から2個の領域は、他のブロック610へのポインタ、および、1つの成分の値を格納され得る。
【0121】
ブロック列600に関するスタックポインタ620は、例えば、配列のすべての成分の値が設定される直前までは、ブロック列600のうち末尾のブロック610の所定数の領域のうち、先頭から2個の領域を除いた所定数-2個の領域を用いて格納される。オプション状態のブロック610に対応付けられた所定数の成分の値に対する行初期値は、例えば、配列のすべての成分の値が設定される直前までは、末尾のブロック610の所定数の領域のうち、上述した所定数-2個の領域を用いて格納される。
【0122】
情報処理装置100は、それぞれのブロック列600の末尾のブロック610に存在する、成分の値を格納されない所定数-2個の領域を、第1領域711と、第2領域721とに区分する。第1領域711は、例えば、末尾のブロック610の所定数の領域のうち、ブロック列600に関するスタックポインタ620を格納する領域を含まない。第1領域711は、例えば、末尾のブロック610の所定数の領域のうち、オプション状態のブロック610に対応付けられた所定数の成分の値に対する行初期値を格納する領域を含まない。第1領域711は、例えば、少なくとも2個の領域を含む。第2領域721は、例えば、少なくとも2個の領域を含む。
【0123】
情報処理装置100は、それぞれのブロック列600の末尾のブロック610に存在する第1領域711を、第1領域711を連結した第1領域列710として管理する。第1領域711に含まれる各領域は、例えば、成分の値を格納可能である。第1領域711に含まれるいずれかの領域は、例えば、当該第1領域711とは異なる他の第1領域711へのポインタを格納可能であってもよい。情報処理装置100は、具体的には、第1領域列710を、OSIAと呼ばれるデータ構造として管理する。
【0124】
第1領域列710は、ブロック列600と同様に、例えば、前後2つの範囲に分割される。第1領域列710を分割する位置は、例えば、スタックポインタによって示される。第1領域列710を分割する位置は、例えば、可変である。以下の説明では、ブロック列600と同様に、第1領域列710を分割した2つの範囲のうち、前半の範囲を「M(Mild)領域」と表記する場合がある。以下の説明では、ブロック列600と同様に、第1領域列710を分割した2つの範囲のうち、後半の範囲を「W(Wild)領域」と表記する場合がある。
【0125】
第1領域711は、例えば、バリュー状態と、オプション状態とのいずれかの状態を取る。第1領域711は、具体的には、当該第1領域711に対応付けられた成分の値がいずれも格納されていなければ、オプション状態になる。換言すれば、第1領域711は、当該第1領域711を含むブロック列600が、ノットフル状態である場合に、オプション状態になる。例えば、オプション状態の第1領域711に対応付けられた所定数の成分の値は、第1領域711に対して設定された初期値として扱われてもよい。
【0126】
第1領域711は、具体的には、当該第1領域711に対応付けられた少なくともいずれかの成分の値が格納されていれば、バリュー状態になる。換言すれば、第1領域711は、当該第1領域711を含むブロック列600が、フル状態である場合に、バリュー状態になる。このように、第1領域711の状態は、当該第1領域711を含むブロック列600が、フル状態であるか、または、ノットフル状態であるかを示す情報として利用可能である。
【0127】
M領域のバリュー状態の第1領域711は、例えば、当該第1領域711に対応付けられた少なくともいずれかの成分の値を、そのまま格納する。M領域のバリュー状態の第1領域711は、例えば、当該第1領域711に対応付けられた成分のうち、値が未設定の成分の値に関しては、第1領域711に対して設定された初期値を格納していてもよい。
【0128】
M領域のオプション状態の第1領域711は、例えば、W領域のバリュー状態の第1領域711に対応付けられた成分の値を分配する分配先となる。M領域のオプション状態の第1領域711は、例えば、当該第1領域711のうち先頭の領域に、成分の値を分配する分配元となるW領域のバリュー状態の第1領域711へのポインタを格納する。M領域のオプション状態の第1領域711は、例えば、上述した成分の値を、当該第1領域711のうち先頭の領域以外の残余の領域に格納する。
【0129】
W領域のバリュー状態の第1領域711は、例えば、当該第1領域711に対応付けられた成分の値を、M領域のオプション状態の第1領域711へと分配する分配元となる。W領域のバリュー状態の第1領域711は、例えば、当該第1領域711のうち先頭の領域に、成分の値を分配する分配先となるM領域のオプション状態の第1領域711へのポインタを格納する。W領域のバリュー状態の第1領域711は、例えば、当該第1領域711に対応付けられた成分のうち、末尾の成分の値を、当該第1領域711のうち先頭から2番目の領域に格納する。
【0130】
W領域のオプション状態の第1領域711は、例えば、成分の値が格納されない。W領域のオプション状態の第1領域711は、具体的には、いずれの第1領域711へのポインタともならない任意の値を、当該第1領域711のうち先頭の領域に格納する。W領域のオプション状態の第1領域711は、具体的には、任意の値を、当該第1領域711のうち先頭の領域以外の残余の領域に格納する。
【0131】
いずれかのブロック列600の末尾のブロック610に対応付けられた成分の値が設定される都度、第1領域列710が更新される。例えば、成分の値が設定されたことに応じて、第1領域列710に関するスタックポインタが示す位置が更新され、M領域と、W領域とが更新されることがある。例えば、成分の値が設定されたことに応じて、第1領域711の状態が、バリュー状態、または、オプション状態に更新されることがある。
【0132】
第1領域列710に対応付けられたすべての成分の値が設定される直前までは、第1領域列710のうち末尾に存在する第1領域711は、W領域のバリュー状態、または、W領域のオプション状態のいずれかの状態になる。このため、第1領域列710に対応付けられたすべての成分の値が設定される直前までは、第1領域列710のうち末尾に存在する第1領域711のうち、先頭から2個の領域を除いた残余の領域は、成分の値を設定されない領域になる。
【0133】
第1領域列710に関するスタックポインタは、例えば、第1領域列710に対応付けられたすべての成分の値が設定される直前までは、第1領域列710のうち末尾に存在する第1領域711のうち、上述した残余の領域に格納される。オプション状態の第1領域711に対応付けられた成分の値に対する初期値は、例えば、第1領域列710に対応付けられたすべての成分の値が設定される直前までは、第1領域列710のうち、上述した残余の領域に格納されていてもよい。
【0134】
ここで、それぞれのブロック列600が示す配列のすべての成分の値が設定された場合には、複数のブロック列600において、成分の値を設定されない領域は、存在しなくなる。換言すれば、それぞれのブロック列600が示す配列のすべての成分の値が設定された場合には、第1領域列710において、オプション状態の第1領域711は、存在しなくなる。このため、第1領域列710のうち末尾に存在する第1領域711は、成分の値を格納されない領域を有さなくなる。従って、それぞれのブロック列600が示す配列のすべての成分の値が設定された場合には、第1領域列710のうち末尾に存在する第1領域711に、第1領域列710に関するスタックポインタを格納することができなくなる。この場合、W領域は、存在しなくなる。
【0135】
そこで、情報処理装置100は、第1領域列710がオプション状態の第1領域711を含まなくなり、当該第1領域列710がフル状態になったか否かを示すフラグ情報630を記憶する。フラグ情報630は、例えば、値が1であれば、オプション状態の第1領域711が存在せず、第1領域列710が、フル状態であることを示す。フラグ情報630は、例えば、値が0であれば、オプション状態の第1領域711が存在し、第1領域列710が、ノットフル状態であることを示す。
【0136】
これにより、情報処理装置100は、第1領域711の状態に応じて、当該第1領域711を含むブロック列600が、フル状態であるか否かを管理することができる。また、情報処理装置100は、フラグ情報630に基づいて、第1領域列710が、フル状態であるか否かを管理することができる。従って、情報処理装置100は、ペイロード行列データ510を記憶する際にかかるデータ量の低減化を図ることができる。
【0137】
一方で、情報処理装置100は、それぞれのブロック列600の末尾のブロック610に存在する第2領域721を、第2領域721を連結した第2領域列720として管理する。情報処理装置100は、具体的には、第2領域列720を、OSIAと呼ばれるデータ構造として管理する。
【0138】
第2領域721は、例えば、末尾のブロック610の所定数の領域のうち、スタックポインタ620を格納する領域を含む。第2領域721は、例えば、末尾のブロック610の所定数の領域のうち、オプション状態のブロック610に対応付けられた所定数の成分の値に対する行初期値を格納する領域を含む。
【0139】
以下の説明では、第2領域721は、具体的には、4個の領域であるとする。領域は、例えば、ブロック列600に関するスタックポインタ620を格納可能である。領域は、例えば、オプション状態のブロック610に対応付けられた所定数の成分の値に対する行初期値を格納可能である。領域は、例えば、成分の値を格納可能である。
【0140】
第2領域列720は、ブロック列600と同様に、例えば、前後2つの範囲に分割される。第2領域列720を分割する位置は、例えば、スタックポインタによって示される。第2領域列720を分割する位置は、例えば、可変である。以下の説明では、ブロック列600と同様に、第2領域列720を分割した2つの範囲のうち、前半の範囲を「M(Mild)領域」と表記する場合がある。以下の説明では、ブロック列600と同様に、第2領域列720を分割した2つの範囲のうち、後半の範囲を「W(Wild)領域」と表記する場合がある。
【0141】
第2領域721は、例えば、バリュー状態と、オプション状態とのいずれかの状態を取る。第2領域721は、具体的には、当該第2領域721に対応付けられた成分の値が格納されておらず、かつ、スタックポインタ620と、行初期値とのペアが格納されていなければ、オプション状態になる。第2領域721は、例えば、当該第2領域721を含むブロック列600が、初期状態である場合に、オプション状態になる。第2領域721が、オプション状態である場合、当該第2領域721を含むブロック列600に関するスタックポインタと、行初期値とのペアは、第2領域列720に対して設定された初期ペアとして扱われる。
【0142】
第2領域721は、具体的には、当該第2領域721に対応付けられた成分の値が格納されていれば、バリュー状態になる。換言すれば、第2領域721は、当該第2領域721を含むブロック列600が、フル状態である場合に、バリュー状態になる。ブロック列600が、フル状態である場合、当該ブロック列の第1領域711は、バリュー状態である。従って、第2領域721を含むブロック列600の第1領域711が、バリュー状態である場合に、当該第2領域721も、バリュー状態であれば、当該第2領域721は、当該第2領域721に対応付けられた成分の値を格納していると扱われる。
【0143】
一方で、第2領域721は、具体的には、スタックポインタ620と、行初期値とのペアが格納されていても、バリュー状態になる。換言すれば、第2領域721は、当該第2領域721を含むブロック列600が、ノットフル状態である場合に、バリュー状態になる。ブロック列600が、ノットフル状態である場合、当該ブロック列の第1領域711は、オプション状態である。従って、第2領域721を含むブロック列600の第1領域711が、オプション状態である場合に、当該第2領域721が、バリュー状態であれば、当該第2領域721は、スタックポインタ620と、行初期値とのペアを格納していると扱われる。
【0144】
このように、第1領域711の状態と、第2領域721の状態との組み合わせは、当該第2領域721が、空であるか、成分の値を格納しているか、または、スタックポインタ620と、行初期値とのペアを格納しているかを示すことになる。
【0145】
M領域のバリュー状態の第2領域721は、例えば、当該第2領域721に対応付けられた少なくともいずれかの成分の値vを、そのまま格納する場合がある。この場合、M領域のバリュー状態の第2領域721は、例えば、当該第2領域721に対応付けられた成分のうち、値が未設定の成分の値に関しては、第2領域列720に対して設定された初期値を格納していてもよい。また、M領域のバリュー状態の第2領域721は、例えば、スタックポインタ620と、行初期値とのペアを格納する場合もある。
【0146】
M領域のオプション状態の第2領域721は、例えば、W領域のバリュー状態の第2領域721に対応付けられた成分の値を分配する分配先となる場合がある。この場合、M領域のオプション状態の第2領域721は、例えば、当該第2領域721のうち先頭の領域に、分配元となるW領域のバリュー状態の第2領域721へのポインタを格納する。この場合、M領域のオプション状態の第2領域721は、例えば、上述した成分の値を、当該第2領域721のうち先頭の領域以外の残余の領域に格納する。
【0147】
また、M領域のオプション状態の第2領域721は、例えば、W領域のバリュー状態の第2領域721を含むブロック列600に関するスタックポインタ620と、行初期値とのペアを分配する分配先となる場合もある。この場合、M領域のオプション状態の第2領域721は、例えば、当該第2領域721のうち先頭の領域に、分配元となるW領域のバリュー状態の第2領域721へのポインタを格納する。この場合、M領域のオプション状態の第2領域721は、例えば、上述したスタックポインタ620と、行初期値とのペアを、当該第2領域721のうち先頭の領域以外の残余の領域に格納する。
【0148】
W領域のバリュー状態の第2領域721は、例えば、当該第2領域721に対応付けられた成分の値を、M領域のオプション状態の第2領域721へと分配する分配元となる場合がある。この場合、W領域のバリュー状態の第2領域721は、例えば、当該第2領域721のうち先頭の領域に、成分の値を分配する分配先となるM領域のオプション状態の第2領域721へのポインタを格納する。この場合、W領域のバリュー状態の第2領域721は、例えば、当該第2領域721に対応付けられた成分のうち、末尾の成分の値を、当該第2領域721のうち先頭から2番目の領域に格納する。
【0149】
W領域のバリュー状態の第2領域721は、例えば、当該第2領域721を含むブロック列600に関するスタックポインタ620と、行初期値とのペアを、M領域のオプション状態の第2領域721へと分配する分配元となる場合がある。この場合、W領域のバリュー状態の第2領域721は、例えば、当該第2領域721のうち先頭の領域に、分配先となるM領域のオプション状態の第2領域721へのポインタを格納する。この場合、W領域のバリュー状態の第2領域721は、例えば、当該第2領域721のうち先頭の領域以外の残余の領域を、空にしていてもよい。
【0150】
W領域のオプション状態の第2領域721は、例えば、成分の値が格納されない。W領域のオプション状態の第2領域721は、例えば、当該第2領域721を含むブロック列600に関するスタックポインタ620と、行初期値とのペアが格納されない。W領域のオプション状態の第2領域721は、具体的には、いずれの第2領域721へのポインタともならない任意の値を、当該第2領域721のうち先頭の領域に格納する。W領域のオプション状態の第2領域721は、具体的には、任意の値を、当該第2領域721のうち先頭の領域以外の残余の領域に格納する。
【0151】
いずれかのブロック列600の末尾のブロック610に対応付けられた成分の値が設定される都度、第2領域列720が更新される。例えば、成分の値が設定されたことに応じて、第2領域列720に関するスタックポインタが示す位置が更新され、M領域と、W領域とが更新されることがある。例えば、成分の値が設定されたことに応じて、第2領域721の状態が、バリュー状態、または、オプション状態に更新されることがある。
【0152】
いずれかのブロック列600に関するスタックポインタ620と、行初期値とのペアが設定または更新される都度、第2領域列720が更新される。例えば、スタックポインタ620と、行初期値とのペアが設定されたことに応じて、第2領域列720に関するスタックポインタが示す位置が更新され、M領域と、W領域とが更新されることがある。例えば、スタックポインタ620と、行初期値とのペアが設定されたことに応じて、第2領域721の状態が、バリュー状態、または、オプション状態に更新されることがある。
【0153】
すべての第2領域721が、M領域のバリュー状態になる直前までは、第2領域列720のうち末尾に存在する第2領域721は、W領域のバリュー状態、または、W領域のオプション状態のいずれかの状態になる。このため、すべての第2領域721が、M領域のバリュー状態になる直前までは、第2領域列720のうち末尾に存在する第2領域721のうち、先頭から2個の領域を除いた残余の領域は、空き領域になる。
【0154】
第2領域列720に関するスタックポインタは、例えば、すべての第2領域721が、M領域のバリュー状態になる直前までは、第2領域列720のうち末尾に存在する第2領域721のうち、上述した残余の領域に格納される。ブロック列600に関するスタックポインタ620と、行初期値とのペアに対する初期ペアは、例えば、すべての第2領域721が、M領域のバリュー状態になる直前までは、末尾に存在する第2領域721のうち、上述した残余の領域に格納される。
【0155】
これにより、情報処理装置100は、ブロック列600の第2領域721が、バリュー状態である場合には、当該ブロック列600の第1領域711の状態に応じて、当該第2領域721が、何の情報を格納しているかを管理することができる。情報処理装置100は、例えば、第2領域721が、バリュー状態である場合に、第1領域711が、オプション状態であれば、当該第2領域721が、スタックポインタ620と、行初期値とのペアを格納していると判定することができる。一方で、情報処理装置100は、例えば、第2領域721が、バリュー状態である場合に、第1領域711が、バリュー状態であれば、当該第2領域721が、成分の値を格納していると判定することができる。
【0156】
情報処理装置100は、例えば、オプション状態のいずれかの第2領域721が、実際には符号741の内容であれば、当該いずれかの第2領域721が、符号742の内容を示すと認識する。情報処理装置100は、具体的には、いずれかの第2領域721が、オプション状態であれば、当該いずれかの第2領域721は、末尾に存在する第2領域721に格納済みの初期ペアを示すと認識する。初期ペアは、ブロック列600の先頭を示すスタックポインタ=0と、当該ブロック列600のオプション状態のブロック610に対応付けられた所定数の成分の値に対する行初期値iv0との組み合わせである。
【0157】
例えば、第1領域711が、オプション状態であるため、当該第1領域711を含むブロック列600が、ノットフル状態であり、当該ブロック列600のいずれかの第2領域721が、バリュー状態である場合が考えられる。ここでは、いずれかの第2領域721は、具体的には、末尾に存在する第2領域721であるとする。この場合、情報処理装置100は、例えば、いずれかの第2領域721が、実際には符号751の内容であれば、当該いずれかの第2領域721が、符号752の内容を示すと認識する。情報処理装置100は、具体的には、いずれかの第2領域721は、当該いずれかの第2領域721の最初の領域に格納済みのポインタpが示す他の第2領域721に格納済みである、スタックポインタspと、行初期値ivとの組み合わせを示すと認識する。
【0158】
例えば、第1領域711が、バリュー状態であるため、当該第1領域711を含むブロック列600が、フル状態であり、当該ブロック列600のいずれかの第2領域721が、バリュー状態である場合が考えられる。この場合、情報処理装置100は、例えば、いずれかの第2領域721が、実際には符号761の内容であれば、当該いずれかの第2領域721が、符号762の内容を示すと認識する。符号762の内容は、符号761の内容と同一である。情報処理装置100は、例えば、いずれかの第2領域721が、符号761の内容そのものであると認識する。
【0159】
また、情報処理装置100は、第2領域列720を初期化することにより、それぞれのブロック列600に関するスタックポインタ620と、行初期値とのペアを、一括して、初期ペアに更新することができる。情報処理装置100は、例えば、第2領域列720の末尾に存在する第2領域721において、第2領域列720に関するスタックポインタと、初期ペアとを初期化することにより、第2領域列720を初期化することができる。このため、情報処理装置100は、ペイロード行列データ510の全体を初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0160】
次に、情報処理装置100が記憶する列ビットマップ行列データ520のデータ構造の一例について説明する。列ビットマップ行列データ520のデータ構造は、例えば、
図6および
図7に示したInitializable Multiple Arraysと呼ばれるデータ構造における行方向と列方向とを入れ替えたデータ構造である。
【0161】
これにより、情報処理装置100は、列ビットマップ行列データ520の各列の複数のデータを、列方向に一括して初期化し易くすることができる。情報処理装置100は、例えば、列ビットマップ行列データ520の列の複数のデータを、列方向に一括して初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。情報処理装置100は、列ビットマップ行列データ520全体を、一括して初期化し易くすることができる。情報処理装置100は、具体的には、列ビットマップ行列データ520全体を初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0162】
次に、情報処理装置100が記憶する列初期値行列データ530のデータ構造の一例について説明する。列初期値行列データ530は、例えば、Initializable Arrayと呼ばれるデータ構造である。列初期値行列データ530は、具体的には、Initializable Arrayと呼ばれるデータ構造の一種である、
図6に示したOSIAと呼ばれるデータ構造である。
【0163】
これにより、情報処理装置100は、列初期値行列データ530の複数のデータを、一括して初期化し易くすることができる。情報処理装置100は、例えば、列初期値行列データ530の複数のデータを、一括して初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0164】
次に、
図8~
図12を用いて、情報処理装置100が記憶する順序管理行列データ540のデータ構造の一例について説明する。
【0165】
図8~
図12は、順序管理行列データ540のデータ構造の一例を示す説明図である。
図8において、情報処理装置100は、順序管理行列データ540を記憶する。順序管理行列データ540は、例えば、
図3に示した情報処理装置100のメモリ302や記録媒体305などの記憶領域により実現される。
【0166】
順序管理行列データ540は、配列と、前方ポインタと、後方ポインタと、整数値とのフィールドを有する。順序管理行列データ540は、ペイロード行列データ510の行または列ごとに各フィールドに情報を設定することにより、M+N個の順序管理情報がそれぞれレコードとして記憶される。
【0167】
配列のフィールドには、ペイロード行列データ510の行または列を特定可能にするidが設定される。例えば、idは、値が1~Mであれば、ペイロード行列の1行~M行を示す。例えば、idは、値がM+1~M+Nであれば、ペイロード行列の1列~N列を示す。
【0168】
前方ポインタのフィールドには、上記idの1つ前方に存在する他のidのインデックスが設定される。後方ポインタのフィールドには、上記idの1つ後方に存在する他のidのインデックスが設定される。
【0169】
整数値のフィールドには、上記idに対応付けられたカウンタとなる整数値が設定される。整数値は、上記idが示すペイロード行列の行または列の初期化順序を管理するための情報である。整数値は、(logN+3)の桁数の値である。
【0170】
整数値に対して、例えば、上位レンジと、中間レンジ1と、中間レンジ2と、下位レンジとが設定される。上位レンジは、例えば、初期状態では、「1111…1」~「1100…0」の第1の範囲が設定される。中間レンジ1は、例えば、初期状態では、「1011…1」~「1000…0」の第2の範囲が設定される。上位レンジと、中間レンジ1とに設定する範囲が入れ替えられ、上位レンジに、例えば、「1011…1」~「1000…0」の第2の範囲が設定される場合がある。
【0171】
中間レンジ2は、例えば、初期状態では、「0111…1」~「0100…0」の第3の範囲が設定される。下位レンジは、例えば、初期状態では、「0011…1」~「0000…0」の第4の範囲が設定される。中間レンジ2と、下位レンジとに設定する範囲が入れ替えられ、下位レンジに、例えば、「0011…1」~「0000…0」の第4の範囲が設定される場合がある。
【0172】
上位レンジに属する整数値に対応するidの初期化順序は、中間レンジ1に属する整数値に対応するidの初期化順序より前の初期化順序であると扱われる。中間レンジ1に属する整数値に対応するidの初期化順序は、中間レンジ2に属する整数値に対応するidの初期化順序より前の初期化順序であると扱われる。中間レンジ2に属する整数値に対応するidの初期化順序は、下位レンジに属する整数値に対応するidの初期化順序より前の初期化順序であると扱われる。
【0173】
上位レンジに属する第1の整数値に対応するidの初期化順序は、同一の上位レンジに属する、第1の整数値よりも小さい第2の整数値に対応するidの初期化順序より前の初期化順序であると扱われる。中間レンジ1に属する第1の整数値に対応するidの初期化順序は、同一の中間レンジ1に属する、第1の整数値よりも小さい第2の整数値に対応するidの初期化順序より前の初期化順序であると扱われる。
【0174】
中間レンジ2に属する第1の整数値に対応するidの初期化順序は、同一の中間レンジ2に属する、第1の整数値よりも小さい第2の整数値に対応するidの初期化順序より前の初期化順序であると扱われる。下位レンジに属する第1の整数値に対応するidの初期化順序は、同一の下位レンジに属する、第1の整数値よりも小さい第2の整数値に対応するidの初期化順序より前の初期化順序であると扱われる。
【0175】
情報処理装置100は、レンジポインタ800を記憶する。レンジポインタは、puhと、putと、plhと、pltとである。puhは、上位レンジに属する整数値に対応するidのうち、先頭のidを識別可能にするポインタである。puhは、上位レンジに属する整数値に対応するidのうち、先頭のidに対応する整数値を示す。putは、上位レンジに属する整数値に対応するidのうち、末尾のidを識別可能にするポインタである。putは、上位レンジに属する整数値に対応するidのうち、末尾のidに対応する整数値を示す。
【0176】
plhは、下位レンジに属する整数値に対応するidのうち、先頭のidを識別可能にするポインタである。plhは、下位レンジに属する整数値に対応するidのうち、先頭のidに対応する整数値を示す。pltは、下位レンジに属する整数値に対応するidのうち、末尾のidを識別可能にするポインタである。pltは、下位レンジに属する整数値に対応するidのうち、末尾のidに対応する整数値を示す。
【0177】
情報処理装置100は、フラグ情報fを記憶する。フラグ情報fは、上位レンジと、中間レンジ1とに、いずれの範囲を設定するのか、中間レンジ2と、下位レンジとに、いずれの範囲を設定するのかを管理する情報である。
【0178】
例えば、
図8に示した順序管理行列データ540のデータ構造は、具体的には、Comparable Ordered List on Initializable Arrayと呼ばれるデータ構造である。次に、
図9を用いて、フラグ情報と、各種レンジとの関係性の一例について説明する。各種レンジは、例えば、上位レンジと、中間レンジ1と、中間レンジ2と、下位レンジとである。
【0179】
図9の符号910に示すように、フラグ情報fは、具体的には、値が0であれば、上位レンジに、第1の範囲を設定し、中間レンジ1に、第2の範囲を設定し、中間レンジ2に、第3の範囲を設定し、下位レンジに、第4の範囲を設定することを示す。
【0180】
図9の符号920に示すように、フラグ情報fは、具体的には、値が1であれば、上位レンジに、第2の範囲を設定し、中間レンジ1に、第1の範囲を設定し、中間レンジ2に、第4の範囲を設定し、下位レンジに、第3の範囲を設定することを示す。
【0181】
このように、情報処理装置100は、フラグ情報によって、第1の範囲と、第2の範囲と、第3の範囲と、第4の範囲との順序を切り替えることができる。次に、
図10~
図12を用いて、情報処理装置100が、idの初期化順序を管理する一例について説明する。
【0182】
図10において、情報処理装置100は、符号1000に示すように、全idに対応するカウンタとなる整数値を「000 00…00」に初期化する。
図7の符号1000は、初期化の際における、id間の接続関係、および、各idに対応する整数値を示す。
【0183】
情報処理装置100は、符号1000に示すように、フラグ情報f=0に設定する。これにより、情報処理装置100は、順序管理行列データ540を初期化することができ、id間の初期化順序の前後関係を管理開始することができる。
【0184】
情報処理装置100は、符号1010に示すように、全idのうち、先頭のidに対応する整数値を更新する。
図10の符号1010は、更新後における、id間の接続関係、および、各idに対応する整数値を示す。
【0185】
情報処理装置100は、例えば、表1011に従って、フラグ情報f=0であれば、先頭のidに対応する整数値に「101 00…00」を設定する。情報処理装置100は、例えば、表1011に従って、フラグ情報f=1であれば、先頭のidに対応する整数値に「111 00…00」を設定する。
図10の例では、情報処理装置100は、具体的には、先頭のidに対応する整数値に「101 00…00」を設定する。
【0186】
情報処理装置100は、符号1010に示すように、全idのうち、末尾のidに対応する整数値を更新する。情報処理装置100は、例えば、表1011に従って、フラグ情報f=0であれば、末尾のidに対応する整数値に「001 00…00」を設定する。情報処理装置100は、例えば、表1011に従って、フラグ情報f=1であれば、末尾のidに対応する整数値に「011 00…00」を設定する。
図10の例では、情報処理装置100は、具体的には、末尾のidに対応する整数値に「101 00…00」を設定する。
【0187】
情報処理装置100は、フラグ情報fを反転する。
図10の例では、情報処理装置100は、例えば、フラグ情報f=1に設定する。情報処理装置100は、puhとputとに、先頭のidに対応する整数値「101 00…00」を設定する。情報処理装置100は、plhとpltとに、末尾のidに対応する整数値「101 00…00」を設定する。
【0188】
これにより、情報処理装置100は、先頭のidを上位レンジに属させることができる。情報処理装置100は、上位レンジ内で、先頭のidに対応する整数値の前後それぞれに、N個のid分の未使用の整数値を確保することができる。このため、情報処理装置100は、先頭のid以外に、N個までの他のidについては、先頭のidの初期化順序より前の初期化順序であるidとして管理可能にすることができる。同様に、情報処理装置100は、先頭のid以外に、N個までの他のidについては、先頭のidの初期化順序より後の初期化順序であるidとして管理可能にすることができる。従って、情報処理装置100は、未使用の整数値を確保することができ、全idの初期化順序を適切に管理可能にすることができる。
【0189】
同様に、情報処理装置100は、末尾のidを下位レンジに属させることができる。情報処理装置100は、下位レンジ内で、末尾のidに対応する整数値の前後それぞれに、N個のid分の未使用の整数値を確保することができる。このため、情報処理装置100は、末尾のid以外に、N個までの他のidについては、末尾のidの初期化順序より前の初期化順序であるidとして管理可能にすることができる。同様に、情報処理装置100は、末尾のid以外に、N個までの他のidについては、末尾のidの初期化順序より後の初期化順序であるidとして管理可能にすることができる。従って、情報処理装置100は、未使用の整数値を確保することができ、全idの初期化順序を適切に管理可能にすることができる。
【0190】
ここでは、情報処理装置100が、先頭のidに対応する整数値を更新し、末尾のidに対応する整数値を更新した後、フラグ情報fを反転する場合について説明したが、これに限らない。例えば、情報処理装置100が、フラグ情報fを反転した後、先頭のidに対応する整数値を更新し、末尾のidに対応する整数値を更新する場合があってもよい。
【0191】
次に、
図11を用いて、情報処理装置100が、いずれかのidの初期化順序を先頭に移動することを要求する移動クエリを受け付けた際に実施する各種処理について説明する。移動クエリは、ペイロード行列データ510の行または列の複数のデータを一括して初期化した際に発行され、当該行または当該列のidの初期化順序を先頭に移動することを要求する。各種処理は、例えば、
図11を用いて後述する「ならし移動」の処理を含む。各種処理は、例えば、
図12を用いて後述する「順序移動」の処理を含む。
【0192】
図11において、情報処理装置100は、いずれかのidの初期化順序を先頭または末尾に移動することを要求する移動クエリを受け付けた際、ならし移動を実施する。ならし移動は、中間レンジ1または中間レンジ2に属するいずれかのidを、上位レンジに属するよう移動し、中間レンジ1または中間レンジ2に属するいずれかのidを、下位レンジに属するよう移動することである。
【0193】
図11の符号1100は、あるタイミングにおける、id間の接続関係、および、各idに対応する整数値を示す。情報処理装置100は、符号1100に示すように、中間レンジ1に属するidおよび中間レンジ2に属するidのうち、先頭のid1101を特定し、先頭のid1101に対応する整数値を特定する。また、情報処理装置100は、符号1100に示すように、中間レンジ1に属するidおよび中間レンジ2に属するidのうち、末尾のid1102を特定し、末尾のid1102に対応する整数値を特定する。
【0194】
情報処理装置100は、中間レンジ1に属するidおよび中間レンジ2に属するidのうち、特定した先頭のid1101を、上位レンジに属するよう移動する。情報処理装置100は、例えば、符号1110に示すように、中間レンジ1に属するidおよび中間レンジ2に属するidのうち、特定した先頭のid1101に対応する整数値に、puh-1を設定し、設定した当該整数値を、putに設定する。
図11の符号1110は、ならし移動の処理を実施した後における、id間の接続関係、および、各idに対応する整数値を示す。
【0195】
また、情報処理装置100は、中間レンジ1に属するidおよび中間レンジ2に属するidのうち、特定した末尾のid1102を、下位レンジに属するよう移動する。情報処理装置100は、例えば、符号1110に示すように、中間レンジ1に属するidおよび中間レンジ2に属するidのうち、特定した末尾のid1102に対応する整数値に、plt+1を設定し、設定した当該整数値を、plhに設定する。
【0196】
これにより、情報処理装置100は、移動クエリごとに、中間レンジ1に属するidおよび中間レンジ2に属するidが、少なくとも1つ減ることを保証することができる。情報処理装置100は、移動クエリの前後で、上位レンジに少なくとも1以上のidが存在すること、および、下位レンジに少なくとも1以上のidが存在することを保証することができる。このため、情報処理装置100は、処理エラーを防止することができる。次に、
図12の説明に移行する。
【0197】
図12において、情報処理装置100は、符号1200に示すように、id1201の初期化順序を先頭に移動することを要求する移動クエリを受け付け、ならし移動の処理を実施した後であるとする。
図12の符号1200は、あるタイミングにおける、id間の接続関係、および、各idに対応する整数値を示す。
【0198】
図12において、情報処理装置100は、符号1210に示すように、移動クエリを受け付けたid1201の整数値を、puh+1に設定し、設定した当該整数値を、puhに設定することにより、移動クエリに応じた順序移動の処理を実施する。
図12の符号1210は、順序移動の処理を実施した後における、id間の接続関係、および、各idに対応する整数値を示す。
【0199】
これにより、情報処理装置100は、id1201に対応する整数値を更新し、id1201の初期化順序を先頭に移動することができる。このように、情報処理装置100は、idの初期化順序を当該idに対応する整数値で表現することができる。
【0200】
情報処理装置100は、ならし移動の処理、または、順序移動の処理により、中間レンジ1に属するidおよび中間レンジ2に属するidが存在しなくなった場合、
図10と同様に、フラグ情報fを反転する。情報処理装置100は、具体的には、
図10と同様に、先頭のidに対応する整数値を更新し、末尾のidに対応する整数値を更新した後、フラグ情報fを反転する。
【0201】
これにより、情報処理装置100は、整数値として設定可能な値の範囲を使いまわすことができる。情報処理装置100は、再び、ならし移動の処理、および、順序移動の処理を実施可能にすることができる。このため、情報処理装置100は、整数値として設定可能な値が枯渇することを防止することができ、id間の初期化順序の前後関係を適切に管理し続けることができる。
【0202】
次に、
図13~
図17を用いて、情報処理装置100が、各種クエリに応じて、ペイロード行列データ510、列ビットマップ行列データ520、列初期値行列データ530、および、順序管理行列データ540を、どのように参照または更新するかを説明する。
【0203】
クエリは、例えば、ペイロード行列データ510全体を、一括して初期化することを要求する全体初期化要求である場合がある。情報処理装置100が、全体初期化要求に応じて、ペイロード行列データ510、列ビットマップ行列データ520、列初期値行列データ530、および、順序管理行列データ540を、どのように参照または更新するかについては、
図13を用いて後述する。
【0204】
クエリは、例えば、ペイロード行列データ510のいずれかの行の複数のデータを、行方向に一括して初期化することを要求する行初期化要求である場合がある。情報処理装置100が、行初期化要求に応じて、ペイロード行列データ510、列ビットマップ行列データ520、列初期値行列データ530、および、順序管理行列データ540を、どのように参照または更新するかについては、
図14を用いて後述する。
【0205】
クエリは、例えば、ペイロード行列データ510のいずれかの列の複数のデータを、列方向に一括して初期化することを要求する列初期化要求である場合がある。情報処理装置100が、列初期化要求に応じて、ペイロード行列データ510、列ビットマップ行列データ520、列初期値行列データ530、および、順序管理行列データ540を、どのように参照または更新するかについては、
図15を用いて後述する。
【0206】
クエリは、例えば、ペイロード行列データ510から、配列の成分のデータを読み出すことを要求する読み出し要求である場合がある。情報処理装置100が、読み出し要求に応じて、ペイロード行列データ510、列ビットマップ行列データ520、列初期値行列データ530、および、順序管理行列データ540を、どのように参照または更新するかについては、
図16を用いて後述する。
【0207】
クエリは、例えば、ペイロード行列データ510に、配列の成分のデータを書き込むことを要求する書き込み要求である場合がある。情報処理装置100が、書き込み要求に応じて、ペイロード行列データ510、列ビットマップ行列データ520、列初期値行列データ530、および、順序管理行列データ540を、どのように参照または更新するかについては、
図17を用いて後述する。
【0208】
具体的には、まず、
図13を用いて、情報処理装置100が、全体初期化要求に応じて、ペイロード行列データ510全体を初期化する一例について説明する。
【0209】
図13は、ペイロード行列データ510全体を初期化する一例を示す説明図である。
図13において、情報処理装置100は、全体初期化要求に応じて、ペイロード行列データ510を初期化する。情報処理装置100は、具体的には、ペイロード行列データ510のうち、第1領域列710の末尾に存在する第1領域711において、第1領域列710に対するスタックポインタを初期化する。また、情報処理装置100は、具体的には、ペイロード行列データ510のうち、
図7に示した第2領域列720の末尾に存在する第2領域721において、第2領域列720に対するスタックポインタを初期化する。
【0210】
情報処理装置100は、具体的には、第1領域列710に対するスタックポインタを初期化し、第2領域列720に対するスタックポインタを初期化することにより、ペイロード行列データ510を初期化する。これにより、情報処理装置100は、ペイロード行列データ510を初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0211】
情報処理装置100は、全体初期化要求に応じて、列ビットマップ行列データ520を初期化する。情報処理装置100は、具体的には、ペイロード行列データ510と同様に、列ビットマップ行列データ520において、各種スタックポインタを初期化することにより、列ビットマップ行列データ520を初期化する。これにより、情報処理装置100は、列ビットマップ行列データ520の全フラグを、列初期化状態ではないことを示す値=1に設定する。情報処理装置100は、列ビットマップ行列データ520を初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0212】
情報処理装置100は、全体初期化要求に応じて、列初期値行列データ530を初期化する。情報処理装置100は、具体的には、列初期値行列データ530の末尾に存在するブロックにおいて、列初期値行列データ530に対するスタックポインタを初期化することにより、列初期値行列データ530を初期化する。これにより、情報処理装置100は、列初期値行列データ530を初期化する際にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0213】
情報処理装置100は、順序管理行列データ540を初期化する。情報処理装置100は、具体的には、順序管理行列データ540において、全idに対応する整数値を初期値に設定し、フラグ情報fを初期化することにより、順序管理行列データ540を初期化する。
【0214】
これにより、情報処理装置100は、全体初期化要求に応じて、ペイロード行列データ510を初期化することができる。情報処理装置100は、初期化したペイロード行列データ510に合わせて、列ビットマップ行列データ520、列初期値行列データ530、および、順序管理行列データ540を初期化することができる。情報処理装置100は、全体初期化要求を適切に処理することができる。
【0215】
次に、
図14を用いて、情報処理装置100が、行初期化要求に応じて、ペイロード行列データ510の行を初期化する一例について説明する。
【0216】
図14は、ペイロード行列データ510の行を初期化する一例を示す説明図である。
図14において、情報処理装置100は、ペイロード行列データ510の行1401を指定の値で初期化することを要求する行初期化要求を受け付けたとする。
【0217】
情報処理装置100は、行初期化要求に応じて、ペイロード行列データ510の行1401を初期化する。情報処理装置100は、具体的には、ペイロード行列データ510の行1401の末尾に存在するブロック610を参照して、第2領域列720において、行1401に対するスタックポインタを初期化し、行1401に対する行初期値=指定の値を設定する。情報処理装置100は、具体的には、行1401に対するスタックポインタを初期化し、行1401に対する行初期値=指定の値を設定することにより、行1401を初期化する。
【0218】
情報処理装置100は、行1401の初期化順序が先頭になるよう、順序管理行列データ540を更新する。情報処理装置100は、具体的には、順序管理行列データ540のうち、行1401に対応する整数値1402を更新することにより、行1401の初期化順序を先頭に移動する。
【0219】
これにより、情報処理装置100は、行初期化要求に応じて、ペイロード行列データ510の行1401を初期化することができる。情報処理装置100は、初期化した行1401に合わせて、順序管理行列データ540を更新することができる。情報処理装置100は、行初期化要求を適切に処理することができる。
【0220】
情報処理装置100は、以降、行1401の複数のデータが、行方向に初期化した行初期化状態であることを特定可能にすることができる。このため、情報処理装置100は、以降、行1401のデータを読み出す際の指針を記憶しておくことができる。情報処理装置100は、以降、行1401のデータと見做す行初期値を記憶しておくことができる。
【0221】
次に、
図15を用いて、情報処理装置100が、列初期化要求に応じて、ペイロード行列データ510の列を初期化する一例について説明する。
【0222】
図15は、ペイロード行列データ510の列を初期化する一例を示す説明図である。
図15において、情報処理装置100は、ペイロード行列データ510の列1500を指定の値で初期化することを要求する列初期化要求を受け付けたとする。情報処理装置100は、ペイロード行列データ510を更新しない。
【0223】
情報処理装置100は、列初期化要求に応じて、列ビットマップ行列データ520のうち、列1500に対応する全フラグに、列初期化状態であることを示す0を設定する。情報処理装置100は、具体的には、列ビットマップ行列データ520のうち、列1500に対応する列1501の末尾に存在するブロックを参照して、列1501に対するスタックポインタを初期化し、列1501に対する列初期値=0を設定する。情報処理装置100は、具体的には、列1501に対するスタックポインタを初期化し、列1501に対する列初期値=0を設定することにより、列1500に対応する全フラグに、列初期化状態であることを示す0を設定する。
【0224】
情報処理装置100は、列初期化要求に応じて、列初期値行列データ530のうち、列1500に対応する列初期値1502を、指定の値に更新する。これにより、情報処理装置100は、以降、列1500のデータと見做す列初期値を記憶しておくことができる。
【0225】
情報処理装置100は、列1500の初期化順序が先頭になるよう、順序管理行列データ540を更新する。情報処理装置100は、具体的には、順序管理行列データ540のうち、列1500に対応する整数値1503を更新することにより、列1500の初期化順序を先頭に移動する。
【0226】
これにより、情報処理装置100は、列初期化要求に応じて、ペイロード行列データ510の列1500を実質的に初期化することができる。情報処理装置100は、列初期化要求を適切に処理することができる。情報処理装置100は、以降、列1500の複数のデータが、列方向に初期化した列初期化状態であることを特定可能にすることができる。このため、情報処理装置100は、以降、列1500のデータを読み出す際の指針を記憶しておくことができる。
【0227】
次に、
図16を用いて、情報処理装置100が、読み出し要求に応じて、ペイロード行列データ510から、配列の成分のデータを読み出す一例について説明する。
【0228】
図16は、配列の成分のデータを読み出す一例を示す説明図である。
図16において、情報処理装置100は、ペイロード行列データ510から、第1行と第1列との交点1601のデータを読み出すことを要求する読み出し要求を受け付けたとする。
【0229】
情報処理装置100は、ペイロード行列データ510のうち、交点1601に対応する行の末尾に存在するブロック610を参照して、第2領域列720に基づいて、交点1601のデータが、行初期化状態であるか否かを判定する。情報処理装置100は、交点1601に対応する列ビットマップ行列データ520の交点1602のフラグを読み出し、フラグに基づいて、交点1601のデータが、列初期化状態であるか否かを判定する。
【0230】
ここで、情報処理装置100は、行初期化状態ではなく、かつ、列初期化状態ではない場合、ペイロード行列データ510のうち、交点1601のデータをそのまま読み出す。
【0231】
また、情報処理装置100は、行初期化状態であり、かつ、列初期化状態ではない場合、ペイロード行列データ510のうち、交点1601に対応する行の末尾に存在するブロック610を参照して、交点1601のデータとして、行初期値を読み出す。
【0232】
また、情報処理装置100は、行初期化状態ではなく、かつ、列初期化状態である場合、交点1601のデータとして、列初期値行列データ530のうち、交点1601に対応する列初期値1603を読み出す。
【0233】
また、情報処理装置100は、行初期化状態であり、かつ、列初期化状態である場合、順序管理行列データ540を参照して、第1行の初期化順序と、第1列の初期化順序とのいずれが先頭側であるかを判定する。情報処理装置100は、具体的には、順序管理行列データ540のうち、第1列に対応する整数値1604と、第1行に対応する整数値1605とを比較する。
【0234】
情報処理装置100は、比較した結果に基づいて、第1行の初期化順序の方が先頭側であれば、ペイロード行列データ510のうち、交点1601に対応する行の末尾に存在するブロック610を参照して、交点1601のデータとして、行初期値を読み出す。情報処理装置100は、比較した結果に基づいて、第1列の初期化順序の方が先頭側であれば、列初期値行列データ530のうち、交点1601に対応する列初期値1603を読み出す。
【0235】
これにより、情報処理装置100は、第1行と第1列との交点1601のデータを適切に読み出すことができる。情報処理装置100は、第1行が一括して初期化され、かつ、第1列が一括して初期化された場合であっても、初期化順序の前後関係を考慮し、第1行と第1列との交点1601のデータを適切に読み出し可能にすることができる。
【0236】
次に、
図17を用いて、情報処理装置100が、書き込み要求に応じて、ペイロード行列データ510に、配列の成分のデータを書き込む一例について説明する。
【0237】
図17は、配列の成分のデータを書き込む一例を示す説明図である。
図17において、情報処理装置100は、ペイロード行列データ510のうち、第1行と第1列との交点1700のデータに、指定の値を書き込むことを要求する読み出し要求を受け付けたとする。
【0238】
情報処理装置100は、ペイロード行列データ510のうち、交点1700のデータを含むブロック1701の内容を読み出す。情報処理装置100は、読み出した内容に、交点1700のデータとして、指定の値を書き込む。情報処理装置100は、指定の値を書き込み済みの内容を、ブロック1701に上書きする。情報処理装置100は、列ビットマップ行列データ520のうち、ブロック1701に対応する全フラグ1702に、列初期化状態ではないことを示す1を設定する。
【0239】
これにより、情報処理装置100は、ペイロード行列データ510のうち、第1行と第1列との交点1700のデータに、指定の値を適切に書き込むことができる。また、情報処理装置100は、列ビットマップ行列データ520を更新することにより、以降、第1行と第1列との交点1700のデータとして、行初期値または列初期値を誤って読み出してしまうことを防止することができる。
【0240】
次に、
図18を用いて、情報処理装置100の適用例について説明する。
【0241】
図18は、情報処理装置100の適用例を示す説明図である。
図18において、情報処理装置100を、表1800に示す、M個のユーザR
iが共通して製造するN個の商品C
jの取引希望価格を管理する用途に適用する場合について説明する。iは、例えば、0~M-1である。jは、商品idである。jは、例えば、0~N-1である。ユーザR
iは、例えば、クライアント装置202を有する。ユーザR
iは、例えば、商品C
jの製造者、または、商品C
jのベンダなどである。
【0242】
情報処理装置100は、ユーザRiごとに、N個の商品Cjそれぞれの取引希望価格を成分として含む配列を、ペイロード行列データ510の行として記憶する。情報処理装置100は、具体的には、それぞれ異なるユーザRiに関し、N個の商品Cjそれぞれの取引希望価格を成分として含むそれぞれ異なる配列を示すブロック列を、ペイロード行列データ510の行として記憶する。ブロックは、例えば、100個の成分を格納可能な領域を含むとする。ブロック列は、例えば、4つのブロックを含む。
【0243】
ここで、情報処理装置100は、クエリキュー1810に示す各種クエリを順に受け付けたとする。情報処理装置100は、例えば、クライアント装置202を介して、ユーザRiからのクエリを受け付ける。情報処理装置100は、例えば、不図示の入力装置を介したクエリの入力を受け付けることにより、クエリを受け付けてもよい。
【0244】
クエリは、例えば、ペイロード行列データ510全体を初期化することを要求する全体初期化要求(initall)である。initall aは、ペイロード行列データ510全体を、値aで初期化することを示す。X initall aは、全体初期化要求を、Xから受け付けたことを示す。Xは、例えば、情報処理装置100(S)またはクライアント装置202(A,B,C)などである。
【0245】
クエリは、例えば、ペイロード行列データ510のいずれかの行を初期化することを要求する行初期化要求(initr)である。initr a bは、ペイロード行列データ510のうち、ユーザRaに対応する行全体を、bの値で初期化することを示す。X initr a bは、Xから行初期化要求を受け付けたことを示す。
【0246】
クエリは、例えば、ペイロード行列データ510のいずれかの列を初期化することを要求する列初期化要求(initl)である。initl a bは、ペイロード行列データ510のうち、商品id=aに対応する列全体を、bの値で初期化することを示す。X initl a bは、Xから列初期化要求を受け付けたことを示す。
【0247】
クエリは、例えば、いずれかのブロック列に、いずれかの成分の値を格納することを要求する書き込み要求(write)である。write[a,b]cは、ペイロード行列データ510のうち、ユーザRaに対応する行に、商品id=bの成分の値=cを格納することを示す。X write[a,b]cは、書き込み要求をXから受け付けたことを示す。
【0248】
クエリは、例えば、いずれかのブロック列から、いずれかの成分の値を読み出すことを要求する読み出し要求(read)である。read[a,b]は、ペイロード行列データ510のうち、ユーザRaに対応する行から、商品id=bの成分の値を読み出すことを示す。X read[a,b]は、読み出し要求をXから受け付けたことを示す。
【0249】
情報処理装置100は、
図13~
図17に示したように、クエリキュー1810に示す各種クエリを順に処理する。これにより、情報処理装置100は、クエリキュー1810に示す各種クエリを適切に処理することができ、M個のユーザR
iが共通して製造するN個の商品C
jの取引希望価格を適切に管理することができる。
【0250】
次に、
図19を用いて、情報処理装置100による効果の一例について説明する。
【0251】
図19は、情報処理装置100による効果の一例を示す説明図である。
図19において、上述した情報処理装置100がペイロード行列データ510を管理する手法と、他の手法とを比較した結果について説明する。表1900は、具体的には、後述する手法1と、後述する手法2と、後述する手法3と、情報処理装置100の手法4とを比較した結果を示す。手法4は、例えば、Compact Initializable Matrixと呼ぶことにする。
【0252】
例えば、手法1は、具体的には、複数の配列を、特殊なデータ構造を有さない行列形式データ1として表す手法である。特殊なデータ構造は、例えば、OSIAなどである。手法1では、行列形式データ1に対する書き込みまたは読み出しにかかる処理負担および処理時間が、O(1)になる。手法1では、行列形式データ1の行の初期化にかかる処理負担および処理時間が、O(N)になる。手法1では、行列形式データ1の列の初期化にかかる処理負担および処理時間が、O(MN)になる。手法1では、行列形式データ1全体の初期化にかかる処理負担および処理時間が、O(MN)になる。
【0253】
例えば、手法2は、具体的には、複数の配列を、OSIAと呼ばれるデータ構造である行列形式データ2として表す手法である。手法2では、行列形式データ2に対する書き込みまたは読み出しにかかる処理負担および処理時間が、O(1)になる。手法2では、行列形式データ2の行の初期化にかかる処理負担および処理時間が、O(1)になる。手法2では、行列形式データ2の列の初期化にかかる処理負担および処理時間が、O(M)になる。手法2では、行列形式データ2全体の初期化にかかる処理負担および処理時間が、O(M)になる。手法2では、手法1に比べて、データ量がMビット増加する。
【0254】
例えば、手法3は、具体的には、複数の配列を、
図6および
図7に示したInitializable Multiple Arraysと呼ばれるデータ構造である行列形式データ3として表す手法である。手法3では、行列形式データ3に対する書き込みまたは読み出しにかかる処理負担および処理時間が、O(1)になる。手法3では、行列形式データ3の行の初期化にかかる処理負担および処理時間が、O(1)になる。手法3では、行列形式データ3の列の初期化にかかる処理負担および処理時間が、O(M)になる。手法3では、行列形式データ3全体の初期化にかかる処理負担および処理時間が、O(1)になる。手法3では、手法1に比べて、データ量が1ビット増加する。
【0255】
これに対し、手法4では、ペイロード行列データ510に対する書き込みまたは読み出しにかかる処理負担および処理時間が、O(1)になる。手法4では、ペイロード行列データ510の行の初期化にかかる処理負担および処理時間が、O(1)になる。手法4では、ペイロード行列データ510の列の初期化にかかる処理負担および処理時間が、O(1)になる。手法4では、ペイロード行列データ510全体の初期化にかかる処理負担および処理時間が、O(1)になる。手法4では、手法1に比べて、データ量がO(MN)ビット増加する。
【0256】
このように、情報処理装置100は、他の手法に比べて、ペイロード行列データ510に対する書き込みまたは読み出しにかかる処理負担および処理時間が増大するようなデメリットを生じずに、書き込みまたは読み出しを実施することができる。情報処理装置100は、手法1に比べて、ペイロード行列データ510の行の初期化にかかる処理負担および処理時間を、O(1)に抑制することができる。情報処理装置100は、他の手法に比べて、ペイロード行列データ510の列の初期化にかかる処理負担および処理時間を、O(1)に抑制することができる。情報処理装置100は、手法1および手法2に比べて、ペイロード行列データ510全体の初期化にかかる処理負担および処理時間を、O(1)に抑制することができる。
【0257】
(全体初期化処理手順)
次に、
図20を用いて、情報処理装置100が実行する、全体初期化処理手順の一例について説明する。全体初期化処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0258】
図20は、全体初期化処理手順の一例を示すフローチャートである。
図20において、情報処理装置100は、ペイロード行列データ510全体の初期化を要求する全体初期化要求を受け付ける(ステップS2001)。
【0259】
次に、情報処理装置100は、ペイロード行列データ510全体を初期化する(ステップS2002)。そして、情報処理装置100は、列ビットマップ行列データ520全体を初期化する(ステップS2003)。
【0260】
次に、情報処理装置100は、列初期値行列データ530全体を初期化する(ステップS2004)。そして、情報処理装置100は、順序管理行列データ540全体を初期化する(ステップS2005)。その後、情報処理装置100は、全体初期化処理を終了する。
【0261】
(行初期化処理手順)
次に、
図21を用いて、情報処理装置100が実行する、行初期化処理手順の一例について説明する。行初期化処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0262】
図21は、行初期化処理手順の一例を示すフローチャートである。
図21において、情報処理装置100は、ペイロード行列データ510の指定の行の初期化を要求する行初期化要求を受け付ける(ステップS2101)。
【0263】
次に、情報処理装置100は、ペイロード行列データ510の指定の行を初期化し、ペイロード行列データ510の指定の行に行初期値を設定する(ステップS2102)。そして、情報処理装置100は、ペイロード行列データ510の指定の行の順序が先頭になるよう、順序管理行列データ540を更新する(ステップS2103)。その後、情報処理装置100は、行初期化処理を終了する。
【0264】
(列初期化処理手順)
次に、
図22を用いて、情報処理装置100が実列する、列初期化処理手順の一例について説明する。列初期化処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0265】
図22は、列初期化処理手順の一例を示すフローチャートである。
図22において、情報処理装置100は、ペイロード行列データ510の指定の列の初期化を要求する行初期化要求を受け付ける(ステップS2201)。
【0266】
次に、情報処理装置100は、指定の列に対応する列ビットマップ行列データ520のいずれかの列を初期化する(ステップS2202)。そして、情報処理装置100は、指定の列に対応する列初期値行列データ530のいずれかの列に、列初期値を設定する(ステップS2203)。
【0267】
次に、情報処理装置100は、ペイロード行列データ510の指定の列の順序が先頭になるよう、順序管理行列データ540を更新する(ステップS2204)。そして、情報処理装置100は、列初期化処理を終了する。
【0268】
(読み出し処理手順)
次に、
図23を用いて、情報処理装置100が実行する、読み出し処理手順の一例について説明する。読み出し処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0269】
図23は、読み出し処理手順の一例を示すフローチャートである。
図23において、情報処理装置100は、ペイロード行列データ510の指定の行と指定の列との交点のデータの読み出し要求を受け付ける(ステップS2301)。
【0270】
次に、情報処理装置100は、ペイロード行列データ510のうち、指定の行と指定の列との交点のデータを含むブロックを特定し、当該ブロックの内容を読み出す(ステップS2302)。そして、情報処理装置100は、読み出したブロックの内容に基づいて、特定したブロックがバリュー状態であるか否かを判定する(ステップS2303)。ここで、バリュー状態である場合(ステップS2303:Yes)、情報処理装置100は、ステップS2308の処理に移行する。一方で、バリュー状態ではない場合(ステップS2303:No)、情報処理装置100は、ステップS2304の処理に移行する。
【0271】
ステップS2304では、情報処理装置100は、順序管理行列データ540を参照して、指定の行と指定の列との順序を比較する(ステップS2304)。次に、情報処理装置100は、指定の行の方が指定の列よりも先頭側であるか否かを判定する(ステップS2305)。ここで、指定の列の方が先頭側である場合(ステップS2305:No)、情報処理装置100は、ステップS2307の処理に移行する。一方で、指定の行の方が先頭側である場合(ステップS2305:Yes)、情報処理装置100は、ステップS2306の処理に移行する。
【0272】
ステップS2306では、情報処理装置100は、ペイロード行列データ510の指定の行から、指定の行と指定の列との交点のデータとして、行初期値を読み出す(ステップS2306)。そして、情報処理装置100は、読み出し処理を終了する。
【0273】
ステップS2307では、情報処理装置100は、指定の列に対応する列初期値行列データ530のいずれかの列から、指定の行と指定の列との交点のデータとして、列初期値を読み出す(ステップS2307)。そして、情報処理装置100は、読み出し処理を終了する。
【0274】
ステップS2308では、情報処理装置100は、指定の行と指定の列との交点に対応する列ビットマップ行列データ520のいずれかの行といずれかの列との交点のデータを読み出す(ステップS2308)。次に、情報処理装置100は、読み出したデータが1であるか否かを判定する(ステップS2309)。ここで、1ではない場合(ステップS2309:No)、情報処理装置100は、ステップS2307の処理に移行する。一方で、1である場合(ステップS2309:Yes)、情報処理装置100は、ステップS2310の処理に移行する。
【0275】
ステップS2310では、情報処理装置100は、ペイロード行列データ510の指定の行と指定の列との交点のデータをそのまま読み出す(ステップS2310)。そして、情報処理装置100は、読み出し処理を終了する。
【0276】
(書き込み処理手順)
次に、
図24を用いて、情報処理装置100が実行する、書き込み処理手順の一例について説明する。書き込み処理は、例えば、
図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
【0277】
図24は、書き込み処理手順の一例を示すフローチャートである。
図24において、情報処理装置100は、ペイロード行列データ510の指定の行と指定の列との交点のデータに対する指定の値の書き込み要求を受け付ける(ステップS2401)。
【0278】
次に、情報処理装置100は、ペイロード行列データ510のうち、指定の行と指定の列との交点のデータを含むブロックを特定し、当該ブロックの内容を読み出す(ステップS2402)。そして、情報処理装置100は、読み出したブロックの内容に指定の値を書き込み、当該ブロックの内容を、特定したブロックに上書きする(ステップS2403)。
【0279】
次に、情報処理装置100は、列ビットマップ行列データ520のうち、特定したブロックに対応する複数のデータすべてに1を設定する(ステップS2404)。そして、情報処理装置100は、書き込み処理を終了する。
【0280】
ここで、情報処理装置100は、
図50~
図54の各フローチャートの一部ステップの処理の順序を入れ替えて実行してもよい。また、情報処理装置100は、
図50~
図54の各フローチャートの一部ステップの処理を省略してもよい。例えば、ステップS5001の処理は省略可能である。
【0281】
以上説明したように、情報処理装置100によれば、行方向に配列の成分のデータを保持する第1行列データを記憶することができる。情報処理装置100によれば、第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する第2行列データを記憶することができる。情報処理装置100によれば、第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値を保持する領域を含む第3行列データを記憶することができる。情報処理装置100によれば、第1行列データの第1列の複数のデータを列方向に一括して初期化する第1初期化要求を受け付けることができる。情報処理装置100によれば、第1初期化要求を受け付けたことに応じて、第1列の複数のデータにそれぞれ対応付けられた第2行列データの複数のフラグに、初期化状態であることを示す値を設定することができる。情報処理装置100によれば、第1初期化要求を受け付けたことに応じて、第1列に対応付けられた第3行列データのいずれかの領域に、第1初期値を設定することができる。これにより、情報処理装置100は、第1行列データの列を一括して初期化可能にすることができる。
【0282】
情報処理装置100によれば、第1行列データの各行に対応付けて、当該行の複数のデータを行方向に一括して初期化する場合において当該行の各データの初期値を、当該行の所定の領域に保持することができる。情報処理装置100によれば、第1行列データの第1行の複数のデータを行方向に一括して初期化する第2初期化要求を受け付けたことに応じて、第1行の所定の領域に、第2初期値を設定することができる。これにより、情報処理装置100は、第1行列データの行を一括して初期化可能にすることができる。
【0283】
情報処理装置100によれば、少なくとも、第1列と、第1行との順序関係を表す第4行列データを記憶することができる。情報処理装置100によれば、第1初期化要求を受け付けたことに応じて、第1列が、先頭の順序になるよう、第4行列データを更新することができる。情報処理装置100によれば、第2初期化要求を受け付けたことに応じて、第1行が、先頭の順序になるよう、第4行列データを更新することができる。情報処理装置100によれば、第1行列データのうち、第1列と第1行との交点のデータを読み出す読出要求を受け付けることができる。情報処理装置100によれば、読出要求を受け付けたことに応じて、第1初期値および第2初期値が設定済みであれば、第4行列データを参照して、第1列が第1行より先頭側の順序であるか否かを判定することができる。情報処理装置100によれば、第1列が第1行より先頭側の順序である場合、第1初期値を読み出し、第1行が第1列より先頭側の順序である場合、第2初期値を読み出すことができる。これにより、情報処理装置100は、第1行と第1列とがそれぞれ初期化された順序を考慮して、交点のデータとなる値を適切に読み出すことができる。
【0284】
情報処理装置100によれば、読出要求を受け付けたことに応じて、第1初期値が設定済み、かつ、第2初期値が未設定であれば、第1初期値を読み出すことができる。情報処理装置100によれば、第1初期値が未設定、かつ、第2初期値が設定済みであれば、第2初期値を読み出すことができる。情報処理装置100によれば、第1初期値が未設定、かつ、第2初期値が未設定であれば、交点のデータを読み出すことができる。これにより、情報処理装置100は、交点のデータとなる値を適切に読み出すことができる。
【0285】
情報処理装置100によれば、交点のデータに指定の値を書き込む書込要求を受け付けることができる。情報処理装置100によれば、書込要求を受け付けたことに応じて、交点のデータが指定の値を示すよう、第1行列データを更新することができる。情報処理装置100によれば、交点のデータに対応付けられた第2行列データのいずれかのフラグに、初期化状態ではないことを示す値を設定することができる。これにより、情報処理装置100は、交点のデータに指定の値を書き込むことができる。
【0286】
情報処理装置100によれば、第1行列データの各行を、行方向に、Optimal Space Initializable Arrayのデータ構造として扱うことができる。情報処理装置100によれば、第2行列データの各列を、列方向に、Optimal Space Initializable Arrayのデータ構造として扱うことができる。これにより、情報処理装置100は、第1行列データの各行を初期化し易くすることができ、第1行列データの各行を初期化する際にかかる処理負担および処理時間の低減化を図ることができる。情報処理装置100は、第2行列データの各列を初期化し易くすることができ、第2行列データの各列を初期化する際にかかる処理負担および処理時間の低減化を図ることができる。
【0287】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをPCやワークステーションなどのコンピュータで実行することにより実現することができる。本実施の形態で説明した情報処理プログラムは、コンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。記録媒体は、ハードディスク、フレキシブルディスク、CD(Compact Disc)-ROM、MO(Magneto Optical disc)、DVD(Digital Versatile Disc)などである。また、本実施の形態で説明した情報処理プログラムは、インターネットなどのネットワークを介して配布してもよい。
【0288】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0289】
(付記1)行方向に配列の成分のデータを保持する第1行列データを記憶部に記憶し、
前記第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する第2行列データを前記記憶部に記憶し、
前記第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する領域を含む第3行列データを前記記憶部に記憶し、
前記第1行列データの第1列の複数のデータを列方向に一括して初期化する第1初期化要求を受け付けたことに応じて、前記第1列の複数のデータにそれぞれ対応付けられた前記第2行列データの複数のフラグに、初期化状態であることを示す値を設定し、
前記第1初期化要求を受け付けたことに応じて、前記第1列に対応付けられた前記第3行列データのいずれかの領域に、第1初期値を設定する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【0290】
(付記2)前記第1行列データは、前記第1行列データの各行に対応付けて、当該行の複数のデータを行方向に一括して初期化する場合において当該行の各データの初期値と見做される、当該行の複数のデータに共通の初期値を、当該行の所定の領域に保持可能であって、
前記第1行列データの第1行の複数のデータを行方向に一括して初期化する第2初期化要求を受け付けたことに応じて、前記第1行の所定の領域に、第2初期値を設定する、
処理を前記コンピュータに実行させることを特徴とする付記1に記載の情報処理プログラム。
【0291】
(付記3)少なくとも、前記第1列と、前記第1行との順序関係を表す第4行列データを前記記憶部に記憶し、
前記第1初期化要求を受け付けたことに応じて、前記第1列が、先頭の順序になるよう、前記第4行列データを更新し、
前記第2初期化要求を受け付けたことに応じて、前記第1行が、先頭の順序になるよう、前記第4行列データを更新し、
前記第1行列データのうち、前記第1列と前記第1行との交点のデータを読み出す読出要求を受け付けたことに応じて、前記第1初期値および前記第2初期値が設定済みであれば、前記第4行列データを参照して、前記第1列が前記第1行より先頭側の順序である場合、前記第1初期値を読み出し、前記第1行が前記第1列より先頭側の順序である場合、前記第2初期値を読み出す、
処理を前記コンピュータに実行させることを特徴とする付記2に記載の情報処理プログラム。
【0292】
(付記4)前記読み出す処理は、
前記読出要求を受け付けたことに応じて、前記第1初期値が設定済み、かつ、前記第2初期値が未設定であれば、前記第1初期値を読み出し、前記第1初期値が未設定、かつ、前記第2初期値が設定済みであれば、前記第2初期値を読み出し、前記第1初期値が未設定、かつ、前記第2初期値が未設定であれば、前記交点のデータを読み出す、ことを特徴とする付記3に記載の情報処理プログラム。
【0293】
(付記5)前記交点のデータに指定の値を書き込む書込要求を受け付けたことに応じて、前記交点のデータが前記指定の値を示すよう、前記第1行列データを更新すると共に、前記交点のデータに対応付けられた前記第2行列データのいずれかのフラグに、初期化状態ではないことを示す値を設定する、
処理を前記コンピュータに実行させることを特徴とする付記3または4に記載の情報処理プログラム。
【0294】
(付記6)前記第1行列データの各行は、行方向に、Optimal Space Initializable Arrayのデータ構造として扱われ、
前記第2行列データの各列は、列方向に、Optimal Space Initializable Arrayのデータ構造として扱われる、ことを特徴とする付記3または4に記載の情報処理プログラム。
【0295】
(付記7)行方向に配列の成分のデータを保持する第1行列データを記憶部に記憶し、
前記第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する第2行列データを前記記憶部に記憶し、
前記第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する領域を含む第3行列データを前記記憶部に記憶し、
前記第1行列データの第1列の複数のデータを列方向に一括して初期化する第1初期化要求を受け付けたことに応じて、前記第1列の複数のデータにそれぞれ対応付けられた前記第2行列データの複数のフラグに、初期化状態であることを示す値を設定し、
前記第1初期化要求を受け付けたことに応じて、前記第1列に対応付けられた前記第3行列データのいずれかの領域に、第1初期値を設定する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【0296】
(付記8)行方向に配列の成分のデータを保持する第1行列データを記憶部に記憶し、
前記第1行列データの各データに対応付けて、当該データが列方向に一括して初期化された初期化状態であるか否かを示すフラグを保持する第2行列データを前記記憶部に記憶し、
前記第1行列データの各列に対応付けて、当該列の複数のデータを列方向に一括して初期化する場合において当該列の各データの初期値と見做される、当該列の複数のデータに共通の初期値を保持する領域を含む第3行列データを前記記憶部に記憶し、
前記第1行列データの第1列の複数のデータを列方向に一括して初期化する第1初期化要求を受け付けたことに応じて、前記第1列の複数のデータにそれぞれ対応付けられた前記第2行列データの複数のフラグに、初期化状態であることを示す値を設定し、
前記第1初期化要求を受け付けたことに応じて、前記第1列に対応付けられた前記第3行列データのいずれかの領域に、第1初期値を設定する、
制御部を有することを特徴とする情報処理装置。
【符号の説明】
【0297】
100 情報処理装置
110 第1行列データ
111 第1列
120 第2行列データ
121 第2列
130 第3行列データ
131 領域
200 情報処理システム
201 情報蓄積装置
202 クライアント装置
210 ネットワーク
300 バス
301 CPU
302 メモリ
303 ネットワークI/F
304 記録媒体I/F
305 記録媒体
400 記憶部
401 取得部
402 列初期化部
403 行初期化部
404 格納部
405 読出部
406 出力部
510 ペイロード行列データ
520 列ビットマップ行列データ
530 列初期値行列データ
540 順序管理行列データ
541,542 要素群
600 ブロック列
610,611,612,613,614,1701 ブロック
620 スタックポインタ
630 フラグ情報
710 第1領域列
711 第1領域
721 第2領域
720 第2領域列
741,742,751,752,761,762,910,920,1000,1010,1100,1110,1200,1210 符号
800 レンジポインタ
1011,1800,1900 表
1101,1102,1201 id
1401 行
1402,1503,1604,1605 整数値
1500,1501 列
1502,1603 列初期値
1601,1602,1700 交点
1702 全フラグ
1810 クエリキュー