3-Amaliy ish: Vektorni matritsaga ko’paytirishning parallel usullari
REJA:
3.1. Vektorni matritsaga ko’paytirish algoritmi
3.2. Vektorni matritsaga ko’paytirishning parallel usullari
3.3. OpenMP dan foydalanib vektorni matritsaga ko’paytiruvchi parallel
dasturlar yaratish
Matritsa operatsiyalari keng ko`lamli jarayonlarni, hodisalar va tizimlarni
matematik modellashtirishda keng ishlatiladi. Matritsa hisob-kitoblari ko'plab ilmiy
va muhandislik hisob-kitoblarining asoslarini tashkil etadi - dasturlar, kompyuter
matematikasi, fizika, iqtisod va hokazo sohalar orasida.
Matritsalarni hisob-kitoblarni samarali bajarish muhimligini hisobga olgan
holda, ko'plab standart dastur kutubxonalari turli matritsali operatsiyalar uchun
protseduralarni o'z ichiga oladi. Matritsalarni qayta ishlash uchun dasturiy ta'minot
hajmi muntazam ortib bormoqda - maxsus matritsa turlarini (uchburchak, lenta,
siyrak va boshqalar) yangi iqtisodiy saqlash tuzilmalari ishlab chiqilmoqda,
algoritmlarning har xil yuqori performansli mashinalarga bog'liqligi yaratilmoqda,
nazariy tadqiqotlar olib borilmoqda. tezroq matritsa hisoblash usullarini topish.
Matematik hisob-kitoblarga ko'ra, parallel hisoblashning klassik maydoni
qo'llaniladi. Bir tomondan, yuqori samarali multi-protsessorli tizimlardan
foydalanish, echilishi kerak bo'lgan vazifalarning murakkabligini ancha oshirishi
mumkin. Boshqa tarafdan, uning oddiy formulasi tufayli matris operatsiyalari
parallel dasturlashning ko'plab usullari va usullarini namoyish qilish uchun ajoyib
imkoniyat yaratadi.
Ushbu bobda matritsa-vektorning ko'payishi uchun parallel hisoblash usullari
ko'rib chiqiladi, keyingi bobda matritsalarni ko'paytirishning ishlashini ko'rib
chiqamiz. Matritsalarni hisoblashning muhim turi - linear tenglamalar tizimlarini
echish - 8-bobda keltirilgan. Yuqorida sanab o'tilgan barcha muammolar bo'yicha
umumlashtirilgan matritsalarni bir vaqtning o'zida ajratish bilan ajratish muammosi
Bo'lim 6.2da muhokama qilinadi.
Quyidagi materialni taqdim etayotganda, ko'rib chiqilayotgan matrislar
matritsa elementlarining umumiy soniga nisbatan nol elementlarning soni
ahamiyatsiz bo'lgan zich ekanligini taxmin qilamiz.
Matritsalarni hisoblashning ko'plab usullari uchun matritsaning turli
elementlari uchun bir xil hisoblash harakatlarini takrorlash xarakterlidir. Ushbu
moment matritsa hisob-kitoblarini bajarishda ma'lumotlardagi parallellik
mavjudligini ko'rsatadi va natijada matritsa operatsiyalarining parallelizatsiyasi ko'p
hollarda iplar orasidagi qayta ishlangan matritsalarni ajratish uchun kamayadi.
Matritsani ajratish usulini tanlash parallel hisoblashning muayyan usulini aniqlashga
olib keladi; turli ma'lumotlar tarqatish sxemalari mavjudligi matris hisob-kitoblari
uchun bir qator parallel algoritmlarni hosil qiladi.
Matritsalarni ajratish uchun eng keng tarqalgan va keng tarqalgan usullar
ma'lumotlarni bantlarga (vertikal yoki gorizontal) yoki to'rtburchaklar qismlarga
(bloklar) ajratishdir.
Matritsani tarmoqli ajratish. Ip (blokli chiziqli) bo'linish chog'ida har bir oqim
matritsaning bir yoki bir nechta qatorini (rowwise yoki gorizontal ajratish) yoki
ustunlar (ustunli yoki vertikal bo'linish) ajratilgan. Satrlar va ustunlarni chiziqlar
sifatida ajratish ko'p holatlarda doimiy (ketma-ket) asosda amalga oshiriladi.
Vektorni matritsaga ko’paytirishning C++ tilida quyidagicha yoziladi:
(ketma-ket algoritmi)
for (i = 0; i < m; i++)
{
c[i] = 0;
for (j = 0; j < n; j++)
{
c[i] += A[i][j]*b[j]
}
}
Vektorni matritsaga gorizantal lenta (satr) bo’ylab ko’paytiruvchi C++ tilidagi
funksiya quyidagicha bo’ladi:
ParallelResultCalculation(double* pMatrix, double* pVector,
double* pResult, int Size)
{
int i, j;
#pragma omp paralell for private (j)
for (i=0; i
{ for (j=0; j
pResult[i] += pMatrix[i*Size+j]*pVector[j];
}
}
Vektorni matritsaga vertikal lenta (ustun) bo’ylab ko’paytiruvchi C++ tilidagi
funksiya quyidagicha bo’ladi:
ParallelResultCalculation(double* pMatrix, double* pVector,
double* pResult, int Size)
{ int i, j;
for (i=0; i
#pragma omp paralell for
for (j=0; j
pResult[i] += pMatrix[i*Size+j]*pVector[j];
}
}
Xulosa
1. Vektorni matritsaga ko’paytirishning odatiy ketma-ket va parallel usullari
ko’rib chiqildi
2. Vektorni matritsaga ko’paytirishda matritsa elementlarini taqsimlash usullari
ko’rib chiqildi
3. OpenMP dan foydalanib C++ tilida vektorni matritsaga ko’payturuvchi dastur
tuzildi