(57)【特許請求の範囲】
【請求項１】
第１の処理を実行し第１の結果データを出力する第１の処理部と、
第２の処理を実行し第２の結果データを出力する第２の処理部と、
外部から処理変更指示を受けたとき、前記第１の処理が停止可能か否かを判断し、前記第１の結果データに前記第１の処理の内容に対応する第１の識別情報を付加して第１の結果データの組を生成し、前記第２の結果データに前記第２の処理の内容に対応する第２の識別情報を付加して第２の結果データの組を生成する制御部と、
前記第１の結果データの組と前記第２の結果データの組とが同時に到着したとき、前記第１の識別情報と前記第２の識別情報との第１の比較結果に基づいて、前記第１の結果データの組と前記第２の結果データの組の一方を第３の結果データの組として選択する選択部と、
前記第３の結果データに含まれる第３の識別情報と予め記録されている第４の識別情報との第２の比較結果に基づいて、前記第３の結果データの組に含まれる第３の結果データを出力又は破棄する同期部と、
を備えることを特徴とする時系列データ処理装置。
【請求項２】
前記制御部は、前記第１の処理部の処理状況又は前記第１の処理部による前記第１の結果データの出力状況に基づいて、前記第１の処理が停止可能か否かを判断することを特徴とする請求項１に記載の時系列データ処理装置。
【請求項３】
前記同期部は、前記第３の結果データを出力したとき、前記第４の識別情報を前記第３の識別情報に更新することを特徴とする請求項１又は２に記載の時系列データ処理装置。
【請求項４】
前記第１の識別情報は、前記第１の処理の内容を示す第１の識別子及び前記第１の処理の変更履歴を示す第１のバージョン番号を含み、
前記第２の識別情報は、前記第２の処理の内容を示す第２の識別子及び前記第２の処理の変更履歴を示す第２のバージョン番号を含み、
前記選択部は、前記第１の結果データの組と前記第２の結果データの組とが同時に到着し、前記第１の識別子と前記第２の識別子が等しく、前記第１のバージョン番号よりも前記第２のバージョン番号の方が新しいときは、前記第２の結果データを前記第３の結果データの組として選択し、前記第１の結果データの組を破棄する
ことを特徴とする請求項１乃至３のいずれかに記載の時系列データ処理装置。
【請求項５】
前記第３の識別情報は、第３の処理の内容を示す第３の識別子及び前記第３の処理の変更履歴を示す第３のバージョン番号を含み、
前記第４の識別情報は、第４の処理の内容を示す第４の識別子及び前記第４の処理の変更履歴を示す第４のバージョン番号を含み、
前記同期部は、前記第３の識別子と前記第４の識別子が等しく、前記第４のバージョン番号よりも前記第３のバージョン番号の方が古くないときは、前記第３の結果データを出力し、前記記録されている前記第４の識別情報を前記第３の識別情報に更新する
ことを特徴とする請求項４に記載の時系列データ処理装置。
【請求項６】
前記制御部は、
前記第１の処理が停止可能な状態に至る前は、前記第２の識別子として、前記第１の識別子と同じ値を付加し、前記第２のバージョン番号として、前記第１のバージョン番号からより古いバージョン番号を付加し、
前記第１の処理が停止可能な状態に至ったときに、前記第２の識別子として、前記第１の識別子と同じ値を付加し、前記第２のバージョン番号として、前記第１のバージョン番号より新しいバージョン番号を付加する
ことを特徴とする請求項４又は５に記載の時系列データ処理装置。
【請求項７】
第１の処理を実行し第１の結果データを出力し、
第２の処理を実行し第２の結果データを出力し、
外部から処理変更指示を受けたとき、前記第１の処理が停止可能か否かを判断し、
前記第１の結果データに前記第１の処理の内容に対応する第１の識別情報を付加して第１の結果データの組を生成し、
前記第２の結果データに前記第２の処理の内容に対応する第２の識別情報を付加して第２の結果データの組を生成し、
前記第１の結果データの組と前記第２の結果データの組とが同時に到着したとき、前記第１の識別情報と前記第２の識別情報との第１の比較結果に基づいて、前記第１の結果データの組と前記第２の結果データの組の一方を第３の結果データの組として選択し、
前記第３の結果データに含まれる第３の識別情報と予め記録されている第４の識別情報との第２の比較結果に基づいて、前記第３の結果データの組に含まれる第３の結果データを出力又は破棄する
ことを特徴とする時系列データ処理方法。
【請求項８】
第１の処理を実行し第１の結果データを出力する第１の処理部、及び第２の処理を実行し第２の結果データを出力する第２の処理部を備える時系列データ処理装置が備えるコンピュータを、
外部から処理変更指示を受けたとき、前記第１の処理が停止可能か否かを判断し、前記第１の結果データに前記第１の処理の内容に対応する第１の識別情報を付加して第１の結果データの組を生成し、前記第２の結果データに前記第２の処理の内容に対応する第２の識別情報を付加して第２の結果データの組を生成する制御手段、
前記第１の結果データの組と前記第２の結果データの組とが同時に到着したとき、前記第１の識別情報と前記第２の識別情報との第１の比較結果に基づいて、前記第１の結果データの組と前記第２の結果データの組の一方を第３の結果データの組として選択する選択手段、及び
前記第３の結果データに含まれる第３の識別情報と予め記録されている第４の識別情報との第２の比較結果に基づいて、前記第３の結果データの組に含まれる第３の結果データを出力又は破棄する同期手段
として機能させることを特徴とする時系列データ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、時系列データを処理する時系列データ処理装置、時系列データ処理方法及び時系列データ処理プログラム記憶媒体に関する。特に、時系列データに対する処理の内容が変化する時系列データ処理装置、時系列データ処理方法及び時系列データ処理プログラム記憶媒体に関する。
【背景技術】
【０００２】
まず、「時系列データに対するデータ処理」について説明する。本明細書において、「時系列データに対するデータ処理」とは、時系列入力データ、すなわち、次々と入力される一連のデータに対して行われる処理をいう。時系列データに対するデータ処理の結果データも、同様に次々と出力される。「次々と入力される」とは、複数のデータがある期間にわたってそれぞれ異なるタイミングで処理装置に到着する、という意味である。時系列データに対するデータ処理の例として、時系列データの直近の２つの値の和を取る、といった処理が挙げられる。以降、時系列データに対するデータ処理を、単に、「時系列データ処理」という。【０００３】
以下の説明においては、データの配列を、［１，２，３，４］のように表し、データの集合を、｛１，２，３，４｝のように表し、データの組を＜１０度，１月１日＞のように、括弧の種類によって区別して表す。また、１、２のような、個々のデータの数値は、”１”、”２”のように表記し、構成要素を示す符号と区別する。【０００４】
また、時系列データ処理装置の動作に用いられるクロックの周期を「サイクル」といい、これを期間の単位として用いる。「サイクルの開始時」とは、その期間の最初の時点を意味し、「サイクルの終了時」とは、その期間の最後の時点を意味する。例えば、クロックの周波数が１ＧＨｚである場合は、ある基準時刻について第１サイクルは、基準時刻プラスゼロ秒から基準時刻プラス１ナノ秒の間の期間を、第Ｎサイクルは基準時刻プラス（Ｎ−１）ナノ秒から基準時刻プラスＮナノ秒の期間を意味する。第Ｍサイクルの開始時は、基準時刻プラス（Ｍ−１）ナノ秒を意味し、第Ｍサイクルの終了時は、基準時刻プラスＭナノ秒を意味する。【０００５】
ここで、入力データは１つ以上の値からなる組である。例として、温度と日付の組、温度のみの組、銘柄と株価と時刻の組、が挙げられる。例えば、温度と日付の組を＜１０度，１月１日＞のように表す。入力データと、装置で扱われる値を、それらが混同されるおそれがない場合は、単に「データ」という。【０００６】
時系列データ処理は、複数の入力データに対して行われることが多い。さらに、時系列データ処理は、時系列データのウィンドウに対して行われることが多い。「ウィンドウ」とは、入力データの集合であり、２種類ある。一つは、予め決められた数をＮ（Ｎは１以上の整数）として、直近のＮ個の入力データの集合である。もう一つは、ある決められた時刻の期間をＰとして、入力データの組の１要素を時刻とみなして、その期間に収まる入力データの集合である。【０００７】
例えば、温度と日付の組を入力データとし、＜１０度、１月１日＞、＜１１度、１月２日＞、＜１０度、１月３日＞、＜１０度、１月４日＞という時系列データが与えられたとする。１月４日から過去３日間にわたる期間に収まるウィンドウは、｛＜１１度、１月２日＞，＜１０度、１月３日＞，＜１０度、１月４日＞｝である。【０００８】
また、ウィンドウ内の入力データの集合、部分集合、要素を「ウィンドウデータ」という。時系列データ処理では、このウィンドウデータが記憶されることが多い。以下の説明では、ウィンドウあるいはウィンドウデータを配列あるいは集合として表す。【０００９】
時系列データ処理を、処理の内容を規定することができる領域（以降、「パーティション」という。）、具体的には、処理を実行する回路を構成するための回路情報等を書き込むことができる領域を複数持つＩＣ（Integrated Circuit）チップを用いて実行するものとする。このようなＩＣチップの例として、ＦＰＧＡ（Field Programmable Gate Array）が挙げられる。あるいは、ＩＣチップとして、メモリからプログラムを読み込んで実行するプロセッサを使用して、時系列データ処理を実行することもできる。この場合は、メモリに処理内容、すなわち、処理の手順を指定するプログラムを書き込めばよい。【００１０】
時系列データ処理において、第１のユーザ定義処理（「旧処理」という。）を、第２のユーザ定義処理（「新処理」という。）に変更したいというニーズが存在する。すなわち、ＩＣチップ上の第１のパーティションでは第１のユーザ定義処理（「旧処理」という。）を実行する。そして、第１のユーザ定義処理実行時に第２のパーティションに第２のユーザ定義処理（「新処理」という。）を実行する回路情報を書き込んで新処理を実行して、旧処理を停止する。このようにして、旧処理を新処理に変更したいというニーズが存在する。【００１１】
例として、広い範囲に分散配置された温度センサの値を入力データとし、ある期間の平均を取って、火事を含む緊急事態を検知するアプリケーションを考える。温度変化が激しくなってきたときに、温度変化に追従する速度を高めるために、温度の平均を取る対象期間の長さを短縮する、というニーズがある。【００１２】
また、株券など金融商品の売買のタイミングを決めるための指標を計算するアプリケーションを考える。売買する金融商品の銘柄と売買戦略に応じて、必要な指標は複数存在し、出力すべき指標の集合は異なる。ある装置は、有限数の指標しか同時に計算できない。時刻に応じて売買する銘柄と戦略は変化する。そのため、そのとき売買する銘柄と売買戦略に応じて、算出する指標を変化させたい、というニーズがある。【００１３】
図３２を用いて、背景技術における、処理の変更の例を説明する。本例では、直近の２値の和を取る旧処理を、直近の３値の和を取る新処理に変更する。【００１４】
また、１サイクルごとにデータが入力されるものとし、１サイクルを単位とする時刻を用いて説明する。【００１５】
第１サイクルの開始時に、時系列データ１が入力され、旧処理がその値をウィンドウデータとして保存する。【００１６】
第２サイクルの開始時に、時系列データ２が入力され、旧処理がその値をウィンドウデータとして保存する。また、旧処理が、直近の２値が手に入ったため、結果データとして”３”を出力する。【００１７】
第３サイクルの開始時に、新処理への変更指示が与えられる。また、新処理を実行するための情報が装置に書き込まれ、動作を開始したとする。例えば、ＦＰＧＡの一部の領域に新処理を実行する回路情報が書き込まれたとする。ここで、旧処理を実行する回路情報とは別に新処理を実行する回路情報が書き込まれ、旧処理と新処理がしばらくの間並行に動作するものとする。【００１８】
第３サイクルの開始時に、時系列データ”３”が入力され、新処理がその値をウィンドウデータとして保存する。【００１９】
第４サイクルの開始時に、時系列データ”４”が入力され、新処理がその値をウィンドウデータとして保存する。【００２０】
第５サイクルの開始時に、時系列データ”５”が入力され、新処理がその値をウィンドウデータとして保存する。また、新処理が、直近の３値が手に入ったため、結果データとして”１２”を出力する。【００２１】
ここで、旧処理を停止あるいは削除して、処理の変更が完了する。【００２２】
ここで、処理の変更の際に、（１）新処理と旧処理の両方の結果が混在して装置外部への出力されないようにしつつ、両方の処理を行いたい。（２）さらに、処理の変更の前後の旧処理の結果のうち、まだ有用で利用可能なものを装置外部に出しつつ両方の処理を行いたい、というニーズが存在する。【００２３】
例として、上記の、ある期間の温度センサの値の平均を取って、火事を含む緊急事態を検知するアプリケーションを考える。このとき、温度変化が激しくなってきたときに、温度変化に追従する速度を高めるために、温度の平均を取る期間の幅を変えることが望ましい。また、旧処理、新処理の結果が混同されないように、両方の結果が混在して装置外部に出力されないように処理を変更することも必要である。さらに、旧処理の結果も依然有用で利用可能であるため、新処理の結果が装置外部に出力されるまでの間、旧処理の結果をなるべく多く装置から受け取ることが望ましい。以上のようなニーズが存在する。【００２４】
もう一つの例として、株券など金融商品の売買の指令を行うアプリケーションを考える。売買する銘柄を変えたいため、売買指示の処理を変える必要がある。変更前の銘柄を「旧銘柄」、変更後の銘柄を「新銘柄」という。また、処理の変更の前後で新旧銘柄に関する指示が混在すると、売買を誤る恐れがある。そのため、新旧処理両方の結果が混在して装置外部に出力されないように、処理の変更を行う必要がある。また、旧銘柄に対して、最後のタイミングまで売買指示が行われるかもしれないため、新処理の結果が装置外部に出力されるまでの間、旧処理の結果をなるべく多く装置から受け取ることが望ましい。以上のようなニーズが存在する。【００２５】
さらに、このアプリケーションでは、処理の変更の過程で、安全な状態になってから旧処理を停止したいというニーズがある。例えば、売りの指令を出したら、買いの指令を出すまで旧処理の指示を出させるようにしておいて、それから新処理の指示だけを出させるようにしたい場合がある。すなわち、（１）停止可能な状態になっていない旧処理から出力された結果の列は有用で利用可能であるため装置外部に出力させ、（２）その後、停止可能な状態になった旧処理から出力された結果の列は、新処理から出力された結果の列で置き換えて装置外部に出力させる、というニーズが存在する。【００２６】
以上のような処理に関連する技術が、特許文献１−４、非特許文献１に記載されている。【００２７】
特許文献１には、再構成可能デバイスを用いたシステムが開示されている。【００２８】
特許文献２には、２種類の処理を行う時系列データ圧縮装置が開示されている。【００２９】
特許文献３、４には、バージョン番号（更新版数）が付加された情報を取り扱う処理装置が開示されている。【００３０】
非特許文献１は、旧処理と新処理の２種類の処理が可能な時系列データ処理装置が開示されている。非特許文献１では、ソフトウェアによる実装が想定されているが、便宜上、ハードウェアによって実装したと想定し、その構成図を図３３に示す。【００３１】
非特許文献１の技術は、旧処理に対応するユーザ定義処理及び新処理に対応するユーザ定義処理を行う処理部５０１、処理部の結果を外部への出力ポートへ接続する合流部５１１を備える。【００３２】
非特許文献１の技術は大きく分けて２種類の方法で動作する。図３４から図３８を用いて、第１の方法による動作を説明する。【００３３】
本例では、直近の２値の和を取る旧処理を、直近の３値の和を取る新処理に変更する。新旧処理の両方とも、データを入力したのと同じサイクルに結果を生成する、とする。また、処理の結果は処理部５０１から合流部５１１へ１サイクルで到達するものとする。また、処理の結果は合流部５１１から装置外部へ１サイクルで到達するものとする。また１サイクルごとにデータが入力されるものとし、１サイクルを単位とする時刻を用いて説明する。【００３４】
第１サイクルの開始時に時系列データ”１”、第２サイクルの開始時に時系列データ”２”が入力されたとする。旧処理は直近の２値である［１，２］を得たため、処理部５０１が結果”３”を計算し出力する。第２サイクルの終了時に、各部分は図３４のような状態になる。【００３５】
第３サイクルの開始時に、時系列データ３が新旧処理に入力されたとする。旧処理は結果”５”を出力する。同時に、新処理の内容が規定され、実行を開始するものとする。新処理の内容の規定は、処理を実現する装置がＦＰＧＡの場合は、例えば、部分再構成機能によって行われる。新処理は、時系列データ”３”を保存しておく。装置外部へは旧処理の結果”３”が出力される。第３サイクルの終了時に、各部分は図３５のような状態になる。【００３６】
第４サイクルの開始時に、時系列データ”４”が新旧処理に入力されたとする。旧処理は結果”７”を出力する。新処理は、時系列データ”４”を保存しておく。装置外部へは旧処理の結果”５”が出力される。第４サイクルの終了時に、各部分は図３６のような状態になる。【００３７】
第５サイクルの開始時に、時系列データ”５”が新旧処理に入力されたとする。旧処理は結果”９”を出力する。新処理は直近の３値である［３，４，５］を得たため、３つの値の合計である結果”１２”を出力する。装置外部へは旧処理の結果”７”が出力される。第５サイクルの終了時に、各部分は図３７のような状態になる。【００３８】
第６サイクルの開始時に、時系列データ”６”が新旧処理に入力されたとする。旧処理は結果”１１”を出力する。新処理は結果”１５”を出力する。装置外部へは旧処理の結果”９”と新処理の結果”１２”が出力される。第６サイクルの終了時に、各部分は図３８のような状態になる。このように、非特許文献１の第１の方法では、装置外部へ新旧処理両方の結果が混在して出力される。【００３９】
次に、図３９から図４３を用いて、非特許文献１の第２の方法による動作を説明する。【００４０】
ここでも、直近２値の和を取る旧処理を、直近３値の和を取る新処理に変更する。新旧処理両方とも、データを入力したのと同じサイクルに結果を出力する、とする。また、処理の結果は処理部から合流部へ１サイクルで到達するものとする。また、処理の結果は合流部から装置外部へ１サイクルで到達するものとする。また１サイクルごとにデータが入力されるものとし、１サイクルを単位とする時刻を用いて説明する。【００４１】
第１サイクルの開始時に、時系列データ”１”が入力されたとする。第２サイクルの開始時に、時系列データ”２”が入力されたとする。旧処理は直近２値である［１，２］を得たため、処理部５０１が結果”３”を計算し出力する。第２サイクルの終了時に、各部分は図３９のような状態になる。【００４２】
第３サイクルの開始時に、時系列データ”３”が新旧処理に入力されたとする。同時に、新処理を実行するための情報が書き込まれ、実行を開始するものとする。第２の方法では、旧処理は、このタイミングで停止する。新処理は、時系列データ”３”を保存しておく。第３サイクルの終了時に、各部分は図４０のような状態になる。【００４３】
第４サイクルの開始時に、時系列データ”４”が新旧処理に入力されたとする。新処理は、時系列データ”４”を保存しておく。第４サイクルの終了時に、各部分は図４１のような状態になる。このように、第２の方法では、このタイミングで装置外部へ結果は出力されない。これに対して、第１の方法では、図３６のように、結果が出力される。【００４４】
第５サイクルの開始時に、時系列データ”５”が新旧処理に入力されたとする。新処理は直近の３値である［３，４，５］を得たため、結果”１２”を出力する。第５サイクルの終了時に、各部分は図４２のような状態になる。このように、第２の方法では、このタイミングでも、装置外部へ結果が出力されない。これに対して、第１の方法では、図３７のように、結果が出力される。【００４５】
第６サイクルの開始時に、時系列データ”６”が新旧処理に入力されたとする。新処理は結果”１５”を出力する。第６サイクルの終了時に、各部分は図４３のような状態になる。【００４６】
以上のように、非特許文献１の第２の方法では、新旧処理両方の結果が混在して装置外部に出力されることはない。
【先行技術文献】
【特許文献】
【００４７】
【特許文献１】特表２００４-５０８６１７号公報  （第６、１５頁、図１、２）
【特許文献２】特開２００２−０４９７４７号公報  （第４頁、図１）
【特許文献３】特開２００１−０７５９０８号公報  （第４頁）
【特許文献４】特開２００５−０４９１０２号公報  （第６頁、図３）
【非特許文献】
【００４８】
【非特許文献１】Kyumars Sheykh Esmail et al., Changing Flights in Mid-air: A model for Safely Modifying Continuous Queries, In Proc. Of SIGMOD’11, June 2011
【発明の概要】
【発明が解決しようとする課題】
【００４９】
特許文献１には、再構成可能デバイスを用いたシステムが開示されている。しかし、特許文献１には、デバイスの構成ファイル（所定の回路を構成するための回路情報）の書き換え時に発生する問題には言及されていない。従って、そのような問題を解決することができない。【００５０】
特許文献２には、２種類の処理を行う時系列データ圧縮装置が開示されている。しかし、特許文献２の装置では、前処理の結果に対する所定の判断の結果に基づいて、２種類の処理のうちの１つを適用する。そして、最終の処理結果がいずれの処理が適用されたものであるかの区別はされない。従って、２種類の処理のそれぞれによる結果を判別することができない。【００５１】
特許文献３、４には、バージョン番号（更新版数）が付加された情報を取り扱う処理装置が開示されている。しかし、特許文献３の技術、特許文献４の技術共に、バージョン番号は、それが付加された情報の新旧を判断し、新しい情報に更新するために用いられる。従って、バージョン番号が古い方の情報は、破棄されるため、その情報が有用であっても、活用することはできない。【００５２】
特許文献２の技術と、特許文献３又は特許文献４を組み合わせると、時系列データに対して新処理、旧処理の２種類の処理を行い、その結果データが、いずれの処理が適用されたものであるかの判別は可能である。しかし、その判別は、処理の新旧を判別するものとなり、旧処理による結果データを活用することはできない。【００５３】
非特許文献１の第１の方法では、図３８のように、新旧処理両方の結果が混在して装置外部に出力される。混在して出力された結果データは、新処理によるものか旧処理によるものかの識別ができない。そのため、処理の変更前後の旧処理による結果データを利用することができないという課題がある。【００５４】
非特許文献１の第２の方法では、新旧処理両方の結果が混在して装置外部に出力されことはない。そのため、結果データを利用することは可能である。【００５５】
ところが、旧処理による結果データで、有用で利用可能な結果があるときも、装置外部に出力されない。すなわち、旧処理は、動作させることが可能であるにもかかわらず、停止させられているために、旧処理によって得られるデータを外部に出力することができない。例えば、上記の例では、［２，３］の和、［３，４］の和は、利用可能であるにもかかわらず出力されない。【００５６】
さらに、旧処理を継続して動作させたとしても、合流部で新処理の結果と旧処理の結果が混合されるために、旧処理の結果を指定したタイミングまで出力させることはできない。上記の例では、新処理の結果と混合されることなく、［２，３］の和、［３，４］の和を出力することはできない。【００５７】
このように、非特許文献１の第２の方法には、旧処理を極力実行させ、その処理結果を最大限に利用するといった、処理装置の有効利用の観点で課題がある。【００５８】
以上の説明を整理すると、非特許文献１の技術では、処理の結果データについて、新処理によるものであるか旧処理によるものであるかを区別せず、混合して出力する。そのため、非特許文献１の技術では、処理を新処理から旧処理に実行時に変更する際に、新旧処理両方の結果が混在して装置外部に出力されるという課題がある。【００５９】
あるいは、非特許文献１の技術では、新処理を開始するときは、旧処理は停止させる。そのため第２の課題は、旧処理の有用で利用可能な結果が装置外部に出力されないという課題がある。
（発明の目的）
本発明はこのような事情に鑑みて提案されたものであり、時系列データの処理において、第１の処理から第２の処理への処理の変更時に、新旧処理の両方の結果が混在して外部に出力されず、処理の変更前後の旧処理の結果を外部に出力することができる時系列データ装置、時系列データ方法及び時系列データ処理プログラム記憶媒体を提供することにある。
【課題を解決するための手段】
【００６０】
本発明の時系列データ処理装置は、第１の処理を実行し第１の結果データを出力する第１の処理部と、第２の処理を実行し第２の結果データを出力する第２の処理部と、外部から処理変更指示を受けたとき、第１の処理が停止可能か否かを判断し、第１の結果データに第１の処理の内容に対応する第１の識別情報を付加して第１の結果データの組を生成し、第２の結果データに第２の処理の内容に対応する第２の識別情報を付加して第２の結果データの組を生成する制御部と、第１の結果データの組と第２の結果データの組とが同時に到着したとき、第１の識別情報と第２の識別情報との第１の比較結果に基づいて、第１の結果データの組と第２の結果データの組の一方を第３の結果データの組として選択する選択部と、第３の結果データに含まれる第３の識別情報と予め記録されている第４の第４の識別情報との第２の比較結果に基づいて、第３の結果データの組に含まれる第３の結果データを出力又は破棄する同期部と、を備えることを特徴とする。【００６１】
本発明の時系列データ処理方法は、第１の処理を実行し第１の結果データを出力し、第２の処理を実行し第２の結果データを出力し、外部から処理変更指示を受けたとき、第１の処理が停止可能か否かを判断し、第１の結果データに第１の処理の内容に対応する第１の識別情報を付加して第１の結果データの組を生成し、第２の結果データに第２の処理の内容に対応する第２の識別情報を付加して第２の結果データの組を生成し、第１の結果データの組と第２の結果データの組とが同時に到着したとき、第１の識別情報と第２の識別情報との第１の比較結果に基づいて、第１の結果データの組と第２の結果データの組の一方を第３の結果データの組として選択し、第３の結果データに含まれる第３の識別情報と予め記録されている第４の第４の識別情報との第２の比較結果に基づいて、第３の結果データの組に含まれる第３の結果データを出力又は破棄することを特徴とする。【００６２】
本発明の時系列データ処理プログラム記憶媒体は、第１の処理を実行し第１の結果データを出力する第１の処理部、及び第２の処理を実行し第２の結果データを出力する第２の処理部を備える時系列データ処理装置が備えるコンピュータを、外部から処理変更指示を受けたとき、第１の処理が停止可能か否かを判断し、第１の結果データに第１の処理の内容に対応する第１の識別情報を付加して第１の結果データの組を生成し、第２の結果データに第２の処理の内容に対応する第２の識別情報を付加して第２の結果データの組を生成する制御手段、第１の結果データの組と第２の結果データの組とが同時に到着したとき、第１の識別情報と第２の識別情報との第１の比較結果に基づいて、第１の結果データの組と第２の結果データの組の一方を第３の結果データの組として選択する選択手段、及び第３の結果データに含まれる第３の識別情報と予め記録されている第４の第４の識別情報との第２の比較結果に基づいて、第３の結果データの組に含まれる第３の結果データを出力又は破棄する同期手段として機能させるためのプログラムを格納する。
【発明の効果】
【００６３】
本発明によれば、時系列データの処理において、実行する処理を、第１の処理から第２の処理へ変更したときも、第１、第２の両方の結果が混在して装置外部に出力されない。さらに、処理の変更前後の旧処理の結果を外部に出力することができる。
【図面の簡単な説明】
【００６４】
【図１】本発明の実施形態の時系列データ処理装置の構成を示すブロック図である。
【図２】バージョン比較部１２１の実装の第１の例を示すブロック図である。
【図３】バージョン比較部１２１の実装の第２の例を示すブロック図である。
【図４】部分バージョン比較部１００１の実装の例を示すブロック図である。
【図５】結果データの組のデータ構造の例を示す図である。
【図６】本発明の実施形態の時系列データ処理装置における処理例を示すフローチャートである。
【図７】本発明の実施形態の時系列データ処理装置における処理例を示すフローチャートである。
【図８】本発明の実施形態の時系列データ処理装置における処理例を示すフローチャートである。
【図９】本発明の実施形態の動作の具体例１の、第４サイクル終了時の各部の出力データの状態を示す図である。
【図１０】本発明の実施形態の動作の具体例１の、第５サイクル終了時の各部の出力データの状態を示す図である。
【図１１】本発明の実施形態の動作の具体例１の、第６サイクル終了時の各部の出力データの状態を示す図である。
【図１２】本発明の実施形態の動作の具体例１の、第７各サイクル終了時の各部の出力データの状態を示す図である。
【図１３】本発明の実施形態の動作の具体例１の、第８サイクル終了時の各部の出力データの状態を示す図である。
【図１４】本発明の実施形態の動作の具体例１の、第９サイクル終了時の各部の出力データの状態を示す図である。
【図１５】本発明の実施形態の動作の具体例１の、第１０サイクル終了時の各部の出力データの状態を示す図である。
【図１６】本発明の実施形態の動作の具体例２の、第８サイクル終了時の各部の出力データの状態を示す図である。
【図１７】本発明の実施形態の動作の具体例２の、第９サイクル終了時の各部の出力データの状態を示す図である。
【図１８】本発明の実施形態の動作の具体例２の、第１０サイクル終了時の各部の出力データの状態を示す図である。
【図１９】本発明の実施形態の動作の具体例２の、第１２サイクル終了時の各部の出力データの状態を示す図である。
【図２０】本発明の実施形態の動作の具体例２の、第１３サイクル終了時の各部の出力データの状態を示す図である。
【図２１】本発明の実施形態の動作の具体例２、第１４サイクル終了時の各部の出力データの状態を示す図である。
【図２２】本発明の実施形態の動作の具体例２、第１５サイクル終了時の各部の出力データの状態を示す図である。
【図２３】本発明の実施形態の動作の具体例２、第１６サイクル終了時の各部の出力データの状態を示す図である。
【図２４】本発明の実施形態の動作の具体例２の、第１７サイクル終了時の各部の出力データの状態を示す図である。
【図２５】本発明の実施形態の動作の具体例３の、第４サイクル終了時の各部の出力データの状態を示す図である。
【図２６】本発明の実施形態の動作の具体例３の、第５サイクル終了時の各部の出力データの状態を示す図である。
【図２７】本発明の実施形態の動作の具体例３の、第６サイクル終了時の各部の出力データの状態を示す図である。
【図２８】本発明の実施形態の動作の具体例３の、第７サイクル終了時の各部の出力データの状態を示す図である。
【図２９】本発明の実施形態の動作の具体例３の、第８サイクル終了時の各部の出力データの状態を示す図である。
【図３０】本発明の実施形態の動作の具体例３の、第９サイクル終了時の各部の出力データの状態を示す図である。
【図３１】本発明の実施形態の動作の具体例３の、第１０サイクル終了時の各部の出力データの状態を示す図である。
【図３２】背景技術の動作例の旧処理と新処理の状態の時間遷移図である。
【図３３】非特許文献１の時系列データ処理装置の構成を示すブロック図である。
【図３４】非特許文献１の時系列データ処理装置の、第１の方法による、第２サイクルの終了時の各部の出力データの状態を示す図である。
【図３５】非特許文献１の時系列データ処理装置の、第１の方法による、第３サイクルの終了時の各部の出力データの状態を示す図である。
【図３６】非特許文献１の時系列データ処理装置の、第１の方法による、第４サイクルの終了時の各部の出力データの状態を示す図である。
【図３７】非特許文献１の時系列データ処理装置の、第１の方法による、第５サイクルの終了時の各部の出力データの状態を示す図である。
【図３８】非特許文献１の時系列データ処理装置の、第１の方法による、第６サイクルの終了時の各部の出力データの状態を示す図である。
【図３９】非特許文献１の時系列データ処理装置の、第２の方法による、第２サイクルの終了時の各部の出力データの状態を示す図である。
【図４０】非特許文献１の時系列データ処理装置の、第２の方法による、第３サイクルの終了時の各部の出力データの状態を示す図である。
【図４１】非特許文献１の時系列データ処理装置の、第２の方法による、第４サイクルの終了時の各部の出力データの状態を示す図である。
【図４２】非特許文献１の時系列データ処理装置の、第２の方法による、第５サイクルの終了時の各部の出力データの状態を示す図である。
【図４３】非特許文献１の時系列データ処理装置の、第２の方法による、第６サイクルの終了時の各部の出力データの状態を示す図である。
【発明を実施するための形態】
【００６５】
（第１の実施形態）
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００６６】
時系列データに対して処理を行う時系列データ処理装置において、ＩＣチップ上の複数領域でユーザ定義処理を実行し、実行時に任意の領域を異なる動作をする処理に変更する。前述のように、変更前の処理を「第１のユーザ定義処理」、変更後の処理を「第２のユーザ定義処理」という。あるいは、変更前の処理を「旧処理」、変更後の処理を「新処理」ということもある。
【００６７】
ＩＣチップにおいて、旧処理を動作させたまま新処理を実行する回路情報を書き込み、新処理の動作を開始させ、その後、旧処理を停止させ、旧処理を実行する回路情報を削除する形で処理の変更を行うことにより、結果が出力されない期間を短縮しながら処理の変更を実現する。なお、上記の処理の変更は、時系列データデータ処理を実行する回路情報を書き込める領域（「パーティション」という。）を、複数持つＩＣチップを用いて実現してもよい。このようなＩＣチップの例として、ＦＰＧＡが挙げられる。
【００６８】
図１は、本発明の実施形態に係る時系列データ処理装置１００の構成を示すブロック図である。
【００６９】
時系列データ処理装置１００は、処理部１０１、制御部１１１、選択部１２１、同期部１３１を備える。
【００７０】
処理部１０１は、旧処理を実行し結果データを出力する。あるいは、処理部１０１は、旧処理の実行時に置き換えられた新処理を実行し、結果データを出力する。処理部１０１が実行する処理が、旧処理であるか、あるいは新処理であるかは、処理部１０１が実行する処理の変更の有無により決まる。複数の処理部１０１の機能や内部の構成は、すべて同じであっても、一部又は全部が異なっていてもよい。
【００７１】
制御部１１１は、各処理部１０１が行った処理の内容に対応する「識別情報」を設定する。識別情報の違いにより、処理部１０１が行った処理の違いを識別することができる。識別情報とは、例えば、処理の基本的な内容を識別する「処理のＩＤ」や同じＩＤの処理の中での更新履歴を識別する「バージョン番号」である。以下の説明では、識別情報として、処理のＩＤ及びバージョン番号を使用した例を示す。しかし、処理のＩＤとバージョン番号には本質的な違いはなく、処理の内容が変化したことを識別できる「識別情報」であれば、その他の情報を用いることも可能である。
【００７２】
そして、制御部１１１は、処理部１０１が結果データを出力したタイミングで、結果データに処理のＩＤとバージョン番号を付加し、選択部１２１へ出力する。
【００７３】
選択部１２１は、複数の処理部１０１と制御部１１１から結果データと処理のＩＤとバージョン番号の組を受け取る。複数の組が同時に到着したときは、処理のＩＤが同じものについて、古いバージョン番号が付加されている方の結果データを破棄し、その他の結果データを同期部１３１に出力する。なお、上記のように、選択部１２１は、識別情報として含まれるバージョン情報を比較し、出力する結果データを選択するので、本実施形態では、以降、選択部を、「バージョン比較部」と記載する。
【００７４】
同期部１３１には、予め、処理のＩＤごとに、バージョン番号が登録されている。同期部１３１は、バージョン比較部１２１から結果データと、処理のＩＤと、バージョン番号の組を受け取る。そして、同期部１３１に登録されている、処理のＩＤごとのバージョン番号よりも古いバージョン番号が付加されている結果データを破棄し、その他の結果データを外部へ出力する。さらに、出力される結果データに付加されている、処理のＩＤ及びバージョン番号も外部へ出力してもよい。そして、同期部１３１は、結果データを出力したときは古、同期部１３１に記録されているバージョン番号を、出力した結果データに付加されていたバージョン番号に更新する。
【００７５】
制御部１１１は、処理部１０１の結果データの出力に合わせて、処理のＩＤとバージョン番号を出力する。この結果、バージョン比較部１２１への入力情報は、処理部１０１が出力した結果データと制御部が付加した処理のＩＤとバージョン番号の組である。バージョン比較部１２１から同期部１３１へ入力される情報も、処理部１０１が出力した結果データと制御部が付加した処理のＩＤとバージョン番号の組である。上記の情報の組は、例えば、図５に示すような構成をとってもよい。以降、結果データ、処理のＩＤ、バージョン番号からなる上記情報の組を、一体のものとして取り扱うときは、「結果データの組」という。
【００７６】
図２は、バージョン比較部１２１の実装の第１の例を示すブロック図である。図２のバージョン比較部１２１は、４つの処理部１０１を備える時系列データ処理部に対応するもので、４組の結果データの組を受け取る。バージョン比較部１２１は、３つの部分バージョン比較部１００１を備える。３つの部分バージョン比較部１００１の各々は、２組の結果データの組が同時に到着したときは、処理のＩＤが同じものについて、古いバージョン番号が付加されている方の結果データの組を破棄し、その他の結果データの組を出力ポートへ出力する。
【００７７】
図３は、バージョン比較部１２１の実装の第２の例を示すブロック図である。図３のバージョン比較部１２１は、８つの処理部１０１を備える時系列データ処理部に対応するもので、８組の結果データの組を受け取る。バージョン比較部１２１は、７つの部分バージョン比較部１００１を備える。図２、３と同様に、部分バージョン比較部を設けることにより、任意の個数の入力を持つバージョン比較部１２１を構成することができる。
【００７８】
図４は、部分バージョン比較部１００１の実装の例を示すブロック図である。部分バージョン比較部１００１は、入力ポート、出力ポート、待ちデータキュー１００２、調停部１００３を持つ構成で実装してもよい。部分バージョン比較部１００１は、調停部１００３を用いて、２つの入力ポートと待ちデータキュー１００２から受け取った結果データの組について、出力ポートの割り当ての調停を行う。出力ポートが割り当てられた結果データの組は出力ポートに出力される。出力ポートが割り当てられなかった結果データの組は、破棄されるか、待ちデータキュー１００２に挿入される。待ちデータキュー１００２に挿入されたデータは、次のサイクルに再び部分バージョン比較部１００１への入力となる。
【００７９】
以降の動作の説明は、バージョン比較部１２１が、一つの部分バージョン比較部１００１から構成されている場合についてのみ行う。説明されるバージョン比較部１２１の動作は、２つ以上の部分バージョン比較部１００１を備えるバージョン比較部１２１にも容易に応用可能である。
【００８０】
次に、本実施の形態に係る時系列データ処理装置１００の動作について、図６、図７、図８を参照して説明する。
【００８１】
まず初めに、いくつかの用語を定義する。新たな入力が到着して、次の入力が来る前の期間を、「１入力期間」という。時系列データ処理装置が、所定の動作を完了させるために要する単位時間を規定するクロックの周期を、「１サイクル」という。
【００８２】
前述のように、ＩＣチップ上に処理を実行させることのできる回路の領域を複数分けて設け、これを「パーティション」という。パーティションには、構成データ、コンフィギュレーションデータと呼ばれる設定情報を設定することで、ユーザ定義の処理を実行する回路を作成することができる。
【００８３】
また、「指令する」、「指示する」とは、ある部分（「指令元部分」という。）が、別の部分（「指令先部分」という。）に接続されている配線の信号を操作したり、指令先部分に存在する記憶装置に値を書き込んだりすることを意味する。「登録する」、「設定する」、「記録する」とは、登録元のある部分が、登録先の別の部分に存在する記憶装置に値を書き込むことを意味する。「情報を送る」、「データを送る」、「結果を出力する」とは、送り元である、装置のある部分が、送り先である、装置の別の部分に接続されている配線の信号を操作したり、送り先の部分に存在する記憶装置に値を書き込んだりすることを意味する。
【００８４】
バージョン番号は、整数で表現してもよい。あるいは、Ｍの剰余系を用いてもよい。また、「”１”だけ新しいバージョン番号」は、バージョン番号に整数が用いられた場合は、古いバージョン番号である整数Ｎに対し、（Ｎ＋１）という値を意味する。あるいは、「”１”だけ新しいバージョン番号」は、バージョン番号にＭの剰余系が用いられた場合は、古いバージョン番号である、整数ＮをＭで除した余り、に対し、（Ｎ＋１）をＭで除した余り、を意味する。「”１”だけ古いバージョン番号」は、バージョン番号に整数が用いられた場合は、新しいバージョン番号である整数Ｎに対し、（Ｎ−１）という値を意味する。あるいは、「”１”だけ古いバージョン番号」は、バージョン番号にＭの剰余系が用いられた場合は、新しいバージョン番号である、整数ＮをＭで除した余り、に対し、（Ｎ−１）をＭで除した余り、を意味する。例えば、３の剰余系を用いて、”０”より”１”だけ新しい値は”１”、”１”より”１”だけ新しい値は”２”、”２”より”１”だけ新しい値は”０”、”２”より”１”だけ古い値は”１”、”１”より”１”だけ古い値は”０”、”０”より”１”だけ古い値は”２”、と表現してもよい。
【００８５】
処理のＩＤは、第１の旧処理から第１の新処理への変更と、第２の旧処理から第２の新処理への変更が同時進行している、といった際に、旧処理と新処理のペアを区別するために用いられる。
【００８６】
ところで、本実施形態では、時系列データ処理装置１００から出力される結果データが、旧処理によるものから新処理によるものへ変更される。この変更は、図示されないホストコンピュータ等による、時系列データ処理装置１００に対する、処理の変更指示（以降、「処理変更指示」という。）によって許可される。以下の説明では、時系列データ処理装置１００は、既に処理変更指示を受けていることを前提とする。
【００８７】
図６のフローチャートにおいて、まず、制御部１１１が、新旧処理の結果データに対応させて、処理のＩＤとバージョン番号を設定する。このとき、旧処理が停止可能な状態に至った場合は、新処理のバージョン番号を変更する（ステップＳ１０９９）。旧処理が停止可能な状態に至ったか否かは、制御部１１１が判断する。
【００８８】
ここで、「旧処理が停止可能な状態」とは、旧処理を実行する処理部１０１の動作を停止させ、結果データの出力を停止することができる状態をいう。旧処理が停止可能な状態では、時系列データ処理装置１００から出力される結果データを、旧処理による結果データから新処理による結果データへ変更することができる。
【００８９】
すなわち、処理変更指示を受けると、時系列データ処理装置１００から出力される結果データが、直ちに、新処理による結果データに変更されるのではない。時系列データ処理装置１００が処理変更指示を受け、さらに、旧処理が停止可能な状態に至った後、時系列データ処理装置１００から出力される結果データが、新処理による結果データに変更される。
【００９０】
例えば、旧処理が進行中である等の旧処理を実行する処理部１０１の処理状況、あるいは、旧処理による一連のデータの出力中である等の処理部１０１の出力状況によっては、旧処理が停止可能な状態にはならない。この場合は、時系列データ処理装置１００からは、旧処理の結果データの出力が継続される。
【００９１】
バージョン番号の設定を指示したり、値を与えたりする主体は、図示されないホストコンピュータでもよい。あるいは、その主体は制御部でもよい。バージョン番号は、新処理の内容を規定する前や、旧処理が出力する結果データを装置外部に出力する必要がなくなった、すなわち旧処理が停止可能状態になったタイミングで設定される。旧処理が停止可能状態にない場合は、新処理の結果データの処理のＩＤには旧処理の結果データの処理のＩＤと同じ値を設定し、新処理の結果データのバージョン番号は、旧処理の結果データのバージョン番号より１だけ古い値を設定してもよい。例えば、旧処理の結果データの処理のＩＤは”０”、バージョン番号は”１”、新処理の結果データの処理のＩＤは”０”、バージョン番号は”０”、と設定してもよい。
【００９２】
旧処理が停止可能状態になった直後に、新処理のＩＤには旧処理のＩＤと同じ値を設定し、新処理のバージョン番号は、旧処理のバージョン番号より”１”だけ新しい値に設定してもよい。すなわち、同じＩＤが設定された新処理及び旧処理は、バージョン番号で識別してもよい。例えば、旧処理のＩＤは０、バージョン番号は”１”、新処理のＩＤは”０”、バージョン番号は”２”、と設定してもよい。あるいは、バージョン番号に３の剰余系を用いて、旧処理のＩＤは１００、バージョン番号は”２”、新処理のＩＤは１００、バージョン番号は”０”、と設定してもよい。
【００９３】
あるいは、旧処理が常に停止可能状態にあるものとしてもよい。この場合も、新処理のＩＤには旧処理のＩＤと同じ値を設定し、新処理のバージョン番号は、旧処理のバージョン番号より”１”だけ新しい値に設定してもよい。この場合は、処理部１０１からの新処理による結果データの出力が開始され、その結果データが装置外部への出力ポートへ至った時刻以降は、新処理の結果データのみが時系列データ処理装置外部へ出力されるようにする。それまでは、旧処理の結果データが最大限装置外部へ出力される。
【００９４】
次に、制御部１１１が、結果データの組をバージョン比較部１２１に送る（ステップＳ１１００）。ここでは、ステップＳ１０９９で設定した処理のＩＤとバージョン番号を用いる。
【００９５】
バージョン比較部１２１は、入力ポートあるいは待ちデータキューに結果データの組が到着したか否かを調べる。同期部１３１も、結果データの組が到着したか否か調べる（ステップＳ１１０１）。結果データの組が到着した場合（ステップＳ１１０１：Yes）は、ステップＳ１１０２に進む。結果データの組が到着していない場合（ステップＳ１１０１：No）はステップＳ１０９９へ戻る。
【００９６】
「待ちデータキュー」とは、バージョン比較部１２１において、破棄されず、かつ出力されなかった結果データの組が挿入されるキューである。待ちデータキューに格納された結果データの組は、次のサイクルに待ちデータキューから取り出され、バージョン比較部１２１に到着したとみなされる。
【００９７】
バージョン比較部１２１は、結果データの組がバージョン比較部に到着したか調べる（ステップＳ１１０２）。結果データの組がバージョン比較部に到着した場合（ステップＳ１１０２：Yes）はステップＳ１１０３（図８）へ進む。結果データの組がバージョン比較部に到着していない場合（ステップＳ１１０２：No）、すなわち、結果データの組が同期部１３１に到着した場合は、ステップＳ１３０１に進む。
【００９８】
バージョン比較部１２１の調停部１００３が、到着した結果データの組が一つのみか調べる（ステップＳ１１０３）。一つのみの場合（ステップＳ１１０３：Yes）はステップＳ１１０４に進む。バージョン比較部１２１へ到着した結果データの組が一つのみでない場合（ステップＳ１１０３：No）は、ステップＳ１２０１（図７）に進む。
【００９９】
バージョン比較部１２１の調停部１００３は、結果データの組を同期部１３１に送り（ステップ１１０４）、ステップＳ１０９９へ戻る。
【０１００】
次に、図７を用いて、動作の続きを説明する。バージョン比較部１２１へ到着した結果データの組が一つのみでない場合（ステップＳ１１０３：No）は、バージョン比較部１２１の調停部１００３が、到着した結果データの組のうちで、処理のＩＤが同一かつバージョン番号が異なる組が残っているか調べる（ステップＳ１２０１）。このとき、バージョン比較部１２１へは、結果データの組が複数同時に到着する場合があるため、同時に到着した結果データの組から調べる。処理のＩＤが同一かつバージョン番号が異なる組が残っている場合（ステップＳ１２０１：Yes）は、ステップＳ１２０２へ進む。処理のＩＤが同一かつバージョン番号が異なるペアが残っていない場合（ステップＳ１２０１：No）はステップＳ１２０３へ進む。
【０１０１】
処理のＩＤが同一かつバージョン番号が異なるペアが残っている場合は、バージョン比較部１２１の調停部１００３は、バージョン番号が１だけ古い方の結果データの組を破棄し（ステップＳ１２０２）、ステップＳ１２０１に戻る。
【０１０２】
処理のＩＤが同一かつバージョン番号が異なるペアが残っていない場合は、バージョン比較部１２１の調停部１００３は、到着した結果データの組のうちで、破棄されていないものの間で出力ポートの割り当ての調停を行う。すなわち、ポートが割り当てられた結果データの組を同期部に送り、ポートが割り当てられなかった結果データの組をバージョン比較部１２１の待ちデータキュー１００２に挿入し（ステップＳ１２０３）、ステップＳ１０９９に戻る。「出力ポートの割り当ての調停」とは、具体的には、出力ポートを使用できるデータを一つ選ぶ行為を意味する。この調停においてデータが選ばれたとき、「データがポートを獲得した」という。
【０１０３】
次に、図８を用いて、動作の続きを説明する。結果データの組が同期部１３１に到着した場合（ステップＳ１１０２：No）、同期部１３１は、到着した結果データの組のバージョン番号が、同期部１３１に記録されている処理のＩＤごとのバージョン番号より古いか否かを調べる（ステップＳ１３０１）。到着した結果データの組のバージョン番号が古い場合はステップＳ１３０４に進み、そうでない場合はステップＳ１３０２に進む。
【０１０４】
到着した結果データの組のバージョン番号が、同期部１３１に記録されている処理のＩＤごとのバージョン番号より古くない場合（ステップＳ１３０１：No）は、同期部１３１は、同期部１３１が記録する処理のＩＤごとのバージョン番号を、到着した結果データの組のものに更新し（ステップ１３０２）、ステップＳ１３０３に進む。
【０１０５】
次に同期部１３１は、到着した結果データの組を外部への出力ポートへ転送し（ステップ１３０３）、ステップＳ１０９９へ戻る。
【０１０６】
到着した結果データの組のバージョン番号が、同期部１３１に記録されている処理のＩＤごとのバージョン番号より古い場合（ステップＳ１３０１：Yes）は、同期部１３１は、到着した結果データの組を破棄し（ステップＳ１３０４）、ステップＳ１０９９へ戻る。
（実施形態の動作の具体例１）
図６から図８のフローチャートと、図９から図１５のブロック図を参照して、実施形態に係る時系列データ処理装置１００の動作の具体例を説明する。
【０１０７】
図９から図１５の時系列データ処理装置１００は、４つの処理部１０１を備える。以降、旧処理の実行を担当する処理部は処理部１０１−１と表記し、新処理の実行を担当する処理部は処理部１０１−２と表記する。実行する処理が旧処理であるか新処理であるかを区別する必要がなく、処理部１０１−１、処理部１０１−２の両方に当てはまるとき、あるいは、旧処理、新処理以外の処理を行うときは、処理部１００と表記する。
【０１０８】
以下の説明では、データの配列を、［１，２，３，４］のように表す。各処理は、配列として、若いデータから順に右に詰めてデータを格納するデータ構造を用いる。例えば、毎時刻にデータが来るものとして、時刻４に、［１，２，３，４］という値が格納されている場合、右端のエントリが時刻４の入力データ、左端が時刻１の入力データに対応する。上記のデータ構造では、ＦＩＦＯあるいはシフトレジスタのように、時間がたつにつれて各エントリの値が左へ移動して、自動的に直近の４つの値だけが保持される。図９から図１５では、データの配列は、上記のように表記されている。
【０１０９】
本具体例では、株価の時系列データについて、４つの値の和を計算する処理（「旧処理」という。）を、４つの値の平均を計算する処理（「新処理」という。）に変更することを考える。
【０１１０】
なお、以下の説明では、新処理、旧処理とも、ＦＰＧＡのように再構成可能な回路素子に、それぞれの処理を実行するための回路情報を書き込んだ後、回路を動作させることによって実現することを想定している。しかし、新処理、旧処理の実現方法は、上記のようにハードウェアによって実現する方法には限定されない。すなわち、前述のように、処理部１０１が備えるプロセッサにプログラムを実行させるという、ソフトウェアによる方法を用いてもよい。ソフトウェアによる実現方法では、以下の「回路情報」を「プログラム」に置き換えて考えればよい。
【０１１１】
本具体例では、処理を以下のステップで変更する。
（１）新処理を実行するための回路情報を、旧処理を実行するための回路情報が書き込まれた領域とは別の領域に書き込む。
（２）新処理の動作を開始する。
（３）新処理の出力を開始する。
（４）旧処理の動作を停止する。
（５）旧処理を実行するための回路情報を削除する。
【０１１２】
初期状態では、旧処理を実行する処理部１０１−１のみが、時系列データ処理装置１００上で動作している。
【０１１３】
また、時系列データ処理装置１００は、新処理が結果データの出力を開始して、その結果データが装置外部への出力ポートへ至った時刻以降は、新処理の結果データのみが装置外部へ出力され、それまでは旧処理の結果データが最大限装置外部へ出力される、という要件を満たす。つまり、新処理が開始した以降は、旧処理の実行は必須ではないため、旧処理は可能な限り実行を継続するが、任意の時点で停止することができる。
【０１１４】
上記のように、新処理及び旧処理を実行する装置はＦＰＧＡでもよい。時系列データ処理装置１００が結果を出力する先は、ホストコンピュータでもよい。旧処理は、処理を実行する装置がＦＰＧＡの場合は、ＦＰＧＡが持つ再構成機能を使って、必要な回路情報をＦＰＧＡに書き込むことによって、実現してもよい。
【０１１５】
また、入力データは整数であるものとする。前述のように、時系列データ処理装置の動作に用いられるクロックの周期を「サイクル」といい、これを期間の単位として用いる。「サイクルの開始時」とは、その期間の最初の時点を意味し、「サイクルの終了時」とは、その期間の最後の時点を意味する。例えば、クロックの周波数が１ＧＨｚのクロックである場合は、ある基準時刻について第１サイクルは、基準時刻プラスゼロ秒から基準時刻プラス１ナノ秒の間の期間を、第Ｎサイクルは基準時刻プラス（Ｎ−１）ナノ秒から基準時刻プラスＮナノ秒の期間を意味する。第Ｍサイクルの開始時は、基準時刻プラス（Ｍ−１）ナノ秒を意味し、第Ｍサイクルの終了時は、基準時刻プラスＭナノ秒を意味する。入力データは、毎サイクルの開始時に与えられるものとする。
【０１１６】
また、「処理部１０１が結果を出力する」とは、処理部１０１が算出した結果データを文字通り出力することを意味する。処理部１０１が算出した結果データは、制御部１１１によって、処理のＩＤ及びバージョン情報が付加され、バージョン比較部１２１へ送られる。「バージョン比較部１２１が結果を出力する」とは、バージョン比較部１２１が結果データを同期部１３１へ送ることを意味する。
【０１１７】
まず、同期部１３１は、処理のＩＤごとの、これまで同期部１３１から出力された結果データのバージョン番号の最新値を記録している。このバージョン番号は起動時に”０”に初期化されている。
【０１１８】
入力データが与えられると、制御部１１１は、処理部１０１−１の処理の結果データに対し、処理のＩＤと、バージョン番号を設定する。このとき、旧処理が停止可能な状態に至った場合は、新処理の結果データのバージョン番号を変更する（ステップＳ１０９９）。旧処理の結果データには、処理のＩＤとして”１０”、バージョン番号として”１”を設定する。新旧処理の結果データの出力の順序の要件に従って、旧処理は常に停止可能な状態にあるものとしてよい。そのため、新処理の結果データには、処理のＩＤとして”１０”、バージョン番号として”２”を設定する。
【０１１９】
次に、第１、第２、第３、第４サイクルの開始時に、入力データとして、１，２，３，４が旧処理を実行する処理部１０１−１に与えられると、処理部１０１−１は、それらの入力データの和を計算し出力する。処理部１０１−１は、結果データを出力し、制御部１１１が結果データにＩＤの”１０”と、バージョン番号”１”とを付加してバージョン比較部１２１に送る（ステップＳ１１００）。結果データと、ＩＤと、バージョン番号とを合わせて＜１０，１０，１＞のように表す。以降は、この値の組を、混同のない限り「結果」あるいは「結果データの組」という。この時点での、時系列データ処理装置１００の内部の出力情報、すなわち、処理部１０１−１からバージョン比較部１２１に送られた結果データの組、及びバージョン比較部１２１から同期部１３１に送られた結果データの組を図９に示す。
【０１２０】
第５サイクルの開始時に、バージョン比較部１２１は、入力ポートあるいは待ちデータキューに結果データの組が到着したか否かを調べる（ステップＳ１１０１）。結果データの組は到着しているため、ステップＳ１１０２に進む。バージョン比較部１２１は、バージョン比較部１２１に結果データの組が到着したか否かを調べる（ステップＳ１１０２）。結果データの組はバージョン比較部１２１に到着しているため、ステップＳ１１０３に進む。バージョン比較部１２１は到着した結果データの組が一つのみか調べる（Ｓ１１０３）。結果データの組は一つのみなので、ステップＳ１１０４に進む。バージョン比較部１２１は、到着した結果データの組を同期部１３１に送る（ステップＳ１１０４）。
【０１２１】
第５サイクルの開始時に、入力データ”５”が旧処理を実行する処理部１０１−１に与えられ、制御部１１１が、＜１４，１０，１＞をバージョン比較部１２１に出力する。バージョン比較部１２１は、先と同様、ステップＳ１１０１、ステップＳ１１０２、ステップＳ１１０３、ステップＳ１１０４を実行し、到着した結果データの組を同期部１３１へ送る。
【０１２２】
第５サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１０に示す。
【０１２３】
第６サイクルの開始時に、同期部１３１は、到着したデータのバージョン番号が、同期部１３１に記録されている処理のＩＤごとのバージョン番号より古いか否かを調べる（ステップＳ１３０１）。この場合、到着したデータのバージョン番号”１”は記録されている値”０”より”１”だけ新しいため、ステップＳ１３０２に進む。そして、同期部１３１に記録されているＩＤ”１０”のを、到着したデータのバージョン番号、すなわち”１”に更新する（ステップＳ１３０２）。そして、到着した結果データの組を装置外部への出力ポートへ転送する（ステップＳ１３０３）。
【０１２４】
第６サイクルの開始時に、入力データ”６”が処理部１０１−１に与えられ、制御部１１１は結果データの組＜１８，１０，１＞をバージョン比較部１２１に送る。
【０１２５】
第６サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１１に示す。
【０１２６】
第６サイクルの間に、処理部１０１−２に対する、新処理を実行するための回路情報の書き込みが完了したとする。新処理は、処理を実行する装置がＦＰＧＡの場合は、ＦＰＧＡが持つ部分再構成機能を使って、必要な回路情報をＦＰＧＡに書き込むことによって、実現してもよい。
【０１２７】
さらに、第７サイクルの開始時から、処理部１０１−２が新処理を開始したとする。制御部１２１は、新処理の結果データに、旧処理のＩＤと同じ”１０”を設定し、旧処理のバージョン番号”１”ではなく、新処理のバージョン番号”２”を設定する。
【０１２８】
第７サイクルの開始時に入力データ７が旧処理に与えられ、制御部１１１が結果データの組＜２２，１０，１＞をバージョン比較部１２１に送る。また、同じタイミングに、入力データ７が新処理にも与えられ、制御部１１１が結果データの組＜５，１０，２＞をバージョン比較部１２１に送る。
【０１２９】
第７サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１２に示す。
【０１３０】
第８サイクルの開始時に、バージョン比較部１２１は、結果データの組が到着したことを検知する（ステップＳ１１０１、ステップＳ１１０２、ステップＳ１１０３）。到着した結果データの組は２つなので（ステップＳ１１０３：No）、ステップＳ１２０１に進む。調停部１００３は、到着した２つの結果データの処理のＩＤは同一であることを検知し（ステップＳ１２０１）、ＩＤが一致し、かつバージョン番号が”１”だけ古い方を破棄する（ステップＳ１２０２）。すなわち、旧処理の結果データの組を破棄する。そしてステップＳ１２０１へ戻る。到着した結果データの組２つのうち一つを破棄したため、処理のＩＤが同一なペアは残っていないため、ステップＳ１２０３に進む（ステップＳ１２０１）。そして、残っている結果データの組でバージョン比較部１２１の出力ポートの調停を行う。残っている結果データの組は一つなので、その結果データの組がバージョン比較部１２１の出力ポートを獲得する。そして、この結果データの組を同期部１３１へ送る（ステップＳ１２０３）。すなわち、バージョン比較部１２１で＜２２，１０，１＞が破棄され、＜５，１０，２＞が出力される。この動作によって、旧処理の結果は装置外部への出力ポートへ出力されなくなり、代わりに新処理の結果が出力される、ということが実現される。第８サイクルの開始時に入力データ８が旧処理に与えられ、制御部１１１が結果データの組＜２６，１０，１＞をバージョン比較部１２１に送る。また、同じタイミングに、入力データ”７”が新処理を実行する処理部１０１−２に与えられ、制御部１１１が結果データの組＜６，１０，２＞をバージョン比較部１２１に送る。
【０１３１】
第８サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１３に示す。
【０１３２】
第９サイクルの開始時に、＜５，１０，２＞が同期部１３１に到達する。同期部１３１が、入力ポートあるいは待ちデータキューに結果データの組が到着したか調べる（ステップＳ１１０１）。結果データの組が到着しているので、ステップＳ１１０２に進む。さらに、同期部１３１が、結果データの組がバージョン比較部１２１に到着したか調べる。同期部１３１に到着したので、ステップＳ１３０１に進む。そして、到着した結果データの組のバージョン番号が、同期部１３１に記録されている処理のＩＤ１０のバージョン番号より古いか調べる（ステップＳ１３０１）。到着した結果データの組のバージョン番号の方が”１”だけ新しいので、ステップＳ１３０２に進む。同期部１３１は、バージョン番号を、同期部１３１に記録されている、処理のＩＤ１０のバージョン番号の到着した結果データの組のもの、すなわち”２”に更新する（ステップＳ１３０２）。そして、ステップＳ１３０３に進む。同期部１３１は、到着したデータを装置外部の出力ポートへ進める（ステップＳ１３０３）。この時点で、旧処理を停止してもよい。第９サイクルの開始時に入力データ”９”が旧処理の処理部１０１−１に与えられ、制御部１１１が結果データの組＜３０，１０，１＞をバージョン比較部１２１に送る。また、同じタイミングに、入力データ”９”が新処理の処理部１０１−２にも与えられ、制御部１１１が結果データの組＜７，１０，２＞をバージョン比較部１２１に送る。
【０１３３】
第９サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１４に示す。
【０１３４】
第１０サイクルでは、バージョン比較部１２１は同じ動作を繰り返す。すなわち、バージョン比較部１２１がステップＳ１１０１、ステップＳ１１０２、ステップＳ１１０３、ステップＳ１２０１、ステップＳ１２０２、ステップＳ１２０１、ステップＳ１２０３の順で実行して、旧処理の結果データの組を破棄し、新処理の結果のみ同期部１３１へ送る。第１０サイクルの開始時に入力データ１０が旧処理の処理部１０１−１に与えられ、制御部１１１が結果データの組＜３４，１０，１＞をバージョン比較部１２１に送る。また、同じタイミングに、入力データ１０が新処理の処理部１０１−２にも与えられ、制御部１１１が結果データの組＜８，１０，２＞をバージョン比較部１２１に送る。
【０１３５】
また、同期部１３１は一つ前のサイクルと同じように、ステップＳ１１０１、ステップＳ１１０２を実行し、ステップ１３０１に進む。ここで到着したデータのバージョン番号を、同期部１３１が記録する処理のＩＤごとのバージョン番号より古いか調べる（ステップＳ１３０１）。到着したデータのバージョン番号は２で、同期部１３１に記録されているバージョン番号２より古いわけではないので、ステップＳ１３０２に進む。同期部１３１は、同期部１３１に記録されている処理のＩＤごとのバージョン番号を、到着したデータのものに更新する（ステップＳ１３０２）。同期部１３１は、到着したデータを装置外部の出力ポートへ進める（ステップＳ１３０３）。
【０１３６】
第１０サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１５に示す。
【０１３７】
第１１以降のサイクルでは、バージョン比較部１２１は同じ動作を繰り返す。すなわち、旧処理の結果データの組を破棄し、新処理の結果のみ同期部１３１へ送る。また、同期部１３１は同じ動作を繰り返す。すなわち、新処理の結果を装置外部の出力ポートへ進める。
【０１３８】
これによって、新処理が結果を出力し続けるということが実現される。
【０１３９】
第１０サイクルの終了時における装置外部への出力の列を時刻の若い順に表すと、＜１０，１０，１＞、＜１４，１０，１＞、＜１８，１０，１＞、＜５，１０，  ２＞、＜６，１０，２＞となる。これをみると、旧処理の結果が新処理の結果が装置外部に出力され始める直前まで装置外部に出力されていることがわかる。つまり旧処理の結果が最大限装置外部に出力されるタイミングで旧処理の結果の装置外部への出力停止されたことがわかる。また、バージョン比較部１２１で不要な結果データが破棄されるので、新旧処理両方の結果が装置外部へ出力されることがないこともわかる。
（実施形態の動作の具体例２）
図６から図８のフローチャートと、図１６から図２４のブロック図を参照して、実施形態に係る時系列データ処理装置１００の具体例を説明する。
【０１４０】
本具体例では、株価の時系列データについて、４つの値の和を計算する処理（「旧処理」という。）を、４つの値の平均を計算する処理（「新処理」という。）に変更すことを考える。
【０１４１】
本具体例では、処理を以下のステップで変更する。
（１）新処理を実行するための回路情報を、旧処理を実行するための回路情報が書き込まれた領域とは別の領域に書き込む。
（２）新処理の動作を開始する。
（３）新処理の出力を開始する。
（４）旧処理の動作を停止する。
（５）旧処理を実行するための回路情報を削除する。
【０１４２】
初期状態では、旧処理を実行する処理部１０１−１のみが装置上で動作している。
【０１４３】
また、時系列データ処理装置１００は、新処理が結果データの出力を開始して、その結果データが装置外部への出力ポートへ至った時刻以降は、新処理の結果データのみが装置外部へ出力され、それまでは旧処理の結果データが最大限装置外部へ出力される、という要件を満たす。つまり、新処理が開始した以降は、旧処理の実行は必須ではないため、旧処理は可能な限り実行を継続するが、任意の時点で停止することができる。
【０１４４】
入力データは整数であるものとする。本具体例では、入力データは毎サイクルではなく、１サイクルおきに与えられる。
【０１４５】
入力データが与えられると、制御部１１１は、処理部１０１−１の結果データに対し、処理のＩＤと、バージョン番号を設定する。このとき、旧処理が停止可能な状態に至った場合は、新処理の結果データのバージョン番号を変更する（ステップＳ１０９９）。旧処理の結果データには、処理のＩＤとして”１０”、バージョン番号として”１”を設定する。新旧処理の結果データの出力の順序の要件に従って、旧処理は常に停止可能な状態にあるものとしてよい。そのため、新処理の結果データには、処理のＩＤとして”１０”、バージョン番号として”２”を設定する。
【０１４６】
同期部１３１は、処理のＩＤごとの、これまで同期部１３１から出力された結果データのバージョン番号の最新値を記録している。このバージョン番号は起動時に”０”に初期化されている。
【０１４７】
制御部１１１は、処理部１０１−１が結果データを出力したタイミングで、結果データとともに処理のＩＤとバージョン番号を、バージョン比較部１２１へ送る（ステップＳ１１００）。
【０１４８】
旧処理の処理部１０１−１には、第２サイクルに入力データ”１”が、第４サイクルに入力データ”２”が、第６サイクルに入力データ”３”が、第８サイクルに入力データ”４”が与えられる。図１６から図２４は、処理部１０１−１が和を計算し出力した時点の、各位置の出力情報を示す。制御部１１１は、処理のＩＤとして”１０”と、バージョン番号として”１”を、データとともにバージョン比較部１２１に送る。
【０１４９】
第８サイクル終了時の、時系列データ処理装置１００の内部の出力情報を図１６に示す。
【０１５０】
第９サイクルの開始時に、バージョン比較部１２１は、入力ポートあるいは待ちデータキューに結果データの組が到着したか否かを調べる（ステップＳ１１０１）。結果データの組は到着しているため、ステップＳ１１０２に進む。バージョン比較部１２１は、バージョン比較部１２１に結果データの組が到着したか否かを調べる（ステップＳ１１０２）。結果データの組はバージョン比較部１２１に到着しているため、ステップＳ１１０３に進む。バージョン比較部１２１は到着した結果データの組が一つのみか調べる（Ｓ１１０３）。結果データの組は一つのみなので、ステップＳ１１０４に進む。バージョン比較部１２１は、到着した結果データの組を同期部１３１へ送る（ステップＳ１１０４）。
【０１５１】
第９サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１７に示す。
【０１５２】
第１０サイクルの開始時に、入力データ”５”が旧処理を実行する処理部１０１−１に与えられ、制御部１１１が、＜１４，１０，１＞をバージョン比較部１２１に出力する。第１０サイクルの開始時に、同期部１３１は、到着したデータのバージョン番号が、同期部１３１に記録されている処理のＩＤごとのバージョン番号より古いか否かを調べる（ステップＳ１３０１）。この場合、到着したデータのバージョン番号”１”は記録されている値”０”より”１”だけ新しいため、ステップＳ１３０２に進む。そして、同期部１３１に記録されている処理のＩＤ”１０”のバージョン番号を到着したデータのバージョン番号、すなわち”１”に更新する（ステップＳ１３０２）。そして、到着した結果データの組を装置外部への出力ポートへ転送する（ステップＳ１３０３）。
【０１５３】
第１０サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１８に示す。また、第１０サイクルの間に、処理部１０１−２に対する、新処理を実行するための回路情報の書き込みが完了したとする。
【０１５４】
第１２サイクルの開始時に、入力データ”６”が旧処理に与えられ、制御部１１１が、＜１８，１０，１＞をバージョン比較部１２１に送る。第１２サイクルの開始時に、新処理が処理を開始したとする。入力データ”６”が新処理にも与えられる。ここで、新処理の処理部１０１−２が結果を出力するまでの遅延が、旧処理の処理部１０１−２が結果を出力するまでの遅延より１サイクル大きいとする。
【０１５５】
第１２サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図１９に示す。
【０１５６】
第１３サイクルの終了時に、新処理を実行する処理部１０１−２が結果データを出力し、制御部１１１が結果データの組＜４，１０，２＞をバージョン比較部１２１に送る。新処理の結果データが出力されるまでの遅延が、旧処理の結果データが出力されるまでの遅延より１サイクル大きいとしたため、このタイミングで出力されることに注意されたい。
【０１５７】
第１３サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図２０に示す。
【０１５８】
第１４サイクルの開始時に、入力データ”７”が旧処理の処理部１０１−１に与えられ、制御部１１１が＜２２，１０，１＞をバージョン比較部１２１に送る。第１４サイクルの開始時に、結果データの組＜４，１０，２＞がバージョン比較部１２１に到着する。ここで、旧処理の結果データの組と新処理の結果データの組がバージョン比較部１２１に到着するタイミングがずれているため、バージョン比較部１２１はこのデータをそのまま出力する。
【０１５９】
第１４サイクルの終了時点の、時系列データ処理装置１００の内部の出力情報を図２１に示す。
【０１６０】
第１５サイクルの開始時に、＜４，１０，２＞が同期部１３１に到達する。このデータのバージョン番号は”２”で、同期部１３１に記録されているＩＤ１０のバージョン番号は”１”なので、同期部１３１に記録されているＩＤ”１０”に対応する最新のバージョン番号を”２”に更新し、データを装置外部に出力する（ステップＳ１３０１、ステップＳ１３０２、ステップＳ１３０３）。この時点で、旧処理を停止してもよい。
【０１６１】
第１５サイクルの終了時点の、時系列データ処理装置１００の内部の出力情報を図２２に示す。
【０１６２】
第１６サイクルの開始時に、入力データ７が旧処理の処理部１０１−１に与えられ、制御部１１１が＜２６，１０，１＞をバージョン比較部１２１に送る。＜２２，１０，２＞が同期部１３１に到達する。同期部１３１に記録されている、ＩＤ”１０”に対応するバージョン番号は”２”なので同期部１３１はこの結果データの組を破棄する（ステップＳ１３０１、ステップＳ１３０４）。
【０１６３】
第１５サイクルの終了時点の、時系列データ処理装置１００の内部の出力情報を図２３に示す。
【０１６４】
第１７サイクルの開始時に、同期部１３１は新処理の結果データの組＜５，  １０，  ２＞のバージョン番号が、同期部１３１に記録されているＩＤ１０のバージョン番号”２”より古いか否かを調べる（ステップＳ１３０１）。二つのバージョン番号は同じのため、新処理の結果を装置外部に出力する（ステップＳ１３０２、ステップＳ１３０３）。
【０１６５】
第１７サイクルの終了時に、のような状態になる図２４に示す。
【０１６６】
第１８サイクル以降では、同期部１３１は同じ動作を繰り返す。これによって、旧処理の結果を破棄し、新処理の結果を装置外部に出力し続けるということが実現される。第１７サイクルの終了時に、装置外部への出力を時刻の若い順に列で表すと、＜１０，  １０，  １＞、＜１４，  １０，  １＞、＜１８，  １０，  １＞、＜４，  １０，  １＞、＜５，  １０，  ２＞となる。これをみると、旧処理の結果が新処理の結果が出力される直前まで装置外部に出力されていることがわかる。つまり最大限結果を利用するタイミングで旧処理の結果が停止されたことがわかる。また、新旧処理両方の結果が混在して装置外部に出力されることがないこともわかる。
【０１６７】
また、非特許文献１の技術を用いて新処理の処理開始と同時、すなわち第１２サイクルの開始時に旧処理の結果出力を停止すると、有用で利用可能な旧処理の結果データの組＜１８，１０，１＞は出力されない。言い換えると、本実施形態の手法により、非特許文献１の技術では出力されなかった、旧処理の有用で利用可能な結果が最大限装置外部に出力される。
（実施形態の動作の具体例３）
図６から図８のフローチャートと、図２５から図３１のブロック図を参照して、実施形態に係る時系列データ処理装置１００の具体例を説明する。
【０１６８】
本具体例の説明においても、データの配列を、［１，２，３，４］のように表す。各処理は、配列として、若いデータから順に右に詰めてデータを格納するデータ構造を用いる。例えば、毎時刻にデータが来るものとして、時刻４に、［１，２，３，４］という値が格納されている場合、右端のエントリが時刻４の入力データ、左端が時刻１の入力データに対応する。上記のデータ構造では、ＦＩＦＯあるいはシフトレジスタのように、時間がたつにつれて各エントリの値が左へ移動して、自動的に直近の４つの値だけが保持される。図２５から図３１では、データの配列は、上記のように表記されている。
【０１６９】
本具体例では、株価の時系列データについて、４つの値の和を計算する処理（「旧処理」という。）を、４つの値の平均を計算する処理（「新処理」という。）に変更することを考える。
【０１７０】
本具体例では、処理を以下のステップで変更する。
（１）新処理を実行するための回路情報を、旧処理を実行するための回路情報が書き込まれた領域とは別の領域に書き込む。
（２）新処理の動作を開始する。
（３）新処理の出力を開始する。
（４）旧処理の動作を停止する。
（５）旧処理を実行するための回路情報を削除する。
【０１７１】
初期状態では、旧処理を実行する処理部１０１−１のみが、時系列データ処理装置１００上で動作している。
【０１７２】
入力データは、整数であるものとする。入力データは、毎サイクルの開始時に与えられるとする。
【０１７３】
また、同期部１３１は、処理のＩＤごとの、これまで同期部１３１から出力された結果データの組のバージョン番号の最新値を記録している。このバージョン番号は起動時に”０”に初期化されている。
【０１７４】
ここで、旧処理が停止可能になって、旧処理の結果データの列から新処理の結果データの列に置き換えて、結果データの列の出力を開始させ始めたいタイミングが、旧処理の処理部１０１−１から制御部１１１に与えられるとする。ただし、そのタイミングには達していないときは、制御部１１１は、新処理の結果データに、処理のＩＤとして”１０”と、バージョン番号として”０”を設定する。また、制御部１１１は、旧処理の結果データに、処理のＩＤとして”１０”、バージョン番号として”１”を設定する。（ステップＳ１０９９）。
【０１７５】
制御部１１１は、処理部１０１−１が結果データを出力するタイミングで、結果データとともに処理のＩＤとバージョン番号をバージョン比較部１２１へ送る（ステップＳ１１００）。
【０１７６】
次に、入力データとして、”１”，”２”，”３”，”４”が、それぞれ、第１、第２、第３、第４サイクルの開始時に与えられた後、旧処理の処理部１０１−１が和を計算し、結果データを出力する。制御部１１１は、ＩＤの”１０”と、バージョン番号”１”とを、結果データとともにバージョン比較部１２１に送る（ステップＳ１１００）。結果データと、ＩＤと、バージョン番号とを合わせて＜１０，１０，１＞のように表す。
【０１７７】
この時点の、時系列データ処理装置１００の内部の出力情報を図２５に示す。
【０１７８】
第５サイクルの開始時に、バージョン比較部１２１は、入力ポートあるいは待ちデータキューに結果データの組が到着したか否かを調べる（ステップＳ１１０１）。結果データの組は到着しているため、ステップＳ１１０２に進む。バージョン比較部１２１は、バージョン比較部１２１に結果データの組が到着したか否かを調べる（ステップＳ１１０２）。結果データの組はバージョン比較部１２１に到着しているため、ステップＳ１１０３に進む。バージョン比較部１２１は到着した結果データの組が一つのみか否かを調べる（Ｓ１１０３）。このとき、到着した結果データの組は一つのみなので、ステップＳ１１０４に進む。バージョン比較部１２１は、到着したデータを同期部１３１へ送る（ステップＳ１１０４）。
【０１７９】
第５サイクルの開始時に、入力データ”５”が旧処理を実行する旧処理の処理部１０１−１に与えられ、制御部１１１が＜１４，１０，１＞をバージョン比較部１２１に送る（ステップＳ１１００）。バージョン比較部１２１は、先のサイクルと同様、ステップＳ１１０１、ステップＳ１１０２、ステップＳ１１０３、ステップＳ１１０４を実行し、到着した結果データの組を同期部１３１へ送る。
【０１８０】
第５サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図２６に示す。
【０１８１】
第６サイクルの開始時に入力データ”７”が旧処理の処理部１０１−１に与えられ、制御部１１１が＜１８，１０，１＞をバージョン比較部１２１に送る（ステップＳ１１００）。第６サイクルの開始時に、同期部１３１は、到着したデータのバージョン番号が、同期部１３１に記録されている処理のＩＤごとのバージョン番号より古いか否かを調べる（ステップＳ１３０１）。この場合、到着したデータのバージョン番号１は記録されている値０より”１”だけ新しいため、ステップＳ１３０２に進む。そして、同期部１３１に記録されているＩＤ”１０”のバージョン番号を、到着したデータのバージョン番号、すなわち”１”に更新する（ステップＳ１３０２）。そして、到着したデータを装置外部への出力ポートへ転送する（ステップＳ１３０３）。
【０１８２】
第６サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図２７のような状態になる。
【０１８３】
第６サイクルの間に、新処理を実行するための回路情報の書き込みが完了したとする。さらに、第７サイクルの開始時から、新処理が処理を開始したとする。ここで、旧処理の結果をまだ利用するために、制御部１２１が、新処理の結果データの組に、ＩＤとして旧処理のＩＤと同じ”１０”と、バージョン番号として旧処理のバージョン番号より”１”だけ古い”０”を設定していたことに注意されたい。
【０１８４】
第７サイクルの開始時に入力データ”７”が旧処理の処理部１０１−１に与えられ、制御部１１１が＜２２，１０，１＞をバージョン比較部１２１に送る。また、同じタイミングに、入力データ７が新処理の処理部１０１−２にも与えられ、制御部１１１が結果データの組＜５，１０，０＞を出力する（ステップＳ１１００）。
【０１８５】
第７サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図２８に示す。
【０１８６】
第８サイクルの開始時に入力データ”９”が旧処理の処理部１０１−１に与えられ、制御部１１１が＜２６，１０，１＞をバージョン比較部１２１に送る。また、同じタイミングに、入力データ”８”が新処理の処理部１０１−２にも与えられ、と制御部１１１が結果データの組＜６，１０，０＞を出力する（ステップＳ１１００）。第８サイクルの開始時に、バージョン比較部１２１は、結果データの組が到着したことを検知する（ステップＳ１１０１、ステップＳ１１０２、ステップＳ１１０３）。到着した結果データの組は２つなので、ステップＳ１２０１に進む。到着した２つの結果データの組の処理のＩＤは同一であることを検知し（ステップＳ１２０１）、ＩＤが一致し、かつバージョン番号が”１”だけ古い方を破棄する（ステップＳ１２０２）。すなわち、新処理の結果データの組を破棄する。そしてステップＳ１２０１へ戻る。到着した２つの結果データの組のうち一つが破棄され、処理のＩＤが同一である結果データの組は残っていないため、ステップＳ１２０３に進む（ステップＳ１２０１）。そして、残っている結果データの組でバージョン比較部１２１の出力ポートの割り当ての調停を行う。残っている結果データの組は一つなので、その結果データの組にバージョン比較部１２１の出力ポートが割り当てられる。そして、この結果データの組を同期部１３１へ送る（ステップＳ１２０３）。すなわち、バージョン比較部１２１で＜５，１０，０＞が破棄され、＜２２，１０，１＞が出力される。この動作によって、旧処理の結果データの組、新処理の結果データの組ともに得られているが、旧処理の結果データの組の方が装置外部への出力ポートへ出力される。
【０１８７】
第８サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図２９に示す。
【０１８８】
第９サイクルの開始時に、旧処理が停止可能になり、これ以降に時系列データ処理装置１００から装置の外部に出力される結果データは、新処理の処理部１０１−２の結果データとするという指示が、旧処理の処理部１０１−１から制御部１１１に出される。このときに、新処理の結果データのバージョン番号を、旧処理のデータのバージョン番号１より”１”だけ新しい、”２”に設定する（ステップＳ１０９９）。
【０１８９】
第９サイクルの開始時に入力データ”９”が旧処理の処理部１０１−１に与えられ、制御部１１１が＜３０，１０，１＞をバージョン比較部１２１に送る。また、同じタイミングに、入力データ”９”が新処理の処理部１０１−２にも与えられ、制御部１１１が結果データの組＜７，１０，２＞をバージョン比較部１２１に送る（ステップＳ１１００）。バージョン比較部１２１は、第８サイクルと同様に、＜６，１０，０＞を破棄し、＜２６，１０，１＞を同期部１３１に送る。
【０１９０】
第９サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図３０に示す。
【０１９１】
第１０サイクルの開始時に、入力データ”１０”が旧処理の処理部１０１−１に与えられ、制御部１１１が＜３４，１０，１＞をバージョン比較部１２１に送る。また、同じタイミングに、入力データ”９”が新処理の処理部１０１−２にも与えられ、と制御部１１１が結果データの組＜８，１０，２＞を出力する（ステップＳ１１００）。
【０１９２】
第１０サイクルの開始時に、バージョン比較部１２１は、結果データの組が到着したことを検知する（ステップＳ１１０１、ステップＳ１１０２、ステップＳ１１０３）。到着した結果データの組は２つなので、ステップＳ１２０１に進む。到着した２つの結果データの組の、処理のＩＤは同一であることが検知され（ステップＳ１２０１）、ＩＤが一致し、かつバージョン番号が”１”だけ古い方の結果データの組が破棄される（ステップＳ１２０２）。すなわち、旧処理の結果データの組は破棄される。そして、ステップＳ１２０１へ戻る。到着した２つの結果データの組うち一つが破棄され、処理のＩＤが同一である結果データの組は残っていないため、ステップＳ１２０３に進む（ステップＳ１２０１）。そして、残っている結果データの組に対して、バージョン比較部１２１の出力ポートの割り当ての調停を行う。残っている結果データの組は一つなので、その結果データの組にバージョン比較部１２１の出力ポートが割り当てられる。そして、この結果データの組が同期部１３１に送られる（ステップＳ１２０３）。すなわち、バージョン比較部１２１で＜３０，１０，１＞が破棄され、＜７，１０，２＞が出力される。この動作によって、旧処理の結果は装置外部へ出力されなくなり、代わりに新処理の結果が出力される。
【０１９３】
第１０サイクルの終了時の、時系列データ処理装置１００の内部の出力情報を図３１に示す。
【０１９４】
以降、時系列データ処理装置１００は実施形態の動作の具体例１と同じように動作し、新処理の結果データを出力し続ける。
【０１９５】
第１１サイクルの終了時における装置外部への出力の列を、時刻の若い順に表すと、＜１０，１０，１＞、＜１４，１０，１＞、＜１８，１０，１＞、＜２２，  １０，１＞、＜２６，１０，１＞、＜７，１０，２＞となる。これをみると、処理の変更を開始した後も、旧処理が停止可能になる時刻まで、旧処理の処理部１０１−１から出力された結果は破棄されずに装置外部に出力する。そして、旧処理が停止可能になった時刻より後の時刻では、旧処理の処理部１０１−１から出力された結果は破棄され、代わりに新処理の処理部１０１−２から出力された結果が装置外部へ出力される。
【０１９６】
以上のように、本実施形態の時系列データ処理によると、処理変更指示を受けたとき、旧処理が停止可能な状態にあるか否かが判断される。そして、旧処理が停止可能な状態にあると判断されたとき、結果データに、処理の違いを識別する識別情報が付加される。従って、処理変更指示を受けたときも、旧処理、新処理の両方の結果が混在して装置外部に出力されることがない。
【０１９７】
さらに、本実施形態の時系列データ処理では、旧処理が停止可能な状態にあると判断されるまでは、旧処理の結果データが出力される。処理変更指示の前後の旧処理の結果データを外部に出力することができるので、旧処理の結果を有効に利用することができる。
【産業上の利用可能性】
【０１９８】
本発明の活用例として、数値の平均値を計算するアプリケーションにおいて、平均値を求める対象期間を変更する場合がある。例えば、広い範囲に分散配置された温度センサの値を入力データとし、ある期間の平均を取って、火事を含む緊急事態を検知するアプリケーションが挙げられる。この例では、温度変化が激しくなってきたときに、温度変化に追従する速度を高めるために、温度の平均を取る対象期間の長さを短縮する、という機能を実現することができる。【０１９９】
また、本発明の他の活用例として、ある演算に用いるパラメータ又は出力情報を変更するアプリケーションがある。例えば、株券など金融商品の売買のタイミングを決めるための指標を計算するアプリケーションを考える。まず、売買する金融商品の銘柄と売買戦略に応じて、必要な指標は複数存在し、出力すべき指標の集合は異なる。ある装置は有限数の指標しか同時に計算できない。時刻に応じて売買する銘柄と戦略は変化する。そのため、そのとき売買する銘柄と売買戦略に応じて、算出する指標を変化させる、という機能を実現することができる。【０２００】
本実施形態の時系列データ処理装置は、ソフトウェアによって実現することも可能である。時系列データ処理装置を制御するプログラムのフローチャートは、図６から図８と同じである。すなわち、制御部１１１、バージョン比較部１２１、同期部１３１が行う処理を、時系列データ処理装置が備えるプロセッサ（図示なし）がプログラムを実行することによって実現してもよい。【０２０１】
上記のプログラムは、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、フラッシュメモリ等の半導体記憶装置、光ディスク、磁気ディスク、光磁気ディスク等、非一時的な媒体に格納されてもよい。【０２０２】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。【０２０３】
この出願は、２０１２年３月１６日に出願された日本出願特願２０１２−０６０８６２を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０２０４】
１００    時系列データ処理装置
１０１、１０１−１、１０１−２    処理部
１１１    制御部
１２１    バージョン比較部
１３１    同期部
１００１    部分バージョン比較部
１００２    待ちデータキュー
１００３    調停部
５００    時系列データ処理装置
５０１    処理部
５１１    合流部
【図１】
0006040980.tif 000002
【図２】
0006040980.tif 000003
【図３】
0006040980.tif 000004
【図４】
0006040980.tif 000005
【図５】
0006040980.tif 000006
【図６】
0006040980.tif 000007
【図７】
0006040980.tif 000008
【図８】
0006040980.tif 000009
【図９】
0006040980.tif 000010
【図１０】
0006040980.tif 000011
【図１１】
0006040980.tif 000012
【図１２】
0006040980.tif 000013
【図１３】
0006040980.tif 000014
【図１４】
0006040980.tif 000015
【図１５】
0006040980.tif 000016
【図１６】
0006040980.tif 000017
【図１７】
0006040980.tif 000018
【図１８】
0006040980.tif 000019
【図１９】
0006040980.tif 000020
【図２０】
0006040980.tif 000021
【図２１】
0006040980.tif 000022
【図２２】
0006040980.tif 000023
【図２３】
0006040980.tif 000024
【図２４】
0006040980.tif 000025
【図２５】
0006040980.tif 000026
【図２６】
0006040980.tif 000027
【図２７】
0006040980.tif 000028
【図２８】
0006040980.tif 000029
【図２９】
0006040980.tif 000030
【図３０】
0006040980.tif 000031
【図３１】
0006040980.tif 000032
【図３２】
0006040980.tif 000033
【図３３】
0006040980.tif 000034
【図３４】
0006040980.tif 000035
【図３５】
0006040980.tif 000036
【図３６】
0006040980.tif 000037
【図３７】
0006040980.tif 000038
【図３８】
0006040980.tif 000039
【図３９】
0006040980.tif 000040
【図４０】
0006040980.tif 000041
【図４１】
0006040980.tif 000042
【図４２】
0006040980.tif 000043
【図４３】
0006040980.tif 000044