Yunalishi
guruh talabasi
FIO
KOMPYUTER ARXITEKTURASI FANIDAN
4-TOPSHIRIQ
MAVZU: CUDA TEXNOLOGIYASI VA UNING IMKONIYATLARI
Ishdan maqsad: Gertogen hisoblash tizimlarida
parallel dasturlar tuzush
ko’nikmasiga ega bo’lish. CUDA texnologiyasi bilan tanishish va uning yordamida
parallel dasturlar yaratish tamoillarini o’rganish.
I.
Nazariy qism
CUDA texnologiyasi. Hozirda zamonaviy
yuqori unumdorli hisoblash
tizimlari geterogen (gibridli) tizimlar hisoblanadi. Bunday tizimlar ikkita asosiy
tipga ega komponentalardan tashkil topgan: ko‘p yadroli markaziy protsessor va
massivli
parallel
tezlatgich
hisoblangan
grafik
protsessorlardir.
Bu
komponentalarning birgalikda ishlashi uchun
maxsus texnologiyalar zarur
hisoblanadi. Videokartadagi grafik protsessorlar yordamida ma’lumotlarni qayta
ishlash uchun qo‘llaniladigan zamonaviy texnologiyalar
hisoblash vaqtini
bajariladigan operat siyalarni massivli parallelashtirish hisobiga sezilarli ravishda
qisqartirish imkoniyatini beradi. Grafik protsessor arxitekturasi ko‘p hisoblash
resurslarini talab qiladigan masalalarni hisoblashda foydalanish uchun juda mosdir.
Bunday yuqori unumdorlikni ta’minlovchi
texnologiyalardan biri CUDA
texnologiyasidir.
1.1-rasm. CUDA potoklarni tashkil qilish
CUDA potoklarni tashkil qilish va GPU qurilmalarini boshqarish uchun 2
bosqichdagi API ni taqdim etadi (1.1-rasm).
✓ CUDA Driver API
✓
CUDA Runtime API
API Driver interfeysi qo‘yi darajadagi API sanaldi va dasturlashga nisbatan
qiyinroq , lekin GPU qurilmasidan foydalanishni yaxshi nazorat qiladi. API
Runtime yuqori darajali API sanaladi va geterogen hisoblash API Driver ning
yuqorisida tashkil qilingan[3].
CUDA dastur qo‘yidagi 2 ta qism aralashmasidan tashkil topgan:
✓
CPU da ishlaydigan host kod
✓ GPU da ishlaydigan device kod
NVIDIA CUDA nvcc kompilyatori kompilyatsiya jarayoni vaqtida device
kodi va host kodini ajratadi. Host kod C ning standart kodi sanaladi va keyinchalik
C kompilyatorida kompilyatsiya qilinadi. Device kodi kernel deb ataluvchi parallel
funksiyalardan iborat. Bu funksiyalar CUDA C tilida yoziladi va nvcc
kompilyatorida kompilyatsiyalanadi.
CUDA C da dastur yozish uchun bizga qo‘yidagilarni amalga oshirishimiz
kerak:
1.
.cu fayl kengaytmasiga ega dastur kodi uchun fayl yaratish.
2.
CUDA
nvcc
kompilyatoridan
foydalangan
holda
dasturni
kompilyatsiyalash.
3.
Bo‘yruqlar satridan GPU yadrosida bajiriluvchi kodni ishga tushirish.
Avvalo GPU da bajarilishi kerak dasturni C dasturlash tilida yozib olamiz.
# include
int main(void)
{
printf(“Hello World from CPU!\n”);
}
Ushbu kodni hello.cu fayliga saqlaymiz va nvcc kompilyatorida bajaramiz.
Linux operatsion tizimida CUDA nvcc ni qo‘llagan holda ishga tushiramiz.
$ nvcc hello.cu -o hello
bajariladigan(exe) faylni ishga tushirsak qo‘yidagi satr ekranga chiqadi:
Hello World from CPU!
So‘ngra helloFromGPU deb nomlanuvchi yadro funksiyasini yaratamiz.
Ushbu funksiya qo‘yidagi satrni ekranga chop qiladi.
__global__ void helloFromGPU(void)
{
printf(“Hello World from GPU!\n”);
}
global__ spetsifikatori kompilyatorga ushbu funktsiya markaziy protsesor
tomonidan chaqirilganligi va GPU da bajarilishi xaqida xabar beradi.
YAdro funksiyasini qo‘yidagi kod yordamida ishga tushiramiz.
helloFromGPU <<<1,5>>>();
3 talik burchak qavslar funksiyani host potokdan chaqirilib device tomonda
bajarilishini belgilaydi. YAdro funksiyasi massivlar potokida bajariladi va barcha
potoklar aynan shu kodni ishga tushiradi. 3 talik burchak
qavslari - bu bajarish
konfiguratsiyasi bo‘lib, yadro bajarishi mumkin bo‘lgan potoklar turidir.
LISTING 1-1: Hello World from GPU (hello.cu)
#include
__global__ void helloFromGPU (void)
{
printf(“Hello World from GPU!\n”);
}
int main(void)
{
// hello from cpu
printf(“Hello World from CPU!\n”);
helloFromGPU <<<1, 5>>>();
cudaDeviceReset();
return 0;
}
YUqoridagi misolda GPUninig 5 ta oqimi ishga tushiriladi.
Bu erda
cudaDeviceReset() funksiyasi GPU xotirasini bushatadi. Dastur natijasi
qo‘yidagichadir.
$ ./hello
Hello World from CPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
Hello World from GPU!
1-jadval. CUDA texnologiyasini qo’llab quvatlovchi GPU driver
versiyalari