(57)【特許請求の範囲】
【請求項１】
異種の業務処理手段を生成するための複数種類の業務処理プログラムと、
各業務処理手段から出力された並列化判定用データを解析し、並列化設計データを生成するプログラム解析手段と、
上記の各業務処理プログラムに実行スレッドを割り当てて起動させ、それぞれの業務処理手段を生成するプログラム実行手段と、
を備えたデータフローの自動並列化システムであって、
上記の各業務処理手段は、それぞれの業務処理プログラム中に規定された入出力データと、入力データの分割を許容するデータ項目である分割可能キーを、上記並列化判定用データとして出力し、
上記プログラム解析手段は、一方の業務処理プログラムの出力データが他方の業務処理プログラムの入力データとなっており、かつ、両プログラム中に規定された分割可能キーが共通する場合には、先行の業務処理手段による分割可能キー単位での処理が完了する都度、処理結果を後続の業務処理手段に出力して処理させる旨を規定した並列化設計データを生成し、
上記プログラム実行手段は、上記並列化設計データに基づき、上記の各業務処理手段を同時に起動させて必要な処理を実行させることを特徴とするデータフローの自動並列化システム。
【請求項２】
業務処理手段を生成するための業務処理プログラムと、
データ分割部を生成するためのデータ分割プログラムと、
データ結合部を生成するためのデータ結合プログラムと、
上記業務処理手段から出力された並列化判定用データを解析し、並列化設計データを生成するプログラム解析手段と、
上記の業務処理プログラム、データ分割プログラム、データ結合プログラムに実行スレッドを割り当てて起動させ、業務処理手段、データ分割部、データ結合部を生成するプログラム実行手段と、
を備えたデータフローの自動並列化システムであって、
上記業務処理手段は、上記業務処理プログラム中に規定された入力データの分割を許容するデータ項目である分割可能キーを、上記並列化判定用データとして出力し、
上記プログラム解析手段は、上記業務処理手段の入力データが格納されたファイルを所定の数に分割する旨と、当該業務処理手段を複数起動させて、分割された各ファイルに対する処理を各業務処理手段に同時実行させる旨と、各業務処理手段による処理が完了した後に、それぞれの出力データを結合させる旨を規定した並列化設計データを生成し、
上記プログラム実行手段は、上記並列化設計データに基づき、上記データ分割部を起動して上記入力データの格納されたファイルを指定された数に分割させると共に、上記業務処理手段を同数起動させて必要な処理を同時実行させ、さらに上記データ結合部を起動して各業務処理手段からの出力データを結合する処理を実行させることを特徴とするデータフローの自動並列化システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はデータフローの自動並列化システムに係り、特に、複数のプログラムの協働によって達成される一連の業務処理について、並列化のための設計を行うことなく、自動的に並列実行させる技術に関する。
【背景技術】
【０００２】
CPUのマルチコア化に伴い、データフロー上の各処理を並列化させることにより、全体的な処理時間の短縮を図ることが求められるようになってきている。
ここで、代表的な並列化手法として、データ並列、タスク並列、パイプライン並列を挙げることができる（非特許文献１参照）。
【０００３】
まず、データ並列とは、XML等の設定ファイルによって指定されたキー値に基づいて処理対象となるデータを複数のグループに分割し、グループ毎に同一処理を同時に実行した上で、最後に処理結果を結合させる手法である。
また、タスク並列とは、データの受け渡し情報から、依存関係がないタスク同士を判別し、それぞれを並列的に実行させるものである。
さらに、パイプライン並列とは、データの受け渡しが発生するタスク同士を同時に起動し、先行タスクによってインプットデータを全件処理される前に、後続タスクに処理済みデータを受け渡すことにより、先行・後続関係のあるタスク同士を並列化させるものである。
【０００４】
【非特許文献１】I-10-8. 並列処理プログラミングの基本、並列化処理インターネットURL：http://ossforum.jp/node/578  検索日：２０１４年１０月８日
【発明の開示】
【発明が解決しようとする課題】
【０００５】
以上の並列化手法を適用するに際し、各処理に別個の実行スレッド（CPUコア）を割り当てることにより、マルチコアCUPの特性を活かした処理の効率化が実現される。
【０００６】
しかしながら、このようなデータフローの並列化を実現するためには、データフロー設計者あるいは運用担当者が各プログラムのキー情報やプログラム間のデータ接続情報を解析して並列化の可否を判断し、その結果に基づいて並列実行用の制御プログラムをコーディングしているため、設計の難易度が高く、バグが作り込まれやすいという問題があった。
【０００７】
この発明は、このような現状を鑑みて案出されたものであり、並列化のための設計を行うことなく、データフローの並列化を自動的に実現する技術の提供を目的としている。
【課題を解決するための手段】
【０００９】
上記の目的を達成するため、請求項１に記載したデータフローの自動並列化システムは、異種の業務処理手段を生成するための複数種類の業務処理プログラムと、各業務処理手段から出力された並列化判定用データを解析し、並列化設計データを生成するプログラム解析手段と、上記の各業務処理プログラムに実行スレッドを割り当てて起動させ、それぞれの業務処理手段を生成するプログラム実行手段とを備えたシステムであって、上記の各業務処理手段が、それぞれの業務処理プログラム中に規定された入出力データと、入力データの分割を許容するデータ項目である分割可能キーを、上記並列化判定用データとして出力し、上記プログラム解析手段が、一方の業務処理プログラムの出力データが他方の業務処理プログラムの入力データとなっており、かつ、両プログラム中に規定された分割可能キーが共通する場合には、先行の業務処理手段による分割可能キー単位での処理が完了する都度、処理結果を後続の業務処理手段に出力して処理させる旨を規定した並列化設計データを生成し、上記プログラム実行手段が、上記並列化設計データに基づき、上記の各業務処理手段を同時に起動させて必要な処理を実行させることを特徴としている。
【００１０】
請求項２に記載したデータフローの自動並列化システムは、業務処理手段を生成するための業務処理プログラムと、データ分割部を生成するためのデータ分割プログラムと、データ結合部を生成するためのデータ結合プログラムと、上記業務処理手段から出力された並列化判定用データを解析し、並列化設計データを生成するプログラム解析手段と、上記の業務処理プログラム、データ分割プログラム、データ結合プログラムに実行スレッドを割り当てて起動させ、業務処理手段、データ分割部、データ結合部を生成するプログラム実行手段とを備えたシステムであって、上記業務処理手段が、上記業務処理プログラム中に規定された入力データの分割を許容するデータ項目である分割可能キーを、上記並列化判定用データとして出力し、上記プログラム解析手段が、上記業務処理手段の入力データ
が格納されたファイルを所定の数に分割する旨と、当該業務処理手段を複数起動させて、分割された各ファイルに対する処理を各業務処理手段に同時実行させる旨と、各業務処理手段による処理が完了した後に、それぞれの出力データを結合させる旨を規定した並列化設計データを生成し、上記プログラム実行手段が、上記並列化設計データに基づき、上記データ分割部を起動して上記入力データの格納されたファイルを指定された数に分割させると共に、上記業務処理手段を同数起動させて必要な処理を同時実行させ、さらに上記データ結合部を起動して各業務処理手段からの出力データを結合する処理を実行させることを特徴としている。
【発明の効果】
【００１１】
請求項１に記載のデータフローの自動並列化システムによれば、各業務処理手段、プログラム解析手段及びプログラム実行手段の協働によってパイプライン並列化用のデータフローが、また請求項２に記載のデータフローの自動並列化システムによればデータ並列化用のデータフローが自動的に形成される。
このように、各種並列化用のデータフローが自動生成される結果、人為的に並列化のための設計をする場合に比べて手間がかからず、バグが混入する危険性も低くなる利点が生じる。
【発明を実施するための最良の形態】
【００１２】
図１は、この発明に係るデータフローの自動並列化システム10の機能構成を示すブロック図であり、プログラム解析部12と、プログラム実行部14と、売上集計プログラム16と、店名付与プログラム18と、商品名抽出プログラム20と、商品名付与プログラム22と、データ分割プログラム24と、データ結合プログラム26を備えている。
【００１３】
上記プログラム解析部12及びプログラム実行部14は、コンピュータのCPUが、所定のアプリケーションプログラムに従って動作することにより実現される。
【００１４】
上記のデータ分割プログラム24及びデータ結合プログラム26は、データの分割及び結合処理を実行する汎用のプログラムである。
また、上記の売上集計プログラム16、店名付与プログラム18、商品名抽出プログラム20及び商品名付与プログラム22は、特定の業務処理を実行するプログラムである。
【００１５】
上記コンピュータは複数のCPUコアを備えており、各プログラムは、プログラム実行部14によって実行スレッド（CPUコア）が割り当てられることにより、実行可能となされる。
【００１６】
図２は、各業務処理プログラムの実行によって実現される本来のデータフロー30を示すブロック図であり、売上ファイル32と、売上集計部34と、売上合計ファイル36と、店名付与部38と、店名ファイル40と、店名付売上合計ファイル42と、商品マスタファイル44と、商品名抽出部46と、商品名ファイル48と、商品名付与部50と、店名商品名付売上合計ファイル52とによって、データフロー30は構成されている。
【００１７】
上記売上ファイル32には、店番（店コード）、商品コード、金額、日時等のデータ項目を備えたレコードが多数格納されている。各レコードは、店番（１〜2000）をキーにソートされている。
上記売上集計部34は、上記売上集計プログラム16の起動によって実現される処理機能であり、売上ファイル32に格納された各データの金額を「店番／商品コード」毎に集計し、売上合計ファイル36に格納する処理を担当する。
【００１８】
上記店名付与部38は、上記店名付与プログラム18の起動によって実現される処理機能であり、店番と店名との対応関係が格納された店名ファイル40を参照して、売上合計ファイル36に格納された店番／商品コード単位の集計データに店名を付与した後、店名付売上合計ファイル42に格納する処理を担当する。
【００１９】
上記商品マスタファイル44には、商品コード、商品名、供給業者等のデータ項目を備えたレコードが多数格納されている。
上記商品名抽出部46は、上記商品名抽出プログラム20の起動によって実現される処理機能であり、商品マスタファイル44に格納された各データから、商品コードと商品名の組合せを抽出し、商品名ファイル48に格納する処理を担当する。
【００２０】
上記商品名付与部50は、商品名付与プログラム22の起動によって実現される処理機能であり、店名付売上合計ファイル42に格納された各集計データに対して、商品名ファイル48に格納された商品名を付与して、店名商品名付売上合計ファイル52に格納する処理を担当する。
【００２１】
上記の売上集計プログラム16、店名付与プログラム18、商品名抽出プログラム20及び商品名付与プログラム22は、上記した各プログラム本来の業務処理部を実現するためのコードの他に、伝達部54〜60を実現するためのコードをそれぞれ備えており、各業務処理部とそれぞれの伝達部54〜60を合わせたものが、この発明の「業務処理手段」に相当する。
【００２２】
各伝達部54〜60は、プログラム本来の業務処理に係る入力データと出力データをプログラム解析部12に渡す機能を備えている。
また、入力データの分割を許容する分割可能キーがプログラム中に定義されている場合には、その分割可能キーをプログラム解析部12に渡す機能をも備えている。
【００２３】
以下において、図３のフローチャートに従い、このシステム10の処理手順について説明する。
まずプログラム実行部14が、業務処理用の各プログラム（売上集計プログラム16、店名付与プログラム18、商品名抽出プログラム20、商品名付与プログラム22）に実行スレッドを割り当て、それぞれを起動させる（Ｓ10）。
【００２４】
つぎに、プログラム解析部12が、各業務処理プログラムの伝達部54〜60から並列化判定用データを取得する（Ｓ12）。
すなわち、各業務処理プログラムの伝達部54〜60は、プログラム内において予め定義された「入力データ及び出力データ」をプログラム解析部12に渡す。また、当該プログラム内において「分割可能キー」が定義されている場合には、これもプログラム解析部12に渡される。
【００２５】
つぎに、プログラム解析部12は各伝達部54〜60から取得した並列化判定用データに基づいて、分割可能キーの解析処理（Ｓ14）、パイプライン接続の解析処理（Ｓ16）、ファイル入出力関係の解析処理（Ｓ18）を実行し、その解析結果に基づく並列化設計データを生成し（Ｓ20）、プログラム実行部14に出力する。
【００２６】
ここで「分割可能キーの解析処理」とは、業務処理プログラム中に処理対象となる入力データの分割を許容するキー項目が設定されている場合に、処理対象となるファイルを上記キー項目の値単位で分割することなどを指示する設計データを生成する処理を意味している。
【００２７】
例えば、売上集計プログラム16は「店番×商品コード」単位で売上金額を集計することを目的としており、同じ店番のデータが複数のファイルに分割されてしまう所謂データの泣き別れが生じるとファイル単位で正しい集計値が得られないため、予め「店番」が分割可能キーとして指定されている。
これに対しプログラム解析部12は、売上ファイルを「店番」単位で所定数に分割して並列処理に供すること、また並列処理が完了した後は処理結果を結合させることを指令する並列化設計データを生成する。
【００２８】
つぎに「パイプライン接続の解析処理」とは、各業務処理プログラム中に設定された分割可能キーが共通しており、かつ、各業務処理が連続するステップである場合に、両業務処理をパイプライン並列化させることを指示する設計データを生成する処理を意味している。
【００２９】
例えば、店名付与プログラム18は売上合計ファイル36に対して店番単位で店名を挿入することを目的としているため、予め「店番」が分割可能キーとして指定されている。また、売上集計プログラム16にも、上記の通り「店番」が分割可能キーとして設定されている。さらに、売上集計部34の出力データである売上合計ファイル36が、店名付与部38の入力データとなっているため、両者間には連続性が認められる。
以上のことから、プログラム解析部12は売上集計部34の処理と店名付与部38の処理についてパイプライン並列化させることを指示する設計データを生成する。
【００３０】
また「ファイル入出力関係解析」とは、各業務処理プログラムの入力データと出力データをそれぞれ比較し、相互間に依存関係がない場合にはタスク並列化が可能と判定することを意味している。
【００３１】
例えば、商品名抽出プログラム20の入力データは商品マスタファイル44であり、出力データは商品名ファイル48であり、これらは売上集計プログラム16及び店名付与プログラム18の入力データ及び出力データと異なるため、商品名抽出プログラム20は売上集計プログラム16及び店名付与プログラム18に対して並列実行可能とプログラム解析部12は判断し、その旨を指令する並列化設計データを生成する。
【００３２】
プログラム解析部12から並列化設計データを受け取ったプログラム実行部14は、これに従って各プログラムに順に実行スレッドを割り当てることにより（Ｓ22）、図４に示すように、並列化処理用のデータフロー70を実現する。
【００３３】
この並列化処理用のデータフロー70は、売上ファイル32と、データ分割部72と、第１の売上ファイル32aと、第２の売上ファイル32bと、第１の売上集計部34aと、第２の売上集計部34bと、第１の店名付与部38aと、第２の店名付与部38bと、店名ファイル40と、第１の店名付売上合計ファイル42aと、第２の店名付売上ファイル42bと、データ結合部74と、店名付売上合計ファイル42と、商品マスタファイル44と、商品名抽出部46と、商品名ファイル48と、商品名付与部50と、店名商品名付売上合計ファイル52とによって構成されている。
【００３４】
このデータフロー70を構成するに際し、まずプログラム実行部14はデータ分割プログラム24を起動し、データ分割部72を生成する。
つぎにプログラム実行部14は、データ分割部72に分割可能キーとして「店番」を渡し、２つのファイルに分割するように指令する。
【００３５】
これを受けたデータ分割部72は、売上ファイル32中に店番１〜店番2000までのデータが格納されていることから、これを店番１〜店番1000のデータを含む第１の売上ファイル32aと、店番1001〜店番2000のデータを含む第２の売上ファイル32bとに等分割する。
【００３６】
つぎにプログラム実行部14は、売上集計プログラム16及び店名付与プログラム18を起動して第１の売上集計部34a及び第１の店名付与部38aを生成した上で、第１の売上ファイル32aに対する売上集計処理と、店名付与処理を実行させる。
【００３７】
これに対し第１の売上集計部34aは、第１の売上ファイル32aに格納された各データの金額を「店番×商品コード」単位で集計し、集計結果を第１の店名付与部38aに渡す。
これを受けた第１の店名付与部38aは、店名ファイル40を参照して、店番に対応した店名を各データに付加し、第１の店名付売上合計ファイル42aに格納する。
第１の売上集計部34a及び第１の店名付与部38aは、第１の売上ファイル32aに格納された全てのデータについて処理が完了するまで、「店番×商品コード」単位での上記処理を続行する。
【００３８】
上記と並行してプログラム実行部14は、売上集計プログラム16及び店名付与プログラム18を起動して第２の売上集計部34b及び第２の店名付与部38bを生成した上で、第２の売上ファイル32bに対する売上集計処理と、店名付与処理を実行させる。
【００３９】
これに対し第２の売上集計部34bは、第２の売上ファイル32bに格納された各データの金額を「店番×商品コード」単位で集計し、集計結果を第２の店名付与部38bに渡す。
これを受けた第２の店名付与部38bは、店名ファイル40を参照して、店番に対応した店名を各データに付加し、第２の店名付売上合計ファイル42bに格納する。
第２の売上集計部34b及び第２の店名付与部38bは、第２の売上ファイル32bに格納された全てのデータについて処理が完了するまで、「店番×商品コード」単位での上記処理を続行する。
【００４０】
プログラム実行部14は、第１の売上集計部34a及び第１の店名付与部38aによる処理が完了すると共に、第２の売上集計部34b及び第２の店名付与部38bによる処理が完了した時点で、データ結合プログラム26を起動してデータ結合部74を生成する。
データ結合部74は、第１の店名付売上合計ファイル42aと第２の店名付売上合計ファイル42bを結合し、店名付売上合計ファイル42に格納する。
【００４１】
プログラム実行部14はまた、上記した各処理（データ分割部72による売上ファイル32の分割処理、第１の売上集計部34a及び第１の店名付与部38aによる売上集計及び店名付与処理、第２の売上集計部34b及び第２の店名付与部38bによる売上集計及び店名付与処理、データ結合部74による店名付売上合計ファイルの結合処理）と並行して、商品名抽出プログラム20を起動して商品名抽出部46を生成し、商品名抽出処理を実行させる。
【００４２】
商品名抽出部46は、商品マスタファイル44に格納されたデータから商品コードと商品名の組合せを抽出し、商品名ファイル48に格納する。
【００４３】
プログラム実行部14は、上記した各処理（データ分割部72による売上ファイル32の分割処理、第１の売上集計部34a及び第１の店名付与部38aによる売上集計及び店名付与処理、第２の売上集計部34b及び第２の店名付与部38bによる売上集計及び店名付与処理、データ結合部74による店名付売上合計ファイルの結合処理、商品名抽出部46による商品名抽出処理）が完了した時点で、商品名付与プログラム22を起動して商品名付与部50を生成し、商品名付与処理を実行させる。
【００４４】
商品名付与部50は、商品名ファイル48を参照して、店名付売上合計ファイル42に格納された各データに商品名を付与した上で、店名商品名付売上合計ファイル52に格納する。
【００４５】
以上の通り、この並列化処理用のデータフロー70に従えば、第１の売上集計部34a及び第１の店名付与部38aによる処理と、第２の売上集計部34b及び第２の店名付与部38bによる処理とが、所謂データ並列化されると共に、これらの処理と商品名抽出部46による処理とが、所謂タスク並列化されることとなる。
また、第１の売上集計部34aによる処理と、第１の店名付与部38aによる処理とが、所謂パイプライン並列化されると共に、第２の売上集計部34bによる処理と、第２の店名付与部38bによる処理もパイプライン並列化されることとなる。
以上の結果、全体の処理効率を大幅に向上させることが可能となる。
【００４６】
しかも、このような並列化処理用のデータフロー70が、各業務処理プログラムの伝達部54〜60、プログラム解析部12及びプログラム実行部14の協働によって自動的に形成されるため、人為的に並列化のための設計をする場合に比べて手間がかからず、バグが混入する危険性も大幅に低下する。
【００４７】
もちろん、各業務処理プログラムの開発者は、本来の機能を実現するためのコードの他に、伝達部54〜60を実現するためのコードを記述する必要が生じるが、その際に要求されることは、入力データ及び出力データの指定と、分割可能キーが存在する場合にはその指定に限られており、これらは開発者自身が知り尽くしている事項であるため、大きな負担増とはならない。
【００４８】
従来、データフロー設計の専門家が並列化処理用のデータフローを設計する際に一番のネックとなっていたのが、個々の業務処理の内容を把握する点にあったことを考えれば、上記のように並列化判定用データを業務処理プログラム自身が出力し、これに基づいて自動的にデータフローが生成される仕組みを実現したことは、極めて有意義といえる。
【００４９】
この並列化処理用データフロー70の実行に際しては、最大で５つの処理（第１の売上集計部34aによる処理、第１の店名付与部38aによる処理、第２の売上集計部34bによる処理、第２の店名付与部38bによる処理、商品名抽出部46による処理）が同時実行されることとなり、またOS用にもCPUコアを割り当てる必要があるため、少なくとも６個のCPUコアを備えたコンピュータを用いることが望ましい。
【００５０】
さらに多くのCPUコアを搭載しているコンピュータを用いる場合には、データ分割部72によるファイルの分割数を３以上とすることができ、その分、全体の処理効率を一段と高めることが可能となる。
【図面の簡単な説明】
【００５１】
【図１】この発明に係るデータフローの自動並列化システムの機能構成を示すブロック図である。
【図２】各業務処理プログラムの実行によって実現される本来のデータフローを示すブロック図である。
【図３】このシステムにおける処理手順を示すフローチャートである。
【図４】各業務処理プログラムの実行によって実現される並列化処理用のデータフローを示すブロック図である。
【符号の説明】
【００５２】
10    データフローの自動並列化システム
12    プログラム解析部
14    プログラム実行部
16    売上集計プログラム
18    店名付与プログラム
20    商品名抽出プログラム
22    商品名付与プログラム
24    データ分割プログラム
26    データ結合プログラム
30    本来のデータフロー
32    売上ファイル
32a    第１の売上ファイル
32b    第２の売上ファイル
34    売上集計部
34a    第１の売上集計部
34b    第２の売上集計部
36    売上合計ファイル
38    店名付与部
38a    第１の店名付与部
38b    第２の店名付与部
40    店名ファイル
42    店名付売上合計ファイル
42a    第１の店名付売上合計ファイル
42b    第２の店名付売上合計ファイル
44    商品マスタファイル
46    商品名抽出部
48    商品名ファイル
50    商品名付与部
52    店名商品名付売上合計ファイル
54    伝達部
56    伝達部
58    伝達部
60    伝達部
70    並列化処理用のデータフロー
72    データ分割部
74    データ結合部
【図１】
0006375201.tif 000002
【図２】
0006375201.tif 000003
【図３】
0006375201.tif 000004
【図４】
0006375201.tif 000005