Сравнение по скорости MATLAB и Engee
В данном примере мы сравним скорость выполнения простого скрипта, реализованого в MATLAB и в Engee. Для этого нам понадобятся две библиотеки MATLAB для подключения вычислительного ядра MATLAB и TickTock для замера временных затрат при выполнении скриптов в Engee.
Pkg.add(["TickTock"])
Pkg.add("TickTock")
using MATLAB
using TickTock
Теперь сравним скорость присваивания и простых расчётов за счёт задания синусоиды и нескольких вспомогательных констант.
mat"""
tic
N = 100;
x = (1:N)/N;
y = sin(8*pi*x);
toc
"""
tick()
N = 100;
x = (1:N)/N;
y = sin.(8π.*x);
tock()
Как мы видим, Julia справляется с данной задачей в разы быстрее, чем MATLAB.
Теперь сравним скорость работы циклов. Для этого в Engee применим все имеющиеся возможности ускорения – используем макрос.
mat"""
tic
I = repmat(y,100,1);
toc
"""
tick()
I = repeat(y, 100, 1)
tock()
Очевидно, что функция повтора вектора в MATLAB показывает себя значительно хуже, чем аналогичная функция в Engee.
Следующий аспект, который мы сравним, – это графическое отображение. Здесь следует учесть, что для MATLAB в Engee отсутствует отображение, но сами функции внутри ядра можно выполнить.
mat"""
tic
pcolor(I);
colormap(bone);
toc
"""
tick()
heatmap(hcat(I...), c=:bone)
tock()
На этом примере мы видим, что и с отображением данных Engee справляется значительно быстрее.
Также давайте отобразим результаты сгенерированных данных в виде изображения, а ещё запустим весь описанный выше скрипт целиком, дабы получить более наглядное представление о конечной разнице в скорости.
heatmap(hcat(I...), c=:bone)
mat"""
tic
N = 100;
x = (1:N)/N;
y = sin(8*pi*x);
I = repmat(y,100,1);
pcolor(I);
colormap(bone);
toc
"""
tick()
N = 100;
x = (1:N)/N;
y = sin.(8π.*x);
I = repeat(y, 100, 1)
heatmap(hcat(I...)', c=:bone)
tock()
Вывод
Опираясь на выше описанный эксперимент, можно сделать вывод, что Julia выполняет расчёты значительно быстрее, чем MATLAB.