10/18/2010

Тестирование быстродействия MATLAB и GNU/Octave

Для работы мне нужно моделировать искажение света атмосферой и компенсировать его - в этом, собственно, основная идея адаптивной оптики и состоит. Ответ на вопрос "как это сделать" может занять пару томов в книге, и чтобы искать ответ было проще, люди создают симуляторы. После долгих раздумий о том, на каком языке его писать, я таки начал писать симулятор на Матлабе - это то, что лучше всего мне известно. Однако есть проблема: МАТЛАБ медленный и лицензии на него стоят немалых денег. Купить лицензию в моём университете не вопрос, но вот медлительность МАТЛАБа это действительно проблема.



MATLAB и GNU/Octave - мы с тобой два берега...
Я ждала и верила,
Сердцу вопреки:
Мы с тобой два берега
У одной реки
(с) песня, из которой слов не выкинешь

Так вот, MATLAB дорогой и медленный, но на нём уже мное написано и он широко распространён. Octave свободная и быстрая, но с дурной документацией и несовместимыми названиями функций, которых к тому же мало. Вот такая трагедия инженерной интеллигенции.

Однако установив Octave3, я был приятно удивлён тому, что октависты всё-таки взялись за ум и начали пилить свой велосипед в правильном направлении. Да, сообщения об ошибках всё так же убоги, а документация оставляет желать много лучшего. Но если закрыть на это глаза, как и на то, что Октава всё ещё не умеет сама строить графики, а вывод mesh на gnuplot занимает вечность, совместимость с MATLAB стала намного, намного лучше чем в Octave2.

И вот, после того, как я оценил Октаву3, я решил запустить свой симулятор на Октаве. К моему большому удивлению, он отработал прекрасно и даже умудрился построить один график (меши строить всё так же не умеет и дёргает для этого Гнуплот, что занимает несколько минут).

Коротко об Octave3 можно сказать так:

Достоинства
+ написано много функций с именами а-ля-MATLAB, что даёт высокую степень совместимости с MATLAB;
+ высокая скорость работы (см.тесты ниже), особенно на преобразовании Фурье;
+ свободная лицензия.
Недостатки
- низкое качество документации в комплекте;
- неинформативные сообщения об ошибках (трудно выполнять отладку программы, если не понятно, в какой функции ошибка);
- графическая оболочка для Octave в стадии альфа-версии;
- отсутствует профайлер (profiler, тестирование скорости выполнения каждой строки кода);
- нет собственного модуля построения графиков (требуется gnuplot, что не всегда работает хорошо);
- большое потребление памяти.
Последний момент меня лично удивил: Октава, не имеющая графической оболочки, на том же fft потребляет больше памяти, чем MATLAB!

Небольшое сравнительное тестрование работы Octave и MATLAB

В своё время мне в комментариях к QtOctave задали вопрос насчёт скорости Октавы. Тогда я внёс его в свой список "что бы ещё посмотреть", а не так давно, когда я приступил к новому проекту, пришлось объяснять шефу выбор Octave вместо Матлаба. А так как графики говорят больше, чем полстатьи, я написал небольшой тестовый скрипт для снятия данных. Скрипт работает на полную мощь только в UNIX, так как я использовал вызовы ps -aux для выяснения, сколько на самом деле потребляется памяти. Если есть предложения по коду скрипта и конструктивная критика, пожалуйста не стесняйтесь в комментариях.

Для тестирования использовался ноутбук Dell Latitude E5100 (Intel Celeron 2.2GHz processor, 2Gb DDR RAM, ATA-100 160Gb HDD, rock-solid Debian GNU/Linux Lenny v.5.0). Использовались MATLAB v7 R14 и Octave 3.0.1 из Debian Lenny. Тест был выполнен при выключенной графической оболочке, результаты усреднены 10 раз. И Матлаб, и Октава были в консольном режиме.

Было интересно протестировать операции сложения и умножения матриц, а также Fast Fourier Transform (FFT) - это самые часто используемые функции в симуляторе. Размеры матриц были от 4x4 до 8192x8192.

Время выполнения операций в MATLAB и Octave

Базовые операции сложения и перемножения матриц (в том числе поэлементного) практически совпадают, что вполне ожидаемо. Однако при время вычисления Fast Fourier Transform разное, и оно не в пользу MATLAB:


a)

b)

Figure 1.1: Median computation time versus matrix size for: a) FFT function and for b) FFTSHIFT function.

На больших размерах матриц, например 4096х4096, Octave почти в три раза быстрее MATLAB. Следует сказать, что на новых версиях MATLAB, например 2008b, это отставание меньше: например, на MATLAB 2008b под Windows операция FFT на матрице 4096х4096 занимает около 2.8 секунды, в то время как под Octave это всего 1.6 секунд. В этой бочке мёду есть ложка дёгтя - Октава потребляет больше памяти, чем МАТЛАБ.


Потребление памяти в MATLAB и Octave

Увы, но потребление памяти в Octave в целом больше, чем в MATLAB на операциях с Фурье-преобразованием. Это видно на графиках ниже. Для небольших матриц (менее 2048x2048) Октава использует в 2.5-3 раза больше памяти, чем МАТЛАБ, а на больших матрицах (4096х4096 и более) на 10-20% больше. Так что точки для Фурье-преобразования 8192x8192 для Октавы нет. Справедливости ради надо сказать, что новые версии Матлаба (типа 2008), перекормленные джавой, выдают сообщение "out of memory" при попытке посчитать такие огромные матрицы, даже не удосуживаясь попробовать сделать это.

Figure 1.2: Median memory consumption versus matrix size for: a) FFT function and for b) FFTSHIFT function.

a)

b)

Так что краткий итог такой: Октава быстрее Матлаба в разы, но потребляет гораздо больше памяти, чем MATLAB.


Бен, ай нид хелп
Проблема в том, что у меня есть матлаб и октава только под Дебианом и хотелось бы, чтобы кто-то запустил тестовую программу на более современных версиях Матлаба под линуксом, виндой и (вдруг таковые отыщутся среди читателей) под MacOSX. Внутри программы ничего менять не надо - она полностью автоматическая. Результат её работы - куча файлов с расширением .data, содержащие данные о затраченном времени и памяти. Последняя версия программы по тестированию производительности лежит в репозитории и её можно забрать по этой ссылке .

В скрипте измерение потребления памяти я организовал через вызов команды ps. Это связано с тем, что мне часто бывает нужно узнать ПОЛНОЕ потребление памяти Матлаба\Октавы, а не номинальное потребление памяти одной переменной. Поэтому возник вопрос: как это сделать под виндой? Матлаба под виндой у меня нет, а октаву ставить довольно долго и могут возникнуть вопросы от ITшников универа.

Если у кого есть идеи по модернизации скрипта - пишите в комментарии, с удовольствием подискутируем.

33 комментария:

  1. Очень интересное сравнение. Спасибо. Подозреваю, его ждёт успех и оно дорастёт до полноценного бенчмарка :-)

    Насчёт разницы в потреблении памяти, а это не может быть связано с разрядностью типов данных, используемых по-умолчанию?

    ОтветитьУдалить
  2. Попробуй на Linux-i386 сравнить.

    ОтветитьУдалить
  3. @Сергей комментирует...
    Очень интересное сравнение. Спасибо.
    Всегда пожалуйста. Дело было так: я сказал шефу, что пишу симулятор по адаптивной оптике. Шеф одобрил, сказал бонзай, то есть дерзай. Потом спросил: а на чём? На Октаве. Он потребовал обосновать, почему я пользую этот красноглазый велосипед, если есть православно-католический Ъ-энтерпрайз МАТЛАБ. Дык, говорю, опенсорц. Шефа не впечатлило. Я денёк поколупался и выкатил программу для тестирования. Шеф покукожился, но согласился. Особенно после того, как узнал, что и на матлабе оно заработает. Как-то так.

    Подозреваю, его ждёт успех и оно дорастёт до полноценного бенчмарка :-)
    Ну в общем я тестировал те функции, которые использую. А что до полноценного бенчмарка надобно?

    Насчёт разницы в потреблении памяти, а это не может быть связано с разрядностью типов данных, используемых по-умолчанию?
    Это интересный вопрос. Я выставлял и там, и там, double. Должно быть одинаково.

    Попробуй на Linux-i386 сравнить.
    Это я не распарсил :-)

    ОтветитьУдалить
  4. > А что до полноценного бенчмарка надобно?

    Это тебе тут постепенно напишут, что добавить. Ну или сам постепенно добавишь.

    > Это я не распарсил

    В смысле попробуй сравнить на машине с 32-разрядным ядром (i386), а не 64-разрядным (x64). Большинство математических пакетов и библиотек собраны в двух вариантах, поэтому потребление памяти может отличаться.

    ОтветитьУдалить
  5. Интересная статья. Но если речь о быстродействии, особенно на больших матрицах, почему не рассматривается Fortran? Выигрыш скорости почти два порядка. А то у читателей сложится неправильное мнение, что для быстрых расчетов нужно выбирать Octave.

    ОтветитьУдалить
  6. Что нужно чтобы запустить на Mac OS X? Что с Octave и Matlab – просто скачать?

    ОтветитьУдалить
  7. Йоу!

    Да, Octave рулит. Вот недавно как раз с её помощью делал рассчётку по теоретическим основам электротехники (знаю, знаю, из пушки по воробьям — но всё же). Жаль, не могу тебе с бенчмарками помочь — Matlab'а-то у меня нету… И скачать тоже нельзя:
    > Trials are not available to students.

    Ну и как всегда — издевки:
    > а так же Fast Fourier Transform
    Ты знаешь, что нужно делать :)

    ОтветитьУдалить
  8. Что-то я не понял на сайте MATLAB нет триальной версии? Заполнил форму – пообещали, что представитель компании мне перезвонит и всё. MATLAB настолько коммерческий, что его и скачать нельзя?

    ОтветитьУдалить
  9. Всё-таки нельзя по паре тестов говорить, что octave быстрее, для подробного анализа можно взять тесты из пакета octave-forge (http://octave.sourceforge.net/benchmark/index.html). Им можно сравнить время выполнения простых операций, но используются маленькие матрицы.

    > вывод mesh на gnuplot занимает вечность
    В wx терминале нормально выводится. Он доступен вроде с версии 4.2, активизируется переменной окружения GNUTERM=wxt. А скоро обещают сделать ещё и qt терминал.

    ОтветитьУдалить
  10. не надо тестов для i386 - просто найдите matlab amd64 и покажите шефу

    ОтветитьУдалить
  11. У меня проблема при использовании qtoctave под windows. Рисунок выводится и зависает.

    ОтветитьУдалить
  12. @Сергей комментирует...
    Это тебе тут постепенно напишут, что добавить. Ну или сам постепенно добавишь.
    Посмотрим. Пока хватает уже написанного :-)

    В смысле попробуй сравнить на машине с 32-разрядным ядром (i386), а не 64-разрядным (x64)
    У меня 64-разрядных пока нет.

    @iv_vl комментирует...
    Интересная статья. Но если речь о быстродействии, особенно на больших матрицах, почему не рассматривается Fortran?
    Он не интерпретируемый. Мне сейчас не до программирования изящных конструкций. Мне ехать, и сейчас, а шашечки позже. Рассматривался Yorick, но он в таком пионерском красноглазом состоянии, что уродоваться с ним нет ни малейшего желания.

    А то у читателей сложится неправильное мнение, что для быстрых расчетов нужно выбирать Octave.
    Не должно. Сравнивается матлаб и октава. Сравнивать это с фортраном некорректно.

    @jankkhvej комментирует...
    Что нужно чтобы запустить на Mac OS X? Что с Octave и Matlab – просто скачать?
    Октаву - скачать, Матлаб - купить :-) Матлабовцы свою поделку так просто скачать не дадут. Жлобы-с.


    @Minoru комментирует...
    "И ты, Брут!" :-)

    Да, Octave рулит.
    Не всегда. Меня бесят эти идиотские сообщения об ошибках и документация в стиле "это пионерия шагает".

    И скачать тоже нельзя
    Проприетарщина проклятая. Что с неё возьмёшь?

    На самом деле я тесты выложил, скорее, чтоб не потерялись. Я шефа убедил, для работы пригодилось, так чего секретничать?

    Ну и как всегда — издевки
    Исправил. Слушай, штандартенфюрер, а где правило посмотреть-то можно? На пальцах по секрету просветишь?

    @jankkhvej комментирует...
    Что-то я не понял на сайте MATLAB нет триальной версии?
    Я не в курсе. Но сойдут тесты и для Октавы. Кстати, есть предложения по улучшению кода в скриптах?

    @Анонимный комментирует...
    Всё-таки нельзя по паре тестов говорить, что octave быстрее
    Я не говорил за всю Одессу, вся Одесса очень велика. В моей балалайке используется Фурье-преобразование почти исключительно, и мне важно было именно оно. И ещё сложение\умножение матриц.

    для подробного анализа можно взять тесты из пакета octave-forge (http://octave.sourceforge.net/benchmark/index.html).
    Спасибо за ссылку. Но есть проблема: The "/Octave Forge Packages/Individual Package Releases/nurbs-1.3.1.tar.gz" file could not be found or is not available. Please select another file.

    Им можно сравнить время выполнения простых операций, но используются маленькие матрицы.
    Нет, это не айс. У меня как раз-то проблема в другом: матрицы ОГРОМНЫЕ и их МНОГО.

    В wx терминале нормально выводится. Он доступен вроде с версии 4.2
    Спасибо, не знал.

    @Ivan S. Lyapunov комментирует...
    не надо тестов для i386 - просто найдите matlab amd64 и покажите шефу
    Иван, есть айне кляйне проблема: все машины в универе i386. Проект пока в начальной стадии, и покупка дорогой машины потребует серьёзного обоснования.

    ОтветитьУдалить
  13. Кстати, Octave же можно собрать с поддержкой MKL. Интересно, на сколько лучше станет.

    В некоторых случаях FFT из MKL в разы быстрее, чем в FFTW (используемом в сборке Octave по-умолчанию). См. http://software.intel.com/en-us/intel-mkl/#tabs-2

    ОтветитьУдалить
  14. как это сделать под виндой?

    Навскидку 3 варианта:
    1. Services for UNIX от MS. В комплекте есть ps. Но весит 200МБ и надо устанавливать. Cygwin — GNU-альтернатива SFU. В wiki ещё написано про GnuWin32, но не пользовал.
    2. PowerShell. Командлет Get-Process, является аналогом ps. Требует Windows XP и старше.
    3. DIY. У меня получился вот такой ужас, но вроде бы работает.

    P.S. Если отказаться от именованых массивов (result_*), можно в 86-116 строках не дублировать код, а сделать 2 цикла. Код, правда, сложнее читать станет.

    ОтветитьУдалить
  15. @Сергей комментирует...
    Кстати, Octave же можно собрать с поддержкой MKL. Интересно, на сколько лучше станет.
    Ого, какие интересные тесты. Серж, огромное тебе спасибо, я не знал.

    В некоторых случаях FFT из MKL в разы быстрее, чем в FFTW (используемом в сборке Octave по-умолчанию)
    Так FFTW и в матлабе используется. Насчёт сборки: мне кажется, что я поседею, пока соберу все зависимости Октавы в кучку :-)


    @Анонимный комментирует...
    Services for UNIX от MS. В комплекте есть ps. Но весит 200МБ и надо устанавливать.
    Холли крап, извините за мой французский. Это ps -aux двести мегов занимает!? Нет пути. :-)

    PowerShell. Командлет Get-Process, является аналогом ps. Требует Windows XP и старше.
    Оно, я так понимаю, хочет дот-нету. А что, у них там в микрософте, утилиты командной строки не изобрели? Я думал, что taskmon.exe имеет консольные вызовы. Но видно, что я слишком хорошо о нём думал.

    DIY. У меня получился вот такой ужас, но вроде бы работает.
    О, а вот этот костылик мне по нраву :-) Спасибо, Анонимус!
    Попробую.

    можно в 86-116 строках не дублировать код, а сделать 2 цикла.
    Я так пробовал и потратил целый час, чтобы красиво работало и красиво читалось. Или одно, или другое. Плюнул и откатил на то, как есть. Ничего, всё равно кода немного, а больше документации.

    Мне тут кстати один китаец написал (студент), вроде так: а чё у тебя в симуляторе нет такой и такой части? Я, говорит, диплом пишу, а мне надо, чтоб было. Ты давай напиши, и пришли мне, чтоб я диплом написал. Я даже растерялся. :-)
    И в какой капусте таких деятелей наук находят!? Ничего, его ждёт большой сюрприз, если он это будет бездумно тягать. Ограничений и упрощений-то он не знает. ха! :-) Вот почему я никогда не доверяю чужому коду: в своём хоть знаешь, где грабельки зарыты, а любителей халявы ждут сюрпризы.

    ОтветитьУдалить
  16. Это ps -aux двести мегов занимает!?
    Это объём архива. Стандартная установка занимает ~150 МБ (в таком варианте, кстати, много чего есть, даже xeyes). Ещё в архиве есть какие-то SDK, так что полный комплект уже на ~500 МБ вроде бы тянет.

    А что, у них там в микрософте, утилиты командной строки не изобрели?
    У них же гуй есть. Какая уж тут командная строка…
    Утилиты-то имеются. Есть даже книжка «Командная строка Windows», целых 480 страниц. Однако «полнофункциональные» утилиты лежат в дополнительных пакетах (в частности, Resource Kit, Support Tools), так что мне вот оказалось проще (и не в первый раз кажется) костыль сообразить.

    костылик мне по нраву
    Хорошо, если так. Тем более прошу не забывать, что писалось это как в лучшем случае демонстрация возможности, а не полноценная программа.

    Спасибо, Анонимус!
    Ну анонимусу, положим, тоже в некотором роде профитъ есть.

    …и потратил целый час…Плюнул и откатил…
    Согласен.
    Я зачастую сначала пишу, а потом думаю.

    ОтветитьУдалить
  17. > Слушай, штандартенфюрер, а где правило посмотреть-то можно? На пальцах по секрету просветишь?

    gramota.ru выручает:

    > В каком случае так(же) пишется раздельно, а в каком слитно?
    >
    > Ответ
    > Написание также имеет значение 'еще', например: это необходимо также и мне. Раздельное написание - так же - имеет значение 'таким же образом', например: мне это необходимо так же, как и вам.

    ОтветитьУдалить
  18. Михаил, может быть ты и в курсе, но может быть и пригодится: об оптимизации FFTW под конкретную машину и используемый размер массива: http://wiki.octave.org/wiki.pl?OptimizingFourierTransforms

    P.S. И да, закапывай систему комментирования blogger и переходи на дискус :) Не флейма ради, а ради борьбы со спамом и общей пользы. Ты, конечно, послание студента Андрея, нашедшего наконец девушку, отсюда уже удалил, но мы-то все его на почту всё равно получили.

    ОтветитьУдалить
  19. @cristobal-junta комментирует...
    Лицензия на Matlab для студентов и аспирантов стоит $99
    Именно. Жлобская у них политика.

    @Minoru комментирует...
    gramota.ru выручает
    Спасибо. УшОл просвищятса :-)

    @uawiki комментирует...
    taskmon.exe - gui
    tasklist - cli

    О, спасибо! Я не знал.

    @Сергей комментирует...
    об оптимизации FFTW под конкретную машину и используемый размер массива
    Спасибо, Сергей! Меня впечатлила предыдущая ссылка про интеловскую оптимизацию. Своим местным показал, народ уже рвётся в бой это пробовать.

    P.S. И да, закапывай систему комментирования blogger и переходи на дискус :)
    Я скажу, почему я блоггеровскую систему не закопаю. Она далеко не идеальна и тут есть куда улучшать. НО! Блоггеровские комменты находятся на одном и том же ресурсе, что и блоггер. Если всё рухнет - рухнет сразу всё, а не по кускам. И если работает (а блоггер довольно надёжен) - всё работает. Если дискас завтра склеит ласты, судьба комментов сомнительна.

    Короче - все яйца в одной корзине. Исключение составляет только Picasa, где гугель хостит картинки. Если открыть исходники моего шаблона, то можно увидеть: графика шаблона либо впаяна намертво с помощью base64, либо на той же Пикасе.

    Это исключает тот бардак, что графика шаблона на imageshack, картинки на пикасе, комменты на дискасе, и когда одно из них отваливается - блог в нерабочем виде. Это мы уже с imageshack проходили. Больше не надо.

    Не флейма ради, а ради борьбы со спамом и общей пользы. Ты, конечно, послание студента Андрея, нашедшего наконец девушку, отсюда уже удалил
    Это был не я - это его отсеяла блоггеровская приблуда для борьбы со спамом. На мой взгляд, разбазаривание блога того не стоит.

    Это тем более правда, что зачастую много нужного именно в комментах. И то, что они все тут, это прекрасно: я могу искать в том числе и по ним через поисковую форму на блоге.

    Так что пущай будет всё тут. А спамеры с девушками, членами, лотереями и виагрой это не самое страшное. И их не так уж и много.

    ОтветитьУдалить
  20. http://www.termech.ru/node/398
    Становишься популярным :)

    ОтветитьУдалить
  21. @Михаил Саушкин комментирует...
    Становишься популярным :)
    Ого, даже так! Название у сайта, конечно, пафосное, но тем не менее польщён. Надо бы статейку поправить, а то я переместил скрипты для тестирования.
    Пост обновил, теперь всё в одном архиве и загружабельно с pbworks.

    ОтветитьУдалить
  22. пишу на Питоне, очень удобно: и полнофункциональный язык, и огромный выбор различных готовых процедур в numpy и scipy, для вывода графики есть matplotlib и порт на тот же Gnuplot

    ОтветитьУдалить
  23. Попробовал под WinXP-X32 запустить тесты. Octave 3.2.4 и Matlab 7.12 (2011a). На FFT2 Octave быстрее на ~25% ... о разах речи нет! Если дадите ту тулзу (DIY) для выяснения объема потраченой памяти о которой писали выше то напишу и про память.

    ОтветитьУдалить
  24. Насчёт графики - скачал недавно octave под последним cygwin на windows. Работает великолепно, хотя раза в 2-3 медленнее linuxового. Правда со своими тонкостями работы с графикой (там есть gnuplot и fltk - последнее я понял это OpenGL).

    Насчёт matlab - а нельзя кому-то поюзать у друга?

    ОтветитьУдалить
  25. Анонимус негодует
    1. Celeron+2GB ну не сурьезно, у анонимуса коре 2 дуо +3 гб+CUDA
    2. Matlab+MEX(хоть MSVC,ICC или православный GCC(gnumex см)) и прирост просто ацкий, особенно если есть циклы без больших матриц.
    3. CUDA в матлаб (если видео хорошее см версию CUDA и т.д.) или CUDA в mex, за месяц можно освоить.
    4. Чем больше памяти жрет, тем быстрее это хорошо, правильный софт не сильно должен экономить память, а должен эффективно ее использовать (если можно то всю).

    ОтветитьУдалить
  26. Отрадно, что анонимус столь горячо радеет за MEX-файлы, я в них совсем не разбираюсь. Matlab всё же проприетарный, поэтому выбрал православный Си + GSL. В наших пенатах считают на всём, начиная от Mathematica и заканчивая фортраном.

    ОтветитьУдалить
  27. А вот как увеличить объем используемой памяти для той же октавы? Если например матрицы большие.

    ОтветитьУдалить
  28. Почему никто не рассматривает такие пакеты как Scilab и Maxima? Я удивлен.

    ОтветитьУдалить
  29. @Анонимный комментирует...
    Анонимус негодует
    В данном случае - напрасно :-)

    Matlab+MEX(хоть MSVC,ICC или православный GCC(gnumex см)) и прирост просто ацкий, особенно если есть циклы без больших матриц.
    Здесь я согласен. Про "адский" - я наблюдаю на оптимизационных алгоритмах 10-15х ускорение, но это если использовать BLAS+ATLAS и всё, что можно, делать через pointers. Что отнимает непозволительно много времени на, собственно, программирование (но для оптимизационных алгоритмов - оправдано).

    CUDA в матлаб (если видео хорошее см версию CUDA
    Оно да, круто конечно. Но это не входит в сферу обязанностей автора этих строк. Моё дело - high-level, разработка алгоритмой и методов. Программирование и железо будут делать другие.

    Чем больше памяти жрет, тем быстрее это хорошо
    Эхм... Анонимус, как бы это тебе сказать... ну ты не прав, в общем :-) Алгоритмы должны использовать память эффективно.


    @iv_vl комментирует...
    Отрадно, что анонимус столь горячо радеет за MEX-файлы, я в них совсем не разбираюсь.
    А я вот вкусил от этого запретного плода, хотя и по нужде. Поддерживаю Анонимуса - оно того стоит, и освоить в общем не очень сложно. Надо бы про это пост закатать, а то с туториалами по MEX не очень густо. Ну и самому чтоб не забылось - там есть грабли, на которые наступить просто, а выяснить - не очень.

    Matlab всё же проприетарный
    Он работает, у него есть обратная совместимость, profiler, MEX, куча книг и туториалов. А всё остальное идёт лесом, в лучшем случае (Octave) - на корм скубентам, для обучения.

    В наших пенатах ... заканчивая фортраном.
    Вот этот труп уже надо прекратить насиловать :-) Я, конечно, извиняюсь, но тем не менее.

    @Анонимный комментирует...
    Почему никто не рассматривает такие пакеты как Scilab и Maxima? Я удивлен.
    А я нет: не рассматривают потому, что эти поделки не годятся для сколько-нибудь серьёзного использования. Maxima, при использовании графической обёртки, съедобна, но её синтаксис писали марсиане. Пост по максиме уже был.

    Scilab это вообще чёрт знает что и сбоку бант. С тем абсолютно угрёбищным интерфейсом, что есть сейчас, это стыдно показывать кому-либо вообще. По сцылабу написана одна (1) книга - авторами сцылаба же. Людьми, которые ненавидят писать документацию. Scicos (xcos) - неработоспособное дерьмо. Я на нём скубентам пытался показать расчёт простой лабы по теории управления, и не смог этого сделать ("matrix dimensions do not agree" - вы шутите?!). Язык с матлабом не совместим - зачем это убожество вообще нужно!?

    Пост по Scilab когда-нибудь будет, когда я из него уберу все неприличные ругательства и проклятия в адрес криворуких погромистов.

    ОтветитьУдалить
  30. На всякий случай: Octave никогда и не рассматривалась никем как альтернатива MATLAB - Octave была написана как дополнение к книжке по химическим реакторам. Октава предназначалась (и годится исключительно для) дешёвой замены матлаба при обучении студентов:

    At first it was intended to be a companion to a chemical reactor design course. Real development was started by John W. Eaton in 1992. Отсюда.

    Справедливости ради отмечаю заметные улучшения в 3-ей ветке, направленные на совместимость с матлабом.

    Да, тут вот набрёл на ещё одну попытку сделать гуй для октавы - вполне себе удачную. Блог этой программы, хотя автор даже не удосужился дать ей название. Гугель саммер оф коде, мда... Скриншот. Исходники в HG тут - собирайте, кому не лень это делать. Обсуждение на убунту форуме.

    ОтветитьУдалить
  31. Михаил, до поста про MEX-файлы еще далеко, поэтому скажу сейчас. Да, Matlab ты любишь, хоть и не признаёшь этого. Вот пункты, по которым я выбрал Си:
    1. Быстродействие. Моя плакал, когда недельная работа Matlab была сделана за 20 минут.
    2. Такие средства, как Eclipse CDT (C/C++ Development Tooling), уделают разработку кода в Matlab на раз.
    3. Для работы достаточно GCC, т.е., работает из коробки в любом линуксе.
    4. Правильный подбор ключей оптимизации компилятора позволяет получить существенный прирост в скорости.
    4. Дебаггер у тебя хоть есть? А тут как минимум GNU Debugger.
    6. Быстрые библиотеки для расчёта те же самые и даже намного больше.
    5. Весь процесс автоматизируется Makefile.
    6. Синтаксис поддерживается любым мало-мальски годным редактором.
    7. Поддержка распараллеливания OpenMP, MPI.
    8. Все самые передовые технологии обкатываются на Си, поэтому превратиться в легаси ему не светит.
    9. Зачем платить за проприетарный продукт, когда намного большее доступно бесплатно?

    Сейчас ты мне расскажешь про легаси, но у тебя был проект, требующий нового подхода, быстродействия за счёт BLAS и изучения MEX-файлов. И теперь ты сам создал груду легаси кода, что бедные студенты ещё не раз помянут тебя недобрым словом. Алгоритм, полагаю, важнее, чем всё это мессиво из спагетти кода. И да, жду поста «Си — гаечный ключ для забивания треугольных болтов».

    ОтветитьУдалить