**ScaLAPACK**, գծային հանրահաշվի խնդիրները տարրաբաշխված հիշողությամբ զուգահեռ համակարգերում լուծվող ենթածրագրային գրադարան։ Տվյալները փոխանակում է հաղորդագրության փոխանցման PVM (Parallel Virtual Machine) կամ MPI (Massage Passing Interface) լեզուների միջոցով։

Այն LAPACK նախագծի շարունակությունն է։ ScaLAPACK գրադարանը LAPACK գրադարանի զուգահեռացված տեսքն է։ ScaLAPACK գրադարանը դեռ գրված է միայն Fortran 77 լեզվով (բացառությամբ որոշ ենթածրգրեր գրված են C-ով) և SPMD (Single Program Multiple Data) ոճով, որը օգտագործվում է համակարգիչների համագործակցությունը իրար միջև հաղորդակցության փոխանցման համար։ Բոլոր անհրաժեշտ գործողությունները զուգահեռացման համար կատարվում է, այս նպատակի համար հատուկ նախատեսված, BLACS և PBLAS փաթեթներով։

BLACS (Basic Linear Algebra Communication Subprogramms)-ը հանդիսանում է ենթածրագրային գրադարան, որը նախատեսված է գծային հանրահաշվի խնդիրների զուգահեռացմանը։ Այն նախատեսված է տարրաբաշխված հիշողությամբ համակարգերի համար և հաղորդագրությունների փոխանցման համագործակցության համար։ Այդ դեպքում BLACS-ը ազատում է օգտագործողին MPI լեզվի իմացությունից։ Ենթադրվում է, որ զուգահեռ պրոցեսները կազմակերպվում է մի չափանի կամ երկչափանի պրոցեսորային ցանցով, որտեղ 
ամեն մի պրոցես ունի իր համարը ցանցում և իր մեջ պահում է մշակվող մատրիցի կամ վեկտերի մասերը։ Զուգահեռ պրոցեսների աշխատանքի համար BLACS-ը ներառում է ենթածրագրեր, որոնք իրականացնում են հետևյալ հիմնական ֆունկցիաները՝

* Պրոցեսորային ցանցի կառուցումը, փոփոխումը, տեղեկության սստացումը։
* Երկու պրոցեսների միջև հաղորդագրության փոխանցումը։
* Հաղորդագրության փոխանցումը մի մատրիցից միանգամից մի քանի պրոցեսներին։

Մյուս փաթեթը, որից օգտվում են ենթածրագրերը, հանդիսանում է PBLAS (Parallel Basic Linear Subprograms), BLAS գրադարանի զուգահեռ տեսակն է։ BLAS -ը բաղկացած է 3 մակարդակներից, որի ենթածրագրերը կատարում են գործողություններ մատրիցների և վեկտորների միջև։ Օրինակ ինչպես մատրիցի բազմապատկումը վեկտորով կամ երկու մատրիցների արտադրյալը։

Առաջին մակարդակը Level 1 կատարում է վեկտոր-վեկտոր գործողություն։
Երկրորդ մակարդակը Level 2 կատարում է մատրից-վեկտոր գործողություն։
Երրորդ մակարդակը Level 3 կատարում է մատրից-մատրից գործողություն։

PBLAS փաթեթի արտադրողները իրականացրել են նրա ենթածրագրերն այնպես, որ նրա ինտերֆեյսը չի տարբերվում BLAS-ի ինտերֆեյսից։ Քանի, որ մեծ մասը փոխհամագործակցությունը զուգահեռ պրոցեսների միջև կատարվում է PBLAS փաթեթի հիման վրա, ապա ScaLAPACK փաթեթի տեքստերը կամ լրիվ համընկնում են, կամ էլ գրեթե համընկնում են LAPACK փաթեթի ենթածրագրերի տեքստերի հետ։ Փաթեթները, որոնք օգտագործում են ենթածրագրերը, բաժանվում են հիերարխիական երկու մակարդակի՝ լոկալ և գլոբալ։ Լոկալ կոչվում են այն փաթեթները, որոնց ենթածրագրերը նախատեսված են աշխատանքը մեկ պրոցեսի վրա։ Գլոբալ կոչվում են այն փաթեթները, որոնք պարունակում են զուգահեռ ենթածրագրեր, որոնք նախատեսված են մի քանի պրոցեսների վրա։

Զուգահեռ ենթածրագրերը բաժանվում են ամբողջական և բազային ենթածրագրերի։ Ամբողջական կոչվում են այն ենթածրագրերը, որոնք ինքնուրույն կատարում են տրված կիրառական խնդիրը։ Այդ դեպքում նրանք չեն պահանջում այլ ենթածրագրեր օգտագործումը։ Բազային ենթածրագրերի բաժնին են պատկանում այն ենթածրագրերը, որոնց աշխատանքը կապված է իրար հետ։ Այդպիսի ենթածրագրերը աշխատում են մեկը մյուսին դիմելով։

ScaLAPACK փաթեթի կառուցվածքը
----------------------------

ScaLAPACK գրադարանը կազմված է 530 ենթածրագրերից, որոնք չորս տիպերի համար բաժանվում են երեք բաժինների՝

* Դրայվեր ենթածրագրեր, որոնցից յուրաքանչյուրը լուծում է որոշ վերջացած խնդիր։ Օրինակ, գծային հանրահաշվական հավասարումների համակարգի լուծումը կամ իրական սիմետրիկ մատրիցի սեփական արժեքների գտնելը։ Ամեն տիպի համար այդպիսի ենթածրագրերը 14 են։ Այդ ենթածրագրերը կանչում են հաշվողական ենթածրագրերին։
* Հաշվողական ենթածրագրերը կատարում են առանձին ենթախնդիրներ։ Օրինակ, մատրիցի LU վերլուծությունը կամ

```
իրական սիմետրիկ մատրիցի բերումը երեքանկյունագծային տեսքի։
```

* Օժանդակ ենթածրագրեր, որոնք կատարում են որոշ ներքին օժանդակ գործողություններ։

Դրայվերային և հաշվողական ենթածրագրերի անունները համընկնում են LAPACK փաթեթի համապատասխան ենթածրագրերի հետ, միայն այն տարբերությամբ, որ անվան սկզբում ավելացվում է P տառը, որը ցույց է տալիս, որ այն զուգահեռ տարբերակն է։ Համապատասխան անունների ձևակերպումը ունենում է նույն սխեման ինչ-որ LAPACK-ում։ Համապատասխան այդ սխեմայի, ենթածրագրերի անունները ունեն հետևյալ տեսքը՝ PTXXYYY, որտեղ T-ն տրված տվյալների տիպն է, XX-ը ցույց է տալիս մատրիցի տեսքը, YYY-ը ցույց է տալիս տրված ենթածրագրի
կատարվող գործողությունը։

ScaLAPACK գրադարանի օգտագործումը
--------------------------------

ScaLAPACK գրադարանը պահանջում է, որ բոլոր օբյեկտները՝ մատրիցները և վեկտորները, որոնք հանդիսանում են ենթածրագրերի պարամետրեր, վերաբաշխված լինեն պրոցեսորներին։ Սկզբնական օբյեկտները դասակարգվում են ինչպես գլոբալ օբյեկտներ, և նրանց նկարագրող պարամետրերը պահպանվում են դեսկրիպտորում։ Գլոբալ օբյեկտի դեսկրիպտորը իրենից ներկայացնում է ամբողջ տիպի մատրից, որտեղ պահպանվում է սկզբնական օբյեկտի անհրաժեշտ ինֆորմացիան։ Այդ օբյեկտի մասերը, որոնք գտնվում են ինչ-որ պրոցեսում, 
հանդիսանում են լոկալ տվյալներ։

Որպեսզի օգտվենք ScaLAPACK գրադարանի դրայվերային և հաշվողական ենթածրագրերից, անհրաժեշտ է կատարել հետևյալ չորս քայլը՝

1. Ինիցիալիզացիա անել պրոցեսորային ցանցը,
2. Վերաբաշխել մատրիցը պրոցեսորների ցանցին,
3. Կանչել հաշվողական ենթածրագրերը,
4. Ազատել պրոցեսորային ցանցը։

Պրոցեսորների ցանց
-----------------

Ենթածրագրերը ընդհանրապես նախատեսված են գործողություններ կատարել երկչափանի մասիվների՝ մատրիցների հետ։ Այդպիսի գործողությունների էֆֆեկտիվ զուգահեռացման համար տրված է զուգահեռ պրոցեսների ցանց։ Դա այնպիսի երկչափանի կառուցվածք է, որը բնութագրում է տողերի քանակը ցանցում՝ NPROW և սյուների քանակը ցանցում՝ NPCOL։ Ընդհանուր պրոցեսների թիվը, որը օգտագործվում է խնդրի լուծման համար, ներկայացվում է հետևյալ ձևով՝ NP = NPROW \* NPCOL։ Այդ ժամանակ ամեն մի պրոցես պրոցեսորների ցանցում ունի զույգ կոորդինատ։ Ենթածրագրերում այն ընդունված է նշանակել հետևյալ տեսքով՝

MYROW -տողի համարը ցանցում։
MYCOL -սյունի համարը ցանցում։

Մինչև ինչ-որ ենթածրագրին դիմելը, օգտագործողը անհրաժեշտ է՝

* Ստեղծել կոնկրետ պրոցեսորների ցանց՝ տալով NPROW և NPCOL արժեքներ։
* A մատրիցը տրոհել բլոկների՝ MB\*NB չափանի և այդ բլոկները պետք է վերաբաշխել ցանցի բոլոր պրոցեսներին։
* Նույն պրոցեդուրան պետք է կատարել համակարգի աջ մասի՝ B վեկտորի կամ մատրիցի հետ՝ տրոհելով այն NB\*NBRHS չափանի բլոկների և

```
վերաբաշխել բլոկները տվյալ ցանցի պրոցեսներին։
```

Դրանից հետո նոր օգտագործողը կարող է կանչել խնդրին անհրաժեշտ ենթածրագիրը՝ տալով նրան, պարամետրերի միջոցով, ողջ ինֆորմացիան սկզբնական մատրիցի վերաբերյալ, նաև տալով նրան, թե ինչպես են վերաբաշխված մատրիցի տարրերը, ցանցի ամեն մի պրոցեսի լոկալ հիշողության մեջ։

Անհրաժեշտ գործողությունները կատարելուց հետո, օգտագործողը պետք է ազատի օգտագործվող պրոցեսների ցանցը և դուրս գա գլխավոր ծրագրից։

### Պրոցեսորային ցանցի ազատումը

Ծրագրերը, որոնք օգտագործում են ScaLAPACK փաթեթը, պետք է ավարտվեն բոլոր BLACS պրոցեսների փակումով։
Այն կատարվում է հետևյալ ենթածրագրերի օգնությամբ՝

CALL BLCS\_ GRIDEXIT ( ICTXT )-կոնտեքստի փակում,
CALL BLACS\_EXIT ( 0 ) -բոլոր BLACS պրոցեսների փակում։

Գրականություն
-------------

Ա. Ա. Բուկատով, Վ. Ն. Դացյուկ

Արտաքին հղումներ
----------------

* փաթեթ ScaLAPACK
* ScaLAPACK փաթեթի օգտագործողի ձեռնարկ