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