Следуя этот пост, я решил сравнить Юлию с GNU Octave и результаты были несовместимы с ускорениями, проиллюстрированными в julialang.org.
Я собрал как Julia, так и GNU Octave с CXXFLAGS='-std=c++11 -O3'
, результаты, которые я получил:
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
Может кто-нибудь объяснить, почему Джулия медленнее, чем GNU Octave с этими основными операциями? После нагревания он должен называть LAPACK/BLAS без накладных расходов, правильно?
EDIT:
Как поясняется в комментариях и ответах, приведенный выше код не является хорошим ориентиром и не иллюстрирует преимущества использования языка в реальном приложении. Раньше я думал о Джулии как о более быстрой "Октаве/МАТЛАБ", но это намного больше. Это огромный шаг на пути к продуктивным, высокопроизводительным научным вычислениям. Используя Julia, я смог: 1) превзойти программное обеспечение в моей области исследований, написанное на Fortran и С++, и 2) предоставить пользователям гораздо более удобный API.