Nazorat savollari
1. C++ kompilyatoriga OpenMP ni qo’shish
2. OpenMP direktivalarini ishlatish
3. OpenMP texnologiyasidan foydalanish
163
27-Ma’ruza.
CUDA texnologiyasi
Reja:
1.
CUDA texnologiyasi
2.
CUDA texnologiyasini imkoniyatlari
Tayanch iboralar:
CUDA texnologiyasi, Nvidia.
CUDA texnologiyasi Nvidia kompaniyasining C tilining kengaytmasiga
asoslangan dasturiy va apparatli hisoblash arxitekturasi bo’lib, u grafik
tezlatgichning ko’rsatmalar to’plamiga kirish va parallel hisoblashda uning
xotirasini boshqarish imkonini beradi. CUDA Geforce video tezlatkichlarining
sakkizinchi avlodi va eski grafik protsessorlarida (Geforce 8, Geforce 9, Geforce
200 seriyali), shuningdek Quadro va Tesla’da amalga oshirilishi mumkin bo‘lgan
algoritmlarni amalga oshirishga yordam beradi.
CUDA bilan GPU dasturlashning murakkabligi ancha yuqori bo'lsa-da, u
dastlabki GPGPU yechimlariga qaraganda pastroq. Bunday dasturlar dasturni MPI
dasturlashiga o'xshash bir nechta multiprotsessorlar bo'ylab taqsimlashni talab
qiladi, lekin umumiy video xotirada saqlanadigan ma'lumotlarni almashishsiz. Va
har bir ko'p protsessor uchun CUDA dasturlash OpenMP dasturlashiga o'xshash
bo'lganligi sababli, u xotirani tashkil qilishni yaxshi tushunishni talab qiladi. Lekin,
albatta, CUDA-ni ishlab chiqish va o'tkazishning murakkabligi dasturga juda
bog'liq.
Ishlab chiquvchilar to'plamida ko'plab kod misollari mavjud va yaxshi
hujjatlashtirilgan. OpenMP va MPI bilan tanish bo'lganlar uchun o'quv jarayoni
tAHMinan ikki-to'rt hafta davom etadi. API kengaytirilgan C tiliga asoslangan va
ushbu tildan kodni tarjima qilish uchun CUDA SDK ochiq Open64 kompilyatoriga
asoslangan nvcc buyruq qatori kompilyatorini o'z ichiga oladi.
Biz CUDA ning asosiy xususiyatlarini sanab o'tamiz:
• Nvidia video chiplarida parallel hisoblash uchun yagona dasturiy va
apparat yechimi;
164
• qo'llab-quvvatlanadigan echimlarning keng doirasi, mobildan ko'p
chipligacha
• standart dasturlash tili C;
• raqamli tahlil FFT (Fast Furier Transform) va BLAS (Linear Algebra)
uchun standart kutubxonalar;
• CPU va GPU o'rtasida optimallashtirilgan ma'lumotlar almashinuvi;
• grafik API OpenGL va DirectX bilan o'zaro aloqa;
• 32 va 64 bitli operatsion tizimlarni qo'llab-quvvatlash: Windows XP,
Windows Vista, Linux va MacOS X;
• past darajada rivojlanish qobiliyati.
Operatsion tizimni qo'llab-quvvatlashga kelsak, shuni qo'shimcha qilish
kerakki, barcha asosiy Linux distributivlari rasmiy ravishda qo'llab-quvvatlanadi
(Red Hat Enterprise Linux 3.x/4.x/5.x, SUSE Linux 10.x), ammo ishqibozlarning
fikriga ko'ra, CUDA yaxshi ishlaydi. boshqa tuzilmalarda: Fedora Core, Ubuntu,
Gentoo va boshqalar.
CUDA Development Environment (CUDA Toolkit) quyidagilarni o'z ichiga
oladi:
• nvcc kompilyatori;
• FFT va BLAS kutubxonalari;
• profil yaratuvchi;
• GPU uchun gdb tuzatuvchisi;
• CUDA ish vaqti drayveri standart Nvidia drayverlariga kiritilgan
• dasturlash bo'yicha qo'llanma;
• CUDA Developer SDK (manba kodi, yordamchi dasturlar va hujjatlar).
Manba kodi misollarida: parallel bitonik saralash (bitonik tartiblash),
matritsa transpozitsiyasi, katta massivlarning parallel prefiks yig'indisi, tasvir
konvolyutsiyasi, diskret to'lqinli konvertatsiya, OpenGL va Direct3D bilan o'zaro
ta'sir qilish misoli, CUBLAS va CUFFT kutubxonalaridan foydalanish, optsion
narxini hisoblash ( Blek-Skoulz, binomial model, Monte-Karlo usuli), Mersenne
165
Twister parallel tasodifiy sonlar generatori, katta massiv gistogrammasini
hisoblash, shovqinni kamaytirish, Sobel filtri (bog'langan aniqlash).
CUDA ning afzalliklari va cheklovlari
Dasturchi nuqtai nazaridan, grafik quvur liniyasi qayta ishlash bosqichlari
to'plamidir. Geometriya bloki uchburchaklarni, rasterlash bloki esa monitorda aks
ettiriladigan piksellarni hosil qiladi. An'anaviy GPGPU dasturlash modeli
quyidagicha:
27.1-rasm. GPGPU dasturlash modeli
Bunday model doirasida hisob-kitoblarni GPU-ga o'tkazish uchun alohida
yondashuv zarur. Hatto ikkita vektorni elementma-element qo'shish uchun shaklni
ekranga yoki ekrandan tashqari buferga chizish kerak bo'ladi. Rasm rasterlangan,
har bir pikselning rangi berilgan dastur (piksel shader) bo'yicha hisoblanadi. Dastur
har bir piksel uchun teksturalardan kiritilgan ma'lumotlarni o'qiydi, ularni qo'shadi
va chiqish buferiga yozadi. Va bu ko'p sonli operatsiyalarning barchasi oddiy
dasturlash tilida bitta operatorda yozilgan narsalar uchun kerak!
Shuning uchun, umumiy maqsadli hisoblash uchun GPGPU-dan foydalanish
ishlab chiquvchilarni o'qitishda juda ko'p qiyinchilik shaklida cheklovga ega. Va
boshqa cheklovlar ham etarli, chunki piksel shaderi pikselning oxirgi rangining
uning koordinatalariga bog'liqligi uchun formuladir va piksel shader tili bu
formulalarni C-ga o'xshash sintaksis bilan yozish uchun tildir. Dastlabki GPGPU
texnikasi GPU quvvatidan foydalanishning qiyin hiylasidir, lekin hech qanday
qulayliksiz. U yerdagi ma'lumotlar tasvirlar (teksturalar) bilan, algoritm esa
166
rasterlashtirish jarayoni bilan ifodalanadi. Juda o'ziga xos xotira va ijro modelini
ham ta'kidlash kerak.
Nvidia-dan GPU-larda hisoblash uchun Nvidia-ning apparat va dasturiy
ta'minot arxitekturasi oldingi GPGPU modellaridan farq qiladi, chunki u standart
sintaksis, ko'rsatkichlar va video chiplarning hisoblash resurslariga kirish uchun
minimal kengaytmalarga bo'lgan ehtiyoj bilan haqiqiy C-da GPUlar uchun
dasturlar yozish imkonini beradi. CUDA grafik API-larga bog'liq emas va umumiy
maqsadli hisoblash uchun maxsus ishlab chiqilgan ba'zi xususiyatlarga ega.
GPGPU hisoblashda an'anaviy yondashuvdan CUDA ning afzalliklari:
• CUDA amaliy dasturlash interfeysi kengaytmali standart C dasturlash tiliga
asoslangan bo‘lib, CUDA arxitekturasini o‘rganish va joriy etish jarayonini
soddalashtiradi;
• CUDA har bir multiprotsessorga 16 KB umumiy xotiradan foydalanish
imkoniyatini beradi, bu esa teksturalarni olishdan ko'ra yuqori o'tkazish
qobiliyatiga ega keshni tashkil qilish uchun ishlatilishi mumkin;
• tizim va video xotira o'rtasida ma'lumotlarni yanada samarali uzatish
• ortiqcha va qo'shimcha xarajatlar bilan grafik API-larga ehtiyoj yo'q;
• chiziqli xotira manzillash, yig'ish va tarqatish, ixtiyoriy manzillarga yozish
imkoniyati;
• butun va bit operatsiyalari uchun apparat ta'minoti.
CUDA ning asosiy cheklovlari:
• bajariladigan funksiyalar uchun rekursion yordamning yo‘qligi;
• blokning minimal kengligi 32 ta ipdan iborat;
• Nvidia xususiy CUDA arxitekturasi.
Oldingi GPGPU usullaridan foydalangan holda dasturlashning zaif
tomonlari shundaki, bu usullar oldingi birlashtirilmagan arxitekturalarda vertex
shader bajarish birliklaridan foydalanmaydi, ma'lumotlar teksturalarda saqlanadi,
lekin ekrandan tashqari buferga chiqariladi va ko'p o'tishli algoritmlar piksel
shaderidan foydalanadi. birliklar. GPGPU cheklovlari quyidagilarni o'z ichiga
olishi mumkin: apparat imkoniyatlaridan etarli darajada foydalanmaslik, xotira
167
o'tkazish qobiliyatini cheklash, tarqalishning yo'qligi (faqat yig'ish), grafik API-
dan majburiy foydalanish.
CUDA ning oldingi GPGPU usullariga nisbatan asosiy afzalliklari shundan
iboratki, bu arxitektura GPUda grafik bo‘lmagan hisoblashlardan samarali
foydalanish uchun mo‘ljallangan va algoritmlarni kontseptsiya uchun qulay
shaklga o‘tkazishni talab qilmasdan C dasturlash tilidan foydalanadi. grafik quvur
liniyasi. CUDA grafik API-lardan foydalanmaydigan, xotiraga tasodifiy kirishni
(tarqatish yoki yig'ish) taklif qiluvchi GPU hisoblashning yangi usulini taklif etadi.
Ushbu arxitektura GPGPU ning kamchiliklaridan mahrum va barcha ijro
birliklaridan foydalanadi, shuningdek, butun matematik va bitni almashtirish
operatsiyalari tufayli imkoniyatlarni kengaytiradi.
CUDA va xotiraga kirishda qulayroq. Grafik API-dagi kod ma'lumotlarni 32
ta bitta aniqlikdagi suzuvchi nuqta qiymatlari (bir vaqtning o'zida sakkizta
ko'rsatish maqsadlarida RGBA qiymatlari) ko'rinishida oldindan belgilangan
hududlarga chiqaradi va CUDA tarqoq yozuvni qo'llab-quvvatlaydi - istalgan
joyda cheksiz miqdordagi yozuvlar. manzil. Ushbu afzalliklar GPU-da grafik API-
larga asoslangan GPGPU usullari yordamida samarali amalga oshirib bo'lmaydigan
ba'zi algoritmlarni bajarishga imkon beradi.
Bundan tashqari, grafik API-lar, albatta, ma'lumotlarni teksturalarda
saqlaydi, bu esa katta massivlarni teksturalarga oldindan o'rashni talab qiladi, bu
algoritmni murakkablashtiradi va maxsus manzillashdan foydalanishga majbur
qiladi. Va CUDA har qanday manzilda ma'lumotlarni o'qish imkonini beradi.
CUDA ning yana bir afzalligi CPU va GPU o'rtasida optimallashtirilgan
ma'lumotlar almashinuvidir. Va past darajadagi kirishni xohlaydigan ishlab
chiquvchilar uchun (masalan, boshqa dasturlash tilini yozishda) CUDA past
darajadagi assembler tilini dasturlash imkoniyatini taklif qiladi.
CUDA ishlab chiqilishi 2006 yil noyabr oyida G80 chipi bilan e'lon qilindi
va CUDA SDK ning ommaviy beta versiyasi 2007 yil fevral oyida chiqarildi. 1.0
versiyasi 2007 yil iyun oyida yuqori unumdorlikdagi hisoblash bozori uchun G80
chipiga asoslangan Tesla yechimlarini ishga tushirish uchun chiqarildi. Keyin, yil
168
oxirida, CUDA 1.1 beta-versiyasi chiqarildi, u versiya sonining biroz ko'payishiga
qaramay, juda ko'p yangi narsalarni taqdim etdi.
CUDA 1.1 da paydo bo'lganidan biz CUDA funksiyasining oddiy Nvidia
video drayverlariga kiritilganligini ta'kidlashimiz mumkin. Bu shuni anglatadiki,
har qanday CUDA dasturiga qo'yiladigan talablarda Geforce 8 va undan yuqori
seriyali video kartani, shuningdek, 169.xx drayverning minimal versiyasini
ko'rsatish kifoya edi. Bu ishlab chiquvchilar uchun juda muhim, agar bu shartlar
bajarilsa, CUDA dasturlari har qanday foydalanuvchi uchun ishlaydi. Shuningdek,
ma'lumotlarni nusxalash (faqat G84, G86, G92 va undan yuqori chiplar uchun),
ma'lumotlarni video xotiraga asinxron uzatish, atomik xotiraga kirish
operatsiyalari, Windowsning 64-bitli versiyalarini qo'llab-quvvatlash va ko'p
nusxalash imkoniyati bilan birga asinxron bajarish qo'shildi.
CUDA-ni qo'llab-quvvatlaydigan barcha grafik kartalar audio va videolarni
qayta ishlashdan tortib, tibbiy va ilmiy tadqiqotlargacha bo'lgan eng qiyin
vazifalarni tezlashtirishga yordam beradi. Yagona haqiqiy cheklov shundaki,
ko'plab CUDA dasturlari kamida 256 megabayt video xotirani talab qiladi va bu
CUDA ilovalari uchun eng muhim texnik xususiyatlardan biridir.
Do'stlaringiz bilan baham: |