Оценка времени исполнения моделей в Engee¶
В данном примере мы разберём возможности сравнения моделей по скорости работы.
Для демонстрации возьмём две одинаковые модели с идентичными параметрами. Отличие одно: в первом случае будут применяться конвейерные вычисления, а во втором – векторные.
Сами модели представлены на рисунке ниже.
Функция для запуска модели¶
# Подключение вспомогательной функции запуска модели.
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
Сравнение скорости работы¶
Теперь перейдём к сравнению скорости работы. Воспользуемся библиотекой TickTock и функциями tick() и tok()
tick() — записывает текущий момент времени. Обычно используется для начала измерения времени. tok() — вычисляет и выводит время, прошедшее с последнего вызова tick().
Особенности и преимущества использования TickTock:
- Функции tick() и tok() обеспечивают простой и интуитивно понятный способ измерения времени без необходимости вручную вычислять разницу между временем начала и окончания.
- TickTock работает с высокой точностью времени, что позволяет получать достоверные данные о продолжительности выполнения кода даже для очень быстрых операций.
- Результат измерений выводится в удобном для восприятия формате (секунды, миллисекунды), а также формат данных выхода стандартный Float64, что позволяет легко перевести эти значения в минуты или часы.
using TickTock
tick()
run_model("sin_Sample") # Запуск модели.
Ts = tok()
tick()
run_model("sin_Frame") # Запуск модели.
Tf = tok()
println("Time sin_Sample: $(Ts)")
println("Time sin_Frame: $(Tf)")
println("Time difference: $(abs(Ts-Tf))")
Как мы видим из расчёта разницы, время выполнения отличается незначительно. Также сравним результаты моделирования, дабы окончательно убедиться в идентичности моделей.
Ss = collect(Ss);
Sf = collect(Sf);
Sf = reduce(vcat, Sf.value)
println("Size sin_Sample: $(size(Ss))")
println("Size sin_Frame: $(size(Ss))")
Как мы видим, размерности сигналов равны.
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))")
Сигналы идентичные и по размерам, и по результатам сравнения самих сигналов.
Вывод¶
В данном примере мы рассмотрели, как с помощью библиотеки TickTock можно сравнить скорость работы различных моделей. Этот инструмент полезен для анализа производительности ваших моделей и оценки необходимости их оптимизации.