Почему октава медленнее, чем MATLAB?

32

Я использую Octave и MATLAB для нескольких проектов, и я столкнулся с несколькими вопросами. Этот вопрос Почему/когда я должен предпочесть MATLAB над Octave?) ответил несколько, но есть еще одна затяжная...

Я прочитал несколько сообщений/других источников, сравнивающих производительность Octave и MATLAB, и я выполнил некоторые свои собственные тесты по стандартным сценариям, которые подтверждают общее мнение, что Octave обычно намного медленнее, чем MATLAB для стандартных операций (повторяется, конечно, так, что сравнение имеет смысл).

Консенсус также, по-видимому, предполагает, что большая часть повышения производительности MATLAB обусловлена ​​его компилятором JIT, который компилирует большие циклы во время выполнения. Это имеет смысл, и наибольшие различия в производительности возникают в этих случаях (например, Mathworks Matlab vs Gnu Octave)

Мой вопрос заключается в следующем: почему это должно быть так, что векторизованный код также работает медленнее в Octave? Похоже, что в этом случае память должна быть выделена перед циклом, а некоторый собственный цикл C/С++ должен выполнить операцию, что бы приравнивать производительность между Octave и MATLAB для векторизованного кода. Кроме того, имеет ли это более широкие последствия, т.е. Что Octave может работать более плохо для сложных операций, даже если код написан таким образом, что компилятор JIT не используется/не используется?

  • 0
    Много было написано о том, что JIT Matlab улучшает производительность, JIT Matlab не может встроить вызовы функций, и я не уверен, насколько хорошо он может оптимизировать циклы FOR, учитывая нечетные различия в производительности между циклом FOR в Matlab и JAVA (который имеет рабочий JIT). Все реализации интерпретируемых языков имеют JIT, но у Matlab довольно слабый конец.
Теги:
octave

2 ответа

33
Лучший ответ

Существует четыре способа ускорения кода Matlab:

  • JIT: компиляция во время выполнения помогает с циклами, но, похоже, ускоряет (или хотя бы взаимодействует) с другими частями кода, согласно моим анекдотическим наблюдениям.

  • Реализация функций в C/С++: есть куча функций Matlab/Octave, которые реализованы в Matlab/Octave. В каждом выпуске есть еще одна группа из них, которые становятся встроенными.

  • Многопоточность: там список функций, которые имеют многопоточные реализации, что ускорит вызовы функций.

  • Как правило, более эффективные реализации. Например, медианный фильтр получил огромное ускорение скорости для целых входов несколько выпусков назад.

Для всех этих подходов нужны разработчики, предназначенные для ускорения создания кода. Насколько мне известно, основная проблема разработчиков Octave заключается в том, чтобы убедиться, что функциональность Matlab существует вообще, в то время как увеличение производительности, по-видимому, было в центре внимания разработки Matlab за последние несколько лет.

  • 0
    Если вы посмотрите на производительность не векторизованного цикла по сравнению с эквивалентной векторизованной операцией, то станет ясно, что для простых операций, таких как вводный продукт, Octave может тратить 75% + своего времени на интерпретацию тела цикла вместо математической обработки. Я подозреваю, что MATLAB JIT'ter также более способен к устранению Common Subexpression - компиляторы, как правило, более осведомлены об этом.
10

Matlab внутренне использует библиотеку ядра Intel Math (Intel MKL) для векторных и матричных операций. Это дает Matlab значительное преимущество над Octave.

Попробуйте выполнить команду "version -lapack" и "version -blas" в вашем Matlab, чтобы проверить версию MKL, которую использует Matlab.

Быстрая ссылка, в которой обсуждается использование MKL по Matlab, http://stanford.edu/~echu508/matlab.html.

Intel MKL является собственностью. software.intel.com/en-us/intel-mkl. Однако для некоммерческого использования версия Linux бесплатна. Если Octave может каким-то образом использовать MKL, установленный на наших машинах, он должен значительно ускорить работу Octave.

  • 2
    Это действительно интересно. Можете ли вы предоставить ссылку или цитату с дополнительной информацией об этом?
  • 0
    Это интересно. Это собственность или что-то в этом роде? В противном случае, почему бы не использовать его в Octave?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню