OpenCL bufer obyektlarini yaratish




Download 1,16 Mb.
bet19/27
Sana18.05.2024
Hajmi1,16 Mb.
#242810
1   ...   15   16   17   18   19   20   21   22   ...   27
Bog'liq
O‘zbekiston respublikasi axborot texnologiyalari va kommunikatsi

OpenCL bufer obyektlarini yaratish

OpenCL Umumiy maqsadli hisoblash uchun ishlatiladi - bufer ob'ekti. Ishlab chiquvchi hisoblash modeliga eng mos keladigan bir, ikki yoki uch o'lchovli xotira ob'ektini yaratishni tanlashi mumkin. OpenCL-da bufer obyektlarini yaratish juda oddiy va C ning malloc va alloca kabi xotirani taqsimlash tartiblaridan foydalanishga o'xshaydi. Biroq, o'xshashlik shu yerda tugaydi, chunki OpenCL to'g'ridan-to'g'ri ushbu tartiblar tomonidan yaratilgan xotira tuzilmalarida ishlay olmaydi. Biz qila oladigan narsa, xostdagi xotiraga moslashtirilishi mumkin bo'lgan qurilmalarda yashovchi xotira strukturasini yaratish va ma'lumotlar buyruqlar navbatiga xotirani uzatish buyruqlarini berish orqali qurilmaga uzatiladi.


Ushbu misolda biz C/C++ tilida tuzilmalar deb ham ataladigan foydalanuvchi tomonidan belgilangan tuzilmalar asosida bufer obyektlarini qanday yaratishni o'rganamiz. Undan oldin APIni tushunamiz:
cl_mem clCreateBuffer(cl_context context,
cl_mem_flags flags,
size_t size,
void* host_ptr,
cl_int* errcode_ret)
Biz buferni qaysi kontekstga biriktirilishi kerakligini belgilash orqali yaratishimiz mumkin (eslatma, kontekstlarni bir nechta qurilmalar bilan yaratish mumkin), ma'lumotlar hajmini belgilab va mos ravishda o’lcham va host_ptr bilan qayerga murojaat qilishni belgilab, xotira qanday taqsimlanishini belgilaymiz va bu xotira o'qish, faqat o'qish, o'qish-yozish yoki faqat bayroqlar orqali yozish turiga ega bo'ladi.
Bu yerda Ch2/user_buffer/user_buffer.c da kodning bir qismi bo‘lib, u yerda foydalanuvchi tomonidan belgilangan tuzilma uchun xotira ajratish uchun clCreateBuffer API dan qanday foydalanishni ko‘ramiz. Ushbu misolda biz hal qilmoqchi bo'lgan muammo, hisoblash uchun qurilmaga millionlab foydalanuvchi tomonidan belgilangan tuzilmalarni yuborishdir. Yadro tomonidan o'ralgan hisoblash oddiy amalga oshiriladi - har bir foydalanuvchi strukturasining barcha elementlari yig'indisini tashkil qiladi.
typedef struct UserData {
int x;
int y;
int z;
int w;
} UserData;
Yangi standart C/C++ dinamik/statik xotira ajratish usullaridan foydalangan holda xost ilovasida bufer yaratishdir. Keyingi bosqich, ushbu ma'lumotlar buferini ishga tushirishingiz kerak bo'ladi va nihoyat clCreateBuffer-ni ishga tushirishingiz kerak va clSetKernelArg-ga qo'ng'iroq qilishdan oldin bu bajarilganligiga ishonch hosil qilishingiz kerak;Eslatib o‘tamiz, yadrolar qurilmada ishlash uchun rejalashtirilgan bo‘lib, u qurilmada yadro kodini ishga tushirishdan ancha oldin unga qarshi ishlash uchun ma’lumotlar va qiymatlar kerak bo‘ladi va siz bunga clSetKernelArg chaqiruvi orqali erishishingiz mumkin va siz buni odatda bufer obyekti sifatida yaratiladi.



Download 1,16 Mb.
1   ...   15   16   17   18   19   20   21   22   ...   27




Download 1,16 Mb.

Bosh sahifa
Aloqalar

    Bosh sahifa



OpenCL bufer obyektlarini yaratish

Download 1,16 Mb.