Loading AI tools
парадигма програмування, що узагальнює операції над скалярами для прозорого застосування до багатовимірних масивів З Вікіпедії, вільної енциклопедії
Програмування масивів — засіб в інформатиці, що дозволяє застосовувати операції до всього набору значень одночасно. Зазвичай використовується в наукових та інженерних задачах.
Сучасні мови програмування, які підтримують програмування масивів (також відомі як векторні або багато-вимірні мови), розробили спеціально для узагальнення операцій над скалярами для прозорого застосування до векторів, матриць і масивів вищої розмірності.
До них належать APL, J, Fortran, MATLAB, Analytica , Octave, R, Cilk Plus, Julia, Perl Data Language (PDL) . У цих мовах операцію, яка працює над цілими масивами, можна назвати векторизованою операцією,[1] незалежно від того, чи виконується вона на векторному процесорі, який реалізує векторні інструкції.
Операції програмування масивів стисло виражають ідеї щодо маніпулювання даними. Рівень стислості може бути вражаючим: можна знайти такі однорядкові програми, які вимагають кількох сторінок об'єктно-орієнтованого коду з циклами.
Програмування масивів дуже добре підходить для неявного розпаралелювання . Крім того, Intel і сумісні ЦП, розроблені та вироблені після 1997 року, містили різні розширення набору інструкцій, починаючи від MMX і закінчуючи SSSE3 і 3DNow!, які містять базові операції SIMD. В 2020-х роках з'явився AVX-512, що перетворило сучасні ЦП на векторні процесори.
Програмування масивів відрізняється від паралельної обробки тим, що один фізичний процесор виконує операції над групою елементів одночасно, тоді як паралельна обробка має на меті розділити більшу проблему на менші (MIMD), які вирішуються по частинах багатьма процесорами.
На 2023 рік процесори з кількома ядрами та графічні процесори з тисячами загальних обчислювальних ядер поширені на персональних комп'ютерах.
A := A + B;
A ← A + B
A = A + B;
Оператор лівого ділення квадратної матриці використовується для розв'язку СЛАР A * x = b
, помноживши обидві частини зліва на обернену до A
:
A^-1 *(A * x) == A^-1 * (b)
(A^-1 * A)* x == A^-1 * b
x = A^-1 * b
де ==
— оператор рівності.
Для довільних матриць псевдообернення A+
(у мовах MATLAB і GNU Octave: pinv(A)
) використовується аналогічно:
pinv(A) *(A * x) == pinv(A) * (b)
(pinv(A) * A)* x == pinv(A) * b
x = pinv(A) * b
Проте ці рішення не є ані лаконічнішими, ані ефективнішими з точки зору обчислень. Бо виконуються дві операції (обернення та множення), замість однієї (ділення зліва).
Оскільки множення матриць не комутативне, MATLAB вводить оператор лівого ділення \
, щоби підтримувати аналогії зі скалярним випадком, таким чином спрощуючи математичне міркування та зберігаючи стислість:
A \ (A * x)==A \ b
(A \ A)* x ==A \ b
(множення є асоціативним, комутативність більше не потрібна)x = A \ b
Це приклад не лише стислого запису, але й ефективнішого обчислення, який реалізований в бібліотеках ATLAS та LAPACK.[3]
Використання спеціалізованих і ефективних бібліотек для стисліших абстракцій також поширене в інших мовах програмування.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.