估算 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 的特点和优势: 1.tick() 和 tok() 函数提供了一种简单直观的时间测量方法,无需手动计算开始和结束时间的差值。 2.2. TickTock具有很高的时间精度,即使是非常快速的操作,也能获得可靠的代码执行时间数据。 3.3. 测量结果以易于理解的格式(秒、毫秒)输出,输出数据格式为标准 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 库来比较不同模型的速度。该工具有助于分析模型的性能,并评估是否需要对其进行优化。