Как устроен современный MATLAB? | KV.by
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.
Но и циклы не были забыты. В 2003 г. в составе MATLAB (версии 6.5, R13) появился JIT-компилятор. Он анализирует выполняемую программу, транслируя повторяющиеся фрагменты в машинный код. В результате, при последующих повторениях скорость выполнения этих фрагментов значительно возрастает (иногда — до 100 раз), что позволяет сделать некоторые циклы почти столь же быстрыми, как их векторизованные аналоги. Но: для того, чтобы JIT-компилятор можно было успешно применить, код цикла должен удовлетворять определенным требованиям.
Краткую сводку этих требований, а также советов по векторизации программы, можно получить в работе Writing Fast MATLAB Code, а более детальную и свежую информацию — в блоге Undocumented Matlab Яира Альтмана или на страницах его книги “Accelerating MATLAB Performance” — наиболее подробному на сегодняшний день руководству по оптимизации программ MATLAB. Кстати, приведенное выше использование функции version также относится к недокументированным возможностям пакета.
В качестве более дешевой альтернативы MATLABу можно использовать Python c библиотеками NumPy/SciPy и установленной MKL. При этом вместо JIT-компилятора MATLAB применяются Numba или Cython. Многочисленные тесты, результаты которых можно найти в Интернет (например, этот), говорят о том, что MATLAB и связка Python + SciPy выдают весьма близкие по быстродействию результаты, так что на первый план выступают умение программиста и его знание особенностей конкретного пакета.
Дмитрий Храмов
Версия для печати
Рубрики:
Software: ПК
Теги:
Matlab
программа
расчеты
Оценка публикации
Всего голосов: 0
Опубликовал: dkhramov,
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
matlab-end — Googlesuche
AlleBilderVideosBücherMapsNewsShopping
suchoptionen
Завершить блок кода или указать последний индекс массива — MATLAB end
www. mathworks.com который завершается для операторов while, switch, try, if и parfor. Без оператора end for , while , switch , try , if и …
Описание · Примеры · Объявление функции · Доступ к элементам вектора
end as Object Index — MATLAB & Simulink — MathWorks
www.mathworks.com › help › matlab › matlab_oop
Когда вы используете end в выражении индексации объекта, таком как A(4:end), конец функция возвращает значение индекса, соответствующее последнему элементу в этом …
Использование конца в качестве переменной для доступа к частям массива — ответы MATLAB
de.mathworks.com › matlabcentral › 357732-using-…
Мне нужно получить доступ к частям массива, иногда с 1:n, а иногда с 1:end. Однако по мере выполнения программы длина до конца будет меняться.
Завершить блок кода или указать последний индекс массива — MATLAB end
es.mathworks.com › help › matlab › ref › end
end — это ключевое слово, которое заканчивается на , while , switch , try , if и . -6. [ …
end (функции MATLAB)
www.ece.northwestern.edu › techdoc › ref › end
end используется для завершения операторов , while , switch , try и if . Без оператора end for , while , switch , try , и if wait for continue …
end (справочник по функциям MATLAB)
math.jhu.edu › ~shiffman › help › techdoc › ref › end
end используется для завершения операторов for , while , switch , try и if . Без оператора end for , while , switch , try , и if wait for next …
MATLAB end — Javatpoint
www.javatpoint.com › matlab-end
Пример: используйте ключевое слово end для завершения блока кода: · a = randi(100,4,4) · b = a(end ,2:end) % здесь первый конечный аргумент указывает на последнюю строку, · %и …
NumPy для пользователей MATLAB
numpy.org › документ › стабильный › пользователь › numpy-for-matla…
построить матрицу из блоков a , b , c и d . а (конец). а[-1]. получить доступ к последнему элементу в векторе MATLAB (1xn или nx1) или одномерном массиве NumPy a (длина n).
[R] Конечный оператор Matlab
stat.ethz.ch › pipermail › r-help › 2007-июнь
27.06.2007 · Привет, Маркус, Кристоф. Я также использую и Matlab, и R. Я согласен с Кристофом: вы также можете определить «конечную» функциональность с помощью nrow или length …
Ähnlichesuchanfragen
MATLAB end+1
MATLAB end function Early
MATLAB array end
MATLAB and 903B last 09 0MATLAB last 09
MATLAB last 09 0
MATLAB index элемент массива
MATLAB Первый элемент массива
MATLAB INDEXING
MATLAB -IS -NOT — Google SUCE
ALLVIDEOSBILDERNEWSMAPSSHOPPINGBüch matlab › ref › not
not( A ) — это альтернативный способ выполнения ~A , но он редко используется. Это позволяет перегружать операторы для классов. Примеры. свернуть все. Логическое отрицание матрицы.
Описание · Примеры · Входные аргументы
«не равно» в MATLAB — MathWorks
de.mathworks.com › matlabcentral › ответы › 467…
Нет. оператор означает, что все, что следует за ним, будет передано в операционную систему (при условии, что это первая часть команды, в противном случае …
Ähnliche Fragen
Что такое != В MATLAB?
Не является командой MATLAB?
Что не является оператором в MATLAB?
Что такое не символ в MATLAB?
Логическое НЕ для символьных выражений — MATLAB not — MathWorks
www.mathworks.com › help › symbolic › not
Эта функция MATLAB представляет логическое НЕ.
Примеры · Входные аргументы
Как использовать оператор не равно ‘~=’ в операторе if? — MathWorks
de.mathworks.com › matlabcentral › ответы › 326…
Как использовать оператор не равно ‘~=’ в… Узнайте больше об операторе if, избегайте переобучения MATLAB.
Как использовать оператор не равно ‘~=’ в операторе if? — MathWorks
www. mathworks.com › matlabcentral › ответы › 3…
… не равно оператору ‘~=’ в… Узнайте больше об операторе if, избегайте переобучения MATLAB. … Я ожидаю, что он не будет отображать «ошибку», если пользователь вводит A или B. ® представляет логические данные с использованием логического типа данных. … Найдите логическое НЕ… Правила приоритета определяют порядок, в котором MATLAB оценивает …
not (функции MATLAB)
matlab.izmiran.ru › help › techdoc › ref › not
~A выполняет логическое НЕ входного массива A и возвращает массив, содержащий элементы, установленные либо в логическую 1 (true ) или логический 0 (ложь). Элемент …
не распознается в графическом интерфейсе Matlab. не равно оператору ‘~=’ в Подробнее … уверен, с чего начать, потому что вы не знакомы с тем, как писать код MATLAB, …
MATLAB: управляющие структуры — операторы if
www.lehigh.edu › ~ineng2 › clipper › notes › MAT…
Структуры if в MATLAB очень похожи на те, которые мы изучили в C++.