TLM2.0:テンポラリデカップリング記述(Quantum Keeper)

前回のblogにて、シミュレーションを高速化するために
Direct Memory Interface(DMI)を使うという話でしたが、
高速化の手法として「テンポラリデカップリング」を使う方法もあります。

ある期間(set_global_quantum)を設けて、一気に wait(sync)することで、
wait(シミュレーション時間の経過)の回数を少なくするというものです。

Initiator;quantum期間を指定


31|    SC_CTOR( lt_initiator )
32|        : initiator_socket("initiator_socket")
33|    {
34|        SC_THREAD( process );
35|        initiator_socket.bind( *this );
36|#ifdef QUANTUM
37|        m_quantumkeeper.set_global_quantum(sc_time(100,SC_US));
38|        m_quantumkeeper.reset();
39|#endif
40|    }

Initiator:通信後(例:b_transport)に時間更新判断


101|    sc_time delay = SC_ZERO_TIME;
102|#ifdef QUANTUM
103|    delay = m_quantumkeeper.get_local_time();
104|#endif
105|
106|    initiator_socket->b_transport(*trans, delay);
107|
108|    if(trans->get_response_status() != tlm::TLM_OK_RESPONSE) {
109|        sc_stop();
110|    }
111|    
112|#ifdef QUANTUM
113|    m_quantumkeeper.set(delay);
114|    if (m_quantumkeeper.need_sync()) {
115|        std::cout << "Syncing..." << std::endl;
116|        m_quantumkeeper.sync();
117|    }
118|#else
119|    wait(delay);
120|#endif

こちらもシミュレーション時間は測定してものの
少しの時間しか流れないシミュレーションは特に差分は見えなかったです。
■シミュレーション概要
latency = 10 ns
total simulation time = 200us
■シミュレーション結果
 ○ Timing anotation(毎回waitを実行())
  real 0m0.148s
  user 0m0.072s
  sys  0m0.032s

 ○ Quantum time(global_qantum:1us)
  real 0m0.144s
  user 0m0.068s
  sys  0m0.036s
  
 ○ Quantum time(global_qantum:2us)
  real 0m0.137s
  user 0m0.084s
  sys  0m0.016s
  
 ○ Quantum time(global_qantum:5us)
  real 0m0.138s
  user 0m0.064s
  sys  0m0.032s
  
 ○ Quantum time(global_qantum:10us)
  real 0m0.149s
  user 0m0.084s
  sys  0m0.024s
今回のソースはこちらのGitHubのほうに置いてあります。
GitHub:systems/tutor_test/007_tlm2_quantum
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数