Engee 文档
Notebook

估算 Engee 中模型的执行时间

在本例中,我们将探讨通过速度比较模型的可能性。

为了便于演示,我们将使用两个参数完全相同的模型。但有一点不同:在第一种情况下,我们将使用管道计算,而在第二种情况下,我们将使用矢量计算。

模型本身如下图所示。

image_4.png

image_5.png

启动模型的功能

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]:
run_model (generic function with 1 method)

速度比较

现在我们来进行速度比较。让我们使用 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]:
7.545560097
In [ ]:
tick()
run_model("sin_Frame") # Запуск модели.
Tf = tok()
Out[0]:
7.903039812
In [ ]:
println("Time sin_Sample: $(Ts)")
println("Time sin_Frame: $(Tf)")
println("Time difference: $(abs(Ts-Tf))")
Time sin_Sample: 7.545560097
Time sin_Frame: 7.903039812
Time difference: 0.3574797150000002

从差值计算中我们可以看出,执行时间相差不大。我们还可以比较一下模拟结果,以确保模型完全相同。

In [ ]:
Ss = collect(Ss);
Sf = collect(Sf);
Sf = reduce(vcat, Sf.value)

println("Size sin_Sample: $(size(Ss))")
println("Size sin_Frame: $(size(Ss))")
Size sin_Sample: (10001, 2)
Size sin_Frame: (10001, 2)

我们可以看到,信号尺寸相同。

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 库来比较不同模型的速度。该工具有助于分析模型的性能,并评估是否需要对其进行优化。

示例中使用的块