CUDA da xotira
CUDA dasturlash interfeysi
Runtime API ning asosiy funktsiyalari
har qanday asenkron qo'ng'iroqdan keyin.
A. M. Kazyonnov
API-dagi funksiyalar sinxron va asinxronga bo'linadi. Sinxron yugurishlar bloklanadi, asinxron
yugurish esa ular ishlayotgan vaqtda boshqa operatsiyalarni bajarishga imkon beradi.
Nusxa olish, yadroni
ishga tushirish, xotirani ishga tushirish jarayonlari asinxron bo'lishi mumkin. Asinxron qo'ng'iroqlardan
foydalanganda, avval sinxronizatsiya qilishni doimo yodda tutishingiz kerak
ularning natijalaridan foydalanish.
304
Ish
vaqti API kamroq moslashuvchan, lekin dasturlar yozish uchun qulayroqdir. Ikkala API ham aniq ishga
tushirishni talab qilmaydi va qo'shimcha turdagi va boshqa C tili kengaytmalaridan foydalanish uchun
qo'shimcha sarlavha fayllarini kiritishingiz shart emas. Barcha drayver-API funksiyalari cu prefiksi bilan
boshlanadi, barcha ish vaqti-API funksiyalari cuda prefiksi bilan boshlanadi. Ikkala
APIning deyarli barcha
funktsiyalari t_cudaError turidagi qiymatni qaytaradi, bu esa muvaffaqiyatga erishilganda cudaSuccess
qiymatini oladi.
cudaError_t cudaGetDevicePropertis (cudaDeviceProp* props, int deviceNo) ma'lum bir
qurilmaning parametrlarini uning raqami bo'yicha aniqlaydigan funksiyadir. Xususan, funksiya
cudaDeviceProp strukturasining asosiy
va kichik maydonlaridan ComputeCapability
-ni aniqlash imkonini
beradi.
dim3 blok - ishga tushirishda blok hajmi. Blok bir, ikki va uch o'lchovli bo'lishi mumkin va har bir
o'lcham
uchun maksimal qiymat (512, 512, 64) va blokdagi iplarning maksimal soni 512 dan oshmasligi
kerak;
char* cudaGetErrorString(cudaError_t) — funksiya xato tavsifini raqamli kod bilan qaytaradi.
cudaError_t cudaGetLastError() - sodir bo'lgan oxirgi xatoni aniqlang
dim3 grid - ishga tushirish uchun panjara o'lchami. To'r bir va ikki o'lchovli bo'lishi mumkin va har
bir o'lchov uchun maksimal qiymat
(65536, 65536, 1)
va to'rdagi
bloklarning maksimal soni
4294967296
dan oshmasligi kerak ;
ip.
6-jadvalda grafik adapterda mavjud bo'lgan turli xil xotira turlari taqqoslanadi.
Registrlar - SM uchun
32 KB, mahalliy o'zgaruvchilarni saqlash uchun ishlatiladi. GPU matritsasida joylashgan;
kirish tezligi eng
tezdir. Har biri uchun alohida
cudaError_t cudaThreadSynchronize() sinxronlash buyrug‘i talab qilinadi
yadro ichida dinamik foydalanish uchun ishga tushirish;
cudaStream_t oqimi - bu yadro ishga tushirilgan oqim tavsifi.
size_t mem - buning uchun ajratilgan blok
uchun umumiy xotira miqdori
ki ko'pincha yadro chaqiruvidan keyin uning to'g'ri ishlashini tekshirish uchun ishlatiladi.
Endi siz yadroni ishga tushirish va C tili kengaytmalari (CUDA da kerakli) haqida bilish haqida
tasavvurga ega bo'lsangiz, CUDA API ga o'tishingiz mumkin. CUDA ikkita API darajasiga ega: past
darajadagi drayver-API va yuqori darajadagi ish vaqti-API. Ish vaqti-API haydovchi-API orqali amalga oshiriladi.
cudaError_t cudaGetDeviceCount(int*) - CUDA bo'yicha hisoblash uchun mavjud bo'lgan qurilmalar
sonini aniqlaydigan funksiya.
Do'stlaringiz bilan baham: