Kontentke ótiw

Massiv programmalastırıw

Wikipedia — erkin enciklopediya

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[1]. 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:[2]

kópshilik programmalastırıw tilleri matematikalıq belgilewden ádewir tómen hám, meyli, ámeliy matematika tárepinen áhmiyetli dep esaplanatuǵın usıllarda oylaw quralı retinde az qollanıladı.

Tezis — programmalastırıw tillerinde tabılatuǵın orınlanıw imkaniyatı hám universallıqtıń artıqmashılıqların matematikalıq belgilew usınatuǵın artıqmashılıqlar menen bir pútin izbe-iz tilde nátiyjeli biriktiriwge boladı. belgilewdiń bir bólimin táriyiplew hám úyreniw qıyınshılıǵın onıń aqıbetlerin iyelew qıyınshılıǵınan ayırıw áhmiyetli. Mısalı, matrica kóbeytiwin esaplaw qaǵıydaların úyreniw ańsat, biraq onıń aqıbetlerin (mısalı, onıń associativligi, qosıwǵa qatnası boyınsha distributivligi hám sızıqlı funkciyalar menen geometriyalıq operaciyalardı kórsetiw qábileti) iyelew — bul basqa hám ádewir qıyınlaw másele. Shınında da, belgilewdiń óziniń usınıs etiwshiligi onı izertlew ushın usınatuǵın kóp qásiyetleri sebepli úyreniwdi qıyınlaw etip kórsetiw múmkin.

[...]

Kompyuterlerdiń hám programmalastırıw tilleriniń paydalanıwshıları kóbinese algoritmlerdiń orınlanıw nátiyjeliligi menen tiykarınan shuǵıllanadı hám sonlıqtan usı jerde keltirilgen algoritmlerdiń kópshiligin tez arada biykar etiw múmkin. Bunday biykar etiw qısqa kózqaraslı boladı, sebebi algoritmniń anıq málimlemesi ádette onnan anaǵurlım nátiyjelirek algoritmdi ańsat shıǵarıp alıw ushın tiykar bolıp xızmet ete aladı.

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.

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,

a = a + b

yamasa alternativ túrde, obyektlerdiń massiv tábiyatın ayrıqsha kórsetiw ushın,

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

  1. Stéfan van der Walt; S. Chris Colbert; Gaël Varoquaux (2011). "The NumPy array: a structure for efficient numerical computation". Computing in Science and Engineering (IEEE) 13 (2): 22–30. doi:10.1109/mcse.2011.37. 
  2. Iverson (1980). "Notation as a Tool of Thought". Communications of the ACM 23 (8): 444–465. doi:10.1145/358896.358899.