MATLAB поєднує в собі простий в освоєнні мову з високою швидкістю розрахунків. Завдяки чому досягається така швидкодія? Що потрібно зробити, щоб написати на MATLAB по-справжньому швидку програму? Нарешті, чи існує гідна альтернатива MATLABу серед вільного програмного забезпечення? На всі ці питання ми і постараємося зараз відповісти.
MATLAB з'явився в кінці 1970-х як скриптова мова і обгортка над функціями бібліотек лінійної алгебри LINPACK і EISPACK. Особливістю MATLAB є те, що базовий (а в ту пору - єдиний) тип даних в ньому - матриця, а не число. Завдяки цьому вдалося позбавити запис матричних операцій від циклів, зробивши її більш компактною і схожою на математичну. З іншого боку, використання найсучасніших на той момент бібліотек забезпечувало високу швидкодію розрахунків. Все це сприяло швидкому зростанню популярності MATLAB.
Множення матриці на число, записане різними способами
З тих пір пройшло більше тридцяти років. За ці роки про MATLAB були написані десятки книг, він став одним із стандартних мов для науково-технічних розрахунків. Відносна простота мови і висока швидкість виконуваних з його допомогою обчислень збереглися і як і раніше залишаються привабливими сторонами пакета. Але за рахунок чого це досягається? Як влаштований сучасний MATLAB?
Як і раніше, у MATLAB «під капотом» найсучасніші математичні бібліотеки. Зараз це: Intel Math Kernel Library (MKL) для операцій лінійної алгебри і Intel Integrated Performance Primitives Library (IPPL) - для оптимізації обробки зображень. MKL включає в себе, зокрема, бібліотеки: BLAS. реалізовує базові векторно-матричні операції, і LAPACK - сучасний розвиток LINPACK - містить вирішувачі завдань лінійної алгебри. Тому не дивно, що за швидкістю виконання MATLAB обганяє будь-який «саморобний» код, який реалізує векторно-матричні операції. Також впевнено обходить він і пакети, які використовують інші реалізації BLAS і LAPACK.
Справа в тому, що MKL і IPPL використовують SSE і AVX - набори інструкцій для процесора, які реалізують паралельні обчислення, в разі, коли потрібно виконати одну і ту ж послідовність дій над різними даними (SIMD). Це призводить до суттєвого зростання продуктивності, причому без будь-яких зусиль з боку користувача.
Крім того, MATLAB, ймовірно, використовує SSE / AVX і в функціях свого ядра, які реалізовані на С. По крайней мере, для розробки пакету MathWorks використовує Intel Parallel Studio XE. до складу якого входить компілятор C / C ++.
Цікаво, що на комп'ютерах з процесорами AMD MATLAB також використовує бібліотеки, розроблені в Intel, хоча AMD реалізувало свою бібліотеку з подібними можливостями - AMD Core Math Library (ACML).
Таким чином, швидкодія MATLAB складається з високооптимізовані бібліотек (Intel), неявній паралелізації (що також є заслугою Intel) і налаштованих на використання цих переваг функцій ядра (MathWorks). Ми не можемо знати точно ступінь впливу кожного з факторів, крім того вони можуть змінюватися від версії до версії і від платформи до платформи.
Визначення версій використовуваних MATLAB бібліотек за допомогою функції version
Для того щоб ефективно використовувати ці можливості, потрібно «векторизовать» програму, т. Е. Замінити використання циклів операціями над масивом в цілому, які як раз і реалізуються швидкими функціями MATLAB.
Коротке зведення цих вимог, а також рад по векторизації програми, можна отримати в роботі Writing Fast MATLAB Code. а більш детальну і свіжу інформацію - в блозі Undocumented Matlab Яіра Альтмана або на сторінках його книги "Accelerating MATLAB Performance" - найбільш докладного на сьогоднішній день керівництву щодо оптимізації програм MATLAB. До речі, наведене вище використання функції version також відноситься до недокументованим можливостям пакету.
У якості більш дешевої альтернативи MATLABу можна використовувати Python c бібліотеками NumPy / SciPy і встановленої MKL. При цьому замість JIT-компілятора MATLAB застосовуються Numba або Cython. Численні тести, результати яких можна знайти в Інтернет (наприклад, цей), говорять про те, що MATLAB і зв'язка Python + SciPy видають вельми близькі по швидкодії результати, так що на перший план виступають вміння програміста і його знання особливостей конкретного пакета.
Версія для друку
Крім Пітоновскіх математичних бібліотек, є ще два спеціалізованих безкоштовних скриптер: Октава і Сайлаб, обидва зі своїми мовами в дусі Матлаб і з активними громадами розробників (в першому випадку). Octave - не такий опрацьованості як Matlab і без багатьох утиліт останнього, але математики та фахівці з цифрової обробки сигналів, в загальному хвалять.
Octave і Scilab знаходяться в досить обмеженому зверненні, тому що у більшості серйозних проектів і компаній є гроші на Matlab. Виходить парадоксальна заколдованности коло; в результаті безкоштовні пакети з власними мовами скріптованія не отримують поширення та коропоратівний, досить дорогий Matlab перемагає. З Python-му - інша справа, Python пішов в широкий обіг, ось тому і пакети користуються більшою популярністю, хоча Python - в загальному досить повільний скриптер в реінкарнації CPython.
Його інший дистрибутив PyPy, який хвалять за швидкість і кажуть, що сам стандарт мови той імплементує точно. Проблема в тому, що PyPy розробляється набагато меншою групою з набагато більш слабким залученням великих компаній, тобто довіри до якості інтерпретатора менше. Сторінка Cythona стверджує, що вони додають щось до мови не проходячи через стандартну процедуру, що не їсти гуд.
У більшості серйозних проектів і компаній є гроші на Matlab. Виходить парадоксальна заколдованности коло; в результаті безкоштовні пакети з власними мовами скріптованія не отримують. [І т.д.]
Ахаха! Ніякого чаклунства, все по-чесному: давно є ламаний Matlab.
"Крім Пітоновскіх математичних бібліотек."
Тут важливо те, що "під" цими бібліотеками використовується Intel MKL. Інші б-ки, як правило, повільніше.
"Хоча Python - в загальному досить повільний скриптер в реінкарнації CPython"
Matlab теж був повільний, поки не обзавівся JIT-компілятором.
У статті все не вмістити. Я б додав ще: 1) Для користувачів Windows є python (x, y) - набір з декількох десятків наукових бібліотек зі зручним інсталятором. 2) Існують MKL для Scilab і вони цілком собі безкоштовні. Але тестів Matlab vs. Scilab + MKL я поки не проводив.
Гарячі теми
Найкраще в рубриках
З цим читають
Залишайтеся з нами
Не пропустіть важливі новини і статті від KV.by! Підпишіться на наші повідомлення.