Документация Engee
Notebook

Сравнение по скорости MATLAB и Engee

Открыть пример в Engee

В данном примере мы сравним скорость выполнения простого скрипта, реализованого в MATLAB и в Engee. Для этого нам понадобятся две библиотеки MATLAB для подключения вычислительного ядра MATLAB и TickTock для замера временных затрат при выполнении скриптов в Engee.

In [ ]:
Pkg.add("TickTock")
   Resolving package versions...
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
In [ ]:
using MATLAB
using TickTock

Теперь сравним скорость присваивания и простых расчётов за счёт задания синусоиды и нескольких вспомогательных констант.

In [ ]:
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()
>> >> >> >> >> >> >> Elapsed time is 0.004045 seconds.
[ Info:  started timer at: 2024-08-09T12:05:03.563
[ Info:          0.001664594s: 1 millisecond

Как мы видим, Julia справляется с данной задачей в разы быстрее, чем MATLAB.

Теперь сравним скорость работы циклов. Для этого в Engee применим все имеющиеся возможности ускорения – используем макрос.

In [ ]:
mat"""
tic
I = repmat(y,100,1);
toc
"""

tick()
I = repeat(y, 100, 1)
tock()
>> >> >> >> >> Elapsed time is 0.001147 seconds.
[ Info:  started timer at: 2024-08-09T12:05:03.973
[ Info:          0.000504059s: empty period

Очевидно, что функция повтора вектора в MATLAB показывает себя значительно хуже, чем аналогичная функция в Engee.

Следующий аспект, который мы сравним, – это графическое отображение. Здесь следует учесть, что для MATLAB в Engee отсутствует отображение, но сами функции внутри ядра можно выполнить.

In [ ]:
mat"""
tic
pcolor(I);             
colormap(bone);      	
toc
"""

tick()
heatmap(hcat(I...), c=:bone)
tock()
>> >> >> >> >> >> Elapsed time is 0.397273 seconds.
[ Info:  started timer at: 2024-08-09T12:05:04.663
[ Info:          0.005644742s: 5 milliseconds

На этом примере мы видим, что и с отображением данных Engee справляется значительно быстрее.

Также давайте отобразим результаты сгенерированных данных в виде изображения, а ещё запустим весь описанный выше скрипт целиком, дабы получить более наглядное представление о конечной разнице в скорости.

In [ ]:
heatmap(hcat(I...), c=:bone)
Out[0]:
In [ ]:
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()
>> >> >> >> >> >> >> >> >> >> Elapsed time is 0.256024 seconds.
[ Info:  started timer at: 2024-08-09T12:05:05.763
[ Info:          0.004944659s: 4 milliseconds

Вывод

Опираясь на выше описанный эксперимент, можно сделать вывод, что Julia выполняет расчёты значительно быстрее, чем MATLAB.