估算Engee中模型的执行时间
在这个例子中,我们将分析按速度比较模型的可能性。
为了演示,让我们采用两个具有相同参数的相同模型。 有一个区别:在第一种情况下,将使用管道计算,而在第二种情况下,将使用矢量计算。
模型本身如下图所示。
启动模型的功能
In [ ]:
Pkg.add(["TickTock"])
In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model)
Path = (@__DIR__) * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
model_output = engee.run( model, verbose=true ); # Запустить модель
else
model = engee.load( Path, force=true ) # Загрузить модель
model_output = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
sleep(5)
return model_output
end
Out[0]:
工作速度比较
现在让我们继续比较工作速度。 让我们使用TickTock库和tick()函数。及tok()
tick()-记录当前时间。 它通常用于开始测量时间。
tok()—计算并输出自上次tick()调用以来经过的时间。
使用TickTock的特点和好处:
- *Tick()和tok()*的功能提供了一种简单直观的方式来测量时间,而无需手动计算开始时间和结束时间之间的差异。
- TickTock具有很高的时间精度,这使您可以获得有关代码执行持续时间的可靠数据,即使是非常快的操作。
- 测量结果以易于阅读的格式(秒,毫秒)以及标准Float64输出数据格式显示,这使得将这些值转换为分钟或小时变得容易。
In [ ]:
using TickTock
In [ ]:
tick()
run_model("sin_Sample") # Запуск модели.
Ts = tok()
Out[0]:
In [ ]:
tick()
run_model("sin_Frame") # Запуск модели.
Tf = tok()
Out[0]:
In [ ]:
println("Time sin_Sample: $(Ts)")
println("Time sin_Frame: $(Tf)")
println("Time difference: $(abs(Ts-Tf))")
从差异的计算可以看出,执行时间略有不同。 我们还要比较仿真结果,以确保模型完全相同。
In [ ]:
Ss = collect(Ss);
Sf = collect(Sf);
Sf = reduce(vcat, Sf.value)
println("Size sin_Sample: $(size(Ss))")
println("Size sin_Frame: $(size(Ss))")
正如我们所看到的,信号的尺寸是相等的。
In [ ]:
gr()
error = abs.(Sf[1:100]-Ss.value[1:100]);
plot(Ss.value[1:100], label="sin_Sample")
plot!(Sf[1:100], label="sin_Frame")
plot!(error, label="difference")
title!("sum_error: $(sum(error))")
Out[0]:
这些信号在大小和信号本身的比较上是相同的.
结论
在这个例子中,我们研究了如何使用TickTock库来比较不同模型的速度。 此工具可用于分析模型的性能并评估优化它们的必要性。
