現在の位置
backup プラグインを使用中
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 仕様/その他/リソースの生成と接続 へ行く。
- 1 (2009-08-25 (火) 22:17:20)
- 2 (2009-08-28 (金) 21:51:27)
はじめに †
- "リソース"とは,ここでは物理的な資源(演算器,レジスタetc)を実装したクラスのオブジェクトを指す
- Thread 等の一部例外はある
- Thread は,物理的には対応するものが存在しない)
- Thread 等の一部例外はある
- リソースの生成と接続は,全てXML 上に記述された定義に従って統一的に行われる
- このページでは,以下の情報についてまとめる
- 鬼斬のリソース生成・接続システムに対応したクラスの実装方法
- 生成と接続の情報の定義
リソースの実装方法 †
- リソースを実現するクラスの実装方法
- 関連する実装はSim/Resource 内にある
PhysicalResourceNode の継承 †
パラメータ・マップの定義 †
- リソースの入力パラメータやシミュレーション結果とXMLのマッピングを定義する
- 以下は典型的なパラメータ・マップの例(Fetcher から抜粋)
C++ソース:
class Fetcher : public PhysicalResourceNode { int m_fetchWidth; int m_numFetchedOp; public: BEGIN_PARAM_MAP("") BEGIN_PARAM_PATH( GetParamPath() ) PARAM_ENTRY( "@FetchWidth", m_fetchWidth ) END_PARAM_PATH() BEGIN_PARAM_PATH( GetResultPath() ) PARAM_ENTRY( "@NumFetchedOp", m_numFetchedOp ) END_PARAM_PATH() END_PARAM_MAP() }
XML:
<Parameter> <Fetcher Name = 'fetcher' FetchWidth = '4' /> ... </Parameter>
パスの取得 †
- PhysicalResourceNode を継承したクラスでは,入出力パラメータの位置は自動的に決まる
- GetParamPath ()
- そのクラスのパラメータのパスを取得
- GetResultPath ()
- そのクラスの結果のパスを取得
リソース接続マップの定義 †
- 参照変数とXML上での名前のマッピングを定義する
- 具体的には,以下の3つのマッピングを行う
- 参照変数の型名
- リソースの型名
- C++ソース/XML 上で共通の名前を使用
- XML上での名前
- XML上から参照される際の変数名
- XML上でのみ使用
- リソース上の変数名
- 他のリソースへの参照を保持する変数の名前
- 参照変数の型名
書式 †
BEGIN_RESOUCE_MAP() RESOUCE_ENTRY( "参照変数の型名","XML上での名前", "リソース上の変数名" ) RESOUCE_SETTER_ENTRY( "参照変数の型名","XML上での名前", "Setterの名前" ) END_RESOUCE_MAP()
- リソース上の変数を配列としたい場合(Coreが複数のThread を持つとか),以下の方法がある
例 †
リソースの実装:
class Fetcher : public PhysicalResourceNode { CacheIF* m_iCache; public: BEGIN_RESOUCE_MAP() RESOUCE_ENTRY( CacheIF, "iCache", m_iCache ) END_RESOUCE_MAP() ... }
XML:
<Fetcher Name= 'fetcher'> <Cache Name = 'cacheL1I' To = 'iCache' /> </Fetcher>
上記の例の場合,
- Cache 型の cacheL1Iと言うリソースが,
- Fetcher型のfetcherが持つ
- CacheIF型のm_iCache に代入される
XML上の"Fetcher::iCache"と,C++上での"CacheIF* Fetcher::m_iCache"のバインドを行っているとも考えられる
リソース型情報マップへのクラスの登録 †
書式 †
- RESOUCE_INTERFACE_ENTRY(インターフェース名)
- インターフェース(抽象クラス)を登録する際に使用
- RESOUCE_TYPE_ENTRY(クラス名)
- クラスを登録する際に使用
- 例:
BEGIN_RESOUCE_TYPE_MAP() RESOUCE_INTERFACE_ENTRY(EmulatorIF); RESOUCE_TYPE_ENTRY(CheckpointMaster) END_RESOUCE_TYPE_MAP()
生成・接続情報XMLのフォーマット †
- リソースの生成と接続の情報は,Simulator/Configurations/ 以下のノードで定義される
- 以下では,このノードからトップダウンに各ノードの説明を行う
<Configurations> †
- 複数の定義ノード(名前は任意)を子に持つ
- 複数の定義ノードのうち,Simulator/@Configuration で指定されたノードが実際に使用される
- デフォルトでは"DefaultConfiguration "が使用される
- 外部からリソースの生成方法を変更したい場合は,新しい定義ノードを作成し,Simulator/@Configuration で指定すれば良い
- 以下はデフォルトの状態の抜粋
<Simulator Configuration='DefaultConfiguration'> <Configurations> <DefaultConfiguration> <Constant> ... /> <Structure> ... </Structure> <Parameter> ... </Parameter> </DefaultConfiguration> </Configurations> ... </Simulator>
<DefaultConfiguration >(定義ノード) †
- ここでは便宜上,定義ノードを<DefaultConfiguration >とする
- <DefaultConfiguration >は以下の要素を持つ
- <Constant>
- リソース生成時に使用する定数を定義
- <Structure>
- リソースの生成と接続方法を記述
- <Parameter>
- リソースに与える初期化パラメータを記述
- <Constant>
<Constant> †
- <Structure>内でリソースの生成数を指定する際に使用する定数を定義する
- デフォルトでは以下の3つが定義されている
- Copy についてはStructure ノード内の説明を参照
- 以下はデフォルトの状態の抜粋
<Constant ThreadCount='1' CoreCount='1' MemoryCount='1' />
<Structure> †
- リソースの生成と接続の方法を定義する
- Copy以下の入れ子の構造が仮想的にCopy の個数分存在していると考える
- 後述の例を参照
- 適当な説明ですいません
<Structure> <Copy Count='ThreadCount'> <リソースのクラス名 Name='リソースのインスタンス名' Count='リソースの生成数'/> ... </Copy> </Structure>
生成 †
- Name 属性で指定された名前で,Count 属性で指定された個数のリソースを生成
<リソースのクラス名 Name='リソースのインスタンス名' Count='リソースの生成数'/>
接続 †
- あるリソースが他のリソースを持つ構造を,XMLの入れ子によって表現
- '親'の持つ接続先変数に対し,子を接続する
<親クラス名 Name='親クラスのインスタンス名'> <子クラス名 Name='子クラスのインスタンス名' To='接続先の変数名'/> </親クラス名>
- '親'の持つ接続先変数に対し,子を接続する
- 例
- 以下の例の場合,Parent クラスのparent.m_child にChild クラスのオブジェクトchild を接続する
- parent.m_child <= child
<Parent Name='parent'> <Child Name='child' To='m_child'> </Parent>
- 備考
- 入れ子は再帰的に持つことも可能
- To属性は省略可能.その場合,Name属性と同名の要素に対して接続が行われる
- Count 属性を指定することにより,接続と生成を同時に定義することも可能
- 生成は行わずに接続だけを行う場合,子クラス名ではなく<Connection> を使用することも出来る.属性の構文は同じ
例 †
- 以下の定義が存在した場合,図のようにリソースが生成,接続される
<Copy Count='4'> <Core Count='2'> <Thread Count='4'> <L1Cache Count='2'> <L2Cache Count='1'/> </L1Cache> </Thread> </Core> </Copy>
<Parameter> †
- リソースの初期化パラメータを定義する
<Parameter> <リソースの型 Name = 'リソースのインスタンス名' パラメータ名 = '値' /> </Parameter>
- 例については,前述のパラメータ・マップの定義の項を参照