【发布时间】:2013-10-13 00:47:59
【问题描述】:
在 this post 之后,我决定将 Julia 与 GNU Octave 进行基准测试,结果与 julialang.org 中说明的加速不一致。
我用CXXFLAGS='-std=c++11 -O3'编译了Julia和GNU Octave,得到的结果:
GNU Octave
a=0.9999;
tic;y=a.^(1:10000);toc
Elapsed time is 0.000159025 seconds.
tic;y=a.^(1:10000);toc
Elapsed time is 0.000162125 seconds.
tic;y=a.^(1:10000);toc
Elapsed time is 0.000159979 seconds.
--
tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000280142 seconds.
tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000280142 seconds.
tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000277996 seconds.
朱莉娅
tic();y=a.^(1:10000);toc()
elapsed time: 0.003486508 seconds
tic();y=a.^(1:10000);toc()
elapsed time: 0.003909662 seconds
tic();y=a.^(1:10000);toc()
elapsed time: 0.003465313 seconds
--
tic();y=cumprod(ones(1,10000)*a);toc()
elapsed time: 0.001692931 seconds
tic();y=cumprod(ones(1,10000)*a);toc()
elapsed time: 0.001690245 seconds
tic();y=cumprod(ones(1,10000)*a);toc()
elapsed time: 0.001689241 seconds
有人能解释一下为什么 Julia 在这些基本操作上比 GNU Octave 慢吗?加热后,它应该调用 LAPACK/BLAS 没有开销,对吧?
编辑:
正如 cmets 和答案中所解释的,上面的代码不是一个好的基准,也不能说明在实际应用程序中使用该语言的好处。我曾经认为 Julia 是一个更快的“Octave/MATLAB”,但它远不止于此。这是朝着高效、高性能、科学计算迈出的一大步。通过使用 Julia,我能够 1) 在我的研究领域中胜过用 Fortran 和 C++ 编写的软件,以及 2) 为用户提供更好的 API。
【问题讨论】:
-
我相当肯定这些操作——
.^或cumprod——都不是 BLAS 或 LAPACK 的一部分。这些操作只是作为 Octave 源代码的一部分在 C 中实现,而在 Julia 中作为 Julia 基本发行版的一部分实现。 -
@StefanKarpinski,我的意思是
ones(1,10000)*a,内部可能使用霍纳规则或其他东西。但是你是对的,我不应该为这个特殊的 sn-p 代码提到 LAPACK/BLAS,我的手指总是在不知不觉中输入它们。 :) -
不到 1 秒太短,没有意义。
标签: benchmarking octave julia