JP2012063872A - シミュレーションプログラム、シミュレーション装置及びシミュレーション方法 - Google Patents

シミュレーションプログラム、シミュレーション装置及びシミュレーション方法 Download PDF

Info

Publication number
JP2012063872A
JP2012063872A JP2010205978A JP2010205978A JP2012063872A JP 2012063872 A JP2012063872 A JP 2012063872A JP 2010205978 A JP2010205978 A JP 2010205978A JP 2010205978 A JP2010205978 A JP 2010205978A JP 2012063872 A JP2012063872 A JP 2012063872A
Authority
JP
Japan
Prior art keywords
simulation
scheduler
thread
processing
data read
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.)
Withdrawn
Application number
JP2010205978A
Other languages
English (en)
Inventor
Yutaka Tamiya
豊 田宮
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2010205978A priority Critical patent/JP2012063872A/ja
Priority to US13/067,612 priority patent/US20120065953A1/en
Publication of JP2012063872A publication Critical patent/JP2012063872A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Abstract

【課題】シミュレーションプログラム間におけるデッドロックを回避することができるシミュレーションプログラム、シミュレーション装置及びシミュレーション方法を提供することを目的とする。
【解決手段】他のシミュレーションプログラム11と通信してシミュレーションを分散して実行するシミュレーションプログラム12であって、コンピュータに、スケジューラから継続命令を受けると処理を再開し、一定時間経過したら処理を停止してスケジューラに停止を通知し、他のシミュレーションプログラムからデータの読み込み要求又は書き込み要求を受けると、データの読み込み要求又は書き込み要求を処理する処理実行単位25を生成する処理を実行させ、生成された処理実行単位25は、データの読み込み要求又は書き込み要求を処理することにより上記課題を解決する。
【選択図】 図9

Description

本発明は分散環境上で分散シミュレーションを実行するシミュレーションプログラム、シミュレーション装置及びシミュレーション方法に関する。
例えば大規模なLSI回路システム全体をシミュレーションする場合は、LSI回路システムを複数の部分に分割し、それぞれの部分をモデルとしてモデル化する。個々のモデルは、そのモデルが持つ抽象度に合ったシミュレーションプログラム(以下、単にSPという)を用いてシミュレーションされる。
モデルが持つ抽象度には、回路レベル、RTレベル、Cレベルがある。回路レベルでは例えばSPICE(Simulation Program with Integrated Circuit Emphasis)と呼ばれるSPが用いられる。また、RTレベルでは例えばVerilog Simulatorと呼ばれるSPが用いられる。また、Cレベルでは例えばSystemCと呼ばれるSPが用いられる。
複数のSPは互いに通信し合って時間やデータの同期(SP間通信)を行い、LSI回路システム全体のシミュレーションを遂行するという、分散シミュレーション環境を構築する。
例えば同時実行制御方式のシミュレーション装置は従来から知られている。
また、実際の半導体集積回路の動作と同様の並列処理をシミュレーションすることができる半導体集積回路機能シミュレーション装置は従来から知れている。
特開平5−101015号公報 特開2004−265054号公報
SPの種類と、SPの提供ベンダとは、多岐に上る。このため、最小限の手間で互いのSPが通信する機構を実現することは、分散シミュレーション環境の早期立ち上げに貢献できる。分散シミュレーションの高速化技術の一つとして、Loosely-Timed Modelに基づくSP間の非同期実行は従来から知られている。
しかし、SystemVerilogやSystemCのように分散シミュレーションを想定していないSPでは、デッドロックフリーなSP間通信を実現するモデルを記述することが難しかった。デッドロックとは複数のSPが互いの処理終了を待ち、結果として処理が進まなくなることを言う。また、デットロックフリーとはデットロックにならないことを言う。
本発明の一実施形態は、シミュレーションプログラム間におけるデッドロックを回避できるシミュレーションプログラム、シミュレーション装置及びシミュレーション方法を提供することを目的とする。
上記課題を解決するため、本発明の一実施形態は、スケジューラと他のシミュレーションプログラムと通信してシミュレーションを分散して実行するシミュレーションプログラムであって、コンピュータに、前記スケジューラから継続命令を受けると、処理を再開し、一定時間経過したら該処理を停止して前記スケジューラに停止を通知し、前記他のシミュレーションプログラムからデータの読み込み要求又は書き込み要求を受けると、該データの読み込み要求又は書き込み要求を処理する処理実行単位を生成する、処理を実行させ、生成された前記処理実行単位は、前記データの読み込み要求又は書き込み要求を処理する、シミュレーションプログラムである。
なお、本発明の一実施形態の構成要素、表現又は構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用したものも本発明の態様として有効である。
本発明の一実施形態によれば、シミュレーションプログラム間におけるデッドロックを回避できる。
分散シミュレーション環境の一例のシステム構成図である。 Loosely-Timed Modelに基づく分散シミュレーションの一例のタイムチャートである。 SPのモデル構成を表した一例の模式図である。 図3のSP12のモデル構成において、SP11からのCmdWriteDataコマンドをSP12のターゲットスレッド24で処理する一例のタイムチャートである。 分散シミュレーション環境の一例のシステム構成図である。 スケジューラ又はSPを実行するコンピュータの一例のハードウェア構成図である。 ターゲットスレッドの動作を表す一実施例のタイムチャートである。 イニシエータスレッドの動作を表す一実施例のタイムチャートである。 本実施例の効果について説明する為のタイムチャートである。 本実施例の効果について説明する為の模式図である。 シミュレーションプロセスの構成を表した一例の説明図である。 初期化スレッドの処理の一例のフローチャートである。 ターゲットスレッドの処理の一例のフローチャートである。 処理スレッドの処理の一例のフローチャートである。 イニシエータスレッドの処理の一例のフローチャートである。 終了処理スレッドの処理の一例のフローチャートである。 Cレベルの関数を表した一例の構成図である。 Cレベルの関数を表した一例の構成図である。 Cレベルの関数を表した一例の構成図である。
次に、本発明を実施するための形態を、以下の実施例に基づき図面を参照しつつ説明していく。本実施例では、Loosely-Timed Modelに基づく分散シミュレーションに対応していないSystemVerilogやSystemCのようなSPに対して、SP間におけるデッドロックを回避するモデルを提供する。
図1は、分散シミュレーション環境の一例のシステム構成図である。図1に示した分散シミュレーション環境は、スケジューラ10と複数のSP11〜14とを有するように構成されている。複数のSP11〜14は並列動作することで、LSI回路システム全体のシミュレーションを実現するものである。
スケジューラ10は、グローバルなシミュレーション時刻を管理する。スケジューラ10は、各SP11〜14に対して、SP間通信機能を用いてシミュレーションの実行・停止を指示して、シミュレーション時刻の同期を司る。
各SP11〜14は、スケジューラ10からの指示に従って、自分が管轄するモデルのシミュレーションを行う。各SP11〜14はシミュレーション中に他のSPとデータの読み書きが必要な場合、PortというSP間通信機能を使って他のSPとデータの授受を行う。例えば図1のSP11とSP12とはPort#0を使ってデータの授受を行うことができる。
図2はLoosely-Timed Modelに基づく分散シミュレーションの一例のタイムチャートである。スケジューラ10は、SP11、12に対してQuantumと呼ばれるタイムスロット値を与え、SP11、12にQuantum期間分のシミュレーションを実行させる。なお、Quantum期間内でのイベント処理のスケジュールはSP11、12の裁量に任されるため、シミュレーションの自由度が増す。結果として、Loosely-Timed Modelに基づく分散シミュレーションは高速化される。
スケジューラ10の動作は、Quantum期間の最初でCmdContinueProc(シミュレーション継続命令)コマンドをSP11、12に渡す。SP11、12はCmdContinueProcコマンドを受け取ったらシミュレーションをQuantum期間だけ進める。Quantum期間中、SP11、12は他のSPとデータの授受が必要な場合、CmdWriteData(データ書き込み要求)コマンドか、CmdReadData(データ読み込み要求)コマンドを発行する。
そして、SP11、12は、シミュレーション時刻がQuantum期間の最後になるとシミュレーションを一時停止させて、ResContinueProc(シミュレーション完了)をスケジューラ10に通知する。スケジューラ10は、全てのSP11、12からResContinueProcが返ったことを確認後、グローバルなシミュレーション時刻を次のQuantum期間に進める。
ここでは、本実施例の理解を容易とするため、従来の問題について説明する。図3はSPのモデル構成を表した一例の模式図である。
SP12はシミュレーションカーネル(ローカルスケジューラ)21、ユーザモデル22を有する。ユーザモデル22はイニシエータスレッド23、ターゲットスレッド24を有する。従来のSystemVerilogやSystemCのようなSPは分散シミュレーションを考慮していない。
そこで、図3のSP12はシミュレーションカーネル21に手を入れることが困難なことから、SP間通信機能をユーザモデル22のイニシエータスレッド23、ターゲットスレッド24に組み込んでいる。
SystemVerilogやSystemCのようなSP12には、シミュレーション以外のホストOS機能(socket()、send()、recv()等のTCP/IP通信関数)を呼び出す機能がある。本実施例のSP12ではホストOS機能をイニシエータスレッド23、ターゲットスレッド24から呼び出すことを考える。
イニシエータスレッド23は他のSPへ(CmdWriteData、CmdReadData)コマンドを発行する。また、ターゲットスレッド24はスケジューラ10へResContinueProcを通知する。
ターゲットスレッド24はSP間通信に使われる(CmdContinueProc、CmdWriteData、CmdReadData)コマンドを待つ必要がある。また、SP12で実行されるシミュレーション上のイベントを待つ必要がある。
図4は図3のSP12のモデル構成において、SP11からのCmdWriteDataコマンドをSP12のターゲットスレッド24で処理する一例のタイムチャートである。SP12はトランザクション処理に掛かるシミュレーション時間を予測不能とする。
図4ではSP12のトランザクション処理に時間が掛かり、与えられたQuantum期間内にトランザクション処理が終わらない例を表している。もし、与えられたQuantum期間をシミュレーション時刻が越えてしまうと、SP12はResContinueProcをスケジューラ10に返せなくなる危険性がある。スケジューラ10にResContinueProcを返せなければ、SP12は結果的に分散シミュレーションのデッドロックを引き起こす。
さらに、SP11などの他のSPの動作を止めないため、SP12はトランザクション処理中も後続のCmdWriteDataコマンドを受け付ける必要がある。トランザクション処理中も後続のCmdWriteDataコマンドを受け付けなければ、SP12は、やはり分散シミュレーションのデッドロックを引き起こす。このように、従来、分散シミュレーションのSP12のターゲットスレッド24のモデル記述は難しい問題を持っていた。
そこで、本実施例の分散シミュレーションのSP12ではターゲットスレッド24とは別に、トランザクション処理を行うトランザクション処理スレッド(以下、処理スレッドと略称する)を設ける。ターゲットスレッド24はスケジューラ10及び他のSPからのSP間通信の受信と、Quantum期間の管理とに専念させる。なお、本実施例は処理実行単位がスレッドの例を示しているが、処理実行単位がタスクであってもよい。
ターゲットスレッド24は他のSPからCmdWriteDataコマンドかCmdReadDataコマンドを受け付けたら、処理スレッドを生成し、その処理スレッドにトランザクション処理を任せる。そして、ターゲットスレッド24は後続のCmdWriteDataコマンドかCmdReadDataコマンドの受け付けに備える。
処理スレッドは、ターゲットスレッド24に生成された後、ターゲットスレッド24から要求されたトランザクション処理を行い、要求元の他のSPへ返答する。その後、処理スレッドは自身を終了させる。
イニシエータスレッド23は他のSPへCmdWriteDataコマンドかCmdReadDataコマンドを発行する場合、CmdWriteDataコマンドかCmdReadDataコマンドにIDを付加して発行する。そして、イニシエータスレッド23は発行したCmdWriteDataコマンドかCmdReadDataコマンドの情報と、そのCmdWriteDataコマンドかCmdReadDataコマンドに付加したIDとを対応付け、ターゲットスレッド24に通知する。ターゲットスレッド24はイニシエータスレッド23の発行したCmdWriteDataコマンドかCmdReadDataコマンドの情報と、そのCmdWriteDataコマンドかCmdReadDataコマンドに付加したIDとを対応付けてテーブルに記憶する。
ターゲットスレッド24は他のSPからのCmdWriteDataコマンドかCmdReadDataコマンドの返答を一旦、受け取る。ターゲットスレッド24はテーブルを参照し、返答に記載されたIDに対応するCmdWriteDataコマンドかCmdReadDataコマンドの情報を得る。
そして、ターゲットスレッド24は得た情報を元に、CmdWriteDataコマンドかCmdReadDataコマンドを発行したイニシエータスレッド23にCmdWriteDataコマンドかCmdReadDataコマンドが完了した旨の通知を行う。また、CmdReadDataコマンドの返答(ResReadData)場合、ターゲットスレッド24は、指定された領域に読み込み結果のデータを格納する。
(システム構成)
図5は分散シミュレーション環境の一例のシステム構成図である。図5のシステムはスケジューラ用コンピュータ30と複数のシミュレーション用コンピュータ31〜33とがインターネットやLAN(Local Area Network:構内通信網)等のネットワーク34を介してデータ通信可能に接続されている。
スケジューラ用コンピュータ30はスケジューラ10を実行する。シミュレーション用コンピュータ31〜33は、例えばSP11〜14を実行する。なお、図5のシステムは3台のシミュレーション用コンピュータ31〜33の例を表しているが、3台以外の構成であってもよい。また、図5のシステムは仮想化プラットフォームを利用し、仮想化されたコンピュータ上でスケジューラ10及びSP11〜14を実行することにより実現してもよい。
(ハードウェア構成)
図6は、スケジューラ又はSPを実行するコンピュータの一例のハードウェア構成図である。図6のコンピュータは、バスBで相互に接続されている入力装置41,出力装置42,ドライブ装置43,補助記憶装置44,主記憶装置45,演算処理装置46及びインターフェース装置47を有する。
入力装置41はキーボードやマウス等である。入力装置41は、各種信号を入力するために用いられる。出力装置42はディスプレイ装置等である。出力装置42は、各種ウインドウやデータ等を表示するために用いられる。インターフェース装置47は、モデム又はLANカード等である。インターフェース装置47は、ネットワーク34に接続する為に用いられる。
本実施例のスケジューラ10は、スケジューラ用コンピュータ30を制御する各種プログラムの少なくとも一部である。本実施例のSP11〜14は、シミュレーション用コンピュータ31〜33を制御する各種プログラムの少なくとも一部である。スケジューラ10及びSP11〜14は例えば記録媒体48の配布やネットワーク34からダウンロードすることによって提供される。スケジューラ10及びSP11〜14を記録した記録媒体48はCD−ROM、フレキシブルディスク、光磁気ディスク等の様に情報を光学的,電気的或いは磁気的に記録する記録媒体、ROM、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記録媒体を用いることができる。
スケジューラ10を記録した記録媒体48がドライブ装置43にセットされると、スケジューラ10は、記録媒体48からドライブ装置43を介して補助記憶装置44にインストールされる。なお、ネットワーク34からダウンロードされたスケジューラ10はインターフェース装置47を介して、補助記憶装置44にインストールされる。補助記憶装置44はインストールされたスケジューラ10を格納すると共に、必要なファイル,データ等を格納する。
主記憶装置45は、スケジューラ10の起動時に補助記憶装置44からスケジューラ10を読み出して格納する。演算処理装置46は主記憶装置45に格納されたスケジューラ10に従って、後述するような各種処理を実現している。
SP11〜14を記録した記録媒体48がドライブ装置43にセットされると、SP11〜14は記録媒体48からドライブ装置43を介して補助記憶装置44にインストールされる。ネットワーク34からダウンロードされたSP11〜14は、インターフェース装置47を介して、補助記憶装置44にインストールされる。補助記憶装置44はインストールされたSP11〜14を格納すると共に、必要なファイル,データ等を格納する。
主記憶装置45は、SP11〜14の起動時に補助記憶装置44からSP11〜14を読み出して格納する。演算処理装置46は主記憶装置45に格納されたSP11〜14に従って、後述するような各種処理を実現している。
(処理手順)
図7はターゲットスレッドの動作を表す一実施例のタイムチャートである。図7は2つのSP11、12の例を表している。まず、ステップS1において、スケジューラ10はSP11、12に対してCmdContinueProcコマンドを渡す。CmdContinueProcコマンドを受け取ったSP11、12はシミュレーションをQuantum期間だけ進める。
ステップS2において、イニシエータプロセスであるSP11はCmdReadDataコマンドをターゲットプロセスであるSP12に対して発行する。CmdReadDataコマンドを発行した後、SP11はステップS3に進み、ブロックされる。ここで、ブロックとは発行したCmdReadDataコマンドが完了するまで制御が戻らないことをいう。
ステップS4において、SP12のターゲットスレッド24はコールバックルーティンのための処理スレッド25を生成することで、処理スレッド25にトランザクション処理を任せる。ステップS5において、処理スレッド25はCmdReadDataコマンドのコールバックルーティンを実行する。
もし、シミュレーション時刻がQuantum期間の最後になると、イニシエータプロセスであるSP11及びターゲットプロセスであるSP12のターゲットスレッド24はステップS6において、ResContinueProcをスケジューラ10に通知する。スケジューラ10はステップS7において、全てのSP(図7の例ではSP11、12)に対して、次のQuantum期間のCmdContinueProcコマンドを渡す。
ステップS8において、コールバックルーティンが終了したあと、処理スレッド25はイニシエータプロセスであるSP11に対して、CmdReadDataコマンドの返答である応答パケット(ResReadData)を返す。その後、処理スレッド25はステップS9において自身を終了させる。
シミュレーション時刻がQuantum期間の最後になると、イニシエータプロセスであるSP11及びターゲットプロセスであるSP12のターゲットスレッド24はステップS10において、ResContinueProcをスケジューラ10に通知する。
図8はイニシエータスレッドの動作を表す一実施例のタイムチャートである。図8は2つのSP11、12の例を表している。まず、ステップS21において、スケジューラ10はSP11、12に対してCmdContinueProcコマンドを渡す。CmdContinueProcコマンドを受け取ったSP11、12はシミュレーションをQuantum期間だけ進める。
ステップS22において、SP12のイニシエータスレッド23はIDを付加したCmdReadDataコマンドをSP11に対して発行する。さらに、SP12のイニシエータスレッド23は発行したCmdReadDataコマンドのコマンドパケットの情報と、そのCmdReadDataコマンドに付加したIDとを対応付け、ターゲットスレッド24に通知する。ステップS23において、ターゲットスレッド24はCmdReadDataコマンドのコマンドパケットの情報と、そのCmdReadDataコマンドに付加したIDとを対応付けてリクエストテーブルに登録する。なお、CmdReadDataコマンドをSP11に対して発行したあと、SP12のイニシエータスレッド23はステップS24において、ブロックされる。
ステップS25において、ターゲットプロセスであるSP11はCmdReadDataコマンドを受け付けると、コールバックルーティンを呼び出し、コールバックルーティンを実行する。もし、シミュレーション時刻がQuantum期間の最後になると、ターゲットプロセスであるSP11及びイニシエータプロセスであるSP12のターゲットスレッド24はステップS26において、ResContinueProcをスケジューラ10に通知する。スケジューラ10はステップS27において、全てのSP(図8の例ではSP11、12)に対して、次のQuantum期間のCmdContinueProcコマンドを渡す。
ステップS28において、コールバックルーティンが終了したあと、ターゲットプロセスであるSP11はイニシエータプロセスであるSP12のターゲットスレッド24に対して応答パケット(ResReadData)を返す。ターゲットスレッド24は、ステップS29において、応答パケットに記載されたIDに基づき、リクエストテーブルに登録されたコマンドパケットの情報から一致するものを見付ける。
ステップS30において、SP12のターゲットスレッド24はCmdReadDataコマンドが完了した旨と、ブロックされた状態から戻る旨とをイニシエータスレッド23に通知する。ターゲットスレッド24からの通知により、イニシエータスレッド23はブロックされた状態から元の状態に戻る。
シミュレーション時刻がQuantum期間の最後になると、ターゲットプロセスであるSP11及びイニシエータプロセスであるSP12のターゲットスレッド24はステップS31において、ResContinueProcをスケジューラ10に通知する。
図9は本実施例の効果について説明する為のタイムチャートである。本実施例のSP12ではターゲットスレッド24と処理スレッド25とを分離して動作させるため、トランザクション処理に時間が掛かる場合でも、常にターゲットスレッド24で他のSP(図9の例ではSP11)からのCmdWriteData(データ書き込み要求)コマンド又はCmdReadData(データ読み込み要求)コマンドを受け付けることが可能となる。
図9の例では「データ1読み込み要求」のトランザクション処理中であっても「データ2読み込み要求」をターゲットスレッド24で受け付けることができる。すなわち、SP11が発行するCmdWriteDataコマンド又はCmdReadDataコマンドなどのトランザクション要求はSP12によって待たされることが無い。また、トランザクションの返答であるトランザクション応答は、処理スレッド25での実行によってSP11が確実に受け取れる。したがって、分散シミュレーションはデッドロックに陥る危険性が大幅に少なくなる。
図10は本実施例の効果について説明する為の模式図である。例えば図10のSP12特有の処理は、トランザクション処理用のコールバックルーティン26にカプセル化することが可能である。
SP12特有の処理をコールバックルーティン26にカプセル化できるため、図10のSP12はSP毎にターゲットスレッド24を記述し直すことなく、ターゲットスレッド24にSP間通信の受信と、Quantum期間の管理とに専念させて、SP間通信に起因するデッドロックを回避できる。
シミュレーションプロセスは、図11に示すような、初期化スレッド27、ターゲットスレッド24、処理スレッド25、イニシエータスレッド23、終了処理スレッド28の5つのパーツから成り立つ。図11はシミュレーションプロセスの構成を表した一例の説明図である。なお、図11に示したターゲットスレッド24、処理スレッド25、イニシエータスレッド23はシミュレーションプロセスで並行して実行される。
初期化スレッド27は後述のプロキシサーバへ接続する。ターゲットスレッド24はターゲットデバイスとして動作し、受け付けるパケットの全てを取り扱う。処理スレッド25はコールバックルーティン26を実行する為のスレッドとして、ターゲットスレッド24により生成される。
イニシエータスレッド23はイニシエータデバイスとして動作し、CmdWriteDataコマンド又はCmdReadDataコマンドのコマンドパケットを送る。終了処理スレッド28は後述のプロキシサーバとの接続を終了する。
なお、以下の実施例の説明ではデータ構造の一例として、Cレベルのデータ構造を例として説明する。本実施例ではデータ構造としてパケット(Packet)、ソケット(Socket)及びポート(Port)を利用している。
実際のパケットはPacket_CmdXXXまたはPacket_ResYYYのようなパケットタイプに特有の構造を有している。しかし、全てのパケットはデータ要素が同じくセットされたパケットヘッダを有するため、パケットヘッダを利用することで全てのパケットのポインタを照会できる。
それぞれのシミュレーションプロセスは、ただ一つのソケットを持つ。入ってくるパケットの全てはソケットに到着する。スケジューラ10に対して出て行くパケットの全てもソケットが使われる。ソケットは一つ以上のポートを持つ。CmdWriteDataコマンド又はCmdReadDataコマンドのコマンドパケットはポートから送られる。
図12は初期化スレッドの処理の一例のフローチャートである。ステップS51では初期化スレッド27がスケジューラ10とのコネクションをオープンする。具体的に、初期化スレッド27はOpen関数を用いてソケットを生成する。Open関数には引数としてproxyServer及びtcpPortを指定する。例えば初期化スレッド27はproxyServerにスケジューラ10を指定し、tcpPortにスケジューラ10のTCPポートを指定することによりスケジューラ10とのコネクションをオープンできる。
ステップS52では初期化スレッド27が、データを読み/書きする為のポートを生成する。具体的に、初期化スレッド27はNewPort関数を用いてデータを読み/書きする為のポートを生成する。NewPort関数には引数としてsocket及びConnNameを指定する。例えば初期化スレッド27はsocketにステップS51で生成したソケットを指定し、ConnNameに接続名を指定することによりポートを生成できる。
それぞれのポートにはConnNameにより指定された接続名が与えられる。ConnNameにより指定された接続名は、全てのシミュレーションプロセスの中の1つとグローバルに結び付けるため、同じ接続名のポートとなる。同じ接続名のポートはスケジューラ10によって接続される。
ステップS53では初期化スレッド27がシミュレーションプロセスに処理の開始を準備させる。具体的に、初期化スレッド27はStartProc関数を用いてシミュレーションプロセスに処理の開始を準備させる。StartProc関数には引数としてsocketを指定する。例えば初期化スレッド27はsocketにステップS51で生成したソケットを指定することにより、シミュレーションプロセスに処理の開始を準備させることができる。なお、シミュレーションプロセスのポートの情報はスケジューラ10に通知される。この後、シミュレーションプロセスはCmdContinueProcコマンドをスケジューラ10から受信すると、ResStartProcを送り返したあと、処理を開始できる。
図13はターゲットスレッドの処理の一例のフローチャートである。図13の処理は初期化スレッド27による初期化のあと、繰り返し行われる。
ステップS61に進み、ターゲットスレッド24はブロッキングの方法でパケットの受信を待つ。具体的に、ターゲットスレッド24はRecvPacket関数を用いて、ブロッキングの方法でsocketからパケットの受信を待つ。RecvPacket関数には引数としてsocket及びブール変数blockingを指定する。
例えばターゲットスレッド24はsocketにステップS51で生成したソケットを指定し、ブール変数blockingにtrueを指定することにより、指定したソケットにパケットが来るまでブロッキングの方法で待つことができる。
ステップS62において、ターゲットスレッド24は指定したソケットに来たパケットのパケットタイプがコマンドパケットか否かを判定する。コマンドパケットであると判定すると、ターゲットスレッド24はステップS63に進み、指定したソケットに来たコマンドパケットを受け取り、そのコマンドパケットのパケットタイプがCmdContinueProcコマンドか否かを判定する。
CmdContinueProcコマンドであると判定すると、ターゲットスレッド24はステップS64に進み、remain_timeを求める。remain_timeはCmdContinueProcコマンドを受信した次のQuantum期間の開始時刻から現在のシミュレーション時刻を引くことで算出できる。
ステップS65に進み、ターゲットスレッド24は、シミュレーション時刻を例えばステップS64で算出したremain_timeだけ待ったあとで進ませる。ステップS66に進み、ターゲットスレッド24はResContinueProcをスケジューラ10に通知する。具体的に、ターゲットスレッド24はSend_ResContinueProc関数を用いてResContinueProcをスケジューラ10に通知する。Send_ResContinueProc関数には引数としてsocketを指定する。例えばターゲットスレッド24はsocketにステップS51で生成したソケットを指定することによりResContinueProcをスケジューラ10に通知できる。
ステップS67に進み、ターゲットスレッド24は指定したソケットに来たパケットを削除する。具体的に、ターゲットスレッド24はDelPacket関数を用いて、指定したソケットに来たパケットを削除する。DelPacket関数には引数としてPacketを指定する。例えばターゲットスレッド24はPacketに、指定したソケットに来たパケット(rpkt)を指定することで、指定したソケットに来たパケットを削除すると共に、そのパケットに割り当てたメモリを解放する。
ステップS63においてCmdContinueProcコマンドでないと判定すると、ターゲットスレッド24は指定したソケットに来たパケット(rpkt)の為の処理スレッド25を生成する。
ステップS62において、コマンドパケットでないと判定すると、ターゲットスレッド24はステップS68に進み、指定したソケットに来た応答パケットを受け取り、その応答パケットが、イニシエータスレッド23によって送られたコマンドパケットと一致するかを調べる。
具体的に、ターゲットスレッド24はFindPacketEntry関数を用いることで、応答パケットが、イニシエータスレッド23によって送られたコマンドパケットと一致するかを調べる。FindPacketEntry関数は引数としてsocket及びpacketIdを指定する。
例えばターゲットスレッド24はsocketにステップS51で生成したソケットを指定し、packetIdに応答パケットに記載されたIDを指定することで、リクエストテーブルから応答パケットに一致するコマンドパケットの登録を見つけることができる。
そして、ステップS69に進み、ターゲットスレッド24は応答パケットのための処理を行う。ステップS70に進み、ターゲットスレッド24はリクエストテーブルから応答パケットに一致するコマンドパケットの情報の登録を削除する。具体的に、ターゲットスレッド24はDelPacketEntry関数を用いることで、リクエストテーブルから応答パケットに一致するコマンドパケットの情報の登録を削除する。
DelPacketEntry関数は引数としてsocket及びent0を指定する。例えばターゲットスレッド24はsocketにステップS51で生成したソケットを指定し、ent0にステップS68で見つけた登録(エントリ)を指定することで、リクエストテーブルから応答パケットに一致するコマンドパケットの情報の登録を削除できる。
ステップS71に進み、ターゲットスレッド24は指定したソケットに来たパケットをステップS67と同様に削除する。ステップS72に進み、ターゲットスレッド24はトランザクション処理の終了をイニシエータスレッド23に通知する。
図14は、処理スレッドの処理の一例のフローチャートである。ステップS81ではブロッキングされたトランザクションのコールバックルーティンの処理命令により、コールバックルーティンが処理スレッド25で実行される。処理スレッド25はターゲットスレッド24により受信されたパケット(rpkt)をパスされる。
ステップS82に進み、処理スレッド25はパケット(rpkt)に対応するポートを得てport1とする。ステップS83に進み、処理スレッド25は応答パケットタイプの新しいパケット(spkt)を生成する。具体的に、処理スレッド25はNewPacket関数を用いて応答パケットタイプの新しいパケット(spkt)を生成する。NewPacket関数には引数としてPacketTypeを指定する。例えば処理スレッド25はPacketTypeにResPacketTypeを指定することにより応答パケットタイプの新しいパケット(spkt)を生成できる。
ステップS84に進み、処理スレッド25は新しいパケット(spkt)に記載させるpacketIdを、パケット(rpkt)からコピーしたpacketIdとする。つまり、処理スレッド25はパケット(rpkt)及びパケット(spkt)に記載させるpacketIdを同じにする。
ステップS85に進み、処理スレッド25は新しいパケット(spkt)をport1から送信する。具体的に、処理スレッド25はSendPacket関数を用いることで新しいパケット(spkt)をport1から送信できる。SendPacket関数は引数としてport及びpacketを指定する。処理スレッド25はportにport1を指定し、packetに新しいパケット(spkt)を指定することで、新しいパケット(spkt)をport1から送信できる。
ステップS86に進み、ターゲットスレッド24は新しいパケット(spkt)をステップS67と同様に削除する。また、ステップS87に進み、ターゲットスレッド24はターゲットスレッド24により受信されたパケット(rpkt)をステップS67と同様に削除する。
図15はイニシエータスレッドの処理の一例のフローチャートである。イニシエータスレッド23は、シミュレーションプロセスが他のシミュレーションプロセスとデータの読み書きが必要なとき、CmdWriteDataコマンド又はCmdReadDataコマンドのコマンドパケットの情報を送信する。
初期化スレッド27による初期化のあと、イニシエータスレッド23はステップS91に進み、コマンドパケットタイプの新しいパケット(spkt2)を生成する。具体的に、イニシエータスレッド23はNewPacket関数を用いてコマンドパケットタイプの新しいパケット(spkt2)を生成する。NewPacket関数には引数としてPacketTypeを指定する。例えばイニシエータスレッド23はPacketTypeにCmdPacketTypeを指定することによりコマンドパケットタイプの新しいパケット(spkt2)を生成できる。
ステップS92に進み、イニシエータスレッド23は新しいパケット(spkt2)をport2から送信する。具体的に、イニシエータスレッド23は、SendPacket関数を用いることでステップS85と同様、新しいパケット(spkt2)をport2から送信できる。
ステップS93に進み、イニシエータスレッド23は新しいパケット(spkt2)を送信したあと、パケットエントリテーブルに登録する。このため、ターゲットスレッド24は一致する応答パケットを待つことができる。具体的に、イニシエータスレッド23はAddPacketEntry関数を用いて、新しいパケット(spkt2)をパケットエントリテーブルに登録する。AddPacketEntry関数は引数としてsocket及びPacketIdを指定する。
例えばイニシエータスレッド23はsocketにステップS51で生成したソケットを指定し、PacketIdに新しいパケット(spkt2)のPacketIdを指定することにより、新しいパケット(spkt2)をパケットエントリテーブルに登録できる。
ステップS94に進み、イニシエータスレッド23はパケットエントリテーブルのent2に登録されたパケットをspkt2とする。ステップS95に進み、イニシエータスレッド23はイベントがあるまで待機する。ステップS96に進み、イニシエータスレッド23はステップS86と同様、新しいパケット(spkt2)を削除する。
図16は終了処理スレッドの処理の一例のフローチャートである。ステップS100において、終了処理スレッド28はプロキシサーバとのコネクションをクローズし、割り当てていたリソースを開放する。具体的に、終了処理スレッド28はClose関数を用いてコネクションのクローズ、リソースの開放を行う。Close関数には引数としてsocketを指定する。例えば終了処理スレッド28はsocketにステップS51で生成したソケットを指定することにより、プロキシサーバとの間にオープンしてソケット、全てのポートをクローズできる。
図12〜図16に示したフローチャートの処理では様々な関数が利用されている。例えば関数はAPI(Application Program Interface)として提供される。ここでは一例としてCレベルの関数を図17〜図19に、参考として示しておく。図17〜図19はCレベルの関数を表した一例の構成図である。
本実施例におけるシミュレーションプログラムはパッケージソフトの他、WEBサービス等によっても提供可能である。
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。なお、特許請求の範囲に記載した処理実行単位はスレッドやタスク等である。
10 スケジューラ
11〜14 シミュレーションプログラム(SP)
21 シミュレーションカーネル(ローカルスケジューラ)
22 ユーザモデル
23 イニシエータスレッド
24 ターゲットスレッド
25 処理スレッド
26 コールバックルーティン
27 初期化スレッド
28 終了処理スレッド
30 スケジューラ用コンピュータ
31〜33 シミュレーション用コンピュータ
34 ネットワーク
41 入力装置
42 出力装置
43 ドライブ装置
44 補助記憶装置
45 主記憶装置
46 演算処理装置
47 インターフェース装置
48 記録媒体
B バス

Claims (5)

  1. スケジューラと他のシミュレーションプログラムと通信してシミュレーションを分散して実行するシミュレーションプログラムであって、
    コンピュータに、
    前記スケジューラから継続命令を受けると、処理を再開し、一定時間経過したら該処理を停止して前記スケジューラに停止を通知し、
    前記他のシミュレーションプログラムからデータの読み込み要求又は書き込み要求を受けると、該データの読み込み要求又は書き込み要求を処理する処理実行単位を生成する、
    処理を実行させ、
    生成された前記処理実行単位は、前記データの読み込み要求又は書き込み要求を処理する、
    シミュレーションプログラム。
  2. 前記処理実行単位は、前記データの読み込み要求又は書き込み要求を終了すると、終了の通知を前記他のシミュレーションプログラムに通知する、
    請求項1記載のシミュレーションプログラム。
  3. スケジューラと他のシミュレーションプログラムと通信してシミュレーションを分散して実行するシミュレーションプログラムであって、
    コンピュータに、
    前記スケジューラから継続命令を受けると、処理を再開し、一定時間経過したら該処理を停止して前記スケジューラに停止を通知し、
    前記他のシミュレーションプログラムへデータの読み込み要求又は書き込み要求を発行するとき、該データの読み込み要求又は書き込み要求に識別子を付加して発行し、
    前記他のシミュレーションプログラムからデータの読み込み要求又は書き込み要求の応答を受ける処理実行単位に、前記他のシミュレーションプログラムへ発行した前記データの読み込み要求又は書き込み要求と、該データの読み込み要求又は書き込み要求に付加した識別子との対応を通知し、
    前記他のシミュレーションプログラムへ発行した前記データの読み込み要求又は書き込み要求と、該データの読み込み要求又は書き込み要求に付加した識別子との対応に応じて前記他のシミュレーションプログラムからデータの読み込み要求又は書き込み要求の応答を受けた処理実行単位から、前記他のシミュレーションプログラムへ発行した前記データの読み込み要求又は書き込み要求の処理が完了した旨を通知される
    処理を実行させる、
    シミュレーションプログラム。
  4. スケジューラと他のシミュレーションプログラムと通信してシミュレーションを分散して実行するシミュレーション装置であって、
    前記スケジューラから継続命令を受けると、処理を再開し、一定時間経過したら該処理を停止して前記スケジューラに停止を通知する手段と、
    前記他のシミュレーションプログラムからデータの読み込み要求又は書き込み要求を受けると、該データの読み込み要求又は書き込み要求を処理する処理実行単位を生成する手段とを有し、
    生成された前記処理実行単位は、前記データの読み込み要求又は書き込み要求を処理する、
    シミュレーション装置。
  5. スケジューラと他のシミュレーションプログラムと通信してシミュレーションを分散して実行するシミュレーション方法であって、
    コンピュータが、
    前記スケジューラから継続命令を受けると、処理を再開し、一定時間経過したら該処理を停止して前記スケジューラに停止を通知し、
    前記他のシミュレーションプログラムからデータの読み込み要求又は書き込み要求を受けると、該データの読み込み要求又は書き込み要求を処理する処理実行単位を生成する、
    処理を実行させ、
    生成された前記処理実行単位は、前記データの読み込み要求又は書き込み要求を処理する、
    シミュレーション方法。
JP2010205978A 2010-09-14 2010-09-14 シミュレーションプログラム、シミュレーション装置及びシミュレーション方法 Withdrawn JP2012063872A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010205978A JP2012063872A (ja) 2010-09-14 2010-09-14 シミュレーションプログラム、シミュレーション装置及びシミュレーション方法
US13/067,612 US20120065953A1 (en) 2010-09-14 2011-06-14 Computer-readable, non-transitory medium storing simulation program, simulation apparatus and simulation method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010205978A JP2012063872A (ja) 2010-09-14 2010-09-14 シミュレーションプログラム、シミュレーション装置及びシミュレーション方法

Publications (1)

Publication Number Publication Date
JP2012063872A true JP2012063872A (ja) 2012-03-29

Family

ID=45807551

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010205978A Withdrawn JP2012063872A (ja) 2010-09-14 2010-09-14 シミュレーションプログラム、シミュレーション装置及びシミュレーション方法

Country Status (2)

Country Link
US (1) US20120065953A1 (ja)
JP (1) JP2012063872A (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9423961B2 (en) * 2014-09-08 2016-08-23 Apple Inc. Method to enhance programming performance in multilevel NVM devices
CN113867922B (zh) * 2021-12-02 2022-02-22 武汉格蓝若智能技术有限公司 一种适用于互感器计量性能在线监测系统的任务调度方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6339836B1 (en) * 1998-08-24 2002-01-15 Mentor Graphics Corporation Automated design partitioning
US6263302B1 (en) * 1999-10-29 2001-07-17 Vast Systems Technology Corporation Hardware and software co-simulation including simulating the cache of a target processor
US6230114B1 (en) * 1999-10-29 2001-05-08 Vast Systems Technology Corporation Hardware and software co-simulation including executing an analyzed user program
US6751583B1 (en) * 1999-10-29 2004-06-15 Vast Systems Technology Corporation Hardware and software co-simulation including simulating a target processor using binary translation
US7197745B2 (en) * 2003-05-02 2007-03-27 Microsoft Corporation User debugger for use on processes running in a high assurance kernel in an operating system
US20090150136A1 (en) * 2005-10-10 2009-06-11 Sei Yang Yang Dynamic-based verification apparatus for verification from electronic system level to gate level, and verification method using the same
US7756695B2 (en) * 2006-08-11 2010-07-13 International Business Machines Corporation Accelerated simulation and verification of a system under test (SUT) using cache and replacement management tables
JP2011134275A (ja) * 2009-12-25 2011-07-07 Fujitsu Ltd スケジューラプログラム、分散シミュレーションシステム及びスケジューラ装置

Also Published As

Publication number Publication date
US20120065953A1 (en) 2012-03-15

Similar Documents

Publication Publication Date Title
US11210745B2 (en) Method and system for providing inter-cloud services
US10042628B2 (en) Automated upgrade system for a service-based distributed computer system
TWI520072B (zh) 計算環境之資料網路之管理之方法、系統及其電腦程式
US10212045B2 (en) Method and system for testing and analyzing management servers
CN102567074B (zh) 一种面向虚拟机的usb设备重定向方法
TW201232416A (en) Unified resource manager providing a single point of control
WO2017049945A1 (zh) 加速器虚拟化的方法、装置及集中资源管理器
US7886292B2 (en) Methodology of individualized software deployment for hardware-independent personal computer mass development
US20110161947A1 (en) Virtual machine maintenance with mapped snapshots
WO2017190357A1 (zh) 一种网络功能实例的管理方法及相关设备
US20170005873A1 (en) Management of cloud-computing facility through a virtual infrastructure management server
TWI531958B (zh) 雲端計算之大型儲存虛擬化
TW201232415A (en) Integration of heterogeneous computing systems into a hybrid computing system
WO2022143714A1 (zh) 服务器系统、虚拟机创建方法及装置
WO2023202179A1 (zh) 容器热迁移方法及容器热迁移装置
WO2011020353A1 (zh) 仿真方法及系统
Chang et al. On construction and performance evaluation of a virtual desktop infrastructure with GPU accelerated
US9710575B2 (en) Hybrid platform-dependent simulation interface
WO2014000437A1 (zh) 分布式虚拟化系统的虚拟中断管理方法及装置
CN112764981B (zh) 一种协同测试系统及方法
JP2012063872A (ja) シミュレーションプログラム、シミュレーション装置及びシミュレーション方法
JP5993835B2 (ja) マルチノードを用いるスマート端末ファジング装置およびその方法
TWI498750B (zh) Method and system of intelligent cloud migration
KR101811317B1 (ko) 하나의 물리적 서버를 이용한 웹 기반 시뮬레이션 실행을 위한 독립 플랫폼
CN109445966A (zh) 事件处理方法、装置、介质和计算设备

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130702

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20131212