Топ питань
Часова шкала
Чат
Перспективи

Програмування масивів

парадигма програмування, що узагальнює операції над скалярами для прозорого застосування до багатовимірних масивів З Вікіпедії, вільної енциклопедії

Remove ads

Програмування масивів — засіб в інформатиці, що дозволяє застосовувати операції до всього набору значень одночасно. Зазвичай використовується в наукових та інженерних задачах.

Сучасні мови програмування, які підтримують програмування масивів (також відомі як векторні або багато-вимірні мови), розробили спеціально для узагальнення операцій над скалярами для прозорого застосування до векторів, матриць і масивів вищої розмірності.

До них належать APL, J, Fortran, MATLAB, Analytica(інші мови), Octave, R, Cilk Plus, Julia, Perl Data Language (PDL)(інші мови). У цих мовах операцію, яка працює над цілими масивами, можна назвати векторизованою операцією,[1] незалежно від того, чи виконується вона на векторному процесорі, який реалізує векторні інструкції.

Операції програмування масивів стисло виражають ідеї щодо маніпулювання даними. Рівень стислості може бути вражаючим: можна знайти такі однорядкові програми, які вимагають кількох сторінок об'єктно-орієнтованого коду з циклами.

Remove ads

Втілення

Програмування масивів дуже добре підходить для неявного розпаралелювання(інші мови). Крім того, Intel і сумісні ЦП, розроблені та вироблені після 1997 року, містили різні розширення набору інструкцій, починаючи від MMX і закінчуючи SSSE3 і 3DNow!, які містять базові операції SIMD. В 2020-х роках з'явився AVX-512, що перетворило сучасні ЦП на векторні процесори.

Програмування масивів відрізняється від паралельної обробки тим, що один фізичний процесор виконує операції над групою елементів одночасно, тоді як паралельна обробка має на меті розділити більшу проблему на менші (MIMD), які вирішуються по частинах багатьма процесорами.

На 2023 рік процесори з кількома ядрами та графічні процесори з тисячами загальних обчислювальних ядер поширені на персональних комп'ютерах.

Remove ads

Мови

Ada[2]
A := A + B;
APL
A  A + B
MATLAB
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]

Бібліотеки

Використання спеціалізованих і ефективних бібліотек для стисліших абстракцій також поширене в інших мовах програмування.

Примітки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads