MATLAB поєднує в собі простий в освоєнні мову з високою швидкістю розрахунків. Завдяки чому досягається така швидкодія? Що потрібно зробити, щоб написати на MATLAB по-справжньому швидку програму? Нарешті, чи існує гідна альтернатива MATLABу серед вільного програмного забезпечення? На всі ці питання ми і постараємося зараз відповісти.
MATLAB з'явився в кінці 1970-х як скриптова мова і обгортка над функціями бібліотек лінійної алгебри LINPACK і EISPACK. Особливістю MATLAB є те, що базовий (а в ту пору - єдиний) тип даних в ньому - матриця, а не число. Завдяки цьому вдалося позбавити запис матричних операцій від циклів, зробивши її більш компактною і схожою на математичну. З іншого боку, використання найсучасніших на той момент бібліотек забезпечувало високу швидкодію розрахунків. Все це сприяло швидкому зростанню популярності MATLAB.
![Як влаштований сучасний matlab (Python загальному досить) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-e6e3fdc9.png)
Множення матриці на число, записане різними способами
З тих пір пройшло більше тридцяти років. За ці роки про 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 (програма) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-182427df.png)
Визначення версій використовуваних 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 я поки не проводив.
![Як влаштований сучасний matlab (розрахунки) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-cce8f5ed.jpg)
![Як влаштований сучасний matlab (розрахунки) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-7bb7129d.png)
![Як влаштований сучасний matlab (програма) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-1c863de0.jpg)
![Як влаштований сучасний matlab (Python загальному досить) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-4ace0400.jpg)
![Як влаштований сучасний matlab (програма) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-0e3513b8.png)
![Як влаштований сучасний matlab (Matlab Виходить парадоксальний) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-df3dffff.jpg)
Гарячі теми
Найкраще в рубриках
З цим читають
Залишайтеся з нами
![Як влаштований сучасний matlab (matlab) Як влаштований сучасний matlab](https://images-on-off.com/images/210/kakustroensovremenniymatlab-2a660b81.png)
Не пропустіть важливі новини і статті від KV.by! Підпишіться на наші повідомлення.