Table of Contents |
はじめに †
- "リソース"とは,物理的な資源(演算器,レジスタetc)を実装したクラスのオブジェクトを指す
- Thread(ハードウェアスレッド) 等の一部例外はある
- リソースの生成と接続は全てXML 上の定義に従って行われる
- このページでは,以下の情報についてまとめる
- 鬼斬のリソース生成・接続システムへの対応方法
- 生成・接続情報の定義
リソースの実装方法 †
リソースの実装手順は以下の通りである.本節ではこれらについて詳しく述べる.
- 備考:リソースの生成や接続に関連する実装はSim/Resource 内にある
PhysicalResourceNode の継承と関連メソッドの定義 †
- Sim/ResourceNode .h内のPhysicalResourceNode を継承する
- LoadParam ()/ReleaseParam () をそれぞれコンストラクタとデストラクタで呼ぶ
- 後で述べるパラメータ・マップ経由でパラメータの読み出しと保存が行われる
- Initialize(InitPhase phase) を実装する
- このメソッドは初期化の段階に応じて複数回呼ばれる
- phaseはINIT_PRE_CONNECTION/INIT_POST_CONNECTION が渡される
- INIT_PRE_CONNECTION :オブジェクトが生成された直後のタイミング
- INIT_POST_CONNECTION :全てのオブジェクトの接続が完了した後のタイミング.
- Finalize() を実装する
- このメソッドは,全てのオブジェクトが解放される直前のタイミングで呼ばれる.
- このメソッドが呼ばれた時点では接続されている全てのリソースはまだ生きているため,それらを参照した終了処理を行うことができる
パラメータ・マップの定義 †
- リソースの入力パラメータやシミュレーション結果と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>
パスの取得 †
リソース接続マップの定義 †
- C++上のオブジェクトへのポインタ変数と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>
- 例については,前述のパラメータ・マップの定義の項を参照
添付ファイル一覧
- 添付ファイル: structure.png 874件
[詳細]
- 関連ページ
- 設定/マルチコア・マルチスレッド実行1280日前
- 設定/XMLノードのリファレンス/Session/Simulator1280日前
- 仕様/環境/ParamDB1280日前
- チュートリアル/やりたいこと別インデックス1280日前
ツールボックス
メニュー
最新の20件
最新の20件
2022-12-31
2022-09-24
2022-01-26
2019-09-17
2019-07-11
2018-07-12
2018-05-09
2018-02-07
2017-10-27
2017-10-15
2017-05-01
2017-03-27
2015-12-24