Engee 文档
Notebook

MATLAB和Engee速度比较

在这个例子中,我们将比较在MATLAB和Engee中实现的简单脚本的执行速度。 为此,我们需要两个库MATLAB来连接MATLAB计算核心和TickTock来测量在Engee中执行脚本所花费的时间。

In [ ]:
Pkg.add(["TickTock"])
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中的类似函数表现得更差。

我们将比较的下一个方面是图形表示。 这里需要注意的是,Engee中没有MATLAB的映射,但是函数本身可以在内核内部执行。

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快得多。