Massiv programmalastırıw

Kompyuter iliminde **massiv programmalastırıw** bir waqıtta pútkil mánisler toplamına operaciyalardı qollanıwǵa imkaniyat beretuǵın sheshimlerdi bildiredi. Bunday sheshimler ádette ilimiy hám injenerlik tarawlarda qollanıladı. 

Massiv programmalastırıwdı qollap-quwatlaytuǵın zamanagóy programmalastırıw tilleri (vektor yamasa kóp ólshemli tiller dep te ataladı) skalyarlarǵa operaciyalardı vektorlarǵa, matricalarǵa hám joqarı ólshemli massivlerge ashıq túrde qollanıw ushın ulıwmalastırıw maqsetinde arnawlı islep shıǵılǵan. Olarǵa APL, J, Fortran, MATLAB, Analytica, Octave, PL/I, R, Cilk Plus, Julia, Perl Data Language (PDL) hám Raku kiredi. Bul tillerde pútkil massivlerge isleytuǵın operaciya, ol vektor kórsetpelerin ámelge asıratuǵın vektor processorında orınlanıwına qaramastan, vektorlastırılǵan operaciya dep atalıwı múmkin. Massiv programmalastırıw primitivleri maǵlıwmatlardı manipulyaciyalaw haqqındaǵı keń ideyalardı qısqasha ańlatadı. Qısqalıq dárejesi ayırım jaǵdaylarda ádewir bolıwı múmkin: bir neshe bet obyektke baǵdarlanǵan kodtı talap etetuǵın massiv programmalastırıw tiliniń bir qatarlı kodın tabıw siyrek emes.

## Massiv koncepciyaları
Massiv programmalastırıwdıń tiykarǵı ideyası — operaciyalardıń bir waqıtta pútkil mánisler toplamına qollanılıwı. Bul onı joqarı dárejeli programmalastırıw modeline aylandıradı, sebebi ol baǵdarlamashıǵa jeke skalyar operaciyalardıń anıq cikllerine baylanıspay, pútkil maǵlıwmatlar toplamları haqqında oylawǵa hám olar menen islesiwge imkaniyat beredi.

Kennet E. Ayverson massiv programmalastırıwdıń (haqıyqatında APL ge silteme berip) tiykarın bılay táriyipledi:

Massiv programmalastırıw hám oylawdıń tiykarı — jeke elementleri uqsas yamasa jaqın jaylasqan maǵlıwmatlardıń qásiyetlerin tabıw hám olardan paydalanıw. Maǵlıwmatlardı óziniń qurawshı bólimlerine (yamasa skalyar muǵdarlarına) jasırın túrde bóletuǵın obyektke baǵdarlanıwdan ayırmashılıǵı, massiv baǵdarlanıwı maǵlıwmatlardı gruppalawǵa hám birdey qayta islewdi qollanıwǵa umtıladı.

Funkciya dárejesi — bul ulıwma massiv programmalastırıw tilleri ushın, matematikadaǵı tensor dárejesine uqsas áhmiyetli koncepciya: maǵlıwmatlarǵa isleytuǵın funkciyalardı olar isleytuǵın ólshemler sanı boyınsha klassifikaciyalawǵa boladı. Mısalı, ádettegi kóbeytiw skalyar dárejeli funkciya bolıp tabıladı, sebebi ol nol ólshemli maǵlıwmatlarǵa (jeke sanlar) isley aladı. Kross kóbeytiw operaciyası vektor dárejeli funkciyanıń mısalı bolıp tabıladı, sebebi ol skalyarlarǵa emes, al vektorlarǵa isley aladı. Matrica kóbeytiwi 2-dárejeli funkciyanıń mısalı bolıp tabıladı, sebebi ol 2-ólshemli obyektlerge (matricalar) isley aladı. Jıynaw operatorları kirgiziw maǵlıwmat massiviniń ólshemliligin bir yamasa bir neshe ólshemge azaytadı. Mısalı, elementlerdi qosıw kirgiziw massivin 1 ólshemge jıynaydı.

## Qollanılıwı
Massiv programmalastırıw jasırın parallellestiriw ushın júdá qolaylı; házirgi waqıtta bul kóp izertlewlerdiń teması. Bunnan tısqarı, 1997-jıldan keyin islep shıǵılǵan hám óndirilgen Intel hám sáykes keletuǵın oraylıq processorlar MMX-ten baslap SSSE3 hám 3DNow!-ǵa shekem dawam etken hár túrli kórsetpeler toplamı keńeytpelerin óz ishine aldı, olar ápiwayı SIMD massiv imkaniyatların óz ishine aladı. Bul 2020-jıllarǵa shekem AVX-512 sıyaqlı kórsetpeler toplamları menen dawam etti, bul zamanagóy oraylıq processorlardı quramalı vektor processorlarına aylandırdı. Massivti qayta islew parallel qayta islewden ayırmashılıq etedi, bunda bir fizikalıq processor bir waqıtta bir topar elementlerge operaciyalardı orınlaydı, al parallel qayta islew úlkenirek máseleni kóp processorlar tárepinen bólek-bólek sheshiliwi ushın kishirek bólimlerge (MIMD) bóliwdi maqset etedi. 2023-jılǵa kelip, kóp yadrolı processorlar hám mıńlaǵan ulıwma esaplaw yadroları bar GPUlar keń tarqalǵan.

## Tiller
Massiv programmalastırıw tilleriniń kanonikalıq mısalları — Fortran, APL hám J. Basqaları: A+, Analytica, Chapel, IDL, Julia, K, Klong, Q, MATLAB, GNU Octave, Scilab, FreeMat, Perl Data Language (PDL), R, Raku, S-Lang, SAC, Nial, ZPL, Futhark hám TI-BASIC.

### Skalyar tiller
C hám Pascal sıyaqlı skalyar tillerde operaciyalar tek jeke mánislerge qollanıladı, sonlıqtan a+b eki sandıń qosılıwın ańlatadı. Bunday tillerde bir massivti ekinshisine qosıw indekslewdi hám cikldi talap etedi, bunıń kodlanıwı zeriktiredi.
```c
for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        a[i][j] += b[i][j];
    }
}
```
Massivke tiykarlanǵan tillerde, mısalı, Fortranda, joqarıdaǵı ishki for-cikli bir qatarda massiv formatında jazılıwı múmkin,
```fortran
a = a + b
```
yamasa alternativ túrde, obyektlerdiń massiv tábiyatın ayrıqsha kórsetiw ushın,
```fortran
a(:,:) = a(:,:) + b(:,:)
```
C sıyaqlı skalyar tillerde tildiń ózinde jergilikli massiv programmalastırıw elementleri bolmasa da, bul usı tillerde jazılǵan programmalar vektorlastırıwdıń tiykarındaǵı texnikaların hesh qashan paydalanbaydı degen sóz emes (yaǵnıy, eger bar bolsa, oraylıq processordıń vektorǵa tiykarlanǵan kórsetpelerin paydalanıw yamasa bir neshe oraylıq processor yadroların paydalanıw). GCC sıyaqlı ayırım C kompilyatorları geypara optimallastırıw dárejelerinde óziniń evristikaları payda aladı dep esaplaǵan kod bólimlerin anıqlaydı hám vektorlastıradı. Basqa bir usıl OpenMP API tárepinen berilgen, ol bir neshe oraylıq processor yadroların paydalanıw arqalı kodtıń sáykes bólimlerin parallellestiriwge imkaniyat beredi.

## Derekler

__BÖLİDİMÖNDEMEW__