672 Views
August 25, 24
スライド概要
この資料では、箱庭時間同期について説明します。
・シミュレーション時間と時間同期の背景
・既存の時間同期方式
・箱庭の時間同期方式
・箱庭コア機能の時間同期設計
TOPPERS/箱庭WG活動でUnityやらAthrillやらmROSやら触ってます。 最近は仕事の関係でWeb系の技術に注力しつつ、箱庭への転用を模索しています。 2023年8月1日:合同会社箱庭ラボに移動しました
箱庭(Hakoniwa) Time 合同会社箱庭ラボ 森崇、平鍋 2024/9/26
シミュレーション時刻と時刻同期の背景 2 • はじめに • 様々なシミュレータが混在を許す環境を想像してみてください • 各シミュレータはそれぞれ固有のシミュレーション時間を持ちます • どんな問題が起きる? • 各シミュレータが独立して動作するとシミュレーション実行タイミングがズレてしまいます • 何があれば良いか? • 全てのシミュレータが時間同期できる機能が必要ですね シミュレーション時間同期 シミュレーション時間1 シミュレーション時間2 シミュレーション時間3 シミュレータ1 シミュレータ2 シミュレータ3
シミュレーション時刻と時刻同期の背景 3 数学的証明文書用 Simulation Time Synchronization (Hakoniwa Core) Simulation Time T1 Simulation Time T2 Simulation Time T3 Simulator1 (Asset 1) Simulator 2 (Asset 2) Simulator 2 (Asset 3)
既存の時間同期方式 4 • FMI(Functional Mock-up Interface) • 欧州の公的プロジェクトが規格化 • シミュレーションツールに依存しないモデル接続のための共通インターフェース • FMIのシミュレーション時間同期方式 • ME(Model Exchange) FMI tool1 tool2 tool3 supplier1 supplier2 supplier3 • 完全に時間同期が可能 • CS(Co-Simulation) • シミュレータ間の遅延時間(固定)を許容 • 適切な遅延時間をユーザが選択する • 考察 • いずれも中央制御方式であるため,精度調整は容易であるがシステム構 成要素が増えると処理オーバーヘッドが高くなると考えられる.
箱庭の時刻同期方式 5 • 箱庭の時間同期方式 • 中央制御方式ではなく,並列化が容易な分散制御方式でのシ ミュレーション時間同期方式 • 仕組み(ハーモニー) • 各シミュレータは 箱庭時間(マエストロ)をみながら, シミュレーション時間調整し時間同期する(ハーモニー) シミュレーション時間同 期のためのピンポンはし ない.ミュレータのベス ト・エフォートでの並列 同期を実施 箱庭時間 • 箱庭時間より早い場合 • シミュレーション時間を遅くする • 箱庭時間より遅い場合 • シミュレーション時間を早くする • 各シミュレータ時間を可視化 • 時間同期の程度を定量化 • 環境スペックの妥当性を評価・調整 シミュレーション時間1 シミュレーション時間2 シミュレーション時間3 シミュレータ1 シミュレータ2 シミュレータ3 各シミュレータは箱庭 時間に対して自分のシ ミュレーション時間の進 め方を調整する
箱庭コア機能の時刻同期設計 • 箱庭コンダクタと箱庭アセットのAPIとして機能提供しています 箱庭コンダクタ 箱庭コンダクタAPI (hako_conductor.h) 箱庭アセット 箱庭アセットAPI (hako_asset.h) 箱庭コマンド (hako_cmd.cpp) hakoniwa-core-cpp-client 箱庭コマンドAPI (hako_simevent.hpp) hakoniwa-core-cpp [凡例] アクター 箱庭API 管理リポジトリ名 6
箱庭コア機能の時刻同期設計 • 共有メモリを介して、箱庭時刻とアセット時刻をそれぞれ参照・更新する 箱庭アセット 箱庭コンダクタ 箱庭アセットAPI 箱庭コンダクタAPI 共有メモリ 箱庭時間 箱庭アセットAPI 実現処理 箱庭アセット時間 箱庭アセット時間 箱庭アセット時間 箱庭コンダクタAPI 実現処理 7
カウントアップの動作(共通) T (simulation time) Count Up Option 1: progress ΔT t -Δt t Δt Option 2: retain t +Δt t (wall time) 8
箱庭時刻とアセット時刻の同期 箱庭アセットのカウントアップ • アセット時刻T(t)を以下の手順で決定する。 想定新時刻 T' を求める(このまま進めた場合) T' = T(t-Δt) + ΔT 。 • コアの時刻 Tc を取得する。 • T' ≦ Tc であれば、T(t) = T' 想定新時刻とする。(進行) • Tc < T' であれば、T(t) = T(t-Δt) 前回値とする。(停留) • • その結果、アセット時刻と箱庭時刻には、常に以下の関係。 • コア時刻 Tc(t) を以下の手順で決定する。 想定新時刻T'cを求める(このまま進めた場合) T'c =Tc(t-Δt) + ΔTc 。 • アセットの時刻 T を取得する。 • (T'c - T) ≧ 最大許容遅延時間であれば Tc(t) = Tc(t-Δt) 前回値とする。 (停留) • (T'c - T) < 最大許容遅延時間であれば、Tc(t) = T'c 想定新時刻とする。(進行) • • その結果、アセット時刻と箱庭時刻には、常に以下の関係 • T(t) ≦ Tc(t) ... いつでも Tc が進んでいる。 Tc(t) ≦ T(t) +最大許容遅延時間 ... いつでも Tc の進みは一定以内。 コア時刻のカウントアップ アセット時刻が遅れている 時間を進める コア時刻 アセット時刻のカウントアップ コア時刻 • 箱庭コアのカウントアップ 箱庭時刻が許容を 超えて進んでいる (この状態には 決してしない) 時間を進める 時間を止める 時間を止める アセット時間が進んでいる (この状態には 決してしない) アセット時刻 箱庭時刻が 遅れている アセット時刻 9
厳密な定義と証明 • 箱庭時刻同期の定義: • 箱庭アセットの全ての時刻が、最大許容時間範囲内で時間のズレがないこと • 数式で表すと: アセット(i)時刻カウントアップ規則 コア時刻カウントアップ規則 想定新時刻 確定新時刻 保存則 (任意の時刻t) 10
導出される結論 1 2 任意のウォール時刻 t において、コアのシミュレーション時刻は、最も進んだアセット 時刻より遅れておらず、最も遅れたアセット時刻より最大許容遅延時間を超えて進 んでいない。 任意のウォール時刻 t において、どんなアセットのペア (i,j) を選んでも、 シミュレーション時刻差は最大許容時間以内である。 参照: https://github.com/toppers/hakoniwa-core-cpp-client/tree/main/math 11
シミュレーション時刻の分布 T (simulation time) T1 T2 T3 Tc ... Core lives in this timezone. (1) max Ti ≦ Tc ≦ min Ti + dmax TN All Assets live within dmax time difference. min Ti max Ti (2) |Ti - Tj | ≦ dmax for ∀ i, j dmax 12
最大許容遅延時間の考察 • 最大許容遅延時間の設定により、シミュレーション精度とスピードが変わる 箱庭時刻が許容を 超えて進んでいる (この状態には 決してしない) • 最大許容遅延時間が大きい場合 • アセット間の時刻のズレが大きくなる コア時刻 • 反面、並行実行できるのでスピードは速い • 最大許容遅延時間が小さい場合 • アセット間の時刻のズレは小さい アセット時間が進んでいる (この状態には 決してしない) • 最小値:シミュレーションステップ • 反面、並行実行でないのでスピードは遅い アセット時刻 13
シミュレーション結果 10 Assets ΔT = 10 ms d_max= 100 ms 14
シミュレーション結果(詳しく) 10 Assets ΔT = 10 ms d_max= 100 ms 15