(57)【特許請求の範囲】
【請求項１】
性能調整パラメータに含まれる初回性能測定パラメータが示す測定区間であって、性能測定のための対象処理の実行回数を示す測定区間について複数のシミュレータがシミュレーションを実行して測定された各シミュレータの性能測定結果を取得し、取得された前記性能測定結果に応じて前記各シミュレータに対する重みを計算する重み計算部と、
前記各シミュレータに割り当てられる分割処理の処理量が前記各シミュレータに対する前記重みに応じた処理量になるように、前記対象処理を分割して前記各シミュレータに割り当てる分割処理を生成する分割部と
を備え、
前記重み計算部が、前記分割部によって生成された前記分割処理を割り当てられたシミュレータが実行して測定された性能測定結果を取得し、取得された前記性能測定結果に応じて各シミュレータに対する重みを再計算し、前記分割部が、再計算された前記重みに基づき前記対象処理を分割して前記各シミュレータに割り当てる分割処理を再生成する処理を、前記性能調整パラメータに含まれる処理分割数だけ繰り返す処理分割装置。
【請求項２】
前記重み計算部は、前記各シミュレータを対象として、前記各シミュレータから取得された前記性能測定結果の平均値を、対象のシミュレータから取得された前記性能測定結果で除して、前記対象のシミュレータに対する前記重みを計算する
請求項１に記載の処理分割装置。
【請求項３】
前記分割部は、前記重みの値が大きいほど前記分割処理の処理量が多くなるように、前記分割処理を生成する
請求項２に記載の処理分割装置。
【請求項４】
前記各シミュレータは、性能を測定する性能モニタを備え、
前記重み計算部は、前記各シミュレータが備える性能モニタによって測定された性能測定結果を取得する
請求項１から３までのいずれか１項に記載の処理分割装置。
【請求項５】
前記各シミュレータは、クラウドシステムで動作する
請求項１から４までのいずれか１項に記載の処理分割装置。
【請求項６】
複数のシミュレータと、対象処理を分割して各シミュレータそれぞれに割り当てる分割処理を生成する処理分割装置とを備えるシミュレータシステムであり、
前記処理分割装置は、
性能調整パラメータに含まれる初回性能測定パラメータが示す測定区間であって、性能測定のための対象処理の実行回数を示す測定区間について前記複数のシミュレータがシミュレーションを実行して測定された各シミュレータの性能測定結果を取得し、取得された前記性能測定結果に応じて前記各シミュレータに対する重みを計算する重み計算部と、
前記各シミュレータに割り当てられる分割処理の処理量が前記各シミュレータに対する前記重みに応じた処理量になるように、前記対象処理を分割して前記各シミュレータに割り当てる分割処理を生成する分割部と
を備え、
前記重み計算部が、前記分割部によって生成された前記分割処理を割り当てられたシミュレータが実行して測定された性能測定結果を取得し、取得された前記性能測定結果に応じて各シミュレータに対する重みを再計算し、前記分割部が、再計算された前記重みに基づき前記対象処理を分割して前記各シミュレータに割り当てる分割処理を再生成する処理を、前記性能調整パラメータに含まれる処理分割数だけ繰り返すシミュレータシステム。
【請求項７】
コンピュータが、性能調整パラメータに含まれる初回性能測定パラメータが示す測定区間であって、性能測定のための対象処理の実行回数を示す測定区間について複数のシミュレータがシミュレーションを実行して測定された各シミュレータの性能測定結果を取得し、取得された前記性能測定結果に応じて各シミュレータに対する重みを計算し、
コンピュータが、前記各シミュレータに割り当てられる分割処理の処理量が前記各シミュレータに対する前記重みに応じた処理量になるように、前記対象処理を分割して前記各シミュレータに割り当てる分割処理を生成し、
コンピュータが、生成された前記分割処理を割り当てられたシミュレータが実行して測定された性能測定結果を取得し、取得された前記性能測定結果に応じて各シミュレータに対する重みを再計算し、再計算された前記重みに基づき前記対象処理を分割して前記各シミュレータに割り当てる分割処理を再生成する処理を、前記性能調整パラメータに含まれる処理分割数だけ繰り返す処理分割方法。
【請求項８】
性能調整パラメータに含まれる初回性能測定パラメータが示す測定区間であって、性能測定のための対象処理の実行回数を示す測定区間について複数のシミュレータがシミュレーションを実行して測定された各シミュレータの性能測定結果を取得し、取得された前記性能測定結果に応じて前記各シミュレータに対する重みを計算する重み計算処理と、
前記各シミュレータに割り当てられる分割処理の処理量が前記各シミュレータに対する前記重みに応じた処理量になるように、前記対象処理を分割して前記各シミュレータに割り当てる分割処理を生成する分割処理と
をコンピュータに実行させ、
前記重み計算処理で、前記分割処理によって生成された前記分割処理を割り当てられたシミュレータが実行して測定された性能測定結果を取得し、取得された前記性能測定結果に応じて各シミュレータに対する重みを再計算し、前記分割処理で、再計算された前記重みに基づき前記対象処理を分割して前記各シミュレータに割り当てる分割処理を再生成する処理を、前記性能調整パラメータに含まれる処理分割数だけ繰り返する処理分割プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ターゲットシステムの動作を模擬するシミュレーション技術に関する。
【背景技術】
【０００２】
命令セットシミュレーション（以降、ＣＰＵ命令シミュレーションと記述）とＩＯシミュレーションとを連係して、コンピュータでターゲットシステムの動作模擬するシミュレーション技術がある。
ＣＰＵ命令シミュレーションは、ＩＳＳ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ）命令実行部を備え、命令の処理動作とプログラムカウンタとを模擬するブロックである。ＩＯシミュレーションは、ターゲットシステムのＩＯ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）の動作を模擬するブロックである。ターゲットシステムのＩＯとは、入力装置又はネットワークからの入力と、表示装置又はネットワークへの出力とのことである。【０００３】
このシミュレーション技術を用いたシミュレータは、ターゲットシステムと同様の周期処理を実現できる。また、このシミュレーション技術を用いたシミュレータは、外部から取得された処理を実行することにより、ターゲットシステムで処理を実行した場合と同様に処理を実行でき、演算結果を出力することができる。具体例としては、シミュレータが、外部から加工プログラムを取得して実行することにより、ターゲットシステムで加工プログラムを実行した場合と同様に、加工プログラムを実行でき、同様の演算結果を出力することができる。【０００４】
大量の処理をシミュレータで実行させる場合、演算結果を出力するのに時間がかかる。そのため、大量の処理をシミュレータで実行させる場合には、大量の処理を複数の分割処理に分割し、複数の連携シミュレータそれぞれに各分割処理を分配して、並列してシミュレーションを実行するシミュレータシステムが用いられる。これにより、シミュレータシステムでは、大量の処理を並列して実行するため、高速に演算結果を出力することができる。
クラウドシステムを用いたシミュレータシステムの実現方法がある（特許文献１参照）。クラウドシステムは、ユーザにハードウェア資源及びソフトウェア資源を使ったサービスを提供する。クラウドシステムでは、同時に複数の仮想マシンを立ち上げることが可能である。クラウドシステムにおいて複数の仮想マシンを立ち上げ、各仮想マシンで並列してシミュレーションを実行することにより、並列してシミュレーションを実行することが可能になる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１６−１０３１７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
クラウドシステムにおいて複数の仮想マシンを立ち上げ、各仮想マシンで並列してシミュレーションを実行する場合、各仮想マシンで実行されるシミュレーションの処理時間にばらつきが発生する場合がある。各仮想マシンで実行されるシミュレーションの処理時間にばらつきが発生すると、処理時間の遅い仮想マシンの処理時間に全体の処理が合わされ、シミュレーション全体の処理時間も遅くなってしまう。
クラウドシステムでは、複数のサービスが同時に稼働し、複数のユーザが１つの計算機リソースを共有して使用する場合がある。そのため、クラウドシステムには性能の保障がなく、計算機リソースが獲得されたタイミング等によって実際の性能が異なる。これが原因となり、処理時間にばらつきが発生する。
この発明は、シミュレータシステムの性能低下を抑制することを目的とする。
【課題を解決するための手段】
【０００７】
この発明に係る処理分割装置は、
複数のシミュレータそれぞれから性能測定結果を取得し、取得された前記性能測定結果に応じて各シミュレータに対する重みを計算する重み計算部と、
前記各シミュレータに割り当てられる分割処理の処理量が前記各シミュレータに対する前記重みに応じた処理量になるように、対象処理を分割して前記各シミュレータに割り当てる分割処理を生成する分割部と
を備える。
【発明の効果】
【０００８】
この発明では、逐次性能測定結果が取得され、性能測定結果に応じて各シミュレータに対する重みが計算される。そして、各シミュレータに対する重みに応じた処理量になるように、対象処理が分割されて各シミュレータに割り当てる分割処理が生成される。これにより、動的に各シミュレータに性能測定結果に応じた処理量の分割処理が割り当てられる。その結果、一部のシミュレータが原因となり、シミュレーション全体の処理時間が遅くなることを抑制できる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１に係るシミュレータシステム１００が動作するクラウドシステム２００の構成図。
【図２】実施の形態１に係る物理マシン３００のハードウェア構成図。
【図３】実施の形態１に係る仮想マシン４００のハードウェア構成図。
【図４】実施の形態１に係るターゲットマシン５００のハードウェア構成図。
【図５】シミュレータシステム１００の構成図。
【図６】実施の形態１に係るシミュレータシステム１００の全体的な動作を示すフローチャート。
【図７】実施の形態１に係る性能調整パラメータ３２の説明図。
【図８】実施の形態１に係るシミュレータ２０の動作を示すフローチャート。
【図９】実施の形態１に係る性能モニタ２６の動作を示すフローチャート。
【図１０】実施の形態１に係る性能測定結果３３と重み３４との説明図。
【図１１】実施の形態１に係る処理分割装置１０の動作を示すフローチャート。
【発明を実施するための形態】
【００１０】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を参照して、実施の形態１に係るシミュレータシステム１００が動作するクラウドシステム２００の構成を説明する。
クラウドシステム２００は、ロードバランサ２１０と、ウェブサーバ２２０と、管理サーバ２３０と、処理分割用仮想マシン２４０と、複数のシミュレータ用仮想マシン２５０と、データベースサーバ２６０とを備える。
ロードバランサ２１０とウェブサーバ２２０と管理サーバ２３０と処理分割用仮想マシン２４０と各シミュレータ用仮想マシン２５０とデータベースサーバ２６０とは、ネットワーク２７０を介して接続されている。
【００１１】
ロードバランサ２１０は、ユーザがアップロードしたデータ及び要求を、ネットワーク２７０を介して、ウェブサーバ２２０と管理サーバ２３０と処理分割用仮想マシン２４０と各シミュレータ用仮想マシン２５０とに振り分ける装置である。
【００１２】
ウェブサーバ２２０は、ユーザに演算結果を出力するための仮想マシンである。
【００１３】
管理サーバ２３０は、ネットワーク２７０を介して、クラウドシステム２００を制御する仮想マシンである。
【００１４】
処理分割用仮想マシン２４０は、処理分割装置１０を実現する仮想マシンである。
【００１５】
シミュレータ用仮想マシン２５０は、シミュレータ２０を実現する仮想マシンである。
【００１６】
データベースサーバ２６０は、処理分割装置１０及びシミュレータ２０で出力されるデータを記憶するストレージ装置である。
【００１７】
図２を参照して、実施の形態１に係るウェブサーバ２２０と管理サーバ２３０と処理分割用仮想マシン２４０と複数のシミュレータ用仮想マシン２５０とが動作する物理マシン３００のハードウェア構成を説明する。
物理マシン３００は、通信インタフェース３１０と、ＨＤＤ３２０（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）と、ＣＰＵ３３０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、メモリ３４０と、表示インタフェース３５０と、入力インタフェース３６０とを備える。
【００１８】
通信インタフェース３１０は、他の装置と通信するためのインタフェースである。通信インタフェース３１０は、具体例としては、Ｅｔｈｅｒｎｅｔ（登録商標）のポートである。
【００１９】
ＨＤＤ３２０は、データを保管する記憶装置である。物理マシン３００は、ＨＤＤ３２０に代えて、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を備えてもよい。また、物理マシン３００は、ＨＤＤ３２０に代えて、ＳＤ（登録商標，Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＣＦ（ＣｏｍｐａｃｔＦｌａｓｈ）、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記憶媒体を備えてもよい。
【００２０】
ＣＰＵ３３０は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。物理マシン３００は、ＣＰＵ３３０に代えて、又は、ＣＰＵ３３０に加えて、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えてもよい。
【００２１】
メモリ３４０は、データを一時的に記憶する記憶装置である。メモリ３４０は、具体例としては、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００２２】
表示インタフェース３５０は、表示装置３５１が接続されるインタフェースである。表示インタフェース３５０は、具体例としては、ＨＤＭＩ（登録商標，Ｈｉｇｈ−Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）のポートである。
【００２３】
入力インタフェース３６０は、入力装置３６１が接続されるインタフェースである。入力インタフェース３６０は、具体例としては、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）のポートである。
【００２４】
なお、ロードバランサ２１０とデータベースサーバ２６０とについても、物理マシン３００と同じハードウェア構成であってもよい。データベースサーバ２６０については、ＨＤＤを複数備え、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）構成としてもよい。
【００２５】
図３を参照して、実施の形態１に係るウェブサーバ２２０と管理サーバ２３０と処理分割用仮想マシン２４０と複数のシミュレータ用仮想マシン２５０との仮想マシン４００のハードウェア構成を説明する。
仮想マシン４００は、通信インタフェース４１０と、ＨＤＤ４２０と、ＣＰＵ４３０と、メモリ４４０と、表示インタフェース４５０と、入力インタフェース４６０とを備える。
通信インタフェース４１０とＨＤＤ４２０とＣＰＵ４３０とメモリ４４０と表示インタフェース４５０と入力インタフェース４６０とは、それぞれ、仮想マシン４００を実現する物理マシン３００が備える通信インタフェース３１０とＨＤＤ３２０とＣＰＵ３３０とメモリ３４０と表示インタフェース３５０と入力インタフェース３６０とである。ＨＤＤ４２０には、仮想マシン４００を実現するためのＯＳ４２１と、プログラム群４２２と、ファイル群４２３とが記憶されている。
【００２６】
図４を参照して、実施の形態１に係るターゲットマシン５００のハードウェア構成を説明する。
ターゲットマシン５００は、シミュレータシステム１００によって動作が模擬される装置である。ターゲットマシン５００は、例えば、サーボ機構とサーボ通信を行い、周期処理を実現する。
ターゲットマシン５００は、ＣＰＵ５１０と、高速メモリ５２０と、低速メモリ５３０と、ＩＯ群５４０と、ＨＤＤ５５０とを備える。
【００２７】
ＣＰＵ５１０は、ＣＰＵ３３０と同様に、演算処理を行うＩＣである。ＣＰＵ５１０は、Ｌ１キャッシュ５１１と、Ｌ２キャッシュ５１２とを有しており、比較的高速に処理を実行可能である。
【００２８】
高速メモリ５２０及び低速メモリ５３０は、メモリ３４０と同様に、データを一時的に記憶する記憶装置である。具体例としては、高速メモリ５２０はＳＲＡＭであり、低速メモリ５３０はＤＲＡＭである。
【００２９】
ＩＯ群５４０は、周辺機器との入出力を行う装置群である。ＩＯ群５４０は、具体例としては、サーボ機構とサーボ通信を行う装置である。
【００３０】
ＨＤＤ５５０は、ＨＤＤ３２０と同様に、データを保管する記憶装置である。ＨＤＤ５５０は、ＨＤＤ３２０と同様に、ＳＳＤ、又は、可搬記憶媒体であってもよい。ＨＤＤ５５０には、ターゲットマシン５００の機能を実現するプログラム群５５１が記憶されている。
【００３１】
図５を参照して、シミュレータシステム１００の構成を説明する。
シミュレータシステム１００は、処理分割装置１０と、複数のシミュレータ２０とを備える。
【００３２】
処理分割装置１０は、機能構成要素として、重み計算部１１と、分割部１２とを備える。重み計算部１１と、分割部１２との機能はソフトウェアにより実現される。
処理分割装置１０を実現する仮想マシン４００のＨＤＤ４２０には、プログラム群４２２として、重み計算部１１と、分割部１２との機能を実現するプログラムが記憶されている。このプログラムは、ＣＰＵ４３０によりメモリ４４０に読み込まれ、ＣＰＵ４３０によって実行される。これにより、重み計算部１１と、分割部１２との機能が実現される。
【００３３】
各シミュレータ２０は、機能構成要素として、制御部２１と、インタフェース部２２と、ＣＰＵ命令シミュレータ２３と、リソースモデル部２４と、ＩＯシミュレータ２５と、性能モニタ２６とを備える。制御部２１と、インタフェース部２２と、ＣＰＵ命令シミュレータ２３と、リソースモデル部２４と、ＩＯシミュレータ２５と、性能モニタ２６との機能はソフトウェアにより実現される。
シミュレータ２０を実現する仮想マシン４００のＨＤＤ４２０には、プログラム群４２２として、制御部２１と、インタフェース部２２と、ＣＰＵ命令シミュレータ２３と、リソースモデル部２４と、ＩＯシミュレータ２５と、性能モニタ２６との機能を実現するプログラムが記憶されている。このプログラムは、ＣＰＵ４３０によりメモリ４４０に読み込まれ、ＣＰＵ４３０によって実行される。これにより、制御部２１と、インタフェース部２２と、ＣＰＵ命令シミュレータ２３と、リソースモデル部２４と、ＩＯシミュレータ２５と、性能モニタ２６との機能が実現される。
【００３４】
＊＊＊動作の説明＊＊＊
図６から図１１を参照して、実施の形態１に係るシミュレータシステム１００の動作を説明する。
実施の形態１に係るシミュレータシステム１００の動作のうち処理分割装置１０の動作は、実施の形態１に係る処理分割方法に相当する。また、実施の形態１に係るシミュレータシステム１００の動作のうち処理分割装置１０の動作は、実施の形態１に係る処理分割プログラムの処理に相当する。
【００３５】
図６を参照して、実施の形態１に係るシミュレータシステム１００の全体的な動作を説明する。
（ステップＳ１１：情報取得処理）
クラウドシステム２００の管理サーバ２３０は、実行する処理である対象処理３１と、シミュレータシステム１００の設定に関するパラメータである性能調整パラメータ３２とを取得する。
具体的には、ユーザによって対象処理３１及び性能調整パラメータ３２がシミュレータシステム１００にアップロードされる。管理サーバ２３０は、アップロードされた対象処理３１及び性能調整パラメータ３２を取得し、データベースサーバ２６０に書き込む。
【００３６】
図７に示すように、性能調整パラメータ３２は、初回性能測定パラメータと、処理分割数と、並列数とを含む。
初回性能測定パラメータは、性能モニタ２６が初回の性能測定を行う際の測定区間を示す。図７では、初回性能測定パラメータに１００が設定されているため、性能モニタ２６は、初回の性能測定を行う際、１００周期分の性能測定を行う。
処理分割数は、処理分割を実行する回数を示す。図７では、処理分割数に３が設定されているため、３回の処理分割が実行される。
並列数は、並列してシミュレーションを実行するシミュレータ２０の数である。図７では、並列数に１０が設定されているため、１０台のシミュレータ２０によってシミュレーションが実行される。
【００３７】
（ステップＳ１２：シミュレーション開始処理）
クラウドシステム２００の管理サーバ２３０は、処理分割装置１０を起動させるとともに、ステップＳ１１で取得された性能調整パラメータ３２に含まれる並列数のシミュレータ２０を起動させる。すると、起動された各シミュレータ２０で、ターゲットマシン５００のシミュレーションが開始される。
【００３８】
（ステップＳ１３：初回モニタ処理）
ステップＳ１２で起動された各シミュレータ２０の性能モニタ２６は、ステップＳ１２で開始されたシミュレーションの性能を測定して、性能測定結果３３を生成する。性能モニタ２６は、生成された性能測定結果３３をデータベースサーバ２６０に書き込む。
【００３９】
（ステップＳ１４：重み設定処理）
処理分割装置１０の重み計算部１１は、ステップＳ１３で生成された性能測定結果３３を取得する。具体的には、重み計算部１１は、データベースサーバ２６０から性能測定結果３３を読み出す。
そして、重み計算部１１は、取得された性能測定結果３３に応じて各シミュレータに対する重み３４を計算する。重み計算部１１は、計算された重み３４をデータベースサーバ２６０に書き込む。
【００４０】
（ステップＳ１５：分割処理）
処理分割装置１０の分割部１２は、ステップＳ１４で計算された重み３４を取得する。具体的には、分割部１２は、データベースサーバ２６０から重み３４を読み出す。
そして、分割部１２は、各シミュレータ２０に割り当てられる分割処理３５の処理量が各シミュレータ２０に対する重み３４に応じた処理量になるように、対象処理３１を分割して各シミュレータ２０に割り当てる分割処理３５を生成する。分割部１２は、生成された各分割処理３５を対象のシミュレータ２０の識別子と対応付けてデータベースサーバ２６０に書き込む。
【００４１】
（ステップＳ１６：処理実行処理）
各シミュレータ２０は、ステップＳ１５で生成された分割処理３５を取得する。具体的には、シミュレータ２０は、自身の識別子と対応付けられた分割処理３５をデータベースサーバ２６０から読み出す。そして、各シミュレータ２０は、取得された分割処理３５を実行する。各シミュレータ２０は、分割処理３５を実行した結果得られた演算結果３６を出力する。
【００４２】
（ステップＳ１７：モニタ処理）
ステップＳ１２で起動された各シミュレータ２０の性能モニタ２６は、ステップＳ１６で分割処理３５が実行された際の性能を測定して、性能測定結果３３を生成する。性能モニタ２６は、生成された性能測定結果３３をデータベースサーバ２６０に書き込む。
【００４３】
（ステップＳ１８：残判定処理）
処理分割装置１０の分割部１２は、対象処理３１に未実行の処理が残っているか否かを判定する。
分割部１２は、未実行の処理が残っている場合には処理をステップＳ１４に戻す。一方、分割部１２は、未実行の処理が残っていない場合には処理をステップＳ１９に進める。
【００４４】
（ステップＳ１９：終了判定処理）
管理サーバ２３０は、シミュレータシステム１００の利用を終了するか否かを判定する。具体例としては、ユーザから新たな処理の実行指示が入力されない場合には、利用を終了すると判定し、新たな処理の実行指示が入力された場合には、利用を終了しないと判定する。
管理サーバ２３０は、利用を終了しない場合には処理をステップＳ１１に戻す。一方、管理サーバ２３０は、利用を終了する場合には、処理を終了する。
【００４５】
図８を参照して、実施の形態１に係るシミュレータ２０の動作を説明する。
ステップＳ２１からステップＳ２２の処理が、図６のステップＳ１２に処理に相当する。また、ステップＳ２３からステップＳ２４の処理が、図６のステップＳ１２からステップＳ１３の処理と、ステップＳ１６からステップＳ１７の処理に相当する。
【００４６】
（ステップＳ２１：初期設定処理）
ステップＳ１２でシミュレータ２０が起動されると、制御部２１は、初期設定を行う。
具体的には、制御部２１は、ターゲットマシン５００のプログラムをリソースモデル部２４にロードする。リソースモデル部２４は、ターゲットマシン５００のＣＰＵ５１０におけるＬ１キャッシュ及びＬ２キャッシュと高速メモリ５２０及び低速メモリ５３０と等の動作を模擬する機能である。制御部２１は、プログラムカウンタを設定する。制御部２１は、ＣＰＵ命令シミュレータ２３とＩＯシミュレータ２５との切替タイミングを設定する。切替タイミングは、例えば、実行命令数の閾値によって設定される。制御部２１は、周期処理時間と、実行命令数の閾値とを設定する。周期処理時間は、定期的にＩＯシミュレーションを実行する時間間隔である。実行命令数の閾値は、ＣＰＵ命令シミュレータ２３が、１回の命令シミュレーションで実行する命令数の上限である。
【００４７】
（ステップＳ２２：モニタ設定処理）
制御部２１は、性能モニタ２６を起動させる。性能モニタ２６は、起動すると、ステップＳ１１で取得された性能調整パラメータ３２に含まれる初回性能測定パラメータが示す測定区間を設定する。また、性能モニタ２６は、周期カウンタを初期値である０に設定する。
【００４８】
（ステップＳ２３：ＣＰＵ命令処理）
ＣＰＵ命令シミュレータ２３は、命令シミュレーションを実行する。ＣＰＵ命令シミュレータ２３は、命令の処理動作とプログラムカウンタを模擬する機能である。
具体的には、制御部２１は、ＣＰＵ命令シミュレータ２３を起動させる。ＣＰＵ命令シミュレータ２３は、起動すると、設定されたプログラムカウンタを使って、リソースモデル部２４から命令を取得し、命令シミュレーションを実行する。
ＣＰＵ命令シミュレータ２３は、分割処理３５が生成された場合には、インタフェース部２２を介して分割処理３５を取得して、実行する。ＣＰＵ命令シミュレータ２３は、分割処理３５の実行を開始する場合には、分割処理３５を実行している状態であることをリソースモデル部２４の状態アドレスに書き込んでおく。ＣＰＵ命令シミュレータ２３は、分割処理３５を実行して得られた演算結果３６をリソースモデル部２４の結果アドレスに書き込む。
この際、ＣＰＵ命令シミュレータ２３は、実行する処理に応じて、ＩＯシミュレータ２５を呼び出し、ＩＯシミュレーションを実行させる。
ＣＰＵ命令シミュレータ２３は、実行した命令数を記録する。ＣＰＵ命令シミュレータ２３は、実行した命令数が実行命令数の閾値に達すると、その時点におけるプログラムカウンタの値を記録し、命令シミュレーションを停止し、制御部２１に実行権限を移す。
【００４９】
（ステップＳ２４：ＩＯ処理）
ＩＯシミュレータ２５は、ＩＯシミュレーションを実行する。ＩＯシミュレータ２５は、キーボードと表示装置とサーボ通信とネットワークといった、ターゲットマシン５００のＩＯを模擬する機能である。ＩＯシミュレータ２５は、模擬対象のＩＯの数だけ別々に存在する。
具体的には、制御部２１は、ＩＯシミュレータ２５を起動させる。ＩＯシミュレータ２５は、起動すると、ステップＳ２３でＣＰＵ命令シミュレータ２３によって実行された命令数を用いて、経過した仮想時間を算出する。仮想時間は、ターゲットマシン５００での想定経過時間である。ＩＯシミュレータ２５は、経過した仮想時間が周期処理時刻に達したら、サーボ通信といったＩＯシミュレーションを実行する。ＩＯシミュレータ２５は、ＩＯシミュレーションを終了すると、制御部２１に実行権限を移す。
この際、ＩＯシミュレータ２５は、リソースモデル部２４の状態アドレスを参照することにより、分割処理３５が実行されている状態であるか否かを特定する。ＩＯシミュレータ２５は、分割処理３５が実行されている状態である場合には、リソースモデル部２４の結果アドレスから演算結果３６を取得して、出力する。
【００５０】
（ステップＳ２５：終了判定処理）
制御部２１は、処理を終了するか否かを判定する。具体的には、制御部２１は、ステップＳ１８で未実行の処理が残っていると判定された場合には、処理をステップＳ３３に戻す。一方、制御部２１は、ステップＳ１８で未実行の処理が残っていないと判定された場合には、処理を終了する。
【００５１】
図９を参照して、実施の形態１に係る性能モニタ２６の動作を説明する。
ステップＳ３１の処理が図８のステップＳ２２の処理に相当する。
ステップＳ３２からステップＳ３９処理は、図８のステップＳ２３からステップＳ２４の処理が実行されている際に実行される。特に、ステップＳ３２からステップＳ３５の処理は、図６のステップＳ１２からステップＳ１３に相当する図８のステップＳ２３からステップＳ２４の処理が実行されている際に実行される。また、ステップＳ３６からステップＳ３９の処理は、図６のステップＳ１６からステップＳ１７に相当する図８のステップＳ２３からステップＳ２４の処理が実行されている際に実行される。
【００５２】
（ステップＳ３１：初期設定処理）
性能モニタ２６は、ステップＳ２２で説明した通り、ステップＳ１１で取得された性能調整パラメータ３２に含まれる初回性能測定パラメータが示す測定区間を設定する。また、性能モニタ２６は、周期カウンタを初期値である０に設定する。
【００５３】
（ステップＳ３２：開始検知処理）
性能モニタ２６は、ＩＯシミュレータ２５の動作を監視し、周期処理の開始を検知する。具体的には、性能モニタ２６は、サーボ通信といったＩＯシミュレーションの実行状態と、リソースモデル部２４の決められたアドレスを監視することにより、ＩＯシミュレータ２５の動作を監視する。これにより、性能モニタ２６は、周期処理の開始を検知する。
性能モニタ２６は、周期処理の開始を検知すると、実時間計測を開始する。また、性能モニタ２６は、周期カウンタの値を１インクリメントする。
【００５４】
（ステップＳ３３：測定終了判定処理）
性能モニタ２６は、周期カウンタの値が、ステップＳ１１で取得された性能調整パラメータ３２に含まれる初回性能測定パラメータが示す値に達しているか否かを判定する。
性能モニタ２６は、初回性能測定パラメータが示す値に達していない場合には、処理をステップＳ３４に進める。一方、性能モニタ２６は、周期カウンタの値が初回性能測定パラメータが示す値に達している場合には、処理をステップＳ３５に進める。
図７の例では、周期カウンタの値が１００になった場合には、処理がステップＳ３５に進められる。
【００５５】
（ステップＳ３４：周期カウント処理）
性能モニタ２６は、ＩＯシミュレータ２５の動作を監視し、ＩＯシミュレーションが実行されると、周期カウンタの値を１インクリメントする。そして、性能モニタ２６は、処理をステップＳ３３に進める。
【００５６】
（ステップＳ３５：測定終了処理）
性能モニタ２６は、実時間計測を終了し、計測された実時間から１周期当たりの処理時間を計算する。つまり、１周期当たりの処理時間＝実時間／初回性能測定パラメータが示す値である。性能モニタ２６は、計算された１周期当たりの処理時間を性能測定結果３３としてデータベースサーバ２６０に書き込む。これにより、図１０の（Ａ）における１つの行の情報が生成される。
性能モニタ２６は、周期カウンタの値を０に初期化する。
【００５７】
（ステップＳ３６：開始検知処理）
性能モニタ２６は、リソースモデル部２４の状態アドレスを定期的に監視することにより、分割処理３５が実行されている状態になったことを検出する。
性能モニタ２６は、分割処理３５が実行されている状態になったことを検知すると、実時間計測を開始する。
【００５８】
（ステップＳ３７：周期カウント処理）
性能モニタ２６は、ＩＯシミュレータ２５の動作を監視し、ＩＯシミュレーションが実行されると、周期カウンタの値を１インクリメントする。
【００５９】
（ステップＳ３８：測定終了判定処理）
性能モニタ２６は、リソースモデル部２４の状態アドレスを定期的に監視することにより、分割処理３５が実行されている状態が終了したことを検知する。性能モニタ２６は、分割処理３５が実行されている状態が終了したことを検知すると、処理をステップＳ３９に進める。
【００６０】
（ステップＳ３９：測定終了処理）
性能モニタ２６は、実時間計測を終了し、計測された実時間から１周期当たりの処理時間を計算する。つまり、１周期当たりの処理時間＝実時間／周期カウンタの値である。性能モニタ２６は、計算された１周期当たりの処理時間を性能測定結果３３としてデータベースサーバ２６０に書き込む。これにより、図１０の（Ｂ）における１つの行の情報が生成される。
性能モニタ２６は、周期カウンタの値を０に初期化する。
【００６１】
（ステップＳ４０：終了判定処理）
性能モニタ２６は、処理を終了するか否かを判定する。具体的には、性能モニタ２６は、ステップＳ１８で未実行の処理が残っていると判定された場合には、処理をステップＳ３６に戻す。一方、性能モニタ２６は、ステップＳ１８で未実行の処理が残っていないと判定された場合には、処理を終了する。
【００６２】
図１１を参照して、実施の形態１に係る処理分割装置１０の動作を説明する。
ステップＳ４１からステップＳ４４の処理は、図６のステップＳ１４の処理に相当する。ステップＳ４５からステップＳ４８の処理は、図６のステップＳ１５の処理に相当する。
【００６３】
（ステップＳ４１：初期設定処理）
重み計算部１１は、ステップＳ１１で取得された性能調整パラメータ３２に含まれる処理分割数及び並列数を取得する。重み計算部１１は、処理分割数を分割カウンタに設定する。
図７の例では、処理分割数として３、並列数として１０が取得される。
【００６４】
（ステップＳ４２：性能取得処理）
重み計算部１１は、各シミュレータ２０の性能測定結果３３を取得する。具体的には、重み計算部１１は、図９のステップＳ３５又はステップＳ３９でデータベースサーバ２６０に書き込まれた性能測定結果３３を読み出す。
【００６５】
（ステップＳ４３：重み計算処理）
重み計算部１１は、ステップＳ４２で取得された性能測定結果３３に応じて各シミュレータに対する重み３４を計算する。
具体的には、重み計算部１１は、各シミュレータ２０を対象として、各シミュレータから取得された性能測定結果３３が示す値の平均値を、対象のシミュレータ２０から取得された性能測定結果が示す値で除して、対象のシミュレータ２０に対する重み３４を計算する。
図１０の（Ａ）に示す例であれば、１０台のシミュレータ２０の性能測定結果３３が示す値の平均値は１．９４６である。そのため、図１０の（Ｃ）に示すように、シミュレータ２０Ａの重みは、１９．４６／２．００＝０．９７３≒０．９７である。
【００６６】
（ステップＳ４４：重み出力処理）
重み計算部１１は、ステップＳ４３で計算された各シミュレータ２０に対する重み３４と、分割カウンタとを出力する。具体的には、重み計算部１１は、各シミュレータ２０に対する重み３４と、分割カウンタとを、データベースサーバ２６０に書き込む。
【００６７】
（ステップＳ４５：重み取得処理）
分割部１２は、ステップＳ４４で出力された各シミュレータ２０に対する重み３４と分割カウンタとを取得する。具体的には、分割部１２は、データベースサーバ２６０から各シミュレータ２０に対する重み３４と分割カウンタとを読み出す。
【００６８】
（ステップＳ４６：処理分割処理）
分割部１２は、ステップＳ４５で取得された各シミュレータ２０に対する重み３４に応じて、ステップＳ１１で取得された対象処理３１を分割して、各シミュレータ２０に割り当てる分割処理３５を生成する。
具体的には、分割部１２は、各シミュレータ２０に割り当てられる分割処理３５の処理量が各シミュレータ２０に対する重み３４に応じた処理量になるように、対象処理３１を分割して各シミュレータ２０に割り当てる分割処理３５を生成する。つまり、分割部１２は、重みの値が大きいほど分割処理３５の処理量が多くなるように、分割処理３５を生成する。なお、対象処理３１を分割可能な位置等に制限がある場合もあるため、厳密に重み３４に対して分割処理３５の処理量が一致していなくてもよい。
【００６９】
（ステップＳ４７：分割カウント処理）
分割部１２は、分割カウンタを１デクリメントする。
【００７０】
（ステップＳ４８：終了判定処理）
分割部１２は、分割カウンタが０であるか否かを判定する。
分割部１２は、分割カウンタが０である場合には、処理を終了する。一方、分割カウンタが０でない場合には、処理をステップＳ４２に戻す。
【００７１】
＊＊＊実施の形態１の効果＊＊＊
以上のように、実施の形態１に係るシミュレータシステム１００は、複数のシミュレータ２０で並列してシミュレーションを実行する場合に、逐次性能測定結果が取得され、性能測定結果３３に応じて各シミュレータ２０に対する重み３４を計算する。そして、実施の形態１に係るシミュレータシステム１００は、各シミュレータ２０に対する重み３４に応じた処理量になるように、動的に対象処理３１が分割されて各シミュレータ２０に割り当てる分割処理３５が生成される。これにより、一部のシミュレータ２０が原因となり、シミュレーション全体の処理時間が遅くなることを抑制できる。つまり、各シミュレータ２０の処理時間のばらつきをなくすことにより、シミュレーション全体の処理時間が遅くなることを抑制できる。
【００７２】
クラウドシステムは、複数ユーザによって使用される。そのため、計算機リソース割り当てが動的に変わり、シミュレータ２０の性能も動的に変わる。つまり、最初に性能測定して負荷分散しても、シミュレーション実行中に、新たに他ユーザが計算機リソースを使うことで、各シミュレータ２０が使用できる計算機リソースが最初と変わってしまい、シミュレータ２０の性能が変わる。実施の形態１に係るシミュレータシステム１００は、動的に負荷分散を行うため、シミュレーション全体の処理時間が遅くなることを抑制できる。
【００７３】
＊＊＊他の構成＊＊＊
＜変形例１＞
実施の形態１では、各装置間のデータのやり取りと、各機能構成要素間のデータのやり取りとを、データベースサーバ２６０を介して行った。しかし、各装置間のデータのやり取りは、ネットワーク２７０を介してデータを送受信することにより行われてもよい。また、各機能構成要素間のデータのやり取りは、プロセス間通信より行われてもよい。
【符号の説明】
【００７４】
１０  処理分割装置、１１  重み計算部、１２  分割部、２０  シミュレータ、２１  制御部、２２  インタフェース部、２３  ＣＰＵ命令シミュレータ、２４  リソースモデル部、２５  ＩＯシミュレータ、２６  性能モニタ、３１  対象処理、３２  性能調整パラメータ、３３  性能測定結果、３４  重み、３５  分割処理、１００  シミュレータシステム、２００  クラウドシステム、２１０  ロードバランサ、２２０  ウェブサーバ、２３０  管理サーバ、２４０  処理分割用仮想マシン、２５０  シミュレータ用仮想マシン、２６０  データベースサーバ、２７０  ネットワーク、３００  物理マシン、３１０  通信インタフェース、３２０  ＨＤＤ、３３０  ＣＰＵ、３４０  メモリ、３５０  表示インタフェース、３６０  入力インタフェース、４００  仮想マシン、４１０  通信インタフェース、４２０  ＨＤＤ、４３０  ＣＰＵ、４４０  メモリ、４５０  表示インタフェース、４６０  入力インタフェース、５００  ターゲットマシン、５１０  ＣＰＵ、５２０  高速メモリ、５３０  低速メモリ、５４０  ＩＯ群、５５０  ＨＤＤ。
【要約】
処理分割装置（１０）は、複数のシミュレータ（２０）それぞれから性能測定結果（３３）を取得し、取得された性能測定結果（３３）に応じて各シミュレータ（２０）に対する重み（３４）を計算する。処理分割装置（１０）は、重み（３４）が計算されると、各シミュレータ（２０）に割り当てられる分割処理（３５）の処理量が各シミュレータ（２０）に対する重み（３４）に応じた処理量になるように、対象処理（３１）を分割して各シミュレータ（２０）に割り当てる分割処理（３５）を生成する。【図１】
0006324634.tif 000002
【図２】
0006324634.tif 000003
【図３】
0006324634.tif 000004
【図４】
0006324634.tif 000005
【図５】
0006324634.tif 000006
【図６】
0006324634.tif 000007
【図７】
0006324634.tif 000008
【図８】
0006324634.tif 000009
【図９】
0006324634.tif 000010
【図１０】
0006324634.tif 000011
【図１１】
0006324634.tif 000012