(57)【要約】  １個以上のレコードを含み、各レコードが任意長の１個以上のセルを含み、各セルが任意個の文字を含むテキストファイルに対する演算処理を効率的に行う。パラメータ設定装置は、属性情報を入力として１レコード分の文字列のサイズの最大値Ｓｃｓｖおよび最小値ｓｃｓｖ、エンコード情報の合計サイズの最大値Ｓｅｎｃ、エンコード情報に特定の演算を行って得られる演算値の合計サイズの最大値Ｓｓｓ、および参照情報の合計サイズＳｒｅｆを設定し、エンコードおよび演算の処理単位となるレコード数としてＣ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値を得、演算処理における並列数としてｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値を得る。ただし、Ｃはキャッシュメモリサイズ、Ｍはメインメモリサイズ、ｆ０はｓｃｓｖ・Ｍ／（ｓｃｓｖ＋Ｓｅｎｃ＋ｍａｘ（Ｓｒｅｆ，Ｓｓｓ））の関数値である。
2019181594.tif 000002
【特許請求の範囲】
【請求項１】
テキストファイルの文字列に対する演算処理のためのパラメータ設定装置であって、
前記テキストファイルはＷ個のレコードを含み、前記レコードのそれぞれは任意長のＧ個のセルを含み、前記セルのそれぞれは任意個の文字を含み、ＷおよびＧが１以上の整数であり、前記Ｇ個のセルは属性情報に対応しており、
Ｃがキャッシュメモリサイズ、Ｍがメインメモリサイズであり、
前記属性情報を入力として前記テキストファイルの１レコード分の文字列のサイズの最大値Ｓｃｓｖを設定する最大サイズ設定部と、
前記属性情報を入力として前記１レコード分の文字列のサイズの最小値ｓｃｓｖを設定する最小サイズ設定部と、
前記１レコード分の文字列を所定の有限集合の元にエンコードして得られるエンコード情報の合計サイズの最大値Ｓｅｎｃを設定するエンコードサイズ設定部と、
前記１レコード分の前記エンコード情報に特定の演算を行って得られる演算値の合計サイズの最大値Ｓｓｓを設定する演算サイズ設定部と、
前記１レコード分の前記セルそれぞれの位置および長さを表す参照情報の合計サイズＳｒｅｆを設定する参照サイズ設定部と、
前記エンコードおよび前記演算は前記テキストファイルのｒレコード分の文字列である処理単位文字列ごとに実行される処理であり、レコード数ｒとしてＣ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値を得る処理単位算出部と、
Ｉが前記処理単位文字列ごとに実行される前記エンコードおよび前記演算の繰り返し回数の最大値であり、Ｓｒｅｆ≧Ｓｓｓのときｍａｘ（Ｓｒｅｆ，Ｓｓｓ）＝Ｓｒｅｆであり、Ｓｒｅｆ＜Ｓｓｓのときｍａｘ（Ｓｒｅｆ，Ｓｓｓ）＝Ｓｓｓであり、ｆ０がｓｃｓｖ・Ｍ／（ｓｃｓｖ＋Ｓｅｎｃ＋ｍａｘ（Ｓｒｅｆ，Ｓｓｓ））の関数値であり、前記演算処理における並列数ｎｐとしてｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値を得る並列数算出部と、
を有するパラメータ設定装置。
【請求項２】
請求項１のパラメータ設定装置であって、
前記演算処理の際に前記テキストファイルの文字列からまとめて読み込まれるデータのファイルバッファサイズｆとしてｆ０／ｎｐの関数値を得るバッファサイズ算出部をさらに有するパラメータ設定装置。
【請求項３】
請求項１または２のパラメータ設定装置であって、
前記繰り返し回数の最大値Ｉは、前記処理単位文字列の前記エンコードおよび前記演算を行うための合計処理量に対する前処理の合計処理量の比率が所定値以下となるように定められている、パラメータ設定装置。
【請求項４】
テキストファイルの文字列に対する演算処理を行う演算装置であって、
前記テキストファイルはＷ個のレコードを含み、前記レコードのそれぞれは任意長のＧ個のセルを含み、前記セルのそれぞれは任意個の文字を含み、ＷおよびＧが１以上の整数であり、ｆが定められたファイルバッファサイズであり、ｎｐが並列数であり、ｒがレコード数を表す正整数であり、ｉが各スレッドを表し、ｉ∈｛０，…，Ｔ−１｝であり、Ｔが前記テキストファイルの文字列のサイズに対応するスレッド数を表す正整数であり、１≦ｎｐ≦Ｔであり、初期状態でスレッド０のファイル読み込みロックおよびバッファ境界ロックならびにスレッド０，…，ｎｐ−１の並列性ロックが解除されており、
メインメモリとキャッシュメモリと複数の処理部とを有し、
前記複数の処理部のうちスレッドｉの処理を行う処理部は、
前記スレッドｉのファイル読み込みロックおよび並列性ロックが解除された後、前記テキストファイルの文字列から前記ファイルバッファサイズｆの領域に格納可能な文字列Ｓｉを読み込んで前記メインメモリに格納する読み込み部と、
前記文字列Ｓｉが前記メインメモリに格納された後にスレッドｉ＋１のファイル読み込みロックを解除するファイル読み込みロック解除部と、
スレッドｉのバッファ境界ロックが解除された後、前記文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算して前記メインメモリに格納するパース部と、
前記文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報が計算された後にスレッドｉ＋１のバッファ境界ロックを解除するバッファ境界ロック解除部と、
ｉ＝０の場合の結合文字列ＣＳ０がＳ０であり、ｉ≧１の場合の結合文字列ＣＳｉが結合文字列ＣＳｉ‐１の直後に前記文字列Ｓｉを結合したものであり、Ｊが正整数であり、ｊ＝０，…，Ｊ−１であり、前記参照情報によって特定される情報に基づいて前記結合文字列ＣＳｉに含まれる処理対象のｒレコード分の文字列である処理単位文字列ＰＳｉ，ｊを選択し、前記処理単位文字列ＰＳｉ，ｊを所定の有限集合の元であるエンコード情報Ｅｉ，ｊにエンコードする処理を、前記キャッシュメモリを利用して行うエンコード部と、
前記エンコード情報Ｅｉ，ｊに特定の演算を行って演算値ＳＳｉ，ｊを得て前記メインメモリに格納する処理を、前記キャッシュメモリを利用して行う演算部と、
前記演算値ＳＳｉ，ｊが得られた後にスレッドｉ＋ｎｐの並列性ロックを解除する並列性ロック解除部と、
を有する演算装置。
【請求項５】
テキストファイルの文字列に対する演算処理を行う演算装置であって、
前記テキストファイルはＷ個のレコードを含み、前記レコードのそれぞれは任意長のＧ個のセルを含み、前記セルのそれぞれは任意個の文字を含み、ＷおよびＧが１以上の整数であり、ｆが定められたファイルバッファサイズであり、ｎｐが並列数であり、ｒがレコード数を表す正整数であり、ｉが各スレッドを表し、ｉ∈｛０，…，Ｔ−１｝であり、Ｔが前記テキストファイルの文字列のサイズに対応するスレッド数を表す正整数であり、１≦ｎｐ≦Ｔであり、初期状態でスレッド０のファイル読み込みロックおよびスレッド０，…，ｎｐ−１の並列性ロックが解除されており、
メインメモリとキャッシュメモリと複数の処理部とを有し、
前記複数の処理部のうちスレッドｉの処理を行う処理部は、
前記スレッドｉのファイル読み込みロックおよび並列性ロックが解除された後、前記テキストファイルの文字列から前記ファイルバッファサイズｆの領域に格納可能な文字列Ｓｉを読み込んで前記メインメモリに格納する読み込み部と、
前記文字列Ｓｉが前記メインメモリに格納された後にスレッドｉ＋１のファイル読み込みロックを解除するファイル読み込みロック解除部と、
前記文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算して前記メインメモリに格納するパース部と、
ｉ≧１の場合、前記文字列Ｓｉは文字列Ｓｉ‐１の直後に続く文字列であり、スレッドｉのバッファ境界ロックが解除された後、前記参照情報と前記文字列Ｓｉ‐１と前記文字列Ｓｉとを用い、前記文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセルの位置に対応する情報Ａｉを得るセル特定部と、
前記情報Ａｉが得られた後にスレッドｉ＋１のバッファ境界ロックを解除するバッファ境界ロック解除部と、
ｉ＝０の場合の結合文字列ＣＳ０がＳ０であり、ｉ≧１の場合の結合文字列ＣＳｉが結合文字列ＣＳｉ‐１の直後に前記文字列Ｓｉを結合したものであり、Ｊが正整数であり、ｊ＝０，…，Ｊ−１であり、前記参照情報および前記情報Ａｉによって特定される情報に基づいて、前記結合文字列ＣＳｉに含まれる処理対象のｒレコード分の文字列である処理単位文字列ＰＳｉ，ｊを選択し、前記処理単位文字列ＰＳｉ，ｊを所定の有限集合の元であるエンコード情報Ｅｉ，ｊにエンコードする処理を、前記キャッシュメモリを利用して行うエンコード部と、
前記エンコード情報Ｅｉ，ｊに特定の演算を行って演算値ＳＳｉ，ｊを得て前記メインメモリに格納する処理を、前記キャッシュメモリを利用して行う演算部と、
前記演算値ＳＳｉ，ｊが得られた後にスレッドｉ＋ｎｐの並列性ロックを解除する並列性ロック解除部と、
を有する演算装置。
【請求項６】
請求項５の演算装置であって、
前記セルは単独で前記演算の対象を表すか否かを判別可能な文字のみを含み、
前記パース部は、ｉ≧１において、前記文字列Ｓｉ−１に含まれる各セルの位置および長さを表す参照情報の計算が終わる前に、前記文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報の計算を開始する、演算装置。
【請求項７】
請求項４から６の何れかの演算装置であって、
Ｃが前記キャッシュメモリのキャッシュメモリサイズ、Ｍが前記メインメモリのメインメモリサイズであり、
Ｓｃｓｖが前記テキストファイルの１レコード分の文字列のサイズの最大値であり、
ｓｃｓｖが前記１レコード分の文字列のサイズの最小値であり、
Ｓｅｎｃが前記１レコード分の文字列を前記有限集合の元にエンコードして得られるエンコード情報の合計サイズの最大値であり、
Ｓｓｓが前記１レコード分の前記エンコード情報に前記演算を行って得られる演算値の合計サイズの最大値であり、
Ｓｒｅｆが前記１レコード分の前記セルそれぞれの位置および長さを表す参照情報の合計サイズであり、
前記レコード数ｒがＣ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値であり、
Ｉが前記処理単位文字列ＰＳｉ，ｊごとに実行される前記エンコードおよび前記演算の繰り返し回数の最大値であり、Ｓｒｅｆ≧Ｓｓｓのときｍａｘ（Ｓｒｅｆ，Ｓｓｓ）＝Ｓｒｅｆであり、Ｓｒｅｆ＜Ｓｓｓのときｍａｘ（Ｓｒｅｆ，Ｓｓｓ）＝Ｓｓｓであり、ｆ０がｓｃｓｖ・Ｍ／（ｓｃｓｖ＋Ｓｅｎｃ＋ｍａｘ（Ｓｒｅｆ，Ｓｓｓ））の関数値であり、前記並列数ｎｐがｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値であり、
前記ファイルバッファサイズｆがｆ０／ｎｐの関数値である、演算装置。
【請求項８】
請求項４から７の何れかの演算装置であって、
前記パース部は、前記メインメモリに前記参照情報を格納する領域が足りなくなったときに、前記ｒレコード分の前記参照情報を格納するためのバッファ領域を前記メインメモリにまとめて確保する、演算装置。
【請求項９】
請求項１から８の何れかの装置の各部の処理を実行する方法。
【請求項１０】
請求項１から８の何れかの装置としてコンピュータを機能させるためのプログラム。
【請求項１１】
請求項１から８の何れかの装置としてコンピュータを機能させるためのプログラムを格納したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テキストファイルの文字列に対する演算技術に関する。
【背景技術】
【０００２】
１個以上のレコードを含み、各レコードが任意長の１個以上のセル（「フィールド」と呼ばれる場合もある）を含み、各セルが任意個の文字を含むテキストファイルの形式が知られている（例えば、非特許文献１等参照）。このようなテキストファイルの各セルに記述された値に対して特定の演算処理（例えば、非特許文献２，３等参照）を並列処理する場合、１つの単位処理で扱われるレコード数および並列数を特定する必要がある。この際、演算処理を効率的に行うためには、当該演算処理を行う演算装置のメインメモリサイズおよびキャッシュメモリサイズのみならず、入力されたテキストファイルの各レコードおよび各セルの位置および長さを考慮しなければならない。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Y. Shafranovich, “RFC4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files Status of This Memo,” [online], October, 2005, SolidMatrix Technologies, Inc., [平成３０年１月６日検索]、インターネット＜http://www.ietf.org/rfc/rfc4180.txt＞
【非特許文献２】五十嵐大，千田浩司，濱田浩気，高橋克巳，“軽量検証可能３パーティ秘匿関数計算の効率化及びこれを用いたセキュアなデータベース処理 (Secure Database Operations Using An Improved 3-party Veriable Secure Function Evaluation)，”ＩｎＳＣＩＳ２０１１，２０１１．
【非特許文献３】A. Shamir, "How to Share a Secret", Communications of the ACM, November 1979, Volume 22, Number 11, pp.612-613.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、このようなテキストファイルの各セルの長さは任意であり、また当該テキストファイルには各セルの位置および長さを表す情報は含まれていない場合も多い。そのため、各セルの位置や長さを特定するためには、入力されたテキストファイルの文字列を最初から順番に読み込まなければならない。よって、テキストファイルの各レコードおよび各セルの位置および長さを考慮し、１つの単位処理で扱われるレコード数および演算処理における並列数を特定し、効率的な演算処理を行うことは容易ではない。【０００５】
本発明はこのような点に鑑みてなされたものであり、１個以上のレコードを含み、各レコードが任意長の１個以上のセルを含み、各セルが任意個の文字を含むテキストファイルに対する演算処理を効率的に行うことを目的とする。
【課題を解決するための手段】
【０００６】
上記の課題を解決するために、テキストファイルの文字列に対する演算処理のためのパラメータ設定装置が提供される。ただし、当該テキストファイルはＷ個のレコードを含み、レコードのそれぞれは任意長のＧ個のセルを含み、セルのそれぞれは任意個の文字を含む。ＷおよびＧが１以上の整数であり、Ｇ個のセルは属性情報に対応している。Ｃがキャッシュメモリサイズ、Ｍがメインメモリサイズである。パラメータ設定装置は、最大サイズ設定部と最小サイズ設定部とエンコードサイズ設定部と演算サイズ設定部と参照サイズ設定部と処理単位算出部と並列数算出部とを有する。最大サイズ設定部は当該属性情報を入力としてテキストファイルの１レコード分の文字列のサイズの最大値Ｓｃｓｖを設定する。最小サイズ設定部は当該属性情報を入力として１レコード分の文字列のサイズの最小値ｓｃｓｖを設定する。エンコードサイズ設定部は１レコード分の文字列を所定の有限集合の元にエンコードして得られるエンコード情報の合計サイズの最大値Ｓｅｎｃを設定する。演算サイズ設定部は１レコード分のエンコード情報に特定の演算を行って得られる演算値の合計サイズの最大値Ｓｓｓを設定する。ただし、当該エンコードおよび当該演算はテキストファイルのｒレコード分の文字列である処理単位文字列ごとに実行される処理である。参照サイズ設定部は１レコード分のセルそれぞれの位置および長さを表す参照情報の合計サイズＳｒｅｆを設定する。処理単位算出部はレコード数ｒとしてＣ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値を得る。並列数算出部は演算処理における並列数ｎｐとしてｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値を得る。ただし、Ｉが処理単位文字列ごとに実行されるエンコードおよび演算の繰り返し回数の最大値であり、Ｓｒｅｆ≧Ｓｓｓのときｍａｘ（Ｓｒｅｆ，Ｓｓｓ）＝Ｓｒｅｆであり、Ｓｒｅｆ＜Ｓｓｓのときｍａｘ（Ｓｒｅｆ，Ｓｓｓ）＝Ｓｓｓであり、ｆ０がｓｃｓｖ・Ｍ／（ｓｃｓｖ＋Ｓｅｎｃ＋ｍａｘ（Ｓｒｅｆ，Ｓｓｓ））の関数値である。
【発明の効果】
【０００７】
以上により、１個以上のレコードを含み、各レコードが任意長の１個以上のセルを含み、各セルが任意個の文字を含むテキストファイルに対する演算処理を効率的に行うことができる。
【図面の簡単な説明】
【０００８】
【図１】図１は実施形態の演算システムを例示したブロック図である。
【図２】図２は実施形態のパラメータ設定装置の機能構成を例示したブロック図である。
【図３】図３は実施形態のサーバ装置の機能構成を例示したブロック図である。
【図４】図４は実施形態の処理部の機能構成を例示したブロック図である。
【図５】図５は実施形態のパラメータ設定処理を例示するためのフロー図である。
【図６】図６は実施形態の演算処理を例示するためのフロー図である。
【図７】図７は実施形態のスレッドｉの処理を例示するためのフロー図である。
【図８】図８は実施形態の各スレッドの処理を例示するための概念図である。
【図９】図９は実施形態のテキストファイルを例示するための概念図である。
【図１０】図１０は実施形態のテキストファイルを例示するための概念図である。
【図１１】図１１は実施形態のテキストファイルを例示するための概念図である。
【図１２】図１２は実施形態のテキストファイルを例示するための概念図である。
【図１３】図１３は実施形態のスレッドｉの処理を例示するためのフロー図である。
【図１４】図１４は実施形態の各スレッドの処理を例示するための概念図である。
【図１５】図１５は実施形態のスレッドｉの処理を例示するための概念図である。
【図１６】図１６は実施形態のスレッドｉの処理を例示するための概念図である。
【図１７】図１７は実施形態のスレッドｉの処理を例示するための概念図である。
【図１８】図１８は実施形態のスレッドｉの処理を例示するための概念図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態を説明する。
［概要］
まず概要を説明する。
＜テキストファイル＞
各実施形態ではテキストファイルの文字列に対する演算処理を行う。このテキストファイルはＷ個のレコードを含み、レコードのそれぞれは任意長のＧ個のセルを含み、セルのそれぞれは任意個の文字を含む。ただし、各セルの長さには各セルの属性に応じた上限がある。ＷおよびＧが１以上の整数である。例えば、ＷおよびＧの少なくとも一方は２以上の整数である。Ｗが２以上の整数であってもよいし、Ｇが２以上の整数であってもよいし、ＷおよびＧの両方が２以上の整数であってもよい。Ｗが２以上の整数である場合、互いに隣接するレコードの間にはレコードの区切りを特定するための情報が存在する。例えば、互いに隣接するレコードの間に改行が存在し、複数のレコードは改行によって互いに区切られている。また、Ｇが２以上の整数である場合、互いに隣接するセルの間にはセル間の区切りを特定するための情報が存在する。例えば、互いに隣接するセルの間に区切り文字または改行が存在し、複数のセルは区切り文字または改行によって互いに区切られている。区切り文字の例はカンマ「，」である。その他の例として、互いに隣接するセルの間にタブまたは改行が存在してもよいし、互いに隣接するセルの間に半角スペースまたは改行が存在してもよい。Ｗが２以上の整数である場合、各レコードに含まれるセルの個数Ｇは互いに同一である。各レコードのＧ個のセルは属性情報（「スキーマ」とも呼ぶ）に対応している。属性情報は各セルがどのような属性の情報であるかを表しており、少なくとも各セルで表される文字列のサイズ（データ量）の最大値と最小値とを特定または推定するための情報を含んでいる。例えば、属性情報はセルがどのような有限集合の元を表しているのか示す情報を含んでいる。例えば、属性情報は「セルがｐを法とした剰余（ｍｏｄ ｐ）を表していること（ｐは正整数）」を表していてもよいし、「セルが所定個（例えば１０個）の所定の有限体（例えば拡大体ＧＦ（２８））の要素で表現される文字列であること」を表していてもよいし、「セルが所定の整数型の整数（例えば、符号付き３２ビット整数）を表す文字列であること」を表していてもよい。Ｇ個の属性情報のそれぞれが各レコードのＧ個のセルのそれぞれに一対一で対応していてもよいし（すなわち、１個の属性情報が１個のセルの属性を表していてもよい）、１個の属性情報が各レコードの複数個（例えばＧ個）のセルに対応していてもよい（すなわち、１個の属性情報が複数個のセルの属性を表していてもよい）。前者の場合、１つのレコードに属する複数のセルの属性が互いに異なっていてもよいし、互いに同一であってもよい。また、Ｗが２以上の整数である場合、すべてのレコードのＧ個のセルに対応する「Ｇ個の属性の組」は互いに同一である。すなわち、すべてのレコードが有するｇ番目（ただし、ｇ＝１，…，Ｇ）のセルの属性ａｔｔ（ｇ）は互いに同一である。その他、属性情報がセルが表す情報の種別を表現していてもよい。また属性情報はテキストファイルに含まれていてもよいし（例えば、テキストファイルのヘッダが属性情報あってもよい）、含まれていなくてもよい。テキストファイルの例は、ＣＳＶ（Comma-Separated Values）ファイル、ＴＳＶ（tab-separated values）ファイル、ＳＳＶ（space-separated values）などである。これらはＣＳＶ（character-separated values）ファイルやＤＳＶ（delimiter-separated values）ファイルとして総称される。
【００１０】
＜パラメータ設定装置＞
パラメータ設定装置は、テキストファイルの文字列に対する「演算処理」のためのパラメータを設定して出力する。この「演算処理」はどのようなものであってもよい。「演算処理」の例は秘密分散処理、秘密計算処理（例えば、非特許文献１，２等参照）、暗号化処理、署名生成処理などである。パラメータ設定装置が設定するパラメータは、１つの単位処理で扱われるレコード数および演算処理における並列数である。好ましくは、パラメータ設定装置は、さらにテキストファイルからまとめて読み込まれるデータのファイルバッファサイズも設定する。以下では、テキストファイルの文字列に対する演算処理を行う演算装置のキャッシュメモリのキャッシュメモリサイズ（キャッシュメモリの記憶容量）をＣと表記し、メインメモリのメインメモリサイズ（メインメモリの記憶容量）をＭと表記する。
【００１１】
パラメータ設定装置は、最大サイズ設定部と最小サイズ設定部とエンコードサイズ設定部と演算サイズ設定部と参照サイズ設定部と処理単位算出部と並列数算出部とを有する。ファイルバッファサイズも設定される場合、パラメータ設定装置はさらにバッファサイズ算出部も有する。
【００１２】
最大サイズ設定部は属性情報を入力としてテキストファイルの１レコード分の文字列のサイズの最大値Ｓｃｓｖを設定して出力する。最大値Ｓｃｓｖはテキストファイルの各レコードの文字列のサイズを大きめに見積もったレコードサイズである。すなわち、属性情報が表す各セルのサイズの最大値（またはその推定値）を１レコード分合計したものが最大値Ｓｃｓｖである。前述のように、属性情報は各セルで表される文字列のサイズの最大値を特定または推定するための情報を含み、最大サイズ設定部はこの情報を用いて最大値Ｓｃｓｖを設定する。例えば、属性情報が「セルが符号付き３２ビット整数を表す文字列であること」を表す場合、当該セルのサイズの最大値は１１バイト（符号のための１バイト＋１１桁の整数のための１０バイト）である。
【００１３】
最小サイズ設定部は属性情報を入力として１レコード分の文字列のサイズの最小値ｓｃｓｖを設定して出力する。最小値ｓｃｓｖはテキストファイルの各レコードの文字列のサイズを小さめに見積もったレコードサイズである。すなわち、属性情報が表す各セルのサイズの最小値（またはその推定値）を１レコード分合計したものが最小値ｓｃｓｖである。前述のように、属性情報は各セルで表される文字列のサイズの最小値を特定または推定するための情報を含み、最小サイズ設定部はこの情報を用いて最小値ｓｃｓｖを設定する。例えば、属性情報が「セルが符号付き３２ビット整数を表す文字列であること」を表す場合、当該セルのサイズの最小値は１バイトである。
【００１４】
エンコードサイズ設定部は１レコード分の文字列を所定の有限集合の元にエンコード（変換）して得られるエンコード情報の合計サイズの最大値Ｓｅｎｃを設定して出力する。最大値Ｓｅｎｃは１レコード分のエンコード情報の合計サイズを大きめに見積もったレコードサイズである。エンコード情報が属する「所定の有限集合」の例は、ｐを法とした剰余（ｍｏｄ ｐ）で表される有限集合、所定ビットで表現される値の有限集合、所定のビット数の所定の整数型の整数で表現される有限集合などである。この「所定の有限集合」は次に述べる「演算」の内容に応じて予め定められている。最大値Ｓｅｎｃは、例えば、エンコード情報が属する所定の有限集合および属性情報から特定される。例えば、属性情報が「セルが２６１を法とした剰余（ｍｏｄ ２６１）を表していること」を表しており、このセルの文字列が２６１を法とした剰余（ｍｏｄ ２６１）で表現されるエンコード情報にエンコードされる場合、当該セルに対応するエンコード情報の最大サイズは８バイトになる。エンコード情報が属する所定の有限集合は、例えば、予め定められている。
【００１５】
演算サイズ設定部は１レコード分のエンコード情報に特定の「演算」を行って得られる演算値の合計サイズの最大値Ｓｓｓを設定して出力する。最大値Ｓｓｓは１レコード分の演算値の合計サイズを大きめに見積もったレコードサイズである。この「演算」の例は秘密分散、秘密計算、暗号化、署名生成などである。「演算」は各セルを披演算子として行われるものであってもよいし、複数のセルを披演算子として行われるものであってもよい。最大値Ｓｓｓは、例えば、エンコード情報が属する所定の有限集合、「演算」の内容、および属性情報から特定される。例えば、属性情報が「セルが２６１を法とした剰余（ｍｏｄ ２６１）を表していること」を表しており、このセルの文字列が２６１を法とした剰余（ｍｏｄ ２６１）で表現されるエンコード情報にエンコードされており、「演算」が各セルの値をShamir秘密分散方式（例えば、非特許文献３）でＮ（ただし、Ｎは正整数）個のパーティに秘密分散するものである場合、当該セルに対応する演算値の最大サイズは８Ｎバイトになる。
【００１６】
参照サイズ設定部はテキストファイル内の１レコード分のセルそれぞれの位置および長さを表す参照情報の合計サイズＳｒｅｆを設定して出力する。「セルの位置」は、例えばセルの先頭文字の位置であってもよいし、セルの最終文字の位置であってもよいし、その他のセル内の文字の位置であってもよい。「セルの位置を表す情報」は、例えば、テキストファイルの文字列の先頭の文字から「セルの位置」の文字までの文字数であってもよいし、この文字数の関数値であってもよい。「セルの長さを表す情報」は、例えば、セルの文字数であってもよいし、この文字数の関数値であってもよい。参照情報は例えば属性情報から特定される。属性情報によって１レコードに属するセルの個数を特定できるからである。各セルの位置および長さを表すために必要なデータサイズはそれを表現する形式によって定まる。例えば、各セルの位置および長さを符号なし６４ビット整数で表す場合、各セルの参照情報は１６バイトになる。
【００１７】
上述した「エンコード」および「演算」はテキストファイルのｒレコード分の文字列である処理単位文字列ごとに実行される。処理単位文字列ごとに実行される処理を「単位処理」と呼ぶことにする。処理単位算出部は１回の単位処理で処理されるレコード数ｒを表す「Ｃ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値」を得て（レコード数ｒとしてＣ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値を得て）出力する。キャッシュメモリサイズＣは、予め定められたものであってもよいし、入力されたものであってもよい。最大値Ｓｃｓｖは最大サイズ設定部で得られたものであり、最大値Ｓｅｎｃはエンコードサイズ設定部で得られたものであり、合計サイズＳｒｅｆは参照サイズ設定部で得られたものである。「αの関数値」はαそのものであってもよいし、αに対応するその他の値であってもよい。「αの関数値」の例は、α以上の最小の整数、α以下の最大の整数、αに最も近い整数などである。例えば、r=C/(Scsv+Senc+Sref)であってもよいし、r=ROUNDUP(C/(Scsv+Senc+Sref))であってもよいし、r=ROUNDDOWN(C/(Scsv+Senc+Sref))であってもよいし、r=ROUND(C/(Scsv+Senc+Sref))であってもよい。ただし、ROUNDUP(α)はαを整数値に切り上げる切り上げ関数であり、ROUNDDOWN(α)はαを整数値に切り捨てる切り捨て関数であり、ROUND(α)はαをαに最も近い関数に丸める丸め整数である。ここで、Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆは、処理部が、テキストファイルから１レコード分の文字列を読み込み、参照情報を参照しながら、エンコード情報にエンコードして秘密分散などの「演算」を行うまでの処理（以下、「１レコード分の一連の処理」という）のために必要なメモリサイズを表す。このメモリサイズがキャッシュメモリサイズ以下であれば、途中でメインメモリからデータを読み込むことなく高速に１レコード分の一連の処理を実行できる。Ｃ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）は、何回分の「１レコード分の一連の処理」に必要なメモリサイズ（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）をキャッシュメモリに確保できるかを表すものである。Ｃ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）に対応するレコード数ｒの文字列を処理単位文字列とすることで、ｒレコード分の処理を行う際のメインメモリへのアクセス回数を削減し、高速に演算を行うことができる。
【００１８】
並列数算出部は演算処理における並列数ｎｐを表す「ｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値」を得て（並列数ｎｐとしてｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値を得て）出力する。例えば、np=f0/I・r・Scsvであってもよいし、np=ROUNDUP(f0/I・r・Scsv)であってもよいし、np=ROUNDDOWN(f0/I・r・Scsv)であってもよいし、np=ROUND(f0/I・r・Scsv)であってもよい。ｆ０はｓｃｓｖ・Ｍ／（ｓｃｓｖ＋Ｓｅｎｃ＋ｍａｘ（Ｓｒｅｆ，Ｓｓｓ））の関数値である。例えば、f0=scsv・M/(scsv+Senc+max(Sref,Sss))であってもよいし、f0=ROUNDUP(scsv・M/(scsv+Senc+max(Sref,Sss)))であってもよいし、ｆ０=ROUNDDOWN(scsv・M/(scsv+Senc+max(Sref,Sss)))であってもよいし、ｆ０=ROUND(scsv・M/(scsv+Senc+max(Sref,Sss)))であってもよい。ただし、Ｓｒｅｆ≧Ｓｓｓのときｍａｘ（Ｓｒｅｆ，Ｓｓｓ）＝Ｓｒｅｆであり、Ｓｒｅｆ＜Ｓｓｓのときｍａｘ（Ｓｒｅｆ，Ｓｓｓ）＝Ｓｓｓである。Ｉは処理単位文字列ごとに実行される「エンコード」および「演算」の繰り返し回数の最大値である。例えば、Ｉは処理単位文字列ごとに実行される「エンコード」および「演算」の繰り返し回数である。メインメモリサイズＭは、予め定められたものであってもよいし、入力されたものであってもよい。最小値ｓｃｓｖは最小サイズ設定部で設定されたものであり、最大値Ｓｅｎｃはエンコードサイズ設定部で設定されたものであり、最大値Ｓｓｓは演算サイズ設定部で設定されたものであり、合計サイズＳｒｅｆは参照サイズ設定部で設定されたものであり、繰り返し回数の最大値Ｉは予め定められたものである。好ましくは、繰り返し回数の最大値Ｉは、ｒレコード分の文字列である処理単位文字列の「エンコード」および「演算」を行うための合計処理量に対する、前処理の合計処理量（演算数の合計）の比率が所定値以下となるように定められている。ｒは処理単位算出部で得られたものであってもよいし、Ｃ，Ｓｃｓｖ，Ｓｅｎｃ，Ｓｒｅｆから得られたものであってもよい。すなわち、ｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値が得られるのであれば、必ずしもｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値の生成に処理単位算出部で得られたｒが用いられなくてもよい。ここで、Ｘ＝（ｓｃｓｖ＋Ｓｅｎｃ＋ｍａｘ（Ｓｒｅｆ，Ｓｓｓ））／ｓｃｓｖは、１レコード分の一連の処理に必要なメモリサイズが、テキストファイルから読み込まれた１レコード分の文字列のメモリサイズの最大何倍であるかを表している。そのため、Ｓｃｓｖ・Ｘは１レコード分の一連の処理に必要なメモリサイズの最大値を表し、Ｉ・ｒ・Ｓｃｓｖ・Ｘはｒレコード分の一連の処理をＩ回繰り返すために必要なメモリサイズの最大値を表す。ｆ０はｓｃｓｖ・Ｍ／（ｓｃｓｖ＋Ｓｅｎｃ＋ｍａｘ（Ｓｒｅｆ，Ｓｓｓ））＝Ｍ／Ｘの関数値であるため、ｆ０／Ｉ・ｒ・Ｓｃｓｖは、メインメモリサイズＭが「ｒレコード分の一連の処理（「１レコード分の一連の処理」をｒレコード分行う処理）」をＩ回繰り返す処理に必要なメモリサイズの何倍であるか、を表す。そのため、ｆ０／Ｉ・ｒ・Ｓｃｓｖに対応する値を並列数ｎｐとすることでメインメモリのバッファオーバーフローを抑制できる。なお、エンコードの際には参照情報が必要となるため、Ｓｒｅｆの領域をメインメモリに確保しておく必要がある。一方、エンコード後の秘密分散などの「演算」の際には参照情報は必要ないが、得られた演算値を格納するＳｓｓの領域をメインメモリに確保する必要がある。すなわち、ＳｒｅｆおよびＳｓｓの両方の領域が同時に必要となることはない。ｍａｘ（Ｓｒｅｆ，Ｓｓｓ）の領域をメインメモリに確保できれば十分である。
【００１９】
バッファサイズ算出部は、演算処理の際にテキストファイルの文字列からまとめて読み込まれるデータのファイルバッファサイズｆを表す「ｆ０／ｎｐの関数値」を得て（ファイルバッファサイズｆとしてｆ０／ｎｐの関数値を得て）出力する。例えば、f=f0/npであってもよいし、f=ROUNDUP(f0/np)であってもよいし、f=ROUNDDOWN(f0/np)であってもよいし、f=ROUND(f0/np)であってもよい。ｆ０は上述の通りであり、ｎｐは並列数算出部で得られたものであってもよいし、ｆ０，Ｉ，ｒ，Ｓｃｓｖから得られたものであってもよい。すなわち、ｆ０／ｎｐの関数値が得られるのであれば、必ずしもｆ０／ｎｐの関数値の生成に並列数算出部で得られたｎｐが用いられなくてもよい。ここで、ｎｐ＝ｆ０／Ｉ・ｒ・Ｓｃｓｖとするとｆ０／ｎｐ＝Ｉ・ｒ・Ｓｃｓｖとなる。これは、ｒレコード分の処理をＩ回繰り返すためにテキストファイルから読み込まれる文字列のファイルバッファサイズｆに対応する。ファイルバッファサイズｆが大きいほうがシーケンシャルアクセルに近くなり高速だが、必要なメインメモリの記憶容量が大きくなる。上述のように得られたファイルバッファサイズｆは、予め定められたメインメモリサイズＭの制約の中で高速な処理を実現するものである。
【００２０】
＜演算装置（一般版）＞
演算装置は入力されたテキストファイルの文字列に対する演算処理を行う。演算装置はこの演算処理でパラメータ設定装置で得られたレコード数ｒおよび並列数ｎｐを用いる。パラメータ設定装置でさらにファイルバッファサイズｆが得られる場合には、演算装置はこの演算処理でさらにパラメータ設定装置で得られたファイルバッファサイズｆを用いる。パラメータ設定装置でファイルバッファサイズｆが得られない場合、演算装置はファイルバッファサイズｆとして予め定められた値を用いてもよいし、属性情報に対応するその他のファイルバッファサイズｆが用いられてもよい。
【００２１】
テキストファイルが秘密分散などの「演算」の対象ではない文字を含む場合がある。例えば、ＣＳＶファイルにおけるカンマはセルの区切りを表す文字であって「演算」の対象ではない。ＣＳＶファイルではセルの文字列がダブルクォーテーション「“」「”」で囲まれる場合があるが、ダブルクォーテーションも「演算」の対象ではない。改行を表す文字（例えば、￥ｎ）なども「演算」の対象ではない（これらのダブルクォーテーション「“」「”」はセルに含まれない）。このような「演算」の対象ではない文字を「特殊文字」と呼ぶことにする。セル内において特殊文字の前にエスケープ文字を付加し、特殊文字を「演算」の対象の文字と扱うことを許す形式もある。このような場合、セル内の各文字単独でその文字が「演算」の対象を表すか否かを判別できず、セル間の区切りを判別できないことがある。例えば、「演算」の対象としてダブルクォーテーション「“」を用いる場合に、エスケープ文字として「“」をさらに付加する形式がある。例えば、セルの「１２３“４５６」という値を「演算」の対象とする場合に、当該セルを“１２３““４５６”と表記する場合がある。このような場合、セル“１２３““４５６”を先頭から順番に読んでいかなければセル間の区切りを判別できない。例えば、後半の“４５６”のみが読み込まれた場合、これが「４５６」を表す１つのセルであるのか、「“４５６」を含む値を表すセルの一部であるのかを判別できない。その他、「演算」の対象として改行を表す文字「￥ｎ」を用いる場合に、エスケープ文字として「￥」をさらに付加する形式もある。例えば、セルの「１２３￥ｎ４５６」という値を「演算」の対象とする場合に、当該セルを“１２３￥￥ｎ４５６”と表記する場合がある。このような場合、セル“１２３￥￥ｎ４５６”を先頭から順番に読んでいかなければセル間の区切りを判別できない。このような場合、テキストファイルの各セルの位置および長さを特定する処理を並列に行うことはできず、この処理をテキストファイルの先頭から順番に行っていかなければならない。
【００２２】
このような形式のテキストファイルに対応可能な演算装置はメインメモリとキャッシュメモリと複数の処理部とを有する。各処理部は、読み込み部とファイル読み込みロック解除部とパース部とバッファ境界ロック解除部とエンコード部と演算部と並列性ロック解除部とを有する。これら複数の処理部は何れかのスレッドの処理に割り当てられる。スレッドｉの処理を行う処理部は以下の処理を行う。なお、ｉは各スレッドを表し、ｉ∈｛０，…，Ｔ−１｝であり、Ｔがテキストファイルの文字列のサイズＴＳに対応するスレッド数を表す正整数であり、１≦ｎｐ≦Ｔである。例えば、各スレッドｉでテキストファイルから読み込まれる文字列のサイズＴＳｉについてＴＳ＝ＴＳ０＋…＋ＴＳＴ−１もしくはＴＳ≦ＴＳ０＋…＋ＴＳＴ−１を満たす、または、ｆ・Ｔ≧ＴＳを満たす。また、初期状態でスレッド０のファイル読み込みロックおよびバッファ境界ロックならびにスレッド０，…，ｎｐ−１の並列性ロックが解除されているものとする。
【００２３】
読み込み部は、スレッドｉのファイル読み込みロックおよび並列性ロックが解除された後、テキストファイルの文字列からファイルバッファサイズｆの領域に格納可能な文字列Ｓｉを読み込んでメインメモリに格納する。ｉ＝０の場合、文字列Ｓ０はテキストファイルの先頭の文字を先端とする「ファイルバッファサイズｆの領域に格納可能なデータ量の文字列」である。ｉ≧１の場合、文字列Ｓｉはスレッドｉ−１で読み込まれた文字列Ｓｉ‐１の終端の文字の直後の文字を先端とする「ファイルバッファサイズｆの領域に格納可能なデータ量の文字列」である。「ファイルバッファサイズｆの領域に格納可能な文字列」は、例えば、ファイルバッファサイズｆの領域に格納可能な最長の文字列であってもよいし、ファイルバッファサイズｆから定数を減じたサイズの領域に格納可能な最長の文字列であってもよい。
【００２４】
文字列Ｓｉがメインメモリに格納された後、ファイル読み込みロック解除部がスレッドｉ＋１のファイル読み込みロックを解除する。これにより、複数のスレッドでのメインメモリへのアクセスが互いに競合することを防止できる。ただし、ｉ＋１＞Ｔに対応するスレッドは存在せず、存在しないスレッドのファイル読み込みロックは解除されない。
【００２５】
スレッドｉのバッファ境界ロックが解除された後、パース部が文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算してメインメモリに格納する。例えば、パース部は文字列Ｓｉの各セルを特定し、特定した各セルの参照情報を計算してメインメモリに格納する。例えば、パース部はセルの境界に位置する情報（例えば、区切り文字または改行）に基づいて各セルを特定し、特定した各セルの参照情報を計算してメインメモリに格納する。ｉ＝０の場合、文字列Ｓ０に含まれる終端の文字がセルの終端である場合とセルの終端でない場合がある。文字列Ｓ０に含まれる終端の文字がセルの終端でない場合、スレッド０では終端の文字を含むセルを特定できず、その参照情報も計算できない。ｉ≧１の場合、文字列Ｓｉの始端の文字がセルの始端である場合とセルの始端でない場合があり、文字列Ｓｉに含まれる終端の文字がセルの終端である場合とセルの終端でない場合がある。文字列Ｓｉの始端の文字がセルの始端でない場合、文字列Ｓｉのみから文字列Ｓｉの始端の文字を含むセルを特定できない。この場合、パース部は、文字列Ｓｉ−１のうちスレッドｉ−１で特定されたセルに含まれない文字と、文字列Ｓｉとを用い、文字列Ｓｉの始端の文字を含むセルを特定する。文字列Ｓｉに含まれる終端の文字がセルの終端でない場合、スレッドｉでは終端の文字を含むセルを特定できず、その参照情報も計算できない。なお、テキストデータの終端の文字列ＳＴ−１に含まれる終端の文字はセルの終端である。特定されたセルに対応する参照情報を用いることにより、当該セルが属するレコードと当該セルに対応する属性（例えば、当該レコードの最初から何番目の属性であるかを表す情報）とを特定できる。パース部は、メインメモリに参照情報を格納する領域が足りなくなったときに、ｒレコード分の参照情報を格納するためのバッファ領域をメインメモリにまとめて確保する。バッファ領域の確保には所定の処理（オーバーヘッド）が必要である。１レコードごとにバッファ領域を確保するのではなく、単位処理に対応するｒレコードごとにバッファ領域をまとめて確保することで、オーバーヘッドを抑制しつつ、可変長のレコードを処理できる。
【００２６】
文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報が計算された後、バッファ境界ロック解除部がスレッドｉ＋１のバッファ境界ロックを解除する。ｉ＋１＞Ｔに対応するスレッドは存在せず、存在しないスレッドのバッファ境界ロックは解除されない。
【００２７】
スレッドｉ＋１のバッファ境界ロックの解除後、エンコード部は、参照情報によって特定される情報に基づいて、テキストデータから結合文字列ＣＳｉに含まれる処理対象のｒレコード分の文字列である処理単位文字列ＰＳｉ，ｊを選択し、選択した処理単位文字列ＰＳｉ，ｊを所定の有限集合の元であるエンコード情報Ｅｉ，ｊにエンコードする処理を、キャッシュメモリを利用して行う。処理単位文字列ＰＳｉ，ｊの始端は何れかのレコードの始端であり、処理単位文字列ＰＳｉ，ｊの終端は何れかのレコードの終端である。ｉ＝０の場合の結合文字列ＣＳ０はＳ０であり、ｉ≧１の場合の結合文字列ＣＳｉは結合文字列ＣＳｉ‐１の直後に文字列Ｓｉを結合したものであり、Ｊが正整数であり、ｊ＝０，…，Ｊ−１である。例えば、文字列Ｓｉの文字数がｒレコード分の文字数以上である場合、エンコード部は、文字列Ｓｉから処理単位文字列ＰＳｉ，ｊを選択するか、または、文字列Ｓｉと文字列Ｓｉ‐１とを結合した文字列から処理単位文字列ＰＳｉ，ｊを選択する。文字列Ｓｉの文字数がｒレコード分の文字数未満である場合、エンコード部は文字列Ｓｉから文字列Ｓｉ’までを結合した文字列から処理単位文字列ＰＳｉ，ｊを選択する。ただし、０≦ｉ’≦ｉ−１である。ｉ＝０の場合、エンコード部は文字列Ｓ０の先頭から処理単位文字列ＰＳ０，０，…，ＰＳ０，Ｊ−１を選択する。ｉ≧１の場合、エンコード部は文字列Ｓｉ−１のうち処理単位文字列として選択されていない文字を先頭とした処理単位文字列ＰＳｉ，０，…，ＰＳｉ，Ｊ−１を選択する。Ｊ≧２の場合、ＰＳｉ，ｊ−１の直後にＰＳｉ，ｊが続く。
【００２８】
エンコード部は処理単位文字列ＰＳｉ，ｊごとにエンコードを行う。テキストデータではコード指向でデータが並び（レコード１，レコード２，…，レコードＷの順序でデータが並ぶ）、すべてのレコードは互いに同一の「属性の組」に対応する。一般に、異なる種類のデータを続けて処理するよりも、同種のデータを続けて処理した方が処理速度が速い。そのため、エンコード部は、処理単位文字列ＰＳｉ，ｊのうち同じ属性情報に対応するｒレコード分のｒ個のセルのエンコードを続けて行うことが望ましい。エンコード部は参照情報によって特定される情報に基づいて処理単位文字列ＰＳｉ，ｊを選択し、選択した処理単位文字列ＰＳｉ，ｊをエンコード情報Ｅｉ，ｊにエンコードする。この処理の過程で必要となるｒレコード分の参照情報、処理単位文字列ＰＳｉ，ｊ、エンコード情報Ｅｉ，ｊをキャッシュメモリに格納して演算を行うことで高速な処理が可能となる。前述のようにＣ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）に対応するレコード数ｒを用いることで、このような処理が可能となっている。
【００２９】
演算部は、エンコード情報Ｅｉ，ｊに特定の「演算」を行って演算値ＳＳｉ，ｊを得てメインメモリに格納する処理を、キャッシュメモリを利用して行う。演算部は、同じ属性情報に対応するｒレコード分のｒ個のセルに対応する「演算」を続けて行うことが望ましい。この処理の過程でもｒレコード分の参照情報、処理単位文字列ＰＳｉ，ｊ、エンコード情報Ｅｉ，ｊをキャッシュメモリに格納して演算を行うことで高速な処理が可能となる。
【００３０】
演算値ＳＳｉ，ｊが得られた後、並列性ロック解除部はスレッドｉ＋ｎｐの並列性ロックを解除する。ただし、ｉ＋ｎｐ＞Ｔに対応するスレッドは存在せず、存在しないスレッドの並列性ロックは解除されない。その後、スレッドｉの処理を行っていた処理部が開放され、当該処理部が他のスレッドの処理を行うことが可能になる。
【００３１】
＜演算装置（高速版）＞
テキストファイルの各セルが、単独で「演算」の対象を表すか否かを判別可能な文字のみを含む場合、テキストファイルの各セルの位置および長さを特定する処理を並列に行うことができ、さらに高速な演算が可能となる。例えば、エスケープ文字を使用していないテキストファイルの場合にはこのような並列処理が可能になる。このようなテキストファイルに対応可能な演算装置はメインメモリとキャッシュメモリと複数の処理部とを有する。各処理部は、読み込み部とファイル読み込みロック解除部とパース部とセル特定部とバッファ境界ロック解除部とエンコード部と演算部と並列性ロック解除部とを有する。これら複数の処理部は何れかのスレッドの処理に割り当てられる。スレッドｉの処理を行う処理部は以下の処理を行う。初期状態でスレッド０のファイル読み込みロックならびにバッファ境界ロックおよびスレッド０，…，ｎｐ−１の並列性ロックが解除されているものとする。
【００３２】
読み込み部は、スレッドｉのファイル読み込みロックおよび並列性ロックが解除された後、テキストファイルの文字列からファイルバッファサイズｆの領域に格納可能な文字列Ｓｉを読み込んでメインメモリに格納する。この詳細は演算装置（一般版）と同じである。
【００３３】
文字列Ｓｉがメインメモリに格納された後、ファイル読み込みロック解除部がスレッドｉ＋１のファイル読み込みロックを解除する。この詳細は演算装置（一般版）と同じである。
【００３４】
パース部が文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算してメインメモリに格納する。パース部はスレッドｉのバッファ境界ロックが解除される前にこの処理を開始できる。すなわち、パース部は、ｉ≧１において、文字列Ｓｉ−１に含まれる各セルの位置および長さを表す参照情報の計算が終わる前に、文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報の計算を開始できる。例えば、パース部は文字列Ｓｉのセルを特定し、特定した各セルの参照情報を計算してメインメモリに格納する。例えば、パース部はセルの境界に位置する情報（例えば、区切り文字または改行）に基づいてセルを特定し、特定した各セルの参照情報を計算してメインメモリに格納する。ｉ＝０の場合、文字列Ｓ０に含まれる終端の文字がセルの終端である場合とセルの終端でない場合がある。文字列Ｓ０に含まれる終端の文字がセルの終端でない場合、パース部は終端の文字を含むセルを特定できず、その参照情報も計算できない。ｉ≧１の場合、文字列Ｓｉの始端の文字がセルの始端である場合とセルの始端でない場合があり、文字列Ｓｉに含まれる終端の文字がセルの終端である場合とセルの終端でない場合がある。文字列Ｓｉの始端の文字がセルの始端でない場合、パース部は文字列Ｓｉの始端の文字を含むセルを特定できず、その参照情報も計算できない。文字列Ｓｉに含まれる終端の文字がセルの終端でない場合、パース部は終端の文字を含むセルを特定できず、その参照情報も計算できない。なお、終端の文字列ＳＴ−１に含まれる終端の文字はセルの終端である。なお、パース部は、メインメモリに参照情報を格納する領域が足りなくなったときに、ｒレコード分の参照情報を格納するためのバッファ領域をメインメモリにまとめて確保する。これにより、オーバーヘッドを抑制しつつ、可変長のレコードを処理できる。
【００３５】
ｉ≧１の場合、文字列Ｓｉは文字列Ｓｉ‐１の直後に続く文字列である。ｉ≧１の場合、セル特定部は、スレッドｉのバッファ境界ロックが解除された後、参照情報と文字列Ｓｉ‐１と文字列Ｓｉとを用い、文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセルの位置に対応する情報Ａｉを得てメインメモリに格納する。情報Ａｉは、例えば、文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセルが属するレコードを表す情報と当該セルに対応する属性を表す情報（例えば、当該レコードの最初から何番目の属性に対応するかを表す情報）であってもよいし、文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセルの位置および長さを表す情報であってもよい。文字列Ｓｉ‐１の終端がセルの終端である場合には文字列Ｓｉの先頭のセルが「文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセル」となる。この場合には情報Ａｉのメインメモリへの格納が省略されてもよい。一方、文字列Ｓｉ‐１の終端がセルの終端でない場合、文字列Ｓｉは文字列Ｓｉ‐１と文字列Ｓｉとを用い、「文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセル」を生成して情報Ａｉを得る。これにより、パース部が特定できなかったセルの位置に対応する情報が得られる。参照情報と情報Ａｉとによってテキストファイルの各セルが属するレコードと当該セルに対応する属性（例えば、当該レコードの最初から何番目の属性であるかを表す情報）とを特定できる。なお、ｉ＝０の場合、セル特定部は何もしない。
【００３６】
バッファ境界ロック解除部は、情報Ａｉが得られた後にスレッドｉ＋１のバッファ境界ロックを解除する。この詳細は演算装置（一般版）と同じである。その後、スレッドｉの処理を行っていた処理部が開放され、当該処理部が他のスレッドの処理を行うことが可能になる。
【００３７】
その後エンコード部は、参照情報および情報Ａｉによって特定される情報に基づいて、結合文字列ＣＳｉに含まれる処理対象のｒレコード分の文字列である処理単位文字列ＰＳｉ，ｊを選択し、処理単位文字列ＰＳｉ，ｊを所定の有限集合の元であるエンコード情報Ｅｉ，ｊにエンコードする処理を、キャッシュメモリを利用して行う。この詳細は参照情報に加えて情報Ａｉを用いる以外、演算装置（一般版）と同じである。
【００３８】
演算部は、エンコード情報Ｅｉ，ｊに特定の「演算」を行って演算値ＳＳｉ，ｊを得てメインメモリに格納する処理を、キャッシュメモリを利用して行う。この詳細は演算装置（一般版）と同じである。
【００３９】
演算値ＳＳｉ，ｊが得られた後、並列性ロック解除部はスレッドｉ＋ｎｐの並列性ロックを解除する。この詳細は演算装置（一般版）と同じである。
【００４０】
［第１実施形態］
図面を用いて第１実施形態を説明する。第１実施形態では、パラメータ設定装置が１つの単位処理で扱われるレコード数ｒ、並列数ｎｐ、ファイルバッファサイズｆを設定し、演算装置（一般版）がエスケープ文字の使用が可能なＣＳＶ（Comma-Separated Values）ファイル（テキストファイル）の秘密分散（演算）を行う例を説明する。以下では、これまで説明した事項との相違点を中心に説明し、既に説明した事項については説明を省略する場合がある。
【００４１】
＜構成＞
図１に例示するように、本実施形態の演算システム１は、パラメータ設定装置１１、演算装置１２、およびＮ個のサーバ装置１３−１〜１３−Ｎを有する。ただし、Ｎは２以上の正整数である。パラメータ設定装置１１から演算装置１２への情報の伝達が可能であり、演算装置１２からサーバ装置１３−１〜１３−Ｎへの情報の伝達が可能である。なお、情報の伝達はネットワークを介して行われてもよいし、その他の通信手段を用いて行われてもよいし、可搬型の記録媒体を介して行われてもよい。
【００４２】
図２に例示するように、パラメータ設定装置１１は、入力部１１１ａ、出力部１１１ｂ、記憶部１１２、制御部１１３、最大サイズ設定部１１４ａ、最小サイズ設定部１１４ｂ、エンコードサイズ設定部１１４ｃ、演算サイズ設定部１１４ｄ、参照サイズ設定部１１４ｅ、処理単位算出部１１４ｆ、並列数算出部１１４ｇ、およびバッファサイズ算出部１１４ｈを有する。パラメータ設定装置１１は、制御部１１３の制御の下で各処理を実行する。パラメータ設定装置１１で得られた各値は記憶部１１２に格納され、必要に応じて記憶部１１２から読み出されて他の処理に用いられる。
【００４３】
図３に例示するように、演算装置１２は、入力部１２１ａ、出力部１２１ｂ、補助記憶部１２２、メインメモリ１２３、制御部１２５、および処理部１２６−１〜１２６−Ｑを有する。ただし、Ｑは２以上の整数である。演算装置１２は、制御部１２５の制御の下で各処理を実行する。
【００４４】
図４に例示するように、処理部１２６−ｑ（ただし、ｑ＝１，…，Ｑ）は、キャッシュメモリ１２６０−ｑ、読み込み部１２６１−ｑ、パース部１２６２−ｑ、エンコード部１２６５−ｑ、演算部１２６６−ｑ、ファイル読み込みロック解除部１２６７−ｑ、バッファ境界ロック解除部１２６８−ｑ、および並列性ロック解除部１２６９−ｑを有する。
【００４５】
＜パラメータ設定処理＞
図５を用いて、パラメータ設定装置１１のパラメータ設定処理を説明する。
演算処理対象のテキストデータの属性情報がパラメータ設定装置１１（図２）の入力部１１１ａに入力され、記憶部１１２に格納される。属性情報はテキストデータから読み込まれたものであってもよいし、テキストデータ以外から与えられたものであってもよい（ステップＳ１１１ａ）。
【００４６】
最大サイズ設定部１１４ａは、記憶部１１２から読み出した属性情報を入力としてテキストファイルの１レコード分の文字列のサイズの最大値Ｓｃｓｖを設定して出力する（ステップＳ１１４ａ）。
【００４７】
最小サイズ設定部１１４ｂは、記憶部１１２から読み出した属性情報を入力として１レコード分の文字列のサイズの最小値ｓｃｓｖを設定して出力する（ステップＳ１１４ｂ）。
【００４８】
エンコードサイズ設定部１１４ｃは、記憶部１１２から読み出した属性情報を入力とし、エンコード情報が属する「所定の有限集合」を表す情報に基づいて、１レコード分の文字列を所定の有限集合の元にエンコード（変換）して得られるエンコード情報の合計サイズの最大値Ｓｅｎｃを設定して出力する。本実施形態のエンコード情報が属する「所定の有限集合」は秘密分散が行われる有限集合であり、予め定められている（ステップＳ１１４ｃ）。
【００４９】
演算サイズ設定部１１４ｄは、記憶部１１２から読み出した属性情報を入力とし、エンコード情報が属する所定の有限集合および秘密分散方式に基づいて、１レコード分のエンコード情報の秘密分散（演算）によって得られる秘密分散値（演算値）の合計サイズの最大値Ｓｓｓを設定して出力する。本実施形態の秘密分散方式は予め定められている（ステップＳ１１４ｄ）。
【００５０】
参照サイズ設定部１１４ｅは、記憶部１１２から読み出した属性情報を入力とし、テキストファイル内の１レコード分のセルそれぞれの位置および長さを表す参照情報の合計サイズＳｒｅｆを設定して出力する（ステップＳ１１４ｅ）。
【００５１】
処理単位算出部１１４ｆは、Ｓｃｓｖ、ＳｅｎｃおよびＳｒｅｆを入力とし、Ｃ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値ｒ（１回の単位処理で処理されるレコード数ｒ、すなわち処理単位文字列が含むレコード数ｒ）を得て出力する。キャッシュメモリサイズＣは予め定められたものであってもよいし、入力されたものであってもよい（ステップＳ１１４ｆ）。
【００５２】
並列数算出部１１４ｇは、Ｓｃｓｖ、ｓｃｓｖ、Ｓｒｅｆ、Ｓｅｎｃ、Ｉおよびｒを入力とし、ｆ０／Ｉ・ｒ・Ｓｃｓｖの関数値ｎｐ（演算処理における並列数ｎｐ）を得て出力する。ｆ０はｓｃｓｖ・Ｍ／（ｓｃｓｖ＋Ｓｅｎｃ＋ｍａｘ（Ｓｒｅｆ，Ｓｓｓ））の関数値である。メインメモリサイズＭは予め定められたものであってもよいし、入力されたものであってもよい（ステップＳ１１４ｇ）。
【００５３】
バッファサイズ算出部１１４ｈは、ｆ０およびｎｐを入力とし、ｆ０／ｎｐの関数値ｆ（演算処理の際にテキストファイルの文字列からまとめて読み込まれるデータのファイルバッファサイズｆ）を得て出力する（ステップＳ１１４ｈ）。
【００５４】
出力部１１１ｂは、上述のように得られたｒ，ｎｐ，ｆを出力する（ステップＳ１１１ｂ）。
【００５５】
＜演算処理＞
図６から図１２を用い、演算装置１２の演算処理を説明する。
図６に例示するように、パラメータ設定装置１１から出力されたｒ，ｎｐ，ｆとが演算装置１２（図３）の入力部１２１ａに入力され、補助記憶部１２２に格納される（ステップＳ１１１ａａ）。また演算処理対象のテキストデータが入力部１２１ａに入力され、補助記憶部１２２に格納される。図９から図１２にテキストデータを例示する。図９に例示するテキストデータは、各セルがダブルクォーテーションで囲まれたＣＳＶファイルである。セルの値としてダブルクォーテーション「“」を用いる場合にはその前にエスケープ文字として「“」が付加される。例えば、“4selddks““k304kdkk400-03d”は、「4selddks“k304kdkk400-03d」という秘密分散対象の値を表している。図１０に例示するように、このテキストファイルはＷ個のレコードｒｅｃ（１），…，ｒｅｃ（Ｗ）を含み、レコードｒｅｃ（ｗ）（ただし、ｗ＝１，…，Ｗ）のそれぞれは任意長のＧ個のセルｃｅｌｌ（ｗ，ｇ）を含み（ただし、ｇ＝１，…，Ｇ）、セルｃｅｌｌ（ｗ，ｇ）のそれぞれは任意個の文字を含む。セルｃｅｌｌ（ｗ，ｇ）はレコードｒｅｃ（ｗ）の最初からｇ番目の属性ａｔｔ（ｇ）に対応する（ステップＳ１１１ａｂ）。
【００５６】
その後、補助記憶部１２２からｒ，ｎｐ，ｆがメインメモリ１２３に読み込まれ、スレッドｉ＝０，…，Ｔ−１の演算処理が実行される。演算処理はｉ＝０のスレッドから開始される。なお、初期状態でスレッド０のファイル読み込みロックおよびバッファ境界ロックならびにスレッド０，…，ｎｐ−１の並列性ロックが解除されている。制御部１２５は処理部１２６−１〜１２６−Ｑのうち使用されていない処理部１２６−ｑをスレッドｉに割り当て、可能な限り複数のスレッドが並列に各スレッドｉの処理を実行する（ステップＳ１２６）。これによって得られた各秘密分散値は出力部１２１ｂから出力され、各サーバ装置１３−１〜１３−Ｎにそれぞれ送られ、各サーバ装置１３−１〜１３−Ｎに格納される（ステップＳ１１１ｂ）。以下にスレッドｉの処理の詳細を説明する。
【００５７】
≪スレッドｉの処理≫
図７および図８に例示するように、スレッドｉの処理を行う処理部１２６−ｑの読み込み部１２６１−ｑは、スレッドｉのファイル読み込みロックおよび並列性ロックの両方が解除されたかを判定する。スレッド０のファイル読み込みロックおよび並列性ロックは初期状態で解除されている（ステップＳ１２６１ａ−ｑ）。スレッドｉのファイル読み込みロックおよび並列性ロックの両方が解除されていない場合にはステップＳ１２６１ａ−ｑの判定が繰り返される。
【００５８】
一方、スレッドｉのファイル読み込みロックおよび並列性ロックの両方が解除されている場合、読み込み部１２６１−ｑは、メインメモリ１２３からファイルバッファサイズｆを読み込み、メインメモリ１２３にファイルバッファサイズｆの領域を確保する。さらに、読み込み部１２６１−ｑは、補助記憶部１２２に格納されたテキストファイルの文字列からファイルバッファサイズｆの領域に格納可能な文字列Ｓｉを読み込む。図１１の例では、文字列Ｓ０として以下が読み込まれる。
“石田”,“太郎”,“1990/2/8”,“100-0002”,“sjeifdfgjrrf”,“45dkfjkejdf5”
“石田”,“次郎”,“1985/5/2”,“111-0112”,“25df4d4ed”,“1s4dlccclseed”
“石田”,“花子”,“2001/4/8”,“111-2222”,“5d4e4d4ffg”,“skekdjjfaae”
“佐藤”,“太郎”,“1992/7/11”,“111-0345”,“dlekd4f3e”,“4selddks“
図１２の例では、文字列Ｓ１として以下が読み込まれる。
“k304kdkk400-03d”
“佐藤”,“次郎”,“1989/8/21”,“123-0434”,“dkesopd445e”,“4ssjdejdoseae3230dds”
“佐藤”,“花子”,“1995/2/3”,“145-0234”,“skdeofl4s3d3”,“skek94kdskd4dc”
“田中”,“太郎”,“1992/3/23”,“134-0134”,“dj394949495kf”,“47s52\n5412485d”
“田中”,“次郎”,“1979/4/21”,“11
読み込み部１２６１−ｑは、メインメモリ１２３に確保したファイルバッファサイズｆの領域に文字列Ｓｉを格納する（図７のステップＳ１２６１ｂ−ｑ、図８のＲｉ）。
【００５９】
文字列Ｓｉがメインメモリ１２３に格納された後、ファイル読み込みロック解除部１２６７−ｑがスレッドｉ＋１のファイル読み込みロックを解除する（図７のステップＳ１２６７−ｑ、図８のＵＲｉ＋１）。
【００６０】
パース部１２６２−ｑは、スレッドｉのバッファ境界ロックが解除されたか否かを判定する。スレッド０のバッファ境界ロックは初期状態で解除されている（ステップＳ１２６２ａ−ｑ）。スレッドｉのバッファ境界ロックが解除されていない場合にはステップＳ１２６２ａ−ｑの判定が繰り返される。
【００６１】
一方、スレッドｉのバッファ境界ロックが解除されている場合、パース部１２６２−ｑはｉ≧１であるか否かを判定する（ステップＳ１２６２ｂ−ｑ）。ｉ≧１でない場合（すなわち、ｉ＝０の場合）、パース部１２６２−ｑは、メインメモリ１２３から読み出した文字列Ｓｉをパースし、文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。例えば、図１１に例示した文字列Ｓ０の場合、パース部１２６２−ｑは、文字列Ｓ０をパースしてセル「石田」「太郎」「1990/2/8」「100-0002」「sjeifdfgjrrf」「45dkfjkejdf5」「石田」「次郎」「1985/5/2」「111-0112」「25df4d4ed」「1s4dlccclseed」「石田」「花子「2001/4/8」「111-2222」「5d4e4d4ffg」「skekdjjfaae」「佐藤」「太郎」「1992/7/11」「111-0345」「dlekd4f3e」を特定し、それらの参照情報を計算する。最後の「“4selddks“」の終端はセルの終端ではないため、スレッド０では「“4selddks“」の参照情報は計算されない。パース部１２６２−ｑは、メインメモリ１２３に参照情報を格納する領域が足りなくなったときに、メインメモリ１２３からｒを読み込み、ｒレコード分の参照情報を格納するためのバッファ領域をメインメモリ１２３にまとめて確保する。その後、処理がステップＳ１２６８−ｑに進む（図７のステップＳ１２６２ｃ−ｑ、図８のＰｉ）。一方、ｉ≧１である場合、パース部１２６２−ｑは、スレッドｉ−１でのパース結果（特定された各セルの参照情報およびセルに含まれない文字を特定する情報）をメインメモリ１２３から読み込み、文字列Ｓｉ−１のうちスレッドｉ−１で特定されたセルに含まれない文字を特定する。文字列Ｓｉ−１の終端がセルの終端である場合には、文字列Ｓｉ−１のうちスレッドｉ−１で特定されたセルに含まれない文字は存在しない（ステップＳ１２６２ｄ−ｑ）。次にパース部１２６２−ｑは、メインメモリ１２３から文字列Ｓｉを読み出し、スレッドｉ−１で特定されたセルに含まれない文字と文字列Ｓｉとを結合した文字列をパースし、この文字列に含まれる各セルの位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。文字列Ｓｉ−１の終端がセルの終端である場合には、パース部１２６２−ｑは文字列Ｓｉをパースし、文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。例えば、図１１および図１２に例示した文字列Ｓ０およびＳ１の場合、パース部１２６２−ｑは、文字列Ｓｉ−１のうちスレッドｉ−１で特定されたセルに含まれない文字「“4selddks“」と文字列Ｓｉ−１とを結合した文字列
“4selddks““k304kdkk400-03d”
“佐藤”,“次郎”,“1989/8/21”,“123-0434”,“dkesopd445e”,“4ssjdejdoseae3230dds”
“佐藤”,“花子”,“1995/2/3”,“145-0234”,“skdeofl4s3d3”,“skek94kdskd4dc”
“田中”,“太郎”,“1992/3/23”,“134-0134”,“dj394949495kf”,“47s52\n5412485d”
“田中”,“次郎”,“1979/4/21”,“11
をパースし、この文字列に含まれる各セル「4selddks““k304kdkk400-03d」「佐藤」「次郎」「1989/8/21」「123-0434」「dkesopd445e」「4ssjdejdoseae3230dds」「佐藤」「花子」「1995/2/3」「145-0234」「skdeofl4s3d3」「skek94kdskd4dc」「田中」「太郎」「1992/3/23」「134-0134」「dj394949495kf」「47s52\n5412485d」「田中」「次郎」「1979/4/21」の位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。最後の“11の終端はセルの終端ではないため、スレッド１では“11の参照情報は計算されない。パース部１２６２−ｑは、メインメモリ１２３に参照情報を格納する領域が足りなくなったときに、メインメモリ１２３からｒを読み込み、ｒレコード分の参照情報を格納するためのバッファ領域をメインメモリ１２３にまとめて確保する。その後、処理がステップＳ１２６８−ｑに進む（図７のステップＳ１２６２ｅ−ｑ、図８のＰｉ）。
【００６２】
ステップＳ１２６８−ｑでは、バッファ境界ロック解除部１２６８−ｑがスレッドｉ＋１のバッファ境界ロックを解除する。ただし、ｉ＋１＞Ｔに対応するスレッドは存在せず、存在しないスレッドのバッファ境界ロックは解除されない（図７のステップＳ１２６８−ｑ、図８のＵＢｉ＋１）。
【００６３】
その後、エンコード部１２６５−ｑは、参照情報によって特定される情報に基づいて、テキストデータから結合文字列ＣＳｉに含まれる処理対象のｒレコード分の文字列である処理単位文字列ＰＳｉ，ｊ（ただし、ｊ＝０，…，Ｊ−１）を選択し、処理単位文字列ＰＳｉ，ｊおよび処理単位文字列ＰＳｉ，ｊに対応するｒレコード分の参照情報をキャッシュメモリ１２６０−ｑに格納する。ｒ＝２とした図１１および図１２の例では、結合文字列ＣＳ０＝Ｓ０から処理単位文字列ＰＳ０，０が選択され、結合文字列ＣＳ１＝Ｓ０＋Ｓ１から処理単位文字列ＰＳ１，０およびＰＳ１，１が選択される（ステップＳ１２６３−ｑ）。エンコード部１２６５−ｑは、キャッシュメモリ１２６０−ｑの処理単位文字列ＰＳｉ，ｊおよび参照情報を用い、処理単位文字列ＰＳｉ，ｊを所定の有限集合の元であるエンコード情報Ｅｉ，ｊにエンコードし、エンコード情報Ｅｉ，ｊをキャッシュメモリ１２６０−ｑに格納する（図７のステップＳ１２６５−ｑ、図８のＥｉ）。
【００６４】
演算部１２６６−ｑは、キャッシュメモリ１２６０−ｑから読み出したエンコード情報Ｅｉ，ｊの秘密分散を行って秘密分散値（演算値）ＳＳｉ，ｊを得てメインメモリ１２３に格納する。この際、処理単位文字列ＰＳｉ，ｊに対応するｒレコード分の参照情報をメインメモリ１２３に格納しておく必要はないため、秘密分散値ＳＳｉ，０，…，ＳＳｉ，Ｊ−１がこのｒレコード分の参照情報が格納されていた領域に上書きされてもよい（図７のステップＳ１２６６−ｑ、図８のＳＳｉ）。
【００６５】
その後、並列性ロック解除部１２６９−ｑが、メインメモリ１２３からｎｐを読み込み、スレッドｉ＋ｎｐの並列性ロックを解除する。ただし、ｉ＋ｎｐ＞Ｔに対応するスレッドは存在せず、存在しないスレッドの並列性ロックは解除されない。その後、制御部１２５はスレッドｉへの処理部１２６−ｑの割り当てを解除する。これにより、処理部１２６−ｑを他のスレッドに割り当てることが可能になる（図７のステップＳ１２６９−ｑ、図８のＵＰｉ＋ｎｐ）。
【００６６】
［第２実施形態］
第２実施形態では、パラメータ設定装置が１つの単位処理で扱われるレコード数ｒ、並列数ｎｐ、ファイルバッファサイズｆを設定し、演算装置（高速版）がエスケープ文字の使用が禁止されたＣＳＶ（Comma-Separated Values）ファイル（テキストファイル）の秘密分散（演算）を行う例を説明する。
【００６７】
＜構成＞
図１に例示するように、本実施形態の演算システム２は、パラメータ設定装置１１、演算装置２２、およびＮ個のサーバ装置１３−１〜１３−Ｎを有する。パラメータ設定装置１１から演算装置２２への情報の伝達が可能であり、演算装置２２からサーバ装置１３−１〜１３−Ｎへの情報の伝達が可能である。
【００６８】
図２に例示するように、パラメータ設定装置１１は、入力部１１１ａ、出力部１１１ｂ、記憶部１１２、制御部１１３、最大サイズ設定部１１４ａ、最小サイズ設定部１１４ｂ、エンコードサイズ設定部１１４ｃ、演算サイズ設定部１１４ｄ、参照サイズ設定部１１４ｅ、処理単位算出部１１４ｆ、並列数算出部１１４ｇ、およびバッファサイズ算出部１１４ｈを有する。パラメータ設定装置１１は、制御部１１３の制御の下で各処理を実行する。パラメータ設定装置１１で得られた各値は記憶部１１２に格納され、必要に応じて記憶部１１２から読み出されて他の処理に用いられる。
【００６９】
図３に例示するように、演算装置１２は、入力部１２１ａ、出力部１２１ｂ、補助記憶部１２２、メインメモリ１２３、制御部１２５、および処理部２２６−１〜２２６−Ｑを有する。ただし、Ｑは２以上の整数である。演算装置１２は、制御部１２５の制御の下で各処理を実行する。
【００７０】
図４に例示するように、処理部１２６−ｑ（ただし、ｑ＝１，…，Ｑ）は、キャッシュメモリ１２６０−ｑ、読み込み部１２６１−ｑ、パース部１２６２−ｑ、エンコード部１２６５−ｑ、演算部１２６６−ｑ、ファイル読み込みロック解除部１２６７−ｑ、バッファ境界ロック解除部１２６８−ｑ、および並列性ロック解除部１２６９−ｑを有する。
【００７１】
＜パラメータ設定処理＞
第１実施形態と同一である。
【００７２】
＜演算処理＞
図６および図１３から図１８を用い、演算装置２２の演算処理を説明する。
図６に例示するように、パラメータ設定装置１１から出力されたｒ，ｎｐ，ｆとが演算装置２２（図３）の入力部１２１ａに入力され、補助記憶部１２２に格納される（ステップＳ１１１ａａ）。また演算処理対象のテキストデータが入力部１２１ａに入力され、補助記憶部１２２に格納される。図１５から図１８にテキストデータを例示する。図１５に例示するテキストデータは、各セルがダブルクォーテーションで囲まれていないＣＳＶファイルである。本実施形態のテキストデータでのエスケープ文字の使用は許可されておらず、各セルは単独で秘密分散（演算）の対象を表すか否かを判別可能な文字のみを含む。図１６に例示するように、このテキストファイルはＷ個のレコードｒｅｃ（１），…，ｒｅｃ（Ｗ）を含み、レコードｒｅｃ（ｗ）（ただし、ｗ＝１，…，Ｗ）のそれぞれは任意長のＧ個のセルｃｅｌｌ（ｗ，ｇ）を含み（ただし、ｇ＝１，…，Ｇ）、セルｃｅｌｌ（ｗ，ｇ）のそれぞれは任意個の文字を含む。セルｃｅｌｌ（ｗ，ｇ）はレコードｒｅｃ（ｗ）の最初からｇ番目の属性ａｔｔ（ｇ）に対応する（ステップＳ２１１ａｂ）。
【００７３】
その後、補助記憶部１２２からｒ，ｎｐ，ｆがメインメモリ１２３に読み込まれ、スレッドｉ＝０，…，Ｔ−１の演算処理が実行される。演算処理はｉ＝０のスレッドから開始される。なお、初期状態でスレッド０のファイル読み込みロックおよびスレッド０，…，ｎｐ−１の並列性ロックが解除されている。制御部１２５は処理部２２６−１〜２２６−Ｑのうち使用されていない処理部２２６−ｑをスレッドｉに割り当て、可能な限り複数のスレッドが並列に各スレッドｉの処理を実行する（ステップＳ２２６）。これによって得られた各秘密分散値は出力部１２１ｂから出力され、各サーバ装置１３−１〜１３−Ｎにそれぞれ送られ、各サーバ装置１３−１〜１３−Ｎに格納される（ステップＳ１１１ｂ）。以下にスレッドｉの処理の詳細を説明する。
【００７４】
≪スレッドｉの処理≫
図１３および図１４に例示するように、スレッドｉの処理を行う処理部２２６−ｑの読み込み部１２６１−ｑは、スレッドｉのファイル読み込みロックおよび並列性ロックの両方が解除されたかを判定する。スレッド０のファイル読み込みロックおよび並列性ロックは初期状態で解除されている（ステップＳ１２６１ａ−ｑ）。スレッドｉのファイル読み込みロックおよび並列性ロックの両方が解除されていない場合にはステップＳ１２６１ａ−ｑの判定が繰り返される。
【００７５】
一方、スレッドｉのファイル読み込みロックおよび並列性ロックの両方が解除されている場合、読み込み部１２６１−ｑは、メインメモリ１２３からファイルバッファサイズｆを読み込み、メインメモリ１２３にファイルバッファサイズｆの領域を確保する。さらに、読み込み部１２６１−ｑは、補助記憶部１２２に格納されたテキストファイルの文字列からファイルバッファサイズｆの領域に格納可能な文字列Ｓｉを読み込む。図１７の例では、文字列Ｓ０として以下が読み込まれる。
石田,太郎,1990/2/8,100-0002,東京都渋谷区〇〇〇,03-3234-5678
石田,次郎,2000/4/2,274-16,神奈川県藤沢市江の島〇〇〇,03-9999-9999
石田,花子,1985/6/2,352-725,東京都港区区〇〇〇,03-1111-9999
佐藤,太郎,2001/5/1,100-0002,東京都千代田区〇〇〇,03-3234-5678
佐藤,次
図１８の例では、文字列Ｓ１として以下が読み込まれる。
郎,2001/6/2,274-16,神奈川県藤沢市江の島〇〇〇,03-9999-9999
佐藤,花子,2002/7/2,352-725,東京都新宿区新宿〇〇〇,03-1111-9999
田中,太郎,2001/1/1,100-0002,東京都千代田区〇〇〇,03-1234-5678
田中,次郎,2001/1/2,251-0036,神奈川県藤沢市江の島〇〇〇
読み込み部１２６１−ｑは、メインメモリ１２３に確保したファイルバッファサイズｆの領域に文字列Ｓｉを格納する（図１３のステップＳ１２６１ｂ−ｑ、図１４のＲｉ）。
【００７６】
文字列Ｓｉがメインメモリ１２３に格納された後、ファイル読み込みロック解除部１２６７−ｑがスレッドｉ＋１のファイル読み込みロックを解除する（図１３のステップＳ１２６７−ｑ、図１４のＵＲｉ＋１）。
【００７７】
パース部２２６２−ｑはメインメモリ１２３から読み出した文字列Ｓｉをパースし、文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。例えば、図１７に例示した文字列Ｓ０の場合、パース部２２６２−ｑは、文字列Ｓ０をパースしてセル「石田」「太郎」「1990/2/8」「100-0002」「東京都渋谷区〇〇〇」「03-3234-5678」「石田」「次郎」「2000/4/2」「274-16」「神奈川県藤沢市江の島〇〇〇」「03-9999-9999」「石田」「花子」「1985/6/2」「352-725」「東京都港区区〇〇〇」「03-1111-9999」「佐藤」「太郎」「2001/5/1」「100-0002」「東京都千代田区〇〇〇」「03-3234-5678」「佐藤」を特定し、それらの参照情報を計算する。最後の「次」の終端はセルの終端ではないため、スレッド０では「次」の参照情報は計算されない。例えば、図１７に例示した文字列Ｓ０の場合、パース部２２６２−ｑは、文字列Ｓ１をパースしてセル「2001/6/2」「274-16」「神奈川県藤沢市江の島〇〇〇」「03-9999-9999」「佐藤」「花子」「2002/7/2」「352-725」「東京都新宿区新宿〇〇〇」「03-1111-9999」「田中」「太郎」「2001/1/1」「100-0002」「東京都千代田区〇〇〇」「03-1234-5678」「田中」「次郎」「2001/1/2」「251-0036」を特定し、それらの参照情報を計算する。最初の「郎」の始端はセルの始端ではなく、最後の「神奈川県藤沢市江の島〇〇〇」の終端はセルの終端ではないため、スレッド１では「郎」および「神奈川県藤沢市江の島〇〇〇」の参照情報は計算されない。なお、パース部２２６２−ｑは、メインメモリ１２３に参照情報を格納する領域が足りなくなったときに、メインメモリ１２３からｒを読み込み、ｒレコード分の参照情報を格納するためのバッファ領域をメインメモリ１２３にまとめて確保する。パース部２２６２−ｑはスレッドｉのバッファ境界ロックが解除される前にこの処理を開始できる。すなわち、パース部２２６２−ｑは、ｉ≧１において、文字列Ｓｉ−１に含まれる各セルの参照情報の計算が終わる前に、文字列Ｓｉに含まれる各セルの参照情報の計算を開始できる（図１３のステップＳ２２６２−ｑ、図１４のＰｉ）。
【００７８】
その後、セル特定部２２６４−ｑが、スレッドｉのバッファ境界ロックが解除されたか否かを判定する。スレッド０のバッファ境界ロックは初期状態で解除されている（ステップＳ２２６４ａ−ｑ）。スレッドｉのバッファ境界ロックが解除されていない場合にはステップＳ２２６４−ｑの判定が繰り返される。
【００７９】
一方、スレッドｉのバッファ境界ロックが解除されており、かつ、ｉ≧１である場合、セル特定部２２６４−ｑは、参照情報と文字列Ｓｉ‐１と文字列Ｓｉとを用い、文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセルの位置に対応する情報Ａｉを得てメインメモリに格納する。一方、スレッドｉのバッファ境界ロックが解除されており、かつ、ｉ＝０の場合、セル特定部２２６４−ｑは何もしない（ステップＳ２２６４ｂ−ｑ）。
【００８０】
その後、バッファ境界ロック解除部１２６８−ｑがスレッドｉ＋１のバッファ境界ロックを解除する。ただし、ｉ＋１＞Ｔに対応するスレッドは存在せず、存在しないスレッドのバッファ境界ロックは解除されない（図１３のステップＳ１２６８−ｑ、図１４のＵＢｉ＋１）。
【００８１】
その後、処理部１２６−ｑに代えて処理部２２６−ｑのエンコード部１２６５−ｑおよび演算部１２６６−ｑが、第１実施形態で説明したステップＳ１２６５−ｑ，Ｓ１２６６−ｑ，Ｓ１２６９−ｑの処理を実行する（図１３のステップＳ１２６５−ｑ，Ｓ１２６６−ｑ，Ｓ１２６９−ｑ、図１４のＥｉ，ＳＳｉ，ＵＰｉ＋ｎｐ）。
【００８２】
［その他の変形例等］
【００８３】
なお、本発明は上述の実施形態に限定されるものではない。例えば、第１実施形態および第２実施形態では、パラメータ設定装置が１つの単位処理で扱われるレコード数ｒ、並列数ｎｐ、ファイルバッファサイズｆを設定したが、パラメータ設定装置がファイルバッファサイズｆを設定しない実施形態であってもよい。また、第１実施形態および第２実施形態では、テキストファイルとしてＣＳＶ（Comma-Separated Values）ファイルを例示したが、前述したその他のテキストファイルに対する処理が行われてもよい。さらに、第１実施形態および第２実施形態では、「演算」として秘密分散を行う例を説明したが、「演算」としてその他の演算が行われてもよい。
【００８４】
上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【００８５】
上記の各装置は、例えば、ＣＰＵ（central processing unit）等のプロセッサ（ハードウェア・プロセッサ）およびＲＡＭ（random-access memory）・ＲＯＭ（read-only memory）等のメモリ等を備える汎用または専用のコンピュータが所定のプログラムを実行することで構成される。このコンピュータは１個のプロセッサやメモリを備えていてもよいし、複数個のプロセッサやメモリを備えていてもよい。このプログラムはコンピュータにインストールされてもよいし、予めＲＯＭ等に記録されていてもよい。また、ＣＰＵのようにプログラムが読み込まれることで機能構成を実現する電子回路（circuitry）ではなく、プログラムを用いることなく処理機能を実現する電子回路を用いて一部またはすべての処理部が構成されてもよい。１個の装置を構成する電子回路が複数のＣＰＵを含んでいてもよい。
【００８６】
上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体の例は、非一時的な（non-transitory）記録媒体である。このような記録媒体の例は、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等である。
【００８７】
このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００８８】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。
【００８９】
コンピュータ上で所定のプログラムを実行させて本装置の処理機能が実現されるのではなく、これらの処理機能の少なくとも一部がハードウェアで実現されてもよい。
【符号の説明】
【００９０】
１，２  演算システム
１１  パラメータ設定装置
１２，２２  演算装置
１３−１〜１３−Ｎ  サーバ装置
【図１】
2019181594.tif 000003
【図２】
2019181594.tif 000004
【図３】
2019181594.tif 000005
【図４】
2019181594.tif 000006
【図５】
2019181594.tif 000007
【図６】
2019181594.tif 000008
【図７】
2019181594.tif 000009
【図８】
2019181594.tif 000010
【図９】
2019181594.tif 000011
【図１０】
2019181594.tif 000012
【図１１】
2019181594.tif 000013
【図１２】
2019181594.tif 000014
【図１３】
2019181594.tif 000015
【図１４】
2019181594.tif 000016
【図１５】
2019181594.tif 000017
【図１６】
2019181594.tif 000018
【図１７】
2019181594.tif 000019
【図１８】
2019181594.tif 000020
【手続補正書】
【提出日】令和2年9月4日(2020.9.4)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００３
【補正方法】変更
【補正の内容】
【０００３】
【非特許文献１】Y. Shafranovich, “RFC4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files,” [online], October, 2005, SolidMatrix Technologies, Inc., [平成３０年１月６日検索]、インターネット＜http://www.ietf.org/rfc/rfc4180.txt＞
【非特許文献２】五十嵐大，千田浩司，濱田浩気，高橋克巳，“軽量検証可能３パーティ秘匿関数計算の効率化及びこれを用いたセキュアなデータベース処理 (Secure Database Operations Using An Improved 3-party Veriable Secure Function Evaluation)，”ＩｎＳＣＩＳ２０１１，２０１１．
【非特許文献３】A. Shamir, "How to Share a Secret", Communications of the ACM, November 1979, Volume 22, Number 11, pp.612-613.
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
【図１】図１は実施形態の演算システムを例示したブロック図である。
【図２】図２は実施形態のパラメータ設定装置の機能構成を例示したブロック図である。
【図３】図３は実施形態の演算装置の機能構成を例示したブロック図である。
【図４】図４は実施形態の処理部の機能構成を例示したブロック図である。
【図５】図５は実施形態のパラメータ設定処理を例示するためのフロー図である。
【図６】図６は実施形態の演算処理を例示するためのフロー図である。
【図７】図７は実施形態のスレッドｉの処理を例示するためのフロー図である。
【図８】図８は実施形態の各スレッドの処理を例示するための概念図である。
【図９】図９は実施形態のテキストファイルを例示するための概念図である。
【図１０】図１０は実施形態のテキストファイルを例示するための概念図である。
【図１１】図１１は実施形態のテキストファイルを例示するための概念図である。
【図１２】図１２は実施形態のテキストファイルを例示するための概念図である。
【図１３】図１３は実施形態のスレッドｉの処理を例示するためのフロー図である。
【図１４】図１４は実施形態の各スレッドの処理を例示するための概念図である。
【図１５】図１５は実施形態のテキストファイルを例示するための概念図である。
【図１６】図１６は実施形態のテキストファイルを例示するための概念図である。
【図１７】図１７は実施形態のテキストファイルを例示するための概念図である。
【図１８】図１８は実施形態のテキストファイルを例示するための概念図である。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
以下、本発明の実施形態を説明する。
［概要］
まず概要を説明する。
＜テキストファイル＞
各実施形態ではテキストファイルの文字列に対する演算処理を行う。このテキストファイルはＷ個のレコードを含み、レコードのそれぞれは任意長のＧ個のセルを含み、セルのそれぞれは任意個の文字を含む。ただし、各セルの長さには各セルの属性に応じた上限がある。ＷおよびＧが１以上の整数である。例えば、ＷおよびＧの少なくとも一方は２以上の整数である。Ｗが２以上の整数であってもよいし、Ｇが２以上の整数であってもよいし、ＷおよびＧの両方が２以上の整数であってもよい。Ｗが２以上の整数である場合、互いに隣接するレコードの間にはレコードの区切りを特定するための情報が存在する。例えば、互いに隣接するレコードの間に改行が存在し、複数のレコードは改行によって互いに区切られている。また、Ｇが２以上の整数である場合、互いに隣接するセルの間にはセル間の区切りを特定するための情報が存在する。例えば、互いに隣接するセルの間に区切り文字または改行が存在し、複数のセルは区切り文字または改行によって互いに区切られている。区切り文字の例はカンマ「，」である。その他の例として、互いに隣接するセルの間にタブまたは改行が存在してもよいし、互いに隣接するセルの間に半角スペースまたは改行が存在してもよい。Ｗが２以上の整数である場合、各レコードに含まれるセルの個数Ｇは互いに同一である。各レコードのＧ個のセルは属性情報（「スキーマ」とも呼ぶ）に対応している。属性情報は各セルがどのような属性の情報であるかを表しており、少なくとも各セルで表される文字列のサイズ（データ量）の最大値と最小値とを特定または推定するための情報を含んでいる。例えば、属性情報はセルがどのような有限集合の元を表しているのか示す情報を含んでいる。例えば、属性情報は「セルがｐを法とした剰余（ｍｏｄ ｐ）を表していること（ｐは正整数）」を表していてもよいし、「セルが所定個（例えば１０個）の所定の有限体（例えば拡大体ＧＦ（２８））の要素で表現される文字列であること」を表していてもよいし、「セルが所定の整数型の整数（例えば、符号付き３２ビット整数）を表す文字列であること」を表していてもよい。Ｇ個の属性情報のそれぞれが各レコードのＧ個のセルのそれぞれに一対一で対応していてもよいし（すなわち、１個の属性情報が１個のセルの属性を表していてもよい）、１個の属性情報が各レコードの複数個（例えばＧ個）のセルに対応していてもよい（すなわち、１個の属性情報が複数個のセルの属性を表していてもよい）。前者の場合、１つのレコードに属する複数のセルの属性が互いに異なっていてもよいし、互いに同一であってもよい。また、Ｗが２以上の整数である場合、すべてのレコードのＧ個のセルに対応する「Ｇ個の属性の組」は互いに同一である。すなわち、すべてのレコードが有するｇ番目（ただし、ｇ＝１，…，Ｇ）のセルの属性ａｔｔ（ｇ）は互いに同一である。その他、属性情報がセルが表す情報の種別を表現していてもよい。また属性情報はテキストファイルに含まれていてもよいし（例えば、テキストファイルのヘッダが属性情報あってもよい）、含まれていなくてもよい。テキストファイルの例は、ＣＳＶ（Comma-Separated Values）ファイル、ＴＳＶ（tab-separated values）ファイル、ＳＳＶ（space-separated values）ファイルなどである。これらはＣＳＶ（character-separated values）ファイルやＤＳＶ（delimiter-separated values）ファイルとして総称される。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】変更
【補正の内容】
【００１７】
上述した「エンコード」および「演算」はテキストファイルのｒレコード分の文字列である処理単位文字列ごとに実行される。処理単位文字列ごとに実行される処理を「単位処理」と呼ぶことにする。処理単位算出部は１回の単位処理で処理されるレコード数ｒを表す「Ｃ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値」を得て（レコード数ｒとしてＣ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）の関数値を得て）出力する。キャッシュメモリサイズＣは、予め定められたものであってもよいし、入力されたものであってもよい。最大値Ｓｃｓｖは最大サイズ設定部で得られたものであり、最大値Ｓｅｎｃはエンコードサイズ設定部で得られたものであり、合計サイズＳｒｅｆは参照サイズ設定部で得られたものである。「αの関数値」はαそのものであってもよいし、αに対応するその他の値であってもよい。「αの関数値」の例は、α以上の最小の整数、α以下の最大の整数、αに最も近い整数などである。例えば、r=C/(Scsv+Senc+Sref)であってもよいし、r=ROUNDUP(C/(Scsv+Senc+Sref))であってもよいし、r=ROUNDDOWN(C/(Scsv+Senc+Sref))であってもよいし、r=ROUND(C/(Scsv+Senc+Sref))であってもよい。ただし、ROUNDUP(α)はαを整数値に切り上げる切り上げ関数であり、ROUNDDOWN(α)はαを整数値に切り捨てる切り捨て関数であり、ROUND(α)はαをαに最も近い整数に丸める丸め関数である。ここで、Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆは、処理部が、テキストファイルから１レコード分の文字列を読み込み、参照情報を参照しながら、エンコード情報にエンコードして秘密分散などの「演算」を行うまでの処理（以下、「１レコード分の一連の処理」という）のために必要なメモリサイズを表す。このメモリサイズがキャッシュメモリサイズ以下であれば、途中でメインメモリからデータを読み込むことなく高速に１レコード分の一連の処理を実行できる。Ｃ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）は、何回分の「１レコード分の一連の処理」に必要なメモリサイズ（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）をキャッシュメモリに確保できるかを表すものである。Ｃ／（Ｓｃｓｖ＋Ｓｅｎｃ＋Ｓｒｅｆ）に対応するレコード数ｒの文字列を処理単位文字列とすることで、ｒレコード分の処理を行う際のメインメモリへのアクセス回数を削減し、高速に演算を行うことができる。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００３５
【補正方法】変更
【補正の内容】
【００３５】
ｉ≧１の場合、文字列Ｓｉは文字列Ｓｉ‐１の直後に続く文字列である。ｉ≧１の場合、セル特定部は、スレッドｉのバッファ境界ロックが解除された後、参照情報と文字列Ｓｉ‐１と文字列Ｓｉとを用い、文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセルの位置に対応する情報Ａｉを得てメインメモリに格納する。情報Ａｉは、例えば、文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセルが属するレコードを表す情報と当該セルに対応する属性を表す情報（例えば、当該レコードの最初から何番目の属性に対応するかを表す情報）であってもよいし、文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセルの位置および長さを表す情報であってもよい。文字列Ｓｉ‐１の終端がセルの終端である場合には文字列Ｓｉの先頭のセルが「文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセル」となる。この場合には情報Ａｉのメインメモリへの格納が省略されてもよい。一方、文字列Ｓｉ‐１の終端がセルの終端でない場合、セル特定部は文字列Ｓｉ‐１と文字列Ｓｉとを用い、「文字列Ｓｉ‐１に含まれる最後のセルの直後に続くセル」を生成して情報Ａｉを得る。これにより、パース部が特定できなかったセルの位置に対応する情報が得られる。参照情報と情報Ａｉとによってテキストファイルの各セルが属するレコードと当該セルに対応する属性（例えば、当該レコードの最初から何番目の属性であるかを表す情報）とを特定できる。なお、ｉ＝０の場合、セル特定部は何もしない。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００６１
【補正方法】変更
【補正の内容】
【００６１】
一方、スレッドｉのバッファ境界ロックが解除されている場合、パース部１２６２−ｑはｉ≧１であるか否かを判定する（ステップＳ１２６２ｂ−ｑ）。ｉ≧１でない場合（すなわち、ｉ＝０の場合）、パース部１２６２−ｑは、メインメモリ１２３から読み出した文字列Ｓｉをパースし、文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。例えば、図１１に例示した文字列Ｓ０の場合、パース部１２６２−ｑは、文字列Ｓ０をパースしてセル「石田」「太郎」「1990/2/8」「100-0002」「sjeifdfgjrrf」「45dkfjkejdf5」「石田」「次郎」「1985/5/2」「111-0112」「25df4d4ed」「1s4dlccclseed」「石田」「花子」「2001/4/8」「111-2222」「5d4e4d4ffg」「skekdjjfaae」「佐藤」「太郎」「1992/7/11」「111-0345」「dlekd4f3e」を特定し、それらの参照情報を計算する。最後の「“4selddks“」の終端はセルの終端ではないため、スレッド０では「“4selddks“」の参照情報は計算されない。パース部１２６２−ｑは、メインメモリ１２３に参照情報を格納する領域が足りなくなったときに、メインメモリ１２３からｒを読み込み、ｒレコード分の参照情報を格納するためのバッファ領域をメインメモリ１２３にまとめて確保する。その後、処理がステップＳ１２６８−ｑに進む（図７のステップＳ１２６２ｃ−ｑ、図８のＰｉ）。一方、ｉ≧１である場合、パース部１２６２−ｑは、スレッドｉ−１でのパース結果（特定された各セルの参照情報およびセルに含まれない文字を特定する情報）をメインメモリ１２３から読み込み、文字列Ｓｉ−１のうちスレッドｉ−１で特定されたセルに含まれない文字を特定する。文字列Ｓｉ−１の終端がセルの終端である場合には、文字列Ｓｉ−１のうちスレッドｉ−１で特定されたセルに含まれない文字は存在しない（ステップＳ１２６２ｄ−ｑ）。次にパース部１２６２−ｑは、メインメモリ１２３から文字列Ｓｉを読み出し、スレッドｉ−１で特定されたセルに含まれない文字と文字列Ｓｉとを結合した文字列をパースし、この文字列に含まれる各セルの位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。文字列Ｓｉ−１の終端がセルの終端である場合には、パース部１２６２−ｑは文字列Ｓｉをパースし、文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。例えば、図１１および図１２に例示した文字列Ｓ０およびＳ１の場合、パース部１２６２−ｑは、文字列Ｓｉ−１のうちスレッドｉ−１で特定されたセルに含まれない文字「“4selddks“」と文字列Ｓｉ−１とを結合した文字列
“4selddks““k304kdkk400-03d”
“佐藤”,“次郎”,“1989/8/21”,“123-0434”,“dkesopd445e”,“4ssjdejdoseae3230dds”
“佐藤”,“花子”,“1995/2/3”,“145-0234”,“skdeofl4s3d3”,“skek94kdskd4dc”
“田中”,“太郎”,“1992/3/23”,“134-0134”,“dj394949495kf”,“47s52\n5412485d”
“田中”,“次郎”,“1979/4/21”,“11
をパースし、この文字列に含まれる各セル「4selddks““k304kdkk400-03d」「佐藤」「次郎」「1989/8/21」「123-0434」「dkesopd445e」「4ssjdejdoseae3230dds」「佐藤」「花子」「1995/2/3」「145-0234」「skdeofl4s3d3」「skek94kdskd4dc」「田中」「太郎」「1992/3/23」「134-0134」「dj394949495kf」「47s52\n5412485d」「田中」「次郎」「1979/4/21」の位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。最後の“11の終端はセルの終端ではないため、スレッド１では“11の参照情報は計算されない。パース部１２６２−ｑは、メインメモリ１２３に参照情報を格納する領域が足りなくなったときに、メインメモリ１２３からｒを読み込み、ｒレコード分の参照情報を格納するためのバッファ領域をメインメモリ１２３にまとめて確保する。その後、処理がステップＳ１２６８−ｑに進む（図７のステップＳ１２６２ｅ−ｑ、図８のＰｉ）。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００６４
【補正方法】変更
【補正の内容】
【００６４】
演算部１２６６−ｑは、キャッシュメモリ１２６０−ｑから読み出したエンコード情報Ｅｉ，ｊの秘密分散を行って秘密分散値（演算値）ＳＳｉ，ｊを得てメインメモリ１２３に格納する。この際、処理単位文字列ＰＳｉ，ｊに対応するｒレコード分の参照情報をメインメモリ１２３に格納しておく必要はないため、秘密分散値ＳＳｉ，０，…，ＳＳｉ，Ｊ−１がこのｒレコード分の参照情報が格納されていた領域に上書きされてもよい（図７のステップＳ１２６５−ｑ、図８のＳＳｉ）。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００６９
【補正方法】変更
【補正の内容】
【００６９】
図３に例示するように、演算装置２２は、入力部１２１ａ、出力部１２１ｂ、補助記憶部１２２、メインメモリ１２３、制御部１２５、および処理部２２６−１〜２２６−Ｑを有する。ただし、Ｑは２以上の整数である。演算装置１２は、制御部１２５の制御の下で各処理を実行する。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００７０
【補正方法】変更
【補正の内容】
【００７０】
図４に例示するように、処理部２２６−ｑ（ただし、ｑ＝１，…，Ｑ）は、キャッシュメモリ１２６０−ｑ、読み込み部１２６１−ｑ、パース部２２６２−ｑ、セル特定部２２６４−ｑ、エンコード部１２６５−ｑ、演算部１２６６−ｑ、ファイル読み込みロック解除部１２６７−ｑ、バッファ境界ロック解除部１２６８−ｑ、および並列性ロック解除部１２６９−ｑを有する。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００７５
【補正方法】変更
【補正の内容】
【００７５】
一方、スレッドｉのファイル読み込みロックおよび並列性ロックの両方が解除されている場合、読み込み部１２６１−ｑは、メインメモリ１２３からファイルバッファサイズｆを読み込み、メインメモリ１２３にファイルバッファサイズｆの領域を確保する。さらに、読み込み部１２６１−ｑは、補助記憶部１２２に格納されたテキストファイルの文字列からファイルバッファサイズｆの領域に格納可能な文字列Ｓｉを読み込む。図１７の例では、文字列Ｓ０として以下が読み込まれる。
石田,太郎,1990/2/8,100-0002,東京都渋谷区〇〇〇,03-3234-5678
石田,次郎,2000/4/2,274-16,神奈川県藤沢市江の島〇〇〇,03-9999-9999
石田,花子,1985/6/2,352-725,東京都港区〇〇〇,03-1111-9999
佐藤,太郎,2001/5/1,100-0002,東京都千代田区〇〇〇,03-3234-5678
佐藤,次
図１８の例では、文字列Ｓ１として以下が読み込まれる。
郎,2001/6/2,274-16,神奈川県藤沢市江の島〇〇〇,03-9999-9999
佐藤,花子,2002/7/2,352-725,東京都新宿区新宿〇〇〇,03-1111-9999
田中,太郎,2001/1/1,100-0002,東京都千代田区〇〇〇,03-1234-5678
田中,次郎,2001/1/2,251-0036,神奈川県藤沢市江の島〇〇〇
読み込み部１２６１−ｑは、メインメモリ１２３に確保したファイルバッファサイズｆの領域に文字列Ｓｉを格納する（図１３のステップＳ１２６１ｂ−ｑ、図１４のＲｉ）。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００７７
【補正方法】変更
【補正の内容】
【００７７】
パース部２２６２−ｑはメインメモリ１２３から読み出した文字列Ｓｉをパースし、文字列Ｓｉに含まれる各セルの位置および長さを表す参照情報を計算してメインメモリ１２３に格納する。例えば、図１７に例示した文字列Ｓ０の場合、パース部２２６２−ｑは、文字列Ｓ０をパースしてセル「石田」「太郎」「1990/2/8」「100-0002」「東京都渋谷区〇〇〇」「03-3234-5678」「石田」「次郎」「2000/4/2」「274-16」「神奈川県藤沢市江の島〇〇〇」「03-9999-9999」「石田」「花子」「1985/6/2」「352-725」「東京都港区〇〇〇」「03-1111-9999」「佐藤」「太郎」「2001/5/1」「100-0002」「東京都千代田区〇〇〇」「03-3234-5678」「佐藤」を特定し、それらの参照情報を計算する。最後の「次」の終端はセルの終端ではないため、スレッド０では「次」の参照情報は計算されない。例えば、図１８に例示した文字列Ｓ１の場合、パース部２２６２−ｑは、文字列Ｓ１をパースしてセル「2001/6/2」「274-16」「神奈川県藤沢市江の島〇〇〇」「03-9999-9999」「佐藤」「花子」「2002/7/2」「352-725」「東京都新宿区新宿〇〇〇」「03-1111-9999」「田中」「太郎」「2001/1/1」「100-0002」「東京都千代田区〇〇〇」「03-1234-5678」「田中」「次郎」「2001/1/2」「251-0036」「神奈川県藤沢市江の島〇〇〇」を特定し、それらの参照情報を計算する。最初の「郎」の始端はセルの始端ではないため、スレッド１では「郎」の参照情報は計算されない。なお、パース部２２６２−ｑは、メインメモリ１２３に参照情報を格納する領域が足りなくなったときに、メインメモリ１２３からｒを読み込み、ｒレコード分の参照情報を格納するためのバッファ領域をメインメモリ１２３にまとめて確保する。パース部２２６２−ｑはスレッドｉのバッファ境界ロックが解除される前にこの処理を開始できる。すなわち、パース部２２６２−ｑは、ｉ≧１において、文字列Ｓｉ−１に含まれる各セルの参照情報の計算が終わる前に、文字列Ｓｉに含まれる各セルの参照情報の計算を開始できる（図１３のステップＳ２２６２−ｑ、図１４のＰｉ）。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００７８
【補正方法】変更
【補正の内容】
【００７８】
その後、セル特定部２２６４−ｑが、スレッドｉのバッファ境界ロックが解除されたか否かを判定する。スレッド０のバッファ境界ロックは初期状態で解除されている（ステップＳ２２６４ａ−ｑ）。スレッドｉのバッファ境界ロックが解除されていない場合にはステップＳ２２６４ａ−ｑの判定が繰り返される。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
その後、処理部１２６−ｑに代えて処理部２２６−ｑのエンコード部１２６５−ｑおよび演算部１２６６−ｑが、第１実施形態で説明したステップＳ１２６３−ｑ，Ｓ１２６５−ｑ，Ｓ１２６９−ｑの処理を実行する（図１３のステップＳ１２６３−ｑ，Ｓ１２６５−ｑ，Ｓ１２６９−ｑ、図１４のＥｉ，ＳＳｉ，ＵＰｉ＋ｎｐ）。
【手続補正１４】
【補正対象書類名】図面
【補正対象項目名】図１２
【補正方法】変更
【補正の内容】
【図１２】
2019181594.tif 000021
【手続補正１５】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】変更
【補正の内容】
【図１３】
2019181594.tif 000022
【手続補正１６】
【補正対象書類名】図面
【補正対象項目名】図１５
【補正方法】変更
【補正の内容】
【図１５】
2019181594.tif 000023
【手続補正１７】
【補正対象書類名】図面
【補正対象項目名】図１６
【補正方法】変更
【補正の内容】
【図１６】
2019181594.tif 000024
【手続補正１８】
【補正対象書類名】図面
【補正対象項目名】図１７
【補正方法】変更
【補正の内容】
【図１７】
2019181594.tif 000025
【手続補正１９】
【補正対象書類名】図面
【補正対象項目名】図１８
【補正方法】変更
【補正の内容】
【図１８】
2019181594.tif 000026
【国際調査報告】
2019181594.tif 000027
2019181594.tif 000028
2019181594.tif 000029
2019181594.tif 000030