Nothing Special   »   [go: up one dir, main page]

JP5256685B2 - 情報処理装置 - Google Patents

情報処理装置 Download PDF

Info

Publication number
JP5256685B2
JP5256685B2 JP2007271766A JP2007271766A JP5256685B2 JP 5256685 B2 JP5256685 B2 JP 5256685B2 JP 2007271766 A JP2007271766 A JP 2007271766A JP 2007271766 A JP2007271766 A JP 2007271766A JP 5256685 B2 JP5256685 B2 JP 5256685B2
Authority
JP
Japan
Prior art keywords
execution unit
data
process execution
processing
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007271766A
Other languages
English (en)
Other versions
JP2009099061A (ja
Inventor
清久 市野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2007271766A priority Critical patent/JP5256685B2/ja
Priority to US12/251,883 priority patent/US8140503B2/en
Publication of JP2009099061A publication Critical patent/JP2009099061A/ja
Application granted granted Critical
Publication of JP5256685B2 publication Critical patent/JP5256685B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、データベースへのアクセス処理を含む一連の処理を、並列動作可能な処理実行部によるパイプライン方式で実行する情報処理装置、情報処理方法および情報処理用プログラムに関する。
過去数十年にわたって半導体技術の進化とともにマイクロプロセッサのクロック周波数と性能は飛躍的に向上してきた。しかし近年、半導体プロセスの微細化が限界に近づきつつあり、マイクロプロセッサのクロック周波数の伸びが鈍化している。半導体業界は、このような状況下でマイクロプロセッサの性能を向上させるため、クロック周波数を高める代わりに、1つのマイクロプロセッサのダイに複数のプロセッサコア(以下、単にコアという。)を搭載させる傾向にある。なお、1つのダイに2〜4個のコアを内蔵するマルチコアCPUが一般向けのパーソナルコンピュータ用として既に流通している。また、メニイコアプロセッサまたは単にメニイコアと呼ばれる数十個以上のコアを搭載するプロセッサの研究開発が盛んに行われている。
また、DSP(Digital Signal Processor)や画像処理プロセッサ、ネットワークプロセッサといった特定用途向けのプロセッサの一部は、汎用プロセッサよりも早い時期から複数のコアを搭載して性能を高めてきたが、上述の半導体技術の問題により、今後ますます多くのコアを内蔵していく傾向にある。
シングルコアからマルチコア、メニイコアへの変遷は、プログラミング手法にも変革をもたらしつつある。マルチコアまたはメニイコアの能力を最大限に引き出すためには、並列化に適したプログラミング手法が必要であることは広く認知されている。
ある1つの処理を複数のプロセッサコアを利用して高速化するためのプログラミング手法の一つとして、パイプライン方式が一般に知られている。プログラミング手法におけるパイプライン方式は、本質的には、工場におけるベルトコンベアを使った流れ作業と同じである。工場では、一連の作業工程を独立して作業可能な複数の工程に分解し、各工程に専属の作業員(又は加工機)を割り当てている。そして、ベルトコンベアの流れに沿って、各作業員が作業対象物に対しそれぞれ担当分の作業を行う。このように、一連の作業工程における各工程の作業を複数の作業員で並列に独立して行わせることにより、1つの作業対象物に対する一連の作業工程が完了する前に、次の作業対象物に対する作業を開始しはじめることができるため、一人の作業員による流れ作業に比べて工場全体としての作業の高速化が図れる。プログラミング手法におけるパイプライン方式は、物理的または論理的に数珠繋ぎに接続された複数のプロセッサコアを各作業員とみたてて、各々のプロセッサコアに一連の処理ステップの一部を担当させる方式である。各プロセッサコアは、開始命令となるデータの流れに沿ってそれぞれに割り当てられた処理を行えばよい。
しかし、パイプライン方式に適さないアプリケーションが少なからず存在する。特に、処理の途中でデータベースを操作するアプリケーションでは、データベースの特定の領域に対する参照と更新が連続すると、データベースの整合性を保つためにアクセスの排他制御が不可避になる。この排他制御がパイプラインの一時停止(パイプラインストール)を招き、処理効率を著しく劣化させる。
データベースへのアクセス処理を含む一連の処理を並列処理する技術に関連して、例えば、特許文献1には、マルチユーザ環境で永続オブジェクトの修正を管理するための方法が示されている。
また、特許文献2には、データベースに対する書込読出時間を極力短縮し、かつ最新の書込データを読み出すことを可能にするためのデータベース管理方式が記載されている。
特開2004−227569号公報 特開2000−76107号公報
データベースへのアクセス処理を含むアプリケーションに対して従来型のパイプライン方式を適用しにくい理由を、具体例を用いて説明する。例として、図12に示す簡素な課金装置900を考える。本例の課金装置900は、3つのプロセッサコア901−1〜901−3を利用して課金処理をパイプライン実行する。
課金装置900は、人名が記されたカード(以下、名札910という。)を入力とする。また、課金情報データベース902を有する。課金情報データベース902は、複数のレコード920の集合体であり、各レコード920は、人名921と、累計額922の2つの列データを含む。課金装置900は、名札910を受け取るたびに、その名札910に記入された人名に対応する累計額922に1を加算する。
本例における課金装置900では、この動作を、次の3つのステップS91〜93に分割してパイプライン方式で実施する。
・ステップS91
入力された名札910と等しい人名921を持つレコード920を課金情報データベース902から検索し、検索されたレコード920の現在の累計額922を取得する。取得した累計額922をXとする。
・ステップS92
Xに1を加える。
・ステップS93
ステップS91で検索されたレコード920の累計額922を、Xに更新する。
プロセッサコア901−1は、名札910の入力を受けてステップS91を実行する。プロセッサコア901−2は、プロセッサコア901−1の処理結果を受けてステップS92を実行する。プロセッサコア901−3は、プロセッサコア901−2の処理結果を受けてステップS93を実行する。従って、課金装置900は、最大で3つの名札910をパイプライン的に並列処理する。
さて、この課金装置900には、同一の名札910が連続して入力された際に課金処理が正常に実施されないという問題がある。図13は、この問題を示すタイムチャートである。
図13のタイムチャートでは、課金装置900は、”田中”と記された名札910を3回連続して受け取る。期待される結果は、課金情報データベース902において”田中”の課金額922が3だけ増加することである。しかし、実際には、その累計額922は1しか増えない。
期待通りの結果が得られない理由は、課金情報データベース902が独立性(isolation)を有しておらず、上記ステップS91〜S93の一連のデータベース操作(トランザクション)をシリアライズできないからである。
なお、課金情報データベース902がトランザクションのシリアライズ機能を備えたデータベースである場合には、パイプライン方式による効率化が得られない。例えば、課金情報データベース902が関係データベース(Relational Database)のように、トランザクションのシリアライズ機能を備えたデータベースであると仮定する。このとき、”田中”に対応するレコード920はロックされ排他制御が働く。課金装置900は、図14のタイムチャートに従って動作し、正しい累計額922が得られる。
しかし、排他制御の影響でパイプラインがストールしてしまうため、3つのプロセッサコア901−1〜901−3のうち1つしか瞬間的には動作していない。換言すれば、3つのプロセッサコアを使用しているにも関わらず、シングルコアと同等の処理能力しか得られていない。
以上に説明したように、データベースへのアクセス処理を含む一連の処理をパイプライン化して高速を試みる場合、データベース操作を並列実行させても結果に矛盾を生じさせないような仕組みが必要になる。従来、この仕組みはトランザクションのシリアライズ機能を備えたデータベースを用いて実現されていた。しかし、シリアライズ機能を備えたデータベースはシリアル化の際にデータベースの領域の一部をロックして排他制御するため、パイプラインストールが生じ、処理能力が低下する恐れがあった。
なお、特許文献1に記載されているトランザクション管理方法は、マルチスレッド環境におけるデータベースのトランザクションの管理方法であって、パイプライン方式による並列化プログラミングにおける問題点であるデータハザード(ここでは、データベース内のあるデータに対する参照と更新の前後関係が整合しないことによって生じるデータ内容の不整合を意味する。)に起因したパイプラインストールを解決しようとしているわけではない。また、特許文献1に記載されている方法では、データベース内のあるデータに対するアクセスが発生した際、そのアクセスを行ったスレッド以外のスレッドからは、そのデータに対する書き込みができなくなる。従って、この方法はデータハザードに起因するパイプラインストールを解決できず、マルチスレッドの効果を十分に発揮できない。
また、特許文献2に記載されているデータベース管理方式は、トランザクションのシリアライズ機能を備えたデータベースにおいて書込読出時間を短縮することを目的としているのであって、一トランザクションがパイプライン方式によって並列実行される場合に、最新の書込データを読み出すことができるような構成までは示されていない。
そこで、本発明は、データベースへのアクセス処理を含む一連の処理をパイプライン方式によって並列実行する場合に、データベースの整合性と結果の一貫性を保証し、かつストールを生じさせないパイプライン動作を実現できるようにすることを目的とする。
本発明による情報処理装置は、データベースへのアクセス処理を含む一連の処理を、並列動作可能な処理実行部によるパイプライン方式で実行する情報処理装置であって、データベースに記憶されるデータである1つの記憶データに対して内容の更新の権限を与える一の処理実行部が割り当てられており、一連の処理は、データベースから記憶データの内容を読み出す読出処理を含む第1のブロック処理と、当該一連の処理で内容が更新された記憶データの内容をデータベースに書き込む書込処理を含む第2のブロック処理とを含む複数のブロック処理に分割されており、複数のブロック処理に分割された各ブロック処理と1対1に対応し、所定のタイミングで、対応づけられた一のブロック処理を実行する処理実行部であって、該処理実行部に内容の更新の権限が割り当てられている記憶データに対してのみ内容の更新が可能で、かつ当該処理実行部およびパイプラインにおいて当該処理実行部よりも前段に位置する処理実行部に割り当てられている記憶データに対してのみ内容の参照が可能であるというアクセス制限が課されている処理実行部と、少なくとも複数のブロック処理のうち記憶データの内容の更新処理を含むブロック処理と対応づけられた処理実行部に付随して設けられ、該処理実行部がブロック処理で更新した記憶データの内容を、追記された順序がわかる形式で保持するキャッシュ部とを備え、各処理実行部は、ブロック処理で記憶データの内容を参照する場合に、データベースに格納されている内容よりも当該処理実行部の前段に位置する処理実行部から引き渡される内容を優先し、さらに当該処理実行部の前段に位置する処理実行部から引き渡される内容よりも当該処理実行部に付随するキャッシュ部に保持されている最新の内容を優先して参照することを特徴とする。
本発明によれば、データベースの整合性と結果の一貫性を保証し、かつストールを生じさせずに、データベースへのアクセス処理を含む一連の処理をパイプライン方式によって並列実行することができる。
以下、本発明の実施の形態を図面を参照して説明する。図1は、本発明による情報処理装置の構成例を示すブロック図である。図1に示すように、本発明による情報処理装置1は、データベース3へのアクセス処理を含む一連の処理を、複数の処理実行部を用いてパイプライン方式によって並列実行する装置であって、複数の処理実行部2−1〜2−Nと、複数のキャッシュ部4−1〜4−Nとを備える。なお、ここでいうデータベース3は、データベースシステムとして構築される記憶システムに限らず、少なくとも複数の処理実行部から同時にアクセスされた場合にデータの整合性が保たれるような記憶システムであればよい。また、情報処理装置1が直接に備えていなくてもアクセス可能に接続されていればよい。
本例では、情報処理装置1が実行する一連の処理は、予めN個(N≧2)のステップに分割されている。なお、N個に分割された各々のステップで実行される処理のことをブロック処理と呼ぶ場合がある。本発明では、データベース3に記憶されるデータである1つのDBデータに対して、該DBデータの内容をある処理実行部が参照(更新のための参照を含む。)した後に別の処理実行部が更新しないことを条件に、一連の処理は分割される。分割されたそれぞれのブロック処理は、処理実行部2−1〜2−Nに1つずつ割り当てられている。なお、本例では、処理実行部2−1に最初のブロック処理、処理実行部2−2にその次のブロック処理、処理実行部2−Nに最後のブロック処理というように、処理実行部に付された番号の順にブロック処理が割り当てられているものとする。
各処理実行部2(処理実行部2−1〜2−N)は、並列動作可能な処理手段であって、予め割り当てられた一のブロック処理を、それぞれ所定のタイミングに従って実行する。なお、各処理実行部2−1〜2−Nがブロック処理を実行するタイミングは、例えば、外部またはパイプラインにおける前段の処理実行部からのデータ入力があったときであってもよい。
各キャッシュ部4(キャッシュ部4−1〜4−N)は、処理実行部2−1〜2−Nの各々に対応して設けられ、対応づけられた処理実行部2がブロック処理で更新したDBデータの内容を、少なくとも該内容がデータベース3に反映されるまでの間、追記された順序がわかる形式で保持する。なお、キャッシュ部4は、少なくともDBデータの更新処理を含むブロック処理が割り当てられた処理実行部2に対して設けられていればよい。
キャッシュ部4は、対応づけられた処理実行部がブロック処理で更新したDBデータの内容を、該DBデータを識別するための情報とともに、所定の回数分、追記された順序がわかる形式で保持すればよい。キャッシュ部4は、例えば、DBデータの内容を、そのDBデータを格納しているレコードのキーやそのDBデータの項目名とともに保持してもよい。また、キャッシュ部4は、一連の処理においてそのDBデータがデータベース3から読み込まれてから書き込まれるまでの間にかかるブロック処理数(パイプライン実行数)に基づいて定められた回数分のブロック処理において更新されたDBデータの内容を、実行処理順序がわかる形式で保持するようにしてもよい。例えば、パイプライン段数(N)−1回分のブロック処理において更新されたDBデータの内容を履歴情報として保持できるようにしてもよい。
各処理実行部2は、ブロック処理でDBデータの内容を参照する場合には、データベースに格納されている内容よりも当該処理実行部2に付随するキャッシュ部4に保持されている内容を優先させる。この時、キャッシュ部4に同じDBデータの内容が複数保持されている場合には、最新のDBデータの内容を優先させる。このことにより、パイプライン方式による並列化プログラミングにおける問題点であるデータハザードを回避できる。
以下、より具体的な構成例を用いて説明する。図2は、本実施形態による情報処理装置のより具体的な構成例を示すブロック図である。図2に示す情報処理装置1は、データベース3へのアクセス処理(読み出し処理や書き込み処理)を含む一連の処理を分割して実行する複数の処理実行部2−1〜2−Nと、各処理実行部2−1〜2−Nに付随して設けられる複数の分散キャッシュ4−1〜4−Nとを備える。
本例における処理実行部2−1〜2−Nは、それぞれ一のスレッドを動作させるための処理手段として示している。なお、一般的にはスレッドとプロセスは明確に区別されるが、本例におけるスレッドは、並列動作可能な処理の分割単位の総称を示すものとして用いる。従って、スレッドという表現には、狭義のスレッドやプロセスまたはタスクといった一般的に処理単位として表現されるものを全て内包するものとする。
本例では、情報処理装置1が実行する一連の処理は、予めN個(N≧2)のステップに分割され、各処理実行部2−1〜2−Nに1つずつ割り当てられている。なお、本例では、処理実行部2−1に最初のステップ、処理実行部2−2にその次のステップ、処理実行部2−Nに最後のステップというように、処理実行部2に付された番号の順に分割された各ステップが割り当てられているものとする。
各処理実行部2は、例えば、マイクロプロセッサのコアによって実現される。なお、1つの処理実行部を1つのコアで実現するようにしてもよいし、2以上の処理実行部を1つのコアで実現することも可能である。そのような場合には、例えば、1つのコア上で2以上のスレッドが動作するようにプログラム制御を行えばよい。また、処理実行部2−1〜2−Nの一部または全てを、自身に割り当てられたステップの実行に特化したハードウェア回路として実現してもよい。
各処理実行部2(処理実行部2−1〜2−N)は、予め自身に割り当てられたステップを、それぞれ所定のタイミングに従って実行する。また、各分散キャッシュ4(分散キャッシュ4−1〜4−N)は、対応する処理実行部2が、割り当てられたステップで更新したDBデータ(データベース3に記憶されるデータ)の内容を、実行順序がわかる形式で保持する。本例において、各分散キャッシュ4は、対応する処理実行部が、過去所定回数(例えば、N−1回)分のステップにおいて更新したDBデータの内容を、実行順序がわかる形式で保持する。なお、分散キャッシュ4−1〜4−Nは、図1におけるキャッシュ部4−1〜4−Nに該当する記憶手段である。
情報処理装置1が実行する一連の処理には、データベース3へのアクセスを伴う。図3は、データベース3に記憶される情報の概念図である。図3に示すように、本例におけるデータベース3は、1つ以上のレコード20を記憶する。各レコード20には、当該レコード20を一意に識別するためのキー21と、列データ22−1〜22−Nとが含まれる。ここで、各列データ22(列データ22−1〜22−N)は、処理実行部2と1対1で対応している。なお、ここでいう”列データ”とは、一レコードとして記憶されるデータ群を、そのデータの更新の権限を与える処理実行部に応じてN個に分割した際のデータのかたまりを概念的に示すものであって、必ずしもN個のデータ項目があることを示しているわけではない。従って、1つの列データの情報量は、いくつであってもよい。例えば、ある列データ22−X(1≦X≦N)は、{名前a,住所b,電話番号c}のように複数のデータ項目についてのデータの集合である場合もある。また、ある列データ22−X(1≦X≦N)は、0個のデータ項目についてのデータの集合(すなわち情報量が0)である場合もある。なお、列データの情報量が0ということは、その列データに対応する処理実行部がいずれのDBデータに対しても更新処理を行わないことを示している。また、列データは、合計値のような特定のレコードにしか含まれないデータを含んでいてもよい。
情報処理装置1は、処理対象10を示す情報が入力されると、その処理対象10を対象とする一連の処理を実行し、処理結果13を出力する。情報処理装置1は、処理対象10を処理する際、データベース3の特定の1つのレコード20をアクセスする。どのレコード20がアクセスされるかは、処理対象10を示す情報に含まれるキー11によって決定される。具体的には、キー11に一致するキー21を持つレコード20がアクセスされる。また、その処理対象10に対してどのような処理を行うかは、引数12が示す指示内容によって決定される。なお、固定の処理を行うだけならば、引数12は省略してもよい。
情報処理装置1は、処理実行部2−1〜2−Nによるブロック処理の実行を通じて、処理対象10を示す情報に含まれるキー11によって特定されるレコード20の列データ22−1〜22−Nを参照・更新しながら、一連の処理を遂行する。
情報処理装置1では、処理実行部2−1〜2−Nがパイプライン方式によって並列動作する。仮に、処理実行部2−1〜2−Nの全てがデータベース3に自在にアクセスできるようにした場合、データベース3の負荷が増大し、性能が低下する。その場合、さらに、複数の同時アクセスを調停する仕組みを導入しなくてはならず、システムの複雑化を招く。これらの問題を回避するため、データベース3からDBデータの内容を参照する処理(読出処理)を実行する処理実行部2と、データベース3に対してDBデータの内容を更新する処理(書込処理)を実行する処理実行部2とを、それぞれ少数(所定数以下)に限定する。好適には、最初に実行される一のブロック処理でのみデータベース3からDBデータの内容を読み出し、最後に実行される一のブロック処理でのみデータベース3に対してDBデータの内容を書き込むようにする。すなわち、処理実行部2−1が以降の処理実行部で用いるDBデータ(すなわち、列データ22−1〜22−N)の内容をまとめて読み出すようにし、パイプラインの動きに同期して処理実行部2−2〜2−Nに順次引き渡わたすようにし、最終的に処理実行部2−Nが、引き渡された内容をデータベース3に反映させるようにする。
図4は、情報処理装置1におけるデータの流れの一例を示す説明図である。なお、図4に示す例では、一連の処理は3つのブロック処理に分割され、処理実行部2−1〜2−3に1対1に対応づけられている。すなわち、並列動作されるスレッドの個数(N)は3である。前述の通り、1番目(最初)の処理実行部2−1のみがデータベース3からレコード20の内容(ここでは、列データ22−1〜22−3)を取得する。また、3番目(最後)の処理実行部2−3のみがデータベースに対してレコード20の内容を更新する。
1番目の処理実行部2−1は、割り当てられたステップを実行することによって、データベース3から処理対象のレコード20の内容を取得し、また、必要に応じて列データ22−1の内容の更新を含む所定の処理を行い、処理が完了すると次の処理実行部(処理実行部2−2)へ処理後の列データ22−1〜22−3の内容を引き渡す。2番目の処理実行部2−2は、割り当てられたステップを実行することによって、前の処理実行部(処理実行部2−1)から列データ22−1〜22−3を引継いで、必要に応じて列データ22−2の内容の更新を含む所定の処理を行い、処理が完了すると次の処理実行部(処理実行部2−3)へ処理後の列データ22−1〜22−3の内容を引き渡す。最後の処理実行部2−3は、割り当てられたステップを実行することによって、前の処理実行部(処理実行部2−1)から列データ22−1〜22−3を引継いで、必要に応じて列データ22−2の内容の更新を含む所定の処理を行い、また、データベース3に対して処理対象のレコード20の内容を更新し、処理結果13を出力する。
一般的には、ある1つのスレッドに閉じて処理が完結することは少ない。そのため、処理実行部2−X(1≦X≦N)が途中まで処理した結果を、次の処理実行部2−(X+1)へ引き継がせる必要がある。なお、DBデータ(ここでは、列データ22−1〜22−3)以外に、スレッド間で引き継ぐ必要のあるデータがある場合には、図4に示すように、中間データとして引き継ぐようにしてもよい。また、処理対象10を示す情報(キー11や引数12)も引き継ぐようにしてもよい。
なお、図4に示す例では、分散キャッシュ4−1〜4−3には、少なくとも対応する処理実行部2(処理実行部2−1〜2−3のいずれか)で更新した列データの内容が記憶させていればよい。なお、各処理実行部2で更新する列データ以外で参照する必要がある列データは、それ以前に実行される処理実行部によって適正な内容に書き換えられた上で引き渡されるので、特に付随する分散キャッシュ4−1〜4−3に保持させる必要はない。
次に、処理実行部2−1〜2−Nにおける列データ22−1〜22−Nに対するアクセス制限と分散キャッシュの必要性について説明する。
同一のキー11を持つ複数の処理対象10の間には、前の処理結果が後の処理結果に影響を与えることから、依存関係があるといえる。仮に、同一の処理対象10に対する処理を単純に並列実行しようとすると、後に到着した処理対象10に対する処理は、その処理対象10に関するデータべース3(ここでは、キー11で特定される列データ22−1〜列データ22−N)への参照が生じた時点で、これより前に到着した処理対象10に対する処理が進行してその結果が確定するまで停止状態になる。これは、パイプライン方式のマイクロプロセッサにおけるRead−After−Writeデータハザードと同様の原理によるパイプラインストールであって、性能の低下を招く結果となる。
そこで、データハザード(ここでは、データベース内のあるデータに対する参照と更新の前後関係が整合しないことによって生じるデータ内容の不整合を意味する。)に起因するパイプラインストールを排除するため、処理実行部2−1〜2−Nにおいて更新した各列データの内容を保持するための分散キャッシュを各処理実行部2−1〜2−Nの各々に配備するとともに、処理実行部2−1〜2−Nにおいて各列データに対するアクセスに制限をかける。
図5は、ある分散キャッシュ4−Xにおける情報の構成の一例を示す説明図である。分散キャッシュ4−Xは、X番目の処理実行部2−Xからのみアクセスされ、(N−1)個のキャッシュエントリを登録できるFIFO(First-In First-Out)型のキューとして実現されていてもよい。ここで、N−1とは、1番目の処理実行部2−1がデータベース3からレコード20を読み出して、N番目の処理実行部2−Nがそのレコードをデータベース3に反映させる場合において、レコード20の内容を更新した後、その内容が、再びデータベース3に格納されている内容として、対応する処理実行部2に引き渡されるまでにかかるパイプライン実行回数を意味している。各エントリは、対応する処理実行部2−Xにおけるブロック処理で更新された列データ22−Xの内容と、その列データ22−Xを識別するための情報(ここでは、キー21)とを含む。なお、列データ22−Xを識別するための情報は、処理実行部2−Xが更新する列データ22−Xのデータ項目が固定的に割り当てられるものであるため、その列データ22−Xを含む処理対象となったレコード20を識別するための情報であってもよい。なお、他の分散キャッシュ4についても同様である。
また、図6は、処理実行部2−1〜2−Nが列データ22−1〜22−Nに対してどのようなアクセスが可能かを示す説明図である。本発明では、データベース3に記憶される1つのデータに対して、ある処理実行部が参照した後に別の処理実行部が該データの内容を更新しないように、各処理実行部の処理順序および分割単位を考慮した上で、一連の処理が分割されている。なお、上記参照は、更新のための参照を含む。これにより、予めデータベースの各データ項目に対して、更新の権限を与える一の処理実行部が割り当てられ、各処理実行部2−X(1≦X≦N)は、当該処理実行部2−Xに割り当てられているデータ項目のまとまりである列データ22−Xに対してのみ更新が可能で、かつ当該処理実行部2−Xおよびパイプラインにおいて当該処理実行部2−Xよりも前段に位置する処理実行部2−(X−1)に割り当てられているデータ項目のまとまりである列データ22−1〜22−(X−1)に対してのみ参照が可能であるというアクセス制限が課されることになる。
このように、各処理実行部2−1〜2−Nのブロック処理での更新値を保持する分散キャッシュと、アクセス制限を課すことによって、データベース操作に対しロック操作をすることなく、データハザードを回避させる。それは、実際にデータベースに書き込まれる前に、次の処理を開始したとしても、付随する分散キャッシュ4に保持されている内容および前段に位置する処理実行部から引き渡される内容を参照すれば、これまでの処理結果が取得できるからである。
次に、本実施形態の動作を図7〜図10のフローチャートを参照して説明する。ここでは、図2に示す実施形態における情報処理装置1の動作を、1番目の処理実行部2−1の動作と、2番目〜(N−1)番目の処理実行部2−Y(2≦Y<N)の動作と、N番目の処理実行部2−Nの動作とに分けて説明する。
まず、図7に示すフローチャートを参照して、1番目処理実行部2−1の動作について説明する。図7は、本実施形態における処理実行部2−1の動作例を示すフローチャートである。図7に示すように、処理順序が1番目の処理実行部2−1は、処理対象10が情報処理装置1に入力されるまで待ち、処理対象10が入力されたら次のステップS101へ進む(ステップS100)。
ステップS101では、処理実行部2−1は、データベース3を検索して、処理対象10を示す情報に含まれるキー11に対応するレコード20を特定し、そのレコード20から列データ22−1〜22−Nを取得する。また、処理実行部2−1は、ここで取得した列データ22−1〜22−Nを、今回の処理対象10に対する一連の処理における列データ22−1〜22−Nの内容を保持する変数であるASS_DATA[1]〜ASS_DATA[N]に代入する。
また、処理実行部2−1は、処理対象10を示す情報に含まれる引数12に、ARGUMENTという別名を与え、ステップS103に進む(ステップS102)。なお、ARGUMENTは、指示内容を格納する変数として用いている。
次に、処理実行部2−1は、全処理実行部に共通する処理動作を行う(ステップS103)。図8は、全処理実行部2に共通する動作の処理フローの一例を示す処理フローである。ここでは、1番目の処理実行部2−1から呼び出された処理動作として説明する。従って、図8におけるX=1である。なお、本例では、全処理実行部に対して分散キャッシュが割り当てられている場合を例にしているが、例えば、DBデータの更新処理を含まないブロック処理が割り当てられた処理実行部に対して分散キャッシュの割り当てを省略する場合には、当該処理(ステップS103)は、DBデータの更新処理を含むブロック処理が割り当てられた処理実行部に共通する処理として実装すればよい。なお、DBデータの更新処理を含まないブロック処理が割り当てられた処理実行部は、図8におけるステップS112のみを実行すればよい。
全ての処理実行部2−1〜2−Nに共通する動作として、まず、処理実行部2−Xは、処理実行部2−Xは、当該処理実行部2−Xに付随する分散キャッシュ4−Xを検索し、今回の処理対象10に対する一連の処理における列データ22−Xと同じ列データ22−Xの内容が登録されているか否かを判定する(ステップS110)。処理実行部2−Xは、例えば、分散キャッシュ4−Xに、処理対象10を示す情報に含まれるキー11と等しいキー21を持つキャッシュエントリが存在するか否かを判定すればよい。そのようなキャッシュエントリが存在していれば(ステップS110のYes)、ステップS111に進む。
ステップS111では、ASS_DATA[X]の内容を、分散キャッシュ4−Xで検索された該当する列データ22−Xの内容に書き換える。これにより、今回の処理対象10にかかる列データ22−Xに関して、これまでに更新した結果が、データベース3に反映されていない場合(または反映されたときには、既に読み出し処理が終了していた場合)であっても、それまでの処理結果を反映させた上で、今回の一連の処理を行うことができるようになる。なお、分散キャッシュ4−Xに該当する列データ22−Xが複数存在していた場合には、そのうちの最新の列データ22−X(キー11と等しいキー21を持つキャッシュエントリのうち最も新しく追記されたキャッシュエントリとして登録されている列データ22−X)の内容を優先させる。前述のとおり、分散キャッシュ4−XをFIFO形式のキュー等により実現することによって、分散キャッシュ4−Xは、追記された順序がわかる形式でキャッシュエントリを保持することができるので、該当する列データ22−Xのうち最新の列データ22−Xを特定することは容易である。
一方、該当するキャッシュエントリが存在しなければ(ステップS110のNo)、ASS_DATA[X]には、今回の処理対象にかかる列データ22−Xに関して、既にこれまでの処理結果が反映された後のデータベース3から読み出された内容が保持されているとして、そのままステップS112へ進む。
ASS_DATA[X]にこれまでの処理結果を反映させる処理が終了すると、ステップS112では、当該処理実行部2−Xに割り当てられている所定の処理を実行する。ここでは、キー11やARGUMENTを参照したり、中間データ40−X(例えば、引数12を内部のイベント指示に変換したものや引数12に対して所定の演算を加えたもの)を生成してもよい。また、ASS_DATA[1]〜ASS_DATA[N]のうち、ASS_DATA[1]〜ASS_DATA[X]を参照したり、ASS_DATA[X]を更新してもよい。なお、ASS_DATA[1]〜ASS_DATA[X−1]については、前の処理実行部によってこれまでの処理結果が反映された上で処理された結果が引き渡されるので、当該処理実行部2−Xにおいても参照可能となる。なお、X=1の場合には、当該処理実行部2−1に対応づけられた列データ22−1の内容、すなわちASS_DATA[1]の内容のみを参照および更新可能である。
ステップS112における当該処理実行部2−Xに割り当てられている所定の処理が完了すると、処理実行部2−Xは、その処理で更新した列データ22−Xの内容、すなわちASS_DATA[X]の内容を、その列データ22−Xを識別するためのキー11とともに、分散キャッシュ4−Xに記憶させる(ステップS113)。これは、今回の処理によって更新した列データ22−Xの内容がデータベース3に反映される前に、同じ処理対象10が指定された一連の処理が開始された場合に、今回更新した列データ22−Xの内容を用いらせるための処理である。なお、分散キャッシュ4−Xに今回の更新にかかるキャッシュエントリを追記した結果、分散キャッシュ4−Xの記憶容量を超えることになる場合には、最も古いキャッシュエントリが押し出されて消去される。
全ての処理実行部2−1〜2−Nに共通する動作は、以上により終了し、処理実行部2−1は、元の動作に復帰する。
なお、ステップS110〜ステップS111の処理およびステップS113の処理は、独立したステップとしてステップS112において随時実行されるようにしてもよい。例えば、各処理実行部2が共通して備える選択部(図示せず。)が、当該選択部を備える処理実行部2−Xがブロック処理でASS_DATA[1]〜ASS_DATA[N]を参照するための関数を提供し、その関数内で分散キャッシュ4−Xに保持されている最新の内容を優先させるような選択処理を実行するようにしてもよい。また、例えば、各処理実行部2が共通して備える登録部(図示せず。)が、当該登録部を備える処理実行部2−Xがブロック処理でASS_DATA[N]を更新するための関数を提供し、その関数内でASS_DATA[X]を更新するとともに分散キャッシュ4−Xに更新後の内容を追記させるような登録処理を実行するようにしてもよい。
全ての処理実行部2−1〜2−Nに共通する動作(図8のステップS110〜S113)が終了すると、処理実行部2−1は、キー11,ASS_DATA[1]〜ASS_DATA[N],1番目の中間データを、2番目の処理実行部2−2に出力する(ステップS104)。以上で1つの処理対象10に対する処理実行部2−1の処理は終了する。処理実行部2−1は、ステップS100に戻り、次のブロック処理の開始タイミングを待つ。
例えば、図12に示した課金装置900に本発明を適用した場合、処理実行部2−2に相当するプロセッサコア901−1が、図7に示すフローチャートに従って動作することになる。なお、図12に示す課金装置900の例では、DBデータである累計額922に対して、プロセッサコア901−2にその更新の権限が与えられている。従って、累計額922が列データ22−2に相当する。なお、列データ22−1,22−3に相当するDBデータは存在しない。すなわち、プロセッサコア901−1,901−3に割り当てられたブロック処理にはDBデータの更新処理が含まれず、列データ22−1,22−3は情報量が0(データ項目が0)である。このような場合には、プロセッサコア901−1,901−に対応する分散キャッシュ4−1,4−を省略することも可能である。
プロセッサコア901−1は、例えば、図7に示すフローチャートに従い、名札910が入力されるまで待ち、名札910が入力されたらステップS101に進む(ステップS100)。ステップS101では、プロセッサコア901−1は、入力された名札910と等しい人名921を持つレコード920を課金情報データベース902から検索し、検索されたレコード920の現在の累計額922を取得する。ここで取得した累計額922をASS_DATA[2]に代入する。なお、本例では、ASS_DATA[1]およびASS_DATA[3]は存在しない。また、指示内容は常に固定であるため、ステップS102の動作は省略される。また、プロセッサコア901−1に割り当てられたブロック処理では、DBデータの更新処理を含まず、またデータベースからの読み出し以外の処理も含まれていないため、全処理実行部に共通の処理(図9のステップS122、具体的には図8のステップS110〜S113)は全て省略される。
そして、プロセッサコア901−1は、名札910と、ASS_DATA[2](ここでは、課金情報データベース902から読み出した、入力された名札910と等しい人名921を持つレコード920の累計額922の内容)とを、次のプロセッサコア901−2に出力する(ステップS104)。以上で、プロセッサコア901−1は、1回の名札910の入力に対するブロック処理を終了し、次のブロック処理の開始タイミングを待つことになる。
仮に、”田中”が記された名札910が続けて入力されていた場合には、プロセッサコア901−1は、2回目の名札910の入力に対するブロック処理として、再度”田中”と等しい人名922を持つレコード920を読み出して、ASS_DATA[2]に代入し、次のプロセッサコア901−2に引き渡すことになる。なお、パイプライン方式による並列処理では、プロセッサコア901−1が2回目の名札910の入力に対するブロック処理を実行しているときに、プロセッサコア901−2が1回目の名札910の入力に対するブロック処理を実行することになる。従って、プロセッサコア901−1における2回目の”田中”の入力に対するブロック処理では、1回目の”田中”の入力によって更新されるはずの内容がまだ反映されていない累計額922の内容を課金情報データベース902から読み込むことになる。
次に、図9に示すフローチャートを参照して、2番目〜N−1番目の処理実行部2−Y(2≦Y<N)の動作について説明する。図9は、本実施形態における2番目〜N−1番目の処理実行部2−Y(2≦Y<N)の動作例を示すフローチャートである。図9に示すように、処理順序が2番目〜N−1番目の処理実行部2−Yは、(Y−1)番目の処理実行部2−(Y−1)から、キー11,ASS_DATA[1]〜ASS_DATA[N],(Y−1)番目の中間データが入力されるまで待ち、それら情報が入力されたら次のステップS121へ進む(ステップS120)。
ステップS121では、処理実行部2−Yは、前の処理実行部2−(Y−1)から引き渡された(Y−1)番目の中間データに、ARGMENTという別名を与え、ステップS122へ進む。
次に、処理実行部2−Yは、全処理実行部に共通する処理動作を行う(ステップS122)。なお、ステップS122の動作は、図7における処理実行部2−1が読み出すステップS103として説明した動作と同様である。すなわち、図8に示すように、当該処理実行部2−X(ここでは、X=Y)が更新を管理している列データ22−Xの内容を、これまでの処理結果を反映した内容とした上で、必要に応じて列データ22−Xの更新をしたり、その内容を分散キャッシュ4−Xに追記したりする。なお、X=2の場合には、当該処理実行部2−2に対応づけられた列データ22−2の内容、すなわち、ASS_DATA[2]の内容をこれまでの処理結果を反映した内容とした上で、必要に応じてASS_DATA[2]の内容を更新したり、その結果を分散キャッシュ4−2に追記したりする。その際、処理実行部2−2は、ASS_DATA[1],ASS_DATA[2]の参照が可能である。
全ての処理実行部2−1〜2−Nに共通する動作(図8のステップS110〜S113)が終了すると、処理実行部2−Yは、キー11,ASS_DATA[1]〜ASS_DATA[N],Y番目の中間データを、(Y+1)番目の処理実行部2−(Y+1)に出力する(ステップS123)。以上で1つの処理対象10に対する処理実行部2−Yの処理は終了する。処理実行部2−Yは、ステップS120に戻り、次のブロック処理の開始タイミングを待つ。
例えば、図12に示した課金装置900に本発明を適用した場合、処理実行部2−2に相当するプロセッサコア901−2が、図9に示すフローチャートに従って動作することになる。プロセッサコア901−2は、例えば、図9に示すフローチャートに従い、プロセッサコア901−1から、名札910とASS_DATA[2]とが入力されるまで待ち、それら情報が入力されたらステップS121に進む(ステップS120)。なお、プロセッサコア901−2においても、指示内容は常に固定であるため、ステップS121の動作は省略される。
次に、プロセッサコア901−2は、DBデータの更新処理を含むブロック処理が割り当てられたプロセッサコアに共通する処理動作を行う(ステップS122)。ここでは、まず、当該プロセッサコア901−2に割り当てられている列データ22−2である累計額922の内容を、これまでの処理結果を反映した内容にするための処理を行う。プロセッサコア901−2は、当該プロセッサコア901−2に付随する分散キャッシュ4−2を検索し、今回の処理対象10(名札910)に対する一連の処理における累計額922と同じ累計額922の内容が登録されているか否かを判定する(ステップS110)。例えば、”田中”が記された名札910に対して処理をしている場合には、”田中”と等しい人名922を持つキャッシュエントリが存在するか否かを判定すればよい。そのようなキャッシュエントリが存在していれば(ステップS110のYes)、ASS_DATA[2]の内容を分散キャッシュ4−Xで検索された該当する累計額922の最新の内容に書き換える。
一方、該当するキャッシュエントリが存在しなければ(ステップS110のNo)、ASS_DATA[2]には既にこれまでの処理結果が反映された内容が保持されているとして、ステップS112へ進む。
ASS_DATA[2]にこれまでの処理結果を反映させる処理が終了すると、ステップS112では、当該処理実行部2−Xに割り当てられている所定の処理を実行する。ここでは、プロセッサコア901−2は、ASS_DATA[2]に1を加える。ステップS112における当該プロセッサコア901−2に割り当てられている所定の処理が完了すると、プロセッサコア901−2は、その処理で更新した累計額922の内容、すなわちASS_DATA[2]の内容を、その累計額922を識別するための人名921とともに、分散キャッシュ4−2に記憶させる(ステップS113)。なお、分散キャッシュ4−2には、少なくとも2回分のキャッシュエントリが保持できる記憶容量を持たせればよい。
そして、プロセッサコア901−2は、名札910と、ASS_DATA[2](ここでは、ステップS112で更新した累計額922の内容)とを、次のプロセッサコア901−3に出力する(ステップS123)。以上で、プロセッサコア901−1は、1回の名札910の入力に対するブロック処理を終了し、次のブロック処理の開始タイミングを待つことになる。
仮に、”田中”が記された名札910が続けて入力されていた場合には、プロセッサコア901−2は、2回目の名札910の入力に対するブロック処理として、再度”田中”の累計額922の更新処理を行い、次のプロセッサコア901−3に引き渡すことになる。なお、2回目のブロック処理のステップS112では、ASS_DATA[2]の内容として、プロセッサコア901−1から引き渡される、実際に課金情報データベース902から読み出された内容ではなく、1回目のブロック処理におけるステップS113で分散キャッシュ4−2に追記され、2回目のブロック処理のステップS111で書き換えられた内容が用いられることになる。また、2回目のブロック処理が完了した時点で、分散キャッシュ4−2には、1回目の処理で更新された”田中”の累計額922の内容と、2回目の処理で更新された”田中”の累計額922の内容とが保持されることになる。
なお、さらに”田中”が記された名札910が続けて入力されていた場合には、プロセッサコア901−2は、3回目の名札910の入力に対するブロック処理として、再度”田中”の累計額922の更新処理を行い、次のプロセッサコア901−3に引き渡すことになる。なお、3回目のブロック処理のステップS112では、2回目のブロック処理のステップS113で分散キャッシュ4−2に追記され、3回目のブロック処理ステップS111で書き換えられた内容(最新の内容)が用いられることになる。また、3回目のブロック処理が完了した時点で、分散キャッシュ4−2には、2回目の処理で更新された”田中”の累計額922の内容と、3回目の処理で更新された”田中”の累計額922の内容とが保持されることになる。
なお、同じ人名を持つ名札910が間隔を明けて入力され、前に処理したときの更新内容が分散キャッシュ4−2から消去されている場合には、既にその内容は課金情報データベース902に反映され取得可能になっていることを意味しているので、プロセッサコア901−2は、プロセッサコア901−1から引き継いだASS_DATA[2]の内容をそのまま用いればよい。
次に、図10に示すフローチャートを参照して、最後(N番目)の処理実行部2−Nの動作について説明する。図10は、本実施形態におけるN番目の処理実行部2−Nの動作例を示すフローチャートである。図10に示すように、処理順序が最後の処理実行部2−Nは、(N−1)番目の処理実行部2−(N−1)から、キー11,ASS_DATA[1]〜ASS_DATA[N],(N−1)番目の中間データが入力されるまで待ち、それら情報が入力されたら次のステップS131へ進む(ステップS130)。
ステップS131では、処理実行部2−Nは、前の処理実行部2−(N−1)から引き渡された(N−1)番目の中間データに、ARGUMENTという別名を与え、ステップS132へ進む。
次に、処理実行部2−Nは、全処理実行部に共通する処理動作を行う(ステップS132)。なお、ステップS132の動作は、図7における処理実行部2−1が読み出すステップS103として説明した動作と同様である。すなわち、図8に示すように、当該処理実行部2−X(ここでは、X=N)が更新を管理している列データ22−Xの内容を、これまでの処理結果を反映した内容とした上で、必要に応じて列データ22−Xの更新をしたり、その内容を分散キャッシュ4−Xに追記したりする。なお、X=Nの場合には、当該処理実行部2−Nに対応づけられた列データ22−Nの内容、すなわち、ASS_DATA[N]の内容をこれまでの処理結果を反映した内容とした上で、必要に応じてASS_DATA[N]の内容を更新したり、その結果を分散キャッシュ4−Nに追記したりする。その際、処理実行部2−は、ASS_DATA[1]〜ASS_DATA[N−1]の参照が可能である。
全ての処理実行部2−1〜2−Nに共通する動作(図8のステップS110〜S113)が終了すると、処理実行部2−Nは、今回の処理対象10に対する一連の処理によって更新された列データ22−1〜22−Nの内容をデータベース3に反映させる(ステップS133)。処理実行部2−Nは、キー11と等しいキー21を持つレコード20をデータベース3から検索して、そのレコード20に含まれる列データ22−1〜22−Nの内容として、ASS_DATA[1]〜ASS_DATA[N]の内容を書き込む。
そして、処理実行部2−Nは、処理結果13を示す情報を出力する(ステップS134)。以上で1つの処理対象10に対する処理実行部2−Nの処理は終了する。処理実行部2−Nは、ステップS130に戻り、次のブロック処理の開始タイミングを待つ。
例えば、図12に示した課金装置900に本発明を適用した場合、処理実行部2−Nに相当するプロセッサコア901−3が、図10に示すフローチャートに従って動作することになる。プロセッサコア901−3は、例えば、図10に示すフローチャートに従い、プロセッサコア901−2から、名札910とASS_DATA[2]とが入力されるまで待ち、それら情報が入力されたらステップS131に進む(ステップS130)。なお、プロセッサコア901−3においても、指示内容は常に固定であるため、ステップS131の動作は省略される。
また、プロセッサコア901−3に割り当てられたブロック処理では、DBデータの更新処理を含まず、またデータベースへの書き込み処理以外の処理も含まれていないため、全処理実行部に共通の処理(図10のステップS132、具体的には図8のステップS110〜S113)は全て省略される。
次に、プロセッサコア901−3は、今回の名札910に対する一連の処理によって更新された列データである累計額922の内容を課金情報データベース902に反映させる(ステップS133)。プロセッサコア901−3は、名札910に記された人名と等しい人名921を持つレコード920を課金情報データベース902から検索して、そのレコード920に含まれる累計額922の内容として、ASS_DATA[2]の内容を書き込めばよい。そして、プロセッサコア901−3は、必要であれば処理結果13を示す情報を出力する(ステップS134)。以上で、プロセッサコア901−3は、1回の名札910の入力に対するブロック処理を終了し、次のブロック処理の開始タイミングを待つことになる。
仮に、”田中”が記された名札910が続けて入力されていた場合であっても、プロセッサコア901−2からは、その都度これまでの処理結果が反映された内容に基づいて更新された累計額922の内容がASS_DATA[2]として入力されるので、特別な処理をすることなく、引き渡されたASS_DATA[2]の内容をそのまま課金情報データベース902に書き込む処理を行えばよい。
以上のように、本実施形態によれば、データベースの整合性と結果の一貫性を保証し、かつストールを生じさせずに、データベースへのアクセス処理を含む一連の処理をパイプライン方式によって並列実行することができる。
図11は、図12に示した課金装置900に本発明を適用した場合のタイムチャートである。図11では、”田中”と記された名札910が3回連続されたときのタイムチャートを示している。まず、時刻t1において、2回目の名札910の入力を受けて、プロセッサコア901−1が、1回目の”田中”に対するブロック処理を開始する。プロセッサコア901−1は、1回目の”田中”に対するブロック処理では、課金情報データベース902から”田中”の現在の累計額922を読み出してその値(X=15)を人名921(”田中”)とともにプロセッサコア901−2に向けて出力する。なお、プロセッサコア901−2およびプロセッサコア901−3は、データ入力待ちである。
時刻t2において、プロセッサコア901−1からのデータ入力(”田中”,X=15)を受けて、プロセッサコア901−2が、1回目の”田中”に対するブロック処理を開始する。また、プロセッサコア901−2と並列に、2回目の名札910の入力を受けて、プロセッサコア901−1が、2回目の”田中”に対するブロック処理を開始する。なお、プロセッサコア901−3は、データ入力待ちである。
プロセッサコア901−2は、1回目の”田中”に対するブロック処理では、分散キャッシュ4−2に該当するデータがないのを確認した上で、引き渡された値(X=15)に基づいて課金処理(X←X+1)を行う。そして、更新後の値(X=16)を人名921(”田中”)と紐付けて分散キャッシュ4−2に追記した後、その値(X=16)を人名921(”田中”)とともにプロセッサコア901−3に向けて出力する。また、プロセッサコア901−1は、2回目の”田中”に対するブロック処理では、課金情報データベース902から”田中”の現在の累計額922を読み出してその値(X=15)を人名921(”田中”)とともにプロセッサコア901−2に向けて出力する。
時刻t3において、プロセッサコア901−2からのデータ入力(”田中”,X=16)を受けて、プロセッサコア901−3が、1回目の”田中”に対するブロック処理を開始する。また、プロセッサコア901−3と並列に、プロセッサコア901−1からのデータ入力(”田中”,X=15)を受けて、プロセッサコア901−2が、2回目の”田中”に対するブロック処理を開始する。また、プロセッサコア901−3およびプロセッサコア901−2と並列に、3回目の名札910の入力を受けて、プロセッサコア901−1が、3回目の”田中”に対するブロック処理を開始する。
プロセッサコア901−3は、1回目の”田中”に対するブロック処理では、プロセッサコア901−2から引き渡された更新後の累計額922の値(X=16)を、課金情報データベース902に書き込む。また、プロセッサコア901−2は、2回目の”田中”に対するブロック処理では、分散キャッシュ4−2に該当するデータ(時刻t2において追記したデータ)があるのを確認し、その値(X=16)に基づいて課金処理(X←X+1)を行う。そして、更新後の値(X=17)を人名921(”田中”)と紐付けて分散キャッシュ4−2に追記した後、その値(X=17)を人名921(”田中”)とともにプロセッサコア901−3に向けて出力する。また、プロセッサコア901−1は、3回目の”田中”に対するブロック処理では、課金情報データベース902から”田中”の現在の累計額922を読み出してその値(X=15)を人名921(”田中”)とともにプロセッサコア901−2に向けて出力する。
時刻t4において、プロセッサコア901−2からのデータ入力(”田中”,X=17)を受けて、プロセッサコア901−3が、2回目の”田中”に対するブロック処理を開始する。また、プロセッサコア901−3と並列に、プロセッサコア901−1からのデータ入力(”田中”,X=15)を受けて、プロセッサコア901−2が、3回目の”田中”に対するブロック処理を開始する。なお、プロセッサコア901−1は、データ入力待ちである。
プロセッサコア901−3は、2回目の”田中”に対するブロック処理では、プロセッサコア901−2から引き渡された更新後の累計額922の値(X=17)を、課金情報データベース902に書き込む。また、プロセッサコア901−2は、3回目の”田中”に対するブロック処理では、分散キャッシュ4−2に該当するデータ(時刻t2,t3において追記したデータ)があるのを確認し、そのうちの最新の値(X=17)に基づいて課金処理(X←X+1)を行う。そして、更新後の値(X=18)を人名921(”田中”)と紐付けて分散キャッシュ4−2に追記した後、その値(X=18)を人名921(”田中”)とともにプロセッサコア901−3に向けて出力する。
時刻t5において、プロセッサコア901−2からのデータ入力(”田中”,X=18)を受けて、プロセッサコア901−3が、3回目の”田中”に対するブロック処理を開始する。なお、プロセッサコア901−1およびプロセッサコア901−2は、データ入力待ちである。
プロセッサコア901−3は、3回目の”田中”に対するブロック処理では、プロセッサコア901−2から引き渡された更新後の累計額922の値(X=18)を、課金情報データベース902に書き込む。
図11に示すように、本発明を適用すれば、課金装置900が、”田中”と記された名札910を3回連続して受け取ったとしても、パイプラインストールを発生させずに期待される結果が得られる。
なお、上記実施形態には、データベースへのアクセス処理を含む一連の処理を、並列動作可能な処理実行部によるパイプライン方式で実行する情報処理装置であって、データベースに記憶されるデータである1つの記憶データ(DBデータ)に対して、該記憶データの内容をある処理実行部が参照した後に別の処理実行部が更新しないように一連の処理を複数のブロック処理に分割した各ブロック処理と1対1に対応し、所定のタイミングで、対応づけられた一のブロック処理を実行する処理実行部(例えば、処理実行部2−1〜2−N)と、少なくとも複数のブロック処理のうち記憶データの更新処理を含むブロック処理と対応づけられた処理実行部に付随して設けられ、該処理実行部がブロック処理で更新した記憶データの内容を、追記された順序がわかる形式で保持するキャッシュ部(例えば、キャッシュ部4−1〜4−N)とを備えた情報処理装置の構成が示されている。
また、上記実施形態には、各処理実行部が、ブロック処理で記憶データの内容を参照する場合に、データベースに格納されている内容よりも当該処理実行部に付随するキャッシュ部に保持されている最新の内容を優先して参照する情報処理装置の構成が示されている(例えば、図8のステップS110〜S111)。
また、上記実施形態には、各処理実行部が、当該処理実行部がブロック処理で更新した記憶データの内容を、当該処理実行部に付随するキャッシュ部に追記する登録部と、当該処理実行部がブロック処理で参照する記憶データの内容として、データベースに格納されている内容よりも当該処理実行部に付随するキャッシュ部に保持されている最新の内容を優先させる選択部とを含む情報処理装置の構成が示されている。
また、上記実施形態には、予めデータベースのデータ項目に対して、更新の権限を与える一の処理実行部が割り当てられている情報処理装置であって、各処理実行部は、記憶データのうち、当該処理実行部に割り当てられているデータ項目の記憶データに対してのみ更新が可能で、かつ当該処理実行部およびパイプラインにおいて当該処理実行部よりも前段に位置する処理実行部に割り当てられているデータ項目の記憶データに対してのみ参照が可能である情報処理装置の構成が示されている。
また、上記実施形態には、所定数以下のブロック処理でのみデータベースから記憶データの内容を読み出すように、かつ所定数以下のブロック処理でのみデータベースに対して記憶データの内容を書き込むように、一連の処理が分割されている情報処理装置の構成が示されている。
また、上記実施形態には、1番目に実行されるブロック処理でのみデータベースから記憶データの内容を読み出すように、かつ最後に実行されるブロック処理でのみデータベースに対して記憶データの内容を書き込むように、一連の処理が分割されている情報処理装置の構成が示されている。
また、上記実施形態には、キャッシュ部が、FIFO型のキューによって実現される情報処理装置の構成が示されている。また、上記実施形態には、複数の処理実行部が、1つ以上のプロセッサによって実現される情報処理装置の構成が示されている。
本発明は、データベースに対するアクセス処理を含む一連の処理を行う情報処理装置に限らず、1つ以上の独立動作可能な処理単位(スレッド,プロセス,タスク等)を動作させる1つ以上のプロセッサを具備する情報処理装置であって、パイプライン実行させるとデータハザードの可能性がある一連の処理を実行する情報処理装置であれば、好適に適用可能である。
本発明による情報処理装置の構成例を示すブロック図である。 本実施形態による情報処理装置のより具体的な構成例を示すブロック図である。 データベース3に記憶される情報の概念図である。 情報処理装置1におけるデータの流れの一例を示す説明図である。 ある分散キャッシュ4−Xにおける情報の構成の一例を示す説明図である。 処理実行部2−1〜2−Nが列データ22−1〜22−Nに対してどのようなアクセスが可能かを示す説明図である。 1番目の処理実行部2−1の動作例を示すフローチャートである。 全ての処理実行部2−1〜2−Nに共通する動作の処理フローの一例を示す処理フローである。 2番目〜(N−1)番目の処理実行部2−Y(2≦Y<N)の動作例を示すフローチャートである。 N番目の処理実行部2−Nの動作例を示すフローチャートである。 図12に示す情報処理装置(課金装置900)に本発明を適用した場合のタイムチャートを示す説明図である。 データベースへのアクセス処理を含む一連の処理を実行する情報処理装置にパイプライン方式を適用させた例を示す説明図である。 12に示す情報処理装置(課金装置900)におけるタイムチャートの例を示す説明図である。 12に示す情報処理装置(課金装置900)におけるタイムチャートの他の例を示す説明図である。
符号の説明
1 情報処理装置
2−1〜2−N 実行処理部
3 データベース
4−1〜4−N キャッシュ部,分散キャッシュ

Claims (5)

  1. データベースへのアクセス処理を含む一連の処理を、並列動作可能な処理実行部によるパイプライン方式で実行する情報処理装置であって、
    データベースに記憶されるデータである1つの記憶データに対して内容の更新の権限を与える一の処理実行部が割り当てられており、
    前記一連の処理は、前記データベースから記憶データの内容を読み出す読出処理を含む第1のブロック処理と、当該一連の処理で内容が更新された前記記憶データの内容を前記データベースに書き込む書込処理を含む第2のブロック処理とを含む複数のブロック処理に分割されており、
    前記複数のブロックに分割された各ブロック処理と1対1に対応し、所定のタイミングで、対応づけられた一のブロック処理を実行する処理実行部であって、該処理実行部に内容の更新の権限が割り当てられている記憶データに対してのみ内容の更新が可能で、かつ当該処理実行部およびパイプラインにおいて当該処理実行部よりも前段に位置する処理実行部に割り当てられている記憶データに対してのみ内容の参照が可能であるというアクセス制限が課されている処理実行部と、
    少なくとも前記複数のブロック処理のうち記憶データの内容の更新処理を含むブロック処理と対応づけられた処理実行部に付随して設けられ、該処理実行部がブロック処理で更新した記憶データの内容を、追記された順序がわかる形式で保持するキャッシュ部とを備え、
    前記各処理実行部は、前記読出処理で読み出された記憶データの内容を次に実行される処理実行部に引き渡す際に、ブロック処理で記憶データの内容を更新した場合には、更新後の内容にして引き渡し、
    前記各処理実行部は、ブロック処理で記憶データの内容を参照する場合に、データベースに格納されている内容よりも当該処理実行部の前段に位置する処理実行部から引き渡される内容を優先し、さらに当該処理実行部の前段に位置する処理実行部から引き渡される内容よりも当該処理実行部に付随するキャッシュ部に保持されている最新の内容を優先して参照する
    ことを特徴とする情報処理装置。
  2. 各処理実行部は、
    当該処理実行部がブロック処理で更新した記憶データの内容を、当該処理実行部に付随するキャッシュ部に追記する登録部と、
    当該処理実行部がブロック処理で参照する記憶データの内容として、データベースに格納されている内容を保持するよりも当該処理実行部の前段に位置する処理実行部から引き渡される内容を優先し、さらに当該処理実行部の前段に位置する処理実行部から引き渡される内容よりも当該処理実行部に付随するキャッシュ部に保持されている最新の内容を優先させる選択部とを含む
    請求項1に記載の情報処理装置。
  3. 所定数以下のブロック処理でのみデータベースから記憶データの内容を読み出すように、かつ所定数以下のブロック処理でのみデータベースに対して記憶データの内容を書き込むように、一連の処理が分割されている
    請求項1または請求項2に記載の情報処理装置。
  4. 1番目に実行されるブロック処理でのみデータベースから記憶データの内容を読み出すように、かつ最後に実行されるブロック処理でのみデータベースに対して記憶データの内容を書き込むように、前記一連の処理が分割されている
    請求項1から請求項3のうちのいずれか1項に記載の情報処理装置。
  5. キャッシュ部は、FIFO型のキューによって実現される
    請求項1から請求項4のうちのいずれか1項に記載の情報処理装置。
JP2007271766A 2007-10-18 2007-10-18 情報処理装置 Expired - Fee Related JP5256685B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007271766A JP5256685B2 (ja) 2007-10-18 2007-10-18 情報処理装置
US12/251,883 US8140503B2 (en) 2007-10-18 2008-10-15 Information processing apparatus having process units operable in parallel

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007271766A JP5256685B2 (ja) 2007-10-18 2007-10-18 情報処理装置

Publications (2)

Publication Number Publication Date
JP2009099061A JP2009099061A (ja) 2009-05-07
JP5256685B2 true JP5256685B2 (ja) 2013-08-07

Family

ID=40564470

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007271766A Expired - Fee Related JP5256685B2 (ja) 2007-10-18 2007-10-18 情報処理装置

Country Status (2)

Country Link
US (1) US8140503B2 (ja)
JP (1) JP5256685B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101860752B (zh) * 2010-05-07 2012-02-01 浙江大学 一种针对嵌入式多核系统的视频编码流水化并行方法
WO2011161774A1 (ja) * 2010-06-22 2011-12-29 富士通株式会社 マルチコアプロセッサシステム、制御プログラム、および制御方法
US9491238B2 (en) 2010-07-22 2016-11-08 Sap Se Rapid client-side component processing based on component relationships
WO2012174471A1 (en) * 2011-06-16 2012-12-20 uCIRRUS Software virtual machine for acceleration of transactional data processing
CN103377035A (zh) * 2012-04-12 2013-10-30 浙江大学 针对粗颗粒度流应用的流水并行化方法
JP6197578B2 (ja) * 2013-10-24 2017-09-20 日本電気株式会社 情報処理装置、情報処理方法およびプログラム
US10169051B2 (en) * 2013-12-05 2019-01-01 Blue Yonder GmbH Data processing device, processor core array and method for characterizing behavior of equipment under observation
CN109643797A (zh) 2016-08-29 2019-04-16 株式会社田中化学研究所 钠离子二次电池用正极活性物质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09325888A (ja) * 1996-06-04 1997-12-16 Hitachi Ltd データ処理装置
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW processor
JP2000076107A (ja) 1998-08-27 2000-03-14 Fujitsu Ltd データベース管理方式
EP1062577A2 (en) * 1998-12-08 2000-12-27 Koninklijke Philips Electronics N.V. Method of executing an interpreter program
US6542991B1 (en) * 1999-05-11 2003-04-01 Sun Microsystems, Inc. Multiple-thread processor with single-thread interface shared among threads
US7181594B2 (en) * 2002-01-25 2007-02-20 Intel Corporation Context pipelines
US7111001B2 (en) 2003-01-27 2006-09-19 Seiko Epson Corporation Event driven transaction state management with single cache for persistent framework
US7418585B2 (en) * 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
JP4723301B2 (ja) * 2005-07-21 2011-07-13 株式会社日立製作所 ストリームデータ処理システムおよびストリームデータ処理方法
CN101325063B (zh) * 2007-06-12 2011-02-16 建兴电子科技股份有限公司 全息储存系统中寻找定位点位置的方法

Also Published As

Publication number Publication date
US20090106187A1 (en) 2009-04-23
US8140503B2 (en) 2012-03-20
JP2009099061A (ja) 2009-05-07

Similar Documents

Publication Publication Date Title
JP5256685B2 (ja) 情報処理装置
JP3014773B2 (ja) プロセサアーキテクチャ
US8689221B2 (en) Speculative thread execution and asynchronous conflict events
JP3540743B2 (ja) 1次発行キューと2次発行キューを持つマイクロプロセッサ
EP2240859B1 (en) A multi-reader, multi-writer lock-free ring buffer
US9417935B2 (en) Many-core process scheduling to maximize cache usage
JP2500101B2 (ja) 共用変数の値を更新する方法
US8316366B2 (en) Facilitating transactional execution in a processor that supports simultaneous speculative threading
US20150154045A1 (en) Contention management for a hardware transactional memory
JP3335352B2 (ja) アウトオブオーダジョブ処理方法および装置
Abdolrashidi et al. Wireframe: Supporting data-dependent parallelism through dependency graph execution in gpus
JPH10312282A (ja) 命令完了を改良するための方法および装置
JPH08106386A (ja) データ処理システム
WO2009067219A1 (en) Contention management for a hardware transactional memory
JPH08504977A (ja) スーパースカラ・マイクロプロセサにおけるロード及び/又はストア動作を扱うシステム及び方法
JP2925818B2 (ja) 並列処理制御装置
CN103329102A (zh) 多处理器系统
EP4363991A1 (en) Providing atomicity for complex operations using near-memory computing
JPH06110688A (ja) 複数の順序外れ命令を並行処理するためのコンピュータ・システム
US11507379B2 (en) Managing load and store instructions for memory barrier handling
US6311267B1 (en) Just-in-time register renaming technique
US9135058B2 (en) Method for managing tasks in a microprocessor or in a microprocessor assembly
JPS581246A (ja) 命令処理順序制御方式
US10146441B2 (en) Arithmetic processing device and method for controlling arithmetic processing device
JP5093237B2 (ja) 命令処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120712

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120724

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120921

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121211

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130130

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130326

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130408

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160502

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees