Производительность Octave по сравнению с Matlab и Scilab - PullRequest
0 голосов
/ 05 мая 2018

Я проверяю следующую команду в приглашении Octave, Scilab и Matlab.

>>  A = rand(10000,10000);
>> B = rand(10000,1);
>> tic,A\B;, toc

Время было около 40, 15,8 и 15,7 с соответственно. Для сравнения производительность Mathematica была

In[7]:= A = RandomReal[{0, 1}, {10000, 10000}];

In[9]:= B = RandomReal[{0, 1}, 10000];

In[10]:= Timing[LinearSolve[A, B];]

Out[10]= {14.125, Null}

Означает ли это, что Octave не так способен, как остальные программы в области линейных уравнений?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

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

Большинство математических математиков происходит от LAPACK. Разница в том, что у Matlab есть dll с фортраном и C ++, которые могут быть немного лучше. Я считаю, что они немного лучше используют ваш математический сопроцессор. Это называется ядром Intel MKL.

Фактический алгоритм изменяется в зависимости от структуры матрицы и размера.

0 голосов
/ 05 мая 2018

Я думаю, что ваши тесты несовершенны. Алгоритмы, лежащие в основе A\B, используют специальные шаблоны и структуры в системах уравнений, поэтому время выполнения очень сильно зависит от того, что сгенерировал random(10000,10000). При трех разных запусках с Octave 4.0.0 на моей машине ваш код возвращает 7.1s, 95.1s и 16.4s. Это указывает на то, что первая матрица, сгенерированная случайным образом, вероятно, была разреженной, и это могло быть в случае, когда вы тестировали свой код с помощью Scilab и Matlab. Так что, если вы не уверены, что алгоритмы оценивают одно и то же, или если вы не усредняете время выполнения в разумной манере (что не очень легко найти для меня), то сравнивать их, как и вы, не имеет смысла. ,

...