Перейти к содержанию
    

Ускорение вычислений в Octave

На работе приходится вместо MATLAB использовать Octave. Разбираюсь с тем, как ускорить время моделирования.

 

Насколько я понял, JIT компиляция, недавно появившаяся в Octave, отличается от того, что применяется в MATLAB. В MATLAB она выполняется дейтсвительно "на лету" при запуске скрипта, в Octave необходимо генерировать функции с помощью LLVM компилятора, то есть весьма похоже на генерацию C/C++ кода в MATLAB с использованием coder.

 

Одновременно с этим разбираюсь, как устроен процесс распараллеливания в пакете parallel для ядер на одной машине.

 

Кто-нибудь занимался сравнением данных методов? Для MATLAB различные пути решения такой задачи известны, а что лучше для Octave, пока до конца не понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не отписался сразу о результатах.

 

В общем, в последние пару лет разработчики Octave хорошо повысили быстродействие пакета. На одном ядре AMD с частотой 3,3 ГГц мой тест выполнялся за 1,5 секунды для Octave 4.0, на другом ПК с Intel i7 4 ГГц в MATLAB 2015b за 0,6 с. Учитывая разные частоты процессоров, можно сказать, что Octave проигрывает примерно в 2 раза, а не на порядки, как считалось и писалось в обсуждениях раньше. Понятно, что данный конкретный пример не является показателем, но чтение зарубежных форумов подтверждает, что Octave сейчас оптимизируют.

 

Пакет parallel уменьшил время исполнения на 8 ядрах AMD в 5,4 раза, что ожидаемо. Сам процесс распараллеливания (синтаксис) понравился больше, чем parfor у MATLAB.

 

JIT-компиляция использует LLMV+clang, она в довольно сыром состоянии. На своей Linux Gentoo не удалось скомпилировать сам Octave с нужными ключами, поскольку его версия 4.0.2 требует LLVM >= 3.5, а jit-compiler работает только при <= 3.3. Действительно, это компиляция не "на лету", выигрыш, по немногим материалам в сети, сопоставим с выигрышем от генерации mex в MATLAB (для алгоритмов, содержащих циклы).

 

Пока что принято решение отложить попытки подключения jit-компиляции, чтобы не тратить время на сырой продукт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тут есть сравнение - julialang.org, не хватает только PyPy. А зачем именно Octave? Почему не Lua/Python/R/Julia итд?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот тут есть сравнение - julialang.org, не хватает только PyPy. А зачем именно Octave? Почему не Lua/Python/R/Julia итд?

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

 

Так получилось, что есть большая база моделей (некоторым уже порядка 8-10 лет), написанная на MATLAB, причем даже не мной. Область применения - связь и ЦОС. Сейчас нужно работать с этими моделями в рамках использования свободного ПО, поэтому альтернатив нет.

 

Новые алгоритмы планирую писать на Python с использованием SciPy.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...