Програмування масивів — засіб в інформатиці, що дозволяє застосовувати операції до всього набору значень одночасно. Зазвичай використовується в наукових та інженерних задачах.
Сучасні мови програмування, які підтримують програмування масивів (також відомі як векторні або багато-вимірні мови), були розроблені спеціально для узагальнення операцій над скалярами для прозорого застосування до векторів, матриць і масивів вищої розмірності.
До них належать APL, J, Fortran, MATLAB, Analytica, Octave, R, Cilk Plus, Julia, Perl Data Language (PDL). У цих мовах операцію, яка працює над цілими масивами, можна назвати векторизованою операцією, незалежно від того, чи виконується вона на векторному процесорі, який реалізує векторні інструкції.
Операції програмування масивів стисло виражають ідеї щодо маніпулювання даними. Рівень стислості може бути вражаючим: можна знайти такі однострокові програми, які вимагають кількох сторінок об'єктно-орієнтованого коду з циклами.
Імплементація
Програмування масивів дуже добре підходить для неявного розпаралелювання. Крім того, Intel і сумісні ЦП, розроблені та вироблені після 1997 року, містили різні розширення набору інструкцій, починаючи від MMX і закінчуючи SSSE3 і 3DNow!, які включають базові операції SIMD. В 2020-х роках з'явився AVX-512, що перетворило сучасні ЦП на векторні процесори.
Програмування масивів відрізняється від паралельної обробки тим, що один фізичний процесор виконує операції над групою елементів одночасно, тоді як паралельна обробка має на меті розділити більшу проблему на менші (MIMD), які вирішуються по частинах багатьма процесорами.
На 2023 рік процесори з кількома ядрами та графічні процесори з тисячами загальних обчислювальних ядер є поширеними на персональних комп'ютерах.
Мови
- Ada
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.
Бібліотеки
Використання спеціалізованих і ефективних бібліотек для більш стислих абстракцій також поширене в інших мовах програмування.
- У декілька бібліотек лінійної алгебри використовують здатність мови перевантажувати оператори (Eigen, та ).
- Дуже стислу абстракцію програмування масивів для мови Python забезпечує бібліотека NumPy.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Programuvannya masiviv zasib v informatici sho dozvolyaye zastosovuvati operaciyi do vsogo naboru znachen odnochasno Zazvichaj vikoristovuyetsya v naukovih ta inzhenernih zadachah Suchasni movi programuvannya yaki pidtrimuyut programuvannya masiviv takozh vidomi yak vektorni abo bagato vimirni movi buli rozrobleni specialno dlya uzagalnennya operacij nad skalyarami dlya prozorogo zastosuvannya do vektoriv matric i masiviv vishoyi rozmirnosti Do nih nalezhat APL J Fortran MATLAB Analytica Octave R Cilk Plus Julia Perl Data Language PDL U cih movah operaciyu yaka pracyuye nad cilimi masivami mozhna nazvati vektorizovanoyu operaciyeyu nezalezhno vid togo chi vikonuyetsya vona na vektornomu procesori yakij realizuye vektorni instrukciyi Operaciyi programuvannya masiviv stislo virazhayut ideyi shodo manipulyuvannya danimi Riven stislosti mozhe buti vrazhayuchim mozhna znajti taki odnostrokovi programi yaki vimagayut kilkoh storinok ob yektno oriyentovanogo kodu z ciklami ImplementaciyaProgramuvannya masiviv duzhe dobre pidhodit dlya neyavnogo rozparalelyuvannya Krim togo Intel i sumisni CP rozrobleni ta virobleni pislya 1997 roku mistili rizni rozshirennya naboru instrukcij pochinayuchi vid MMX i zakinchuyuchi SSSE3 i 3DNow yaki vklyuchayut bazovi operaciyi SIMD V 2020 h rokah z yavivsya AVX 512 sho peretvorilo suchasni CP na vektorni procesori Programuvannya masiviv vidriznyayetsya vid paralelnoyi obrobki tim sho odin fizichnij procesor vikonuye operaciyi nad grupoyu elementiv odnochasno todi yak paralelna obrobka maye na meti rozdiliti bilshu problemu na menshi MIMD yaki virishuyutsya po chastinah bagatma procesorami Na 2023 rik procesori z kilkoma yadrami ta grafichni procesori z tisyachami zagalnih obchislyuvalnih yader ye poshirenimi na personalnih komp yuterah MoviAdaA A B APLA A B MATLABA A B Dilennya matric i sintaksisOperator livogo dilennya kvadratnoyi matrici vikoristovuyetsya dlya rozv yazku SLAR A x b pomnozhivshi obidvi chastini zliva na obernenu do A A 1 A x A 1 b A 1 A x A 1 b x A 1 b de operator rivnosti Dlya dovilnih matric psevdoinversiya A sup sup u movah MATLAB i GNU Octave pinv A vikoristovuyetsya analogichno pinv A A x pinv A b pinv A A x pinv A b x pinv A b Odnak ci rishennya ne ye ani bilsh lakonichnimi ani bilsh efektivnimi z tochki zoru obchislen Bo vikonuyutsya dvi operaciyi obernennya ta mnozhennya zamist odniyeyi dilennya zliva Oskilki mnozhennya matric ne komutativne MATLAB vvodit operator livogo dilennya shob pidtrimuvati analogiyi zi skalyarnim vipadkom takim chinom sproshuyuchi matematichne mirkuvannya ta zberigayuchi stislist A A x A b A A x A b mnozhennya ye asociativnim komutativnist bilshe ne potribna x A b Ce ne lishe priklad stislogo zapisu ale j bilsh efektivnogo obchislenya yakij realizovanij v bibliotekah ATLAS ta LAPACK BibliotekiVikoristannya specializovanih i efektivnih bibliotek dlya bilsh stislih abstrakcij takozh poshirene v inshih movah programuvannya U C dekilka bibliotek linijnoyi algebri vikoristovuyut zdatnist movi perevantazhuvati operatori Eigen ta inshi movi Duzhe stislu abstrakciyu programuvannya masiviv dlya movi Python zabezpechuye biblioteka NumPy