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