OpenCL - OpenCL

OpenCL API
OpenCL logo
Asl muallif (lar)Apple Inc.
Tuzuvchi (lar)Khronos guruhi
Dastlabki chiqarilish2009 yil 28 avgust; 11 yil oldin (2009-08-28)
Barqaror chiqish
3.0[1] / 2020 yil 30 sentyabr; 55 kun oldin (2020-09-30)
YozilganC bilan C ++ bog'lash
Operatsion tizimAndroid (sotuvchiga bog'liq),[2] FreeBSD,[3] Linux, macOS, Windows
PlatformaARMv7, ARMv8,[4] Hujayra, IA-32, Quvvat, x86-64
TuriGeterogen hisoblash API
LitsenziyaOpenCL spetsifikatsiyasi litsenziyasi
Veb-saytwww.xronos.org/ opencl/
OpenCL C / C ++
ParadigmaImperativ (protsessual ), tuzilgan, ob'ektga yo'naltirilgan (Faqat C ++)
OilaC
Barqaror chiqish
OpenCL C ++ 1.0 versiyasi V2.2-11[5]

OpenCL C 3.0 versiyasi V3.0.1[6]

/ 2020 yil 27 aprel; 6 oy oldin (2020-04-27)
Matnni yozishStatik, zaif, manifest, nominal
Amalga oshirish tiliAmaliyotga xos
Fayl nomi kengaytmalari.cl
Veb-saytwww.xronos.org/ opencl
Mayor amalga oshirish
AMD, Apple, freeocl, Gallium Compute, IBM, Intel Beignet, Intel SDK, Texas Instruments, Nvidia, pocl
Ta'sirlangan
C99, CUDA, C ++ 14

OpenCL (Hisoblash tilini oching) a ramka bo'ylab bajariladigan dasturlarni yozish uchun heterojen tashkil topgan platformalar markaziy protsessorlar (Protsessorlar), grafik ishlov berish birliklari (GPU), raqamli signal protsessorlari (DSP), maydonda dasturlashtiriladigan darvoza massivlari (FPGA) va boshqa protsessorlar yoki apparat tezlatgichlari. OpenCL belgilaydi dasturlash tillari (asoslangan C99 va C ++ 11 ) bularni dasturlash uchun qurilmalar va amaliy dasturlash interfeyslari Platformalarini boshqarish va dasturlarni bajarish uchun (API) hisoblash moslamalari. OpenCL uchun standart interfeys taqdim etiladi parallel hisoblash foydalanish vazifa- va ma'lumotlarga asoslangan parallellik.

OpenCL - tomonidan qo'llab-quvvatlanadigan ochiq standart foyda keltirmaydigan texnologiya konsortsiumi Khronos guruhi. Muvofiq dasturlar mavjud Altera, AMD, olma (Bilan birga OpenCL OpenGL bu eskirgan Apple apparati uchun, foydasiga Metall 2[7]), ARM, Ijodiy, IBM, Xayol, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx va ZiiLABS.[8][9]

Umumiy nuqtai

OpenCL hisoblash tizimini bir qatordan iborat deb hisoblaydi hisoblash moslamalaribo'lishi mumkin markaziy protsessorlar (CPU) yoki grafik protsessorlar (GPU) kabi "tezlatgichlar", a ga biriktirilgan mezbon protsessor (protsessor). Bu belgilaydi a C ga o'xshash til dasturlarni yozish uchun. OpenCL qurilmasida bajariladigan funktsiyalar "yadrolari ".[10]:17 Bitta hisoblash moslamasi odatda bir nechtadan iborat hisoblash birliklari, bu o'z navbatida bir nechta ishlov berish elementlari (PE). Bitta yadroning bajarilishi pelarning barchasida yoki ko'pchiligida parallel ravishda ishlashi mumkin. Hisoblash moslamasini hisoblash birliklariga va PE-larga qanday bo'linishi sotuvchiga bog'liq; hisoblash birligini "" deb hisoblash mumkinyadro ", ammo yadro tushunchasini OpenCL tomonidan qo'llab-quvvatlanadigan barcha turdagi qurilmalarda (yoki hatto" CPU "toifasida) aniqlash qiyin,"[11]:49–50 va hisoblash birliklari soni sotuvchilarning marketing bo'yicha adabiyotlarida talab qilingan yadro soniga to'g'ri kelmasligi mumkin (ular aslida hisobga olinishi mumkin) SIMD qatorlari ).[12]

C ga o'xshash dasturlash tiliga qo'shimcha ravishda, OpenCL an belgilaydi dastur dasturlash interfeysi Xostda ishlaydigan dasturlarga hisoblash moslamalarida yadrolarni ishga tushirish va xost xotirasidan (hech bo'lmaganda kontseptual ravishda) ajratilgan qurilma xotirasini boshqarish imkonini beradigan (API). OpenCL tilidagi dasturlar mo'ljallangan bo'lishi kerak ish vaqtida tuzilgan, shuning uchun OpenCL-dan foydalanadigan dasturlar turli xil xost qurilmalari uchun dasturlar o'rtasida ko'chma bo'lishi mumkin.[13] OpenCL standarti uchun xost API-lari aniqlanadi C va C ++; uchinchi tomon API-lari kabi boshqa dasturlash tillari va platformalari uchun mavjud Python,[14] Java, Perl[15] va .NET.[11]:15 An amalga oshirish OpenCL standarti quyidagilardan iborat kutubxona C va C ++ va OpenCL C uchun API-ni amalga oshiradi kompilyator maqsadli hisoblash moslamasi (lari) uchun.

OpenCL dasturlash modelini boshqa tillarga ochish yoki yadro manbasini tekshirilishdan himoya qilish uchun Standart ko'chma oraliq vakillik (SPIR)[16] oldingi kompilyator va OpenCL orqa tomoni o'rtasida yadrolarni jo'natishning maqsadidan mustaqil usul sifatida foydalanish mumkin.

Yaqinda Khronos guruhi ratifikatsiya qildi SYCL,[17] bitta manba sifatida OpenCL uchun yuqori darajadagi dasturlash modeli DSEL toza asosga asoslangan C ++ 11 yaxshilash dasturlash samaradorligi.

Xotira iyerarxiyasi

OpenCL to'rt darajani belgilaydi xotira iyerarxiyasi hisoblash moslamasi uchun:[13]

  • global xotira: barcha ishlov berish elementlari tomonidan birgalikda foydalaniladi, lekin kirishning yuqori kechikishiga ega (__global);
  • faqat o'qish uchun xotira: kichikroq, past kechikish, xost protsessori tomonidan yozilishi mumkin, lekin hisoblash moslamalari emas (__ doimiy);
  • mahalliy xotira: ishlov berish elementlari guruhi tomonidan birgalikda (__ mahalliy);
  • har bir element uchun shaxsiy xotira (registrlar; __xususiy).

Ushbu ierarxiyaning har bir darajasini qo'shimcha qurilmalarda amalga oshirish har bir qurilmaga kerak emas. Muvofiqlik ierarxiyadagi turli darajalar o'rtasida bo'shashgan va faqat aniq tomonidan bajarilgan sinxronizatsiya konstruktsiyalar, xususan to'siqlar.

Qurilmalar xotirani xost protsessori bilan bo'lishishi yoki bo'lmasligi mumkin.[13] Xost API beradi tutqichlar qurilma xotirasi buferlari va xost va qurilmalar o'rtasida ma'lumotlarni oldinga va orqaga uzatish funktsiyalari.

OpenCL C tili

Yozish uchun ishlatiladigan dasturlash tili yadrolarni hisoblash OpenCL C deb nomlanadi va unga asoslangan C99,[18] lekin OpenCL-da qurilma modeliga mos kelish uchun moslashtirilgan. Xotira buferlari ma'lum darajalarda joylashgan xotira iyerarxiyasi va ko'rsatgichlar mintaqaviy saralash bahslari bilan izohlanadi __global, __ mahalliy, __ doimiyva __xususiy, buni aks ettiruvchi. Qurilma dasturining o'rniga asosiy funktsiyasi, OpenCL C funktsiyalari belgilanadi __kernel ular ekanligiga ishora qilish kirish nuqtalari xost dasturidan chaqiriladigan dasturga. Funktsiya ko'rsatkichlari, bit maydonlari va o'zgaruvchan uzunlikdagi massivlar chiqarib tashlangan va rekursiya taqiqlangan.[19] The C standart kutubxonasi matematik dasturlashga yo'naltirilgan odatiy standart funktsiyalar to'plami bilan almashtiriladi.

OpenCL C foydalanishni osonlashtirish uchun kengaytirilgan parallellik ishchi elementlar va ishchi guruhlar bilan ishlashning vektor turlari va operatsiyalari, sinxronizatsiyasi va funktsiyalari bilan.[19] Xususan, kabi skalar turlaridan tashqari suzmoq va ikki baravar, C-ning tegishli turlariga o'xshash harakat qiladigan OpenCL kabi uzunlikdagi vektor turlarini taqdim etadi suzuvchi4 (Bitta aniqlikdagi suzuvchi 4-vektor); bunday vektor turlari har xil tayanch turlari uchun ikki, uch, to'rt, sakkiz va o'n oltita uzunliklarda mavjud.[18]:§ 6.1.2 Vektorlangan Ushbu turdagi operatsiyalar xaritaga tushirish uchun mo'ljallangan SIMD ko'rsatmalar to'plamlari, masalan, SSE yoki VMX, CPU-larda OpenCL dasturlarini ishga tushirishda.[13] Boshqa ixtisoslashgan turlarga 2 va 3 o'lchovli tasvir turlari kiradi.[18]:10–11

Misol: matritsali-vektorli ko'paytirish

Har bir chaqiruv (ishchi buyum) yadrosi yashil matritsaning bir qatorini oladi (A kodda), ushbu qatorni qizil vektor bilan ko'paytiradi (x) va natijani ko'k vektorning kiritilishiga joylashtiradi (y). Ustunlar soni n kabi yadroga uzatiladi ncols; qatorlar soni asosiy dastur tomonidan ishlab chiqarilgan ishchi buyumlar sonida aniq emas.

Quyidagi matritsali-vektorli ko'paytirish OpenCL C-da algoritm.

// A * x ni ko'paytirib, natijani y ga qoldiring.// A qatorli-asosiy matritsa, ya'ni (i, j) element A [i * ncols + j] da.__kernel bekor matvec(__global konst suzmoq *A, __global konst suzmoq *x,                     uint ncols, __global suzmoq *y){    hajmi_t men = get_global_id(0);              // Global identifikatori, qator indekslari sifatida ishlatiladi    __global suzmoq konst *a = &A[men*ncols];    // I'-chi qatorga ko'rsatgich    suzmoq sum = 0.f;                          // nuqta mahsuloti uchun akkumulyator    uchun (hajmi_t j = 0; j < ncols; j++) {        sum += a[j] * x[j];    }    y[men] = sum;}

Yadro funktsiyasi matvec hisoblaydi, har bir chaqiriqda nuqta mahsuloti matritsaning bitta qatori A va vektor x:

.

Buni to'liq matritsali-vektorli ko'paytirishga kengaytirish uchun OpenCL ish vaqti xaritalar matritsa qatorlari ustidagi yadro. Mezbon tomonda clEnqueueNDRangeKernel funktsiya buni amalga oshiradi; argument sifatida bajarilishi kerak bo'lgan yadro, uning argumentlari va matritsadagi qatorlar soniga mos keladigan bir qator ish elementlari talab qilinadi. A.

Misol: FFTni hisoblash

Ushbu misol a ni yuklaydi tez Fourier konvertatsiyasi (FFT) amalga oshirish va uni amalga oshirish. Amalga oshirish quyida keltirilgan.[20] Kod OpenCL kutubxonasidan birinchi mavjud grafik kartani so'raydi, o'qish va yozish uchun xotira buferlarini yaratadi (grafik karta nuqtai nazaridan), JIT-kompilyatsiyalari FFT yadrosi, so'ngra yadroni asenkron ravishda boshqaradi. Transformatsiyaning natijasi ushbu misolda o'qilmaydi.

# shu jumladan <stdio.h># shu jumladan <time.h># shu jumladan "CL / opencl.h"# NUM_ENTRIES 1024 ni aniqlangint asosiy() // (int argc, const char * argv []){	// doimiy	// Yadroning manba kodi mag'lubiyat bilan ifodalanadi	// fayl ichida joylashgan: "fft1D_1024_kernel_src.cl". Tafsilotlar uchun keyingi ro'yxatga qarang.	konst char *KernelSource =		# shu jumladan "fft1D_1024_kernel_src.cl"			;	// Mavjud grafik protsessorlarni qidirish	konst cl_uint num = 1;	clGetDeviceIDs(NULL, CL_DEVICE_TYPE_GPU, 0, NULL, (cl_uint*)&num);	cl_device_id qurilmalar[1];	clGetDeviceIDs(NULL, CL_DEVICE_TYPE_GPU, num, qurilmalar, NULL);	// GPU qurilmasi bilan hisoblash kontekstini yaratish	cl_context kontekst = clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU, NULL, NULL, NULL);	// buyruqlar navbatini yaratish	clGetDeviceIDs(NULL, CL_DEVICE_TYPE_DEFAULT, 1, qurilmalar, NULL);	cl_command_queue navbat = clCreateCommandQueue(kontekst, qurilmalar[0], 0, NULL);	// bufer xotira moslamalarini ajratish	cl_mem memobjs[] = { clCreateBuffer(kontekst, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, o'lchamlari(suzmoq) * 2 * NUM_ENTRIES, NULL, NULL),						 clCreateBuffer(kontekst, CL_MEM_READ_WRITE, o'lchamlari(suzmoq) * 2 * NUM_ENTRIES, NULL, NULL) };	// cl_mem memobjs [0] = // SABIT, YUQARISIDA KO'RING	// cl_mem memobjs [1] = // SABIT, YUQARISIDA KO'RING	// hisoblash dasturini yaratish	// const char * fft1D_1024_kernel_src [1] = {};	cl_program dastur = clCreateProgramWithSource(kontekst, 1, (konst char **)& KernelSource, NULL, NULL);	// hisoblash dasturini bajariladigan dasturini yaratish	clBuildProgram(dastur, 0, NULL, NULL, NULL, NULL);	// hisoblash yadrosini yarating	cl_kernel yadro = clCreateKernel(dastur, "fft1D_1024", NULL);	// args qiymatlarini o'rnating	hajmi_t local_work_size[1] = { 256 };	clSetKernelArg(yadro, 0, o'lchamlari(cl_mem), (bekor *)&memobjs[0]);	clSetKernelArg(yadro, 1, o'lchamlari(cl_mem), (bekor *)&memobjs[1]);	clSetKernelArg(yadro, 2, o'lchamlari(suzmoq)*(local_work_size[0] + 1) * 16, NULL);	clSetKernelArg(yadro, 3, o'lchamlari(suzmoq)*(local_work_size[0] + 1) * 16, NULL);	// ish hajmining o'lchamlari bilan N-D oralig'idagi ob'ektni yaratish va yadroni bajarish	hajmi_t global_work_size[1] = { 256 };		global_work_size[0] = NUM_ENTRIES;	local_work_size[0] = 64; // Nvidia: 192 yoki 256	clEnqueueNDRangeKernel(navbat, yadro, 1, NULL, global_work_size, local_work_size, 0, NULL, NULL);}

"Fft1D_1024_kernel_src.cl" fayli ichidagi haqiqiy hisoblash (asosida F80ni G80 me'morchiligiga o'rnatish ):[21]

R"(  // Ushbu yadro 1024 uzunlikdagi FFTni hisoblab chiqadi. 1024 uzunlikdagi FFT parchalanadi  // radix 16 funktsiyasiga, boshqa radix 16 funktsiyasiga va keyin radix 4 funktsiyasiga chaqiradi  __kernel bekor fft1D_1024 (__global suzuvchi2 *yilda, __global suzuvchi2 *chiqib,                          __ mahalliy suzmoq *sMemx, __ mahalliy suzmoq *sMemy) {    int ozoda = get_local_id(0);    int blockIdx = get_group_id(0) * 1024 + ozoda;    suzuvchi2 ma'lumotlar[16];    // ma'lumotlarning boshlang'ich ko'rsatkichi global xotiradan / xotiradan    yilda = yilda + blockIdx;  chiqib = chiqib + blockIdx;    global yuklar(ma'lumotlar, yilda, 64); // birlashtirilgan global o'qishlar    fftRadix16Pass(ma'lumotlar);      // joyida radix-16 o'tish    twiddleFactorMul(ma'lumotlar, ozoda, 1024, 0);    // mahalliy xotiradan foydalangan holda mahalliy aralash    localShuffle(ma'lumotlar, sMemx, sMemy, ozoda, (((ozoda & 15) * 65) + (ozoda >> 4)));    fftRadix16Pass(ma'lumotlar);               // joyida radix-16 o'tish    twiddleFactorMul(ma'lumotlar, ozoda, 64, 4); // twiddle omillarini ko'paytirish    localShuffle(ma'lumotlar, sMemx, sMemy, ozoda, (((ozoda >> 4) * 64) + (ozoda & 15)));    // radix-4 funktsiyasining to'rtta chaqiruvi    fftRadix4Pass(ma'lumotlar);      // radix-4 funktsiya raqami 1    fftRadix4Pass(ma'lumotlar + 4);  // radix-4 funktsiyasi raqami 2    fftRadix4Pass(ma'lumotlar + 8);  // radix-4 funktsiyasi raqami 3    fftRadix4Pass(ma'lumotlar + 12); // radix-4 funktsiya raqami 4    // global yozadi    globalStores(ma'lumotlar, chiqib, 64);  })"

OpenCL FFT dasturining to'liq, ochiq manbali dasturini Apple veb-saytida topish mumkin.[22]

Tarix

OpenCL dastlab tomonidan ishlab chiqilgan Apple Inc. ushlab turadigan savdo belgisi da va texnik guruhlar bilan hamkorlikda dastlabki taklifga muvofiqlashtirildi AMD, IBM, Qualcomm, Intel va Nvidia. Apple ushbu dastlabki taklifni Khronos guruhi. 2008 yil 16-iyun kuni Xronos hisoblash ishchi guruhi tuzildi[23] CPU, GPU, ko'milgan protsessor va dasturiy ta'minot kompaniyalari vakillari bilan. Ushbu guruh OpenCL 1.0 spetsifikatsiyasining texnik tafsilotlarini 2008 yil 18-noyabrgacha tugatish uchun besh oy davomida ishladi.[24] Ushbu texnik spetsifikatsiya Xronos a'zolari tomonidan ko'rib chiqildi va 2008 yil 8 dekabrda ommaviy nashrga ma'qullandi.[25]

OpenCL 1.0

Bilan chiqarilgan OpenCL 1.0 Mac OS X Snow Leopard 2009 yil 28 avgustda. Apple press-reliziga ko'ra:[26]

Snow Leopard bundan buyon faqat grafik dasturlarda mavjud bo'lgan GPU hisoblash quvvati ulkan gigaflopsini ochish imkonini beradigan Open Computing Language (OpenCL) bilan zamonaviy apparatlarni qo'llab-quvvatlaydi. OpenCL C dasturlash tiliga asoslangan va ochiq standart sifatida taklif qilingan.

AMD endi eskirgan o'rniga OpenCL-ni qo'llab-quvvatlashga qaror qildi Metallga yaqin unda Oqim doirasi.[27][28] RapidMind bir interfeysga ega bo'lgan ko'plab sotuvchilardan GPU'larni qo'llab-quvvatlash uchun ishlab chiqish platformasi ostida OpenCL-ni qabul qilganliklarini e'lon qildi.[29] 2008 yil 9-dekabrda Nvidia o'zining GPU hisoblash vositalariga OpenCL 1.0 spetsifikatsiyasini to'liq qo'llab-quvvatlash niyatida ekanligini e'lon qildi.[30] 2009 yil 30 oktyabrda IBM kompaniyasi o'zining birinchi OpenCL dasturini chiqardi XL kompilyatorlari.[31]

OpenCL 1.1

OpenCL 1.1 Xronos Group tomonidan 2010 yil 14 iyunda ratifikatsiya qilingan[32] va parallel dasturlashning moslashuvchanligi, funktsionalligi va ishlashi uchun muhim funktsiyalarni qo'shadi, shu jumladan:

  • Ma'lumotlarning yangi turlari, shu jumladan 3 komponentli vektorlar va qo'shimcha rasm formatlari;
  • Bir nechta xost iplaridan buyruqlar bilan ishlash va bir nechta qurilmalarda buferlarni qayta ishlash;
  • 1D, 2D yoki 3D to'rtburchaklar mintaqalarni o'qish, yozish va nusxalashni o'z ichiga olgan bufer mintaqalari bo'yicha operatsiyalar;
  • Buyruqning bajarilishini boshqarish va boshqarish uchun hodisalardan keng foydalanish;
  • Qo'shimcha OpenCL o'rnatilgan C funktsiyalari, masalan, tamsayı qisqich, aralashtirish va asinxron satrli nusxalar;
  • OpenCL va OpenGL hodisalarini bog'lash orqali tasvirlar va buferlarni samarali almashish orqali OpenGL o'zaro ishlash qobiliyati yaxshilandi.

OpenCL 1.2

2011 yil 15-noyabrda Khronos Group OpenCL 1.2 spetsifikatsiyasini e'lon qildi,[33] Parallel dasturlash uchun ishlash va xususiyatlar jihatidan oldingi versiyalarga nisbatan sezilarli funktsionallik qo'shildi. Eng e'tiborli xususiyatlarga quyidagilar kiradi:

  • Qurilmani bo'limlarga ajratish: ish topshiriqlarini alohida hisoblash birliklariga ajratish uchun qurilmani kichik qurilmalarga ajratish qobiliyati. Bu juda muhim vazifalar uchun kechikishni kamaytirish uchun qurilmaning maydonlarini zahiralash uchun foydalidir.
  • Ob'ektlarni alohida kompilyatsiya qilish va bog'lash: boshqa dasturlarga qo'shilish uchun OpenCL-ni tashqi kutubxonalarga kompilyatsiya qilish funktsiyasi.
  • Kengaytirilgan tasvirni qo'llab-quvvatlash: 1,2 1D rasmlar va 1D / 2D tasvir massivlarini qo'llab-quvvatlaydi. Bundan tashqari, OpenGL almashish kengaytmalari endi OpenGL rasmlarini yaratish uchun OpenGL 1D teksturalari va 1D / 2D tekstura massivlaridan foydalanishga imkon beradi.
  • O'rnatilgan yadrolar: o'ziga xos noyob funktsiyalarni o'z ichiga olgan maxsus qurilmalar endi OpenCL tizimiga yanada yaqinroq integratsiya qilingan. Kernellarni asosiy apparatning ixtisoslashtirilgan yoki dasturlanmaydigan jihatlaridan foydalanishga chaqirish mumkin. Masalan, video kodlash / dekodlash va raqamli signal protsessorlari.
  • DirectX funktsionalligi: DX9 media sirtini taqsimlash OpenCL va DX9 yoki o'rtasida samarali almashinuvga imkon beradi DXVA media sirtlari. Xuddi shu tarzda, DX11 uchun OpenCL va DX11 sirtlari o'rtasida uzluksiz ulanish yoqilgan.
  • Majburlash qobiliyati IEEE 754 bitta aniqlikdagi suzuvchi nuqta matematikasiga muvofiqligi: OpenCL sukut bo'yicha bo'linish, o'zaro va kvadrat ildiz ishining yagona aniq versiyalari IEEE 754 talab qiladigan to'g'ri yaxlitlangan qiymatlardan kam aniqroq bo'lishiga imkon beradi.[34] Agar dasturchi "-cl-fp32-correct-rounded-divide-sqrt" buyruq satri argumentini kompilyatorga topshirsa, OpenCL dasturi buni qo'llab-quvvatlasa, ushbu uchta operatsiya IEEE 754 talablariga muvofiq hisoblab chiqiladi va agar OpenCL dasturi ushbu operatsiyalarni IEEE 754 spetsifikatsiyasi bilan belgilanadigan to'g'ri yaxlitlangan qiymatlari bo'yicha hisoblashni qo'llab-quvvatlamaydi.[34] Ushbu qobiliyat OpenCL dasturini ushbu operatsiyalarni IEEE 754 aniqligida bajarishi mumkinligini aniqlash uchun so'rov qilish qobiliyati bilan to'ldiriladi.[34]

OpenCL 2.0

2013 yil 18-noyabrda Xronos Group yakunlangan OpenCL 2.0 spetsifikatsiyasini ratifikatsiya qilish va ommaviy e'lon qilishni e'lon qildi.[35] OpenCL 2.0-ga yangilanishlar va qo'shimchalar quyidagilarni o'z ichiga oladi:

  • Umumiy virtual xotira
  • Ichki parallellik
  • Umumiy manzil maydoni
  • Tasvirlar
  • C11 atom
  • Quvurlar
  • Android o'rnatiladigan mijoz drayverini kengaytirish

OpenCL 2.1

OpenCL 2.1 vaqtinchalik spetsifikatsiyasining tasdiqlanishi va chiqarilishi haqida 2015 yil 3 mart kuni San-Frantsiskoda bo'lib o'tgan Game Developer konferentsiyasida e'lon qilindi. U 2015 yil 16-noyabrda chiqarilgan.[36] Ning pastki qismiga asoslangan OpenCL C ++ yadrosi tilini taqdim etdi C ++ 14, oldindan mavjud bo'lgan OpenCL C yadrosi tilini qo'llab-quvvatlashni davom ettirish. Vulkan va OpenCL 2.1 ulushi SPIR-V sifatida oraliq vakillik yuqori darajadagi tillarning oldingi qismlariga umumiy kompilyatsiya maqsadini baham ko'rishga imkon beradi. OpenCL API-ga yangilanishlar quyidagilarni o'z ichiga oladi:

  • Qo'shimcha kichik guruh faoliyati
  • Yadro ob'ektlari va holatlarini nusxalash
  • Kam kutish vaqtidagi qurilmalar taymeri bo'yicha so'rovlar
  • SPIR-V kodini ish vaqti bo'yicha qabul qilish
  • Navbatga oid ustuvor ko'rsatmalar
  • Nol o'lchovli xostdan yuboriladi

AMD, ARM, Intel, HPC va YetiWare OpenCL 2.1-ni qo'llab-quvvatlashini e'lon qildi.[37][38]

OpenCL 2.2

OpenCL 2.2 OpenCL C ++ yadro tilini sezilarli darajada yaxshilangan parallel dasturlash samaradorligi uchun yadro spetsifikatsiyasiga olib keladi.[39][40][41] U 2017 yil 16-mayda chiqarilgan.[42] Xizmatni yangilash 2018 yil may oyida xato tuzatishlari bilan chiqdi.[43]

  • OpenCL C ++ yadrosi tili ning statik kichik to'plamidir C ++ 14 standart va umumiy va meta-dasturlash uchun sinflar, shablonlar, lambda ifodalari, funktsiyalarning haddan tashqari yuklanishi va boshqa ko'plab konstruktsiyalarni o'z ichiga oladi.
  • Yangi Xronosdan foydalanadi SPIR-V 1.1 OpenCL C ++ yadro tilini to'liq qo'llab-quvvatlovchi oraliq til.
  • OpenCL kutubxonasi funktsiyalari endi C ++ tilidan yuqori darajadagi xavfsizlikni ta'minlash va aniqlanmagan xatti-harakatni ta'minlash uchun atomika, iteratorlar, rasmlar, namuna oluvchilar, quvurlar va qurilmalar navbatining o'rnatilgan turlari va manzillar bo'shliqlariga kirish paytida foydalanishi mumkin.
  • Quvurlar ombori - bu OpenCL 2.2-dagi FPGA-ni amalga oshirish uchun foydali bo'lgan, kompilyatsiya vaqtida ulanish hajmi va turini ma'lum qilish, yadrolar orasidagi samarali qurilma miqyosidagi aloqani ta'minlash orqali foydalidir.
  • OpenCL 2.2 shuningdek, yaratilgan kodni takomillashtirilgan optimallashtirish xususiyatlarini o'z ichiga oladi: dasturlar SPIR-V kompilyatsiya vaqtida ixtisoslashuv konstantasining qiymatini ta'minlashi mumkin, yangi so'rov dasturning global ob'ektlarining ahamiyatsiz bo'lmagan konstruktorlari va destruktorlarini aniqlay oladi va foydalanuvchi qo'ng'iroqlarini o'rnatishi mumkin. dasturni chiqarish vaqtida.
  • OpenCL 2.0 mos keladigan har qanday qo'shimcha qurilmada ishlaydi (faqat drayverni yangilash kerak)

OpenCL 3.0

OpenCL 3.0 yakuniy rejimda (2020-09-30). OpenCL 1.2 majburiydir. Barcha OpenCL 2.x modullari va yangi 3.0 modullari ixtiyoriydir. Ko'p afzal qilingan C ++ 17 xususiyatlariga ega OpenCL uchun yangi afzal qilingan til. [44][45][46]

Yo'l xaritasi

The OpenCL bo'yicha xalqaro seminar (IWOCL) Khronos Group tomonidan o'tkaziladi

OpenCL 2.2-ni chiqarayotganda, Khronos Group OpenCL imkon qadar yaqinlashishini e'lon qildi Vulkan har ikkala API bo'yicha ham OpenCL dasturini joylashtirish moslashuvchanligini ta'minlash uchun.[47][48] Buni Adobe-ning Premer-Rush dasturi clspv yordamida namoyish etdi[49] Android-da tarqatish uchun Vulkan ish vaqtida ishlash uchun OpenCL C yadro kodining katta miqdorini kompilyatsiya qilish uchun ochiq manba kompilyatori.[50] OpenCL-da Vulkan-dan mustaqil istiqbolli yo'l xaritasi mavjud, "OpenCL Next" ishlab chiqilmoqda va 2020 yilda ishlab chiqarishga yo'naltirilgan. OpenCL Next Vulkan / OpenCL Interop, Scratch-Pad Memory Management, Extended Subgroups, SPIR-V 1.4 yutish va shu kabi kengaytmalarni birlashtirishi mumkin. SPIR-V kengaytirilgan disk raskadrovka haqida ma'lumot. OpenCL shuningdek Vulkanga o'xshash yuklagich va qatlamlarni va bir nechta tezlatgich turlarida joylashtirish moslashuvchanligi uchun "Moslashuvchan profil" ni ko'rib chiqadi.[51]

Ochiq manbali dasturlar

OpenCL sarlavhalar to'plamidan va a dan iborat umumiy ob'ekt bu ish vaqtida yuklanadi. O'rnatilishi mumkin bo'lgan mijoz drayveri (ICD) har bir sotuvchi sinfi uchun platformada o'rnatilishi kerak, buning uchun ish vaqti qo'llab-quvvatlanishi kerak. Masalan, Linux platformasida Nvidia qurilmalarini qo'llab-quvvatlash uchun, Nvidia ICD-ni o'rnatishi kerak, shunda OpenCL ish vaqti (ICD yuklagichi) sotuvchi uchun ICD-ni topishi va qo'ng'iroqlarni to'g'ri yo'naltirishi mumkin. . Standart OpenCL sarlavhasi iste'molchi ilovasi tomonidan qo'llaniladi; har bir funktsiyaga qo'ng'iroqlar keyin OpenCL ish vaqti ICD yordamida tegishli haydovchiga yuboriladi. Har bir sotuvchi o'z haydovchisida har bir OpenCL qo'ng'irog'ini amalga oshirishi kerak.[52]

Olma,[53] Nvidia,[54] RapidMind[55] va Gallium3D[56] OpenCL dasturlarining barchasi quyidagilarga asoslangan LLVM Kompilyator texnologiyasi va Jiringlash o'zining oldingi qismi sifatida kompilyator.

MESA Galliy hisoblash
Gallium Compute loyihasi doirasida bir qator platformalar uchun OpenCL (haqiqiy 1.1 to'liq bo'lmagan, asosan AMD Radeon GCN tomonidan amalga oshirilgan) dasturini amalga oshirish davom etmoqda,[57] bu ishiga asoslanadi Mesa loyihasi bir nechta platformalarni qo'llab-quvvatlash uchun. Ilgari bu CLOVER nomi bilan tanilgan.,[58] dolzarb rivojlanish: asosan haqiqiy LLVM va CLANG bilan to'liq bo'lmagan ramkalarni ishga tushirishni qo'llab-quvvatlash, 17.3 da fp16 kabi ba'zi yangi xususiyatlar,[59] AMD va Nvidia uchun to'liq OpenCL 1.0, 1.1 va 1.2 maqsadli. Yangi asosiy ishlab chiqish tomonidan amalga oshiriladi Qizil shapka SPIR-V bilan Clover uchun.[60][61] New Target - OpenCL 1.2-ning to'liq qo'llab-quvvatlanishiga ega modulli OpenCL 3.0.
BEIGNET
Buning uchun Intel tomonidan amalga oshiriladi Ivy Bridge + apparat 2013 yilda chiqarilgan.[62] Intelning China Team kompaniyasining ushbu dasturi AMD va Qizil shapka,[63] shu qatorda; shu bilan birga Maykl Larabel ning Froniks.[64] 1.3.2-ning haqiqiy versiyasi OpenCL 1.2-ni to'liq qo'llab-quvvatlaydi (Ivy Bridge va undan yuqori) va Skylake va undan yangi versiyalari uchun OpenCL 2.0-ni ixtiyoriy.[65][66] Android uchun qo'llab-quvvatlash Beignet-ga qo'shildi.,[67] Haqiqiy rivojlanish maqsadlari: faqat 1.2 va 2.0 ni qo'llab-quvvatlash, OpenCL 2.1, 2.2, 3.0 yo'llari NEO-ga o'tdi.
NEO
Intel tomonidan Gen. 8 uchun dastur Broadwell + Gen. 9 apparati 2018 yilda chiqarilgan.[68] Ushbu haydovchi qo'llab-quvvatlanadigan platformalar uchun Beignet dasturini almashtiradi. NEO Core platformalarida OpenCL 2.1 va Atom platformalarida OpenCL 1.2 qo'llab-quvvatlaydi.[69] 2020 yilda haqiqiy Gen 11 muzli ko'l va Gen 12 yo'lbars ko'li qo'llab-quvvatlanadi. Alder Leyk, Tiger Leykdan Broadwell-ga 20.43 versiyasi bilan yangi OpenCL 3.0 mavjud.
ROCm
AMD-ning bir qismi sifatida yaratilgan GPUOchiq, ROCm (Radeon Open Compute) - bu OpenCL 1.2-da qurilgan, 2.0 uchun tilni qo'llab-quvvatlaydigan ochiq kodli Linux loyihasi. Tizim barcha zamonaviy AMD protsessorlari va APU (haqiqiy qisman GFX 7, GFX 8 va 9), shuningdek Intel Gen7.5 + protsessorlari (faqat PCI 3.0 bilan) bilan mos keladi.[70][71] 1.9 versiyasi bilan qo'llab-quvvatlash ba'zi nuqtalarda PCIe 2.0 va atomikasiz qo'shimcha qurilmalarga kengaytirilgan. XDC2018-da haqiqiy ishlarning umumiy ko'rinishi.[72][73] ROCm Version 2.0 to'liq OpenCL 2.0-ni qo'llab-quvvatlaydi, ammo ba'zi xatolar va cheklovlar todo ro'yxatida mavjud.[74][75] 3.3 versiyasi batafsil takomillashmoqda.[76] 3.5 versiyasi OpenCL 2.2 ni qo'llab-quvvatlaydi. AMD Compute Card Instinct MI 100 yordamida ROCm 4.0 haqiqiy hisoblanadi.[77] Haqiqiy hujjatlar github-da mavjud.[78]
POCL
CPU va ba'zi grafik protsessorlarni qo'llab-quvvatlaydigan ko'chma dastur (CUDA va HSA ). Qurilish Jiringlash va LLVM.[79] 1.0 versiyasi bilan OpenCL 1.2 deyarli 2.x funktsiyalari bilan bir qatorda to'liq amalga oshirildi.[80] Haqiqiy LLVM / CLANG 6.0, 7.0 va Full OpenCL 1.2 qo'llab-quvvatlanadigan 1.2 versiyasi bo'lib, Milestone 1.2-dagi barcha yopiq chiptalar bilan ta'minlangan.[80][81] OpenCL 2.0 deyarli to'liq amalga oshirildi.[82] 1.3-versiya Mac OS X-ni qo'llab-quvvatlaydi.[83] 1.4 versiyasi LLVM 8.0 va 9.0-ni qo'llab-quvvatlashni o'z ichiga oladi.[84] 1.5-versiya LLVM / Clang 10-ni qo'llab-quvvatlaydi. [85]
Shamrok
ARM uchun Mesa Clover porti, OpenCL 1.2-ning to'liq ko'magi bilan,[86][87] 2.0 uchun haqiqiy rivojlanish yo'q.
FreeOCL
Keyinchalik ishonchli platformani yaratish uchun tashqi kompilyatorni amalga oshiradigan OpenCL 1.2 protsessoriga yo'naltirilgan dastur,[88] haqiqiy rivojlanish yo'q.
MOQL
Matrix-2000 uchun NUDT tadqiqotchilari tomonidan POCL asosidagi OpenCL dasturi 2018 yilda chiqarildi. Matrix-2000 arxitekturasi TianHe-2 superkompyuterining Intel Xeon Phi tezlatgichlarini almashtirishga mo'ljallangan. Ushbu dasturlash doirasi LLVM v5.0 ustiga qurilgan va POCL-dan ba'zi kod qismlarini qayta ishlatadi. Uskuna potentsialini ochish uchun qurilmaning ish vaqti push-topshiriqni yuborish strategiyasidan foydalanadi va yadro atomikasining ishlashi sezilarli darajada yaxshilanadi. Ushbu ramka TH-2A tizimida joylashtirilgan va ommaga ochiqdir.[89] Dasturlarning bir qismi keyinchalik POCL-ni yaxshilash uchun ko'chiriladi.[80]

Sotuvchini amalga oshirish

Sotuvchini amalga oshirishning xronologiyasi

  • 2008 yil 10-dekabr: AMD va Nvidia birinchi ochiq OpenCL namoyishini o'tkazdilar, 75 daqiqalik taqdimot SIGGRAF Osiyo 2008. AMD protsessor tomonidan tezlashtirilgan OpenCL demosini namoyish qildi, u OpenCL-ning bir yoki bir nechta yadrolarda miqyosliligini tushuntirdi, Nvidia esa GPU-tezlashtirilgan demoni namoyish etdi.[90][91]
  • 2009 yil 16 mart: 4-multicore ko'rgazmasida Imagination Technologies e'lon qildi PowerVR SGX543MP, ushbu kompaniyaning OpenCL-ni qo'llab-quvvatlaydigan birinchi grafik protsessori.[92]
  • 2009 yil 26 mart: soat GDC 2009 yil, AMD va Havok OpenCL tezlashtirish uchun birinchi ishchi dasturni namoyish etdi Havok mato AMD-da Radeon HD 4000 seriyali GPU.[93]
  • 2009 yil 20 aprel: Nvidia o'zining OpenCL drayveri va SDK uning OpenCL Erta Kirish Dasturida ishtirok etadigan ishlab chiquvchilarga.[94]
  • 2009 yil 5-avgust: AMD o'zining OpenCL platformasi uchun birinchi ishlab chiqish vositalarini namoyish qildi ATI oqimi SDK v2.0 Beta dasturi.[95]
  • 2009 yil 28 avgust: Apple chiqarildi Mac OS X Snow Leopard, bu OpenCL-ning to'liq dasturini o'z ichiga oladi.[96]
  • 2009 yil 28 sentyabr: Nvidia o'zining OpenCL drayverlari va SDK dasturini chiqardi.
  • 2009 yil 13 oktyabr: AMD ATI Stream SDK 2.0 ning to'rtinchi beta-versiyasini chiqardi, bu ikkalasida ham to'liq OpenCL dasturini taqdim etadi. R700 /R800 GPU va SSE3 qobiliyatli protsessorlar. SDK Linux va Windows uchun ham mavjud.[97]
  • 2009 yil 26-noyabr: Nvidia OpenCL 1.0 (rev 48) uchun drayverlarni chiqardi.
  • 2009 yil 27 oktyabr: S3 mahalliy OpenCL 1.0-ni qo'llab-quvvatlaydigan birinchi mahsulot - Chrome 5400E o'rnatilgan grafik protsessorini chiqardi.[98]
  • 2009 yil 10-dekabr: VIA VN1000 chipsetiga kiritilgan OpenCL 1.0 - ChromotionHD 2.0 video protsessorini qo'llab-quvvatlovchi birinchi mahsulotini chiqardi.[99]
  • 2009 yil 21-dekabr: AMD ATI Stream SDK 2.0 ning ishlab chiqarish versiyasini chiqardi,[100] uchun OpenCL 1.0-ni qo'llab-quvvatlaydi R800 GPU va beta-quvvatlash R700 Grafik protsessorlar.
  • 2010 yil 1-iyun: ZiiLABS uy sharoitida ishlatiladigan, o'rnatilgan va raqamli uy mahsulotlari uchun ZMS protsessori uchun birinchi OpenCL dasturining tafsilotlarini e'lon qildi.[101]
  • 2010 yil 30 iyun: IBM OpenCL 1.0 ning to'liq mos keladigan versiyasini chiqardi.[4]
  • 2010 yil 13 sentyabr: Intel Sandy Bridge chip arxitekturasi uchun birinchi OpenCL dasturining tafsilotlarini e'lon qildi. Sandy Bridge Intelning eng yangi grafik chip texnologiyasini to'g'ridan-to'g'ri markaziy protsessorga birlashtiradi.[102]
  • 2010 yil 15-noyabr: Wolfram tadqiqotlari ozod qilindi Matematik 8 bilan OpenCLLink paket.
  • 2011 yil 3 mart: Khronos guruhi tashkil topganligini e'lon qiladi WebCL a guruhini aniqlash bo'yicha ishchi guruh JavaScript OpenCL-ga ulanish. Bu jabduqlar uchun potentsialni yaratadi GPU va ko'p yadroli protsessor a dan parallel ishlov berish Veb-brauzer.[103][104]
  • 2011 yil 31 mart: IBM OpenCL 1.1 ning to'liq mos keladigan versiyasini chiqardi.[4][105]
  • 2011 yil 25 aprel: IBM x86 Architecture-da Linux uchun OpenCL Common Runtime v0.1-ni chiqardi.[106]
  • 2011 yil 4-may: Nokia Research kompaniyasi ochiq kodli WebCL kengaytmasini chiqardi Firefox JavaScript-ni OpenCL bilan bog'laydigan veb-brauzer.[107]
  • 2011 yil 1-iyul: Samsung Electronics OpenCL-ga JavaScript-ni majburiy ravishda ta'minlab, WebKL uchun WebCL-ning ochiq kodli prototipini joriy qildi.[108]
  • 2011 yil 8-avgust: AMD OpenCL-ga asoslangan AMD tezlashtirilgan parallel qayta ishlash (APP) dasturiy ta'minotni ishlab chiqarish to'plamini (SDK) v2.5-ni chiqarib, ATI oqimi SDK texnologiya va kontseptsiya sifatida.[109]
  • 2011 yil 12-dekabr: AMD AMD APP SDK v2.6 versiyasini chiqardi[110] unda OpenCL 1.2 oldindan ko'rishni o'z ichiga oladi.
  • 2012 yil 27 fevral: Portlend guruhi ko'p yadroli PGI OpenCL kompilyatorini chiqardi ARM CPU.[111]
  • 2012 yil 17 aprel: Xronos WebCL ishchi loyihasini chiqardi.[112]
  • 2013 yil 6-may: Altera OpenCL uchun 13.0 versiyasi uchun Altera SDK-ni chiqardi.[113] Bu OpenCL 1.0 ga mos keladi.[114]
  • 2013 yil 18-noyabr: Xronos OpenCL 2.0 spetsifikatsiyasi yakunlanganligini e'lon qildi.[115]
  • 2014 yil 19 mart: Xronos WebCL 1.0 spetsifikatsiyasini chiqaradi[116][117]
  • 2014 yil 29-avgust: Intel OpenCL 2.0-ni qo'llab-quvvatlaydigan HD Graphics 5300 drayverini chiqardi.[118]
  • 2014 yil 25 sentyabr: AMD OpenCL 2.0 drayverini o'z ichiga olgan Catalyst 14.41 RC1 ni chiqaradi.[119]
  • 2015 yil 14-yanvar: Xilinx Inc. SDAccel-ni OpenCL, C va C ++ uchun ishlab chiqish muhitini e'lon qiladi va Xronos muvofiqligiga erishadi.[120]
  • 2015 yil 13 aprel: Nvidia Kepler yoki undan keyingi arxitekturalar asosida GPU'lar uchun OpenCL 1.2 qo'llab-quvvatlashni o'z ichiga olgan WHQL drayverini v350.12-ni chiqaradi.[121] Driver 340+ Tesla va Fermi uchun OpenCL 1.1-ni qo'llab-quvvatlaydi.
  • 2015 yil 26-avgust: AMD AMD APP SDK v3.0-ni chiqardi[122] OpenCL 2.0 va namunaviy kodlashni to'liq qo'llab-quvvatlashni o'z ichiga oladi.
  • 2015 yil 16-noyabr: Xronos OpenCL 2.1 spetsifikatsiyasi yakunlanganligini e'lon qildi.[123]
  • 2016 yil 18 aprel: Xronos OpenCL 2.2 spetsifikatsiyasi vaqtincha yakunlanganligini e'lon qildi.[40]
  • 2016 yil 3-noyabr kuni SDK 2016 r3 da OpenCL 2.1 ning Gen7 + ni Intel qo'llab-quvvatlaydi[124]
  • 2017 yil 17-fevral: Nvidia 378.66 drayveri bilan OpenCL 2.0-ni baholashni qo'llab-quvvatlashni boshlaydi.[125][126][127]
  • 2017 yil 16-may: Xronos OpenCL 2.2 spetsifikatsiyasi SPIR-V 1.2 bilan yakunlanganligini e'lon qildi.[128]
  • 14-may, 2018-yil: Khronos OpenCL 2.2-ga xizmat ko'rsatish yangilanishini Bugfix va birlashtirilgan sarlavhalar bilan e'lon qildi.[43]
  • 2020 yil 27 aprel: Xronos OpenCL 3.0 ning vaqtinchalik versiyasini e'lon qildi
  • 2020 yil 1-iyun: yangi Tiger Leyk uchun OpenCL 3.0 bilan ishlaydigan Intel Neo ish vaqti
  • 2020 yil 3-iyun: AMD OpenCL 2.2-quvvatlashi bilan RocM 3.5 ni e'lon qildi [129]
  • 2020 yil 30 sentyabr: Xronos OpenCL 3.0 uchun texnik shartlar yakunlanganligini e'lon qildi.

Qurilmalar

2016 yildan boshlab OpenCL ishlaydi Grafik ishlov berish birliklari, CPU bilan SIMD ko'rsatmalar, FPGA, Movidius son-sanoqsiz 2, Adapteva epifani va DSP-lar.

Khronos muvofiqlik test to'plami

Rasmiy ravishda muvofiq bo'lish uchun dastur Xronos muvofiqlik test paketidan (CTS) o'tishi kerak, natijada Khronos Adopters dasturiga taqdim etiladi.[130] Barcha OpenCL versiyalari uchun Khronos CTS kodi 2017 yildan beri ochiq manbada mavjud.[131]

Muvofiq mahsulotlar

The Khronos guruhi OpenCL-mos mahsulotlarning kengaytirilgan ro'yxatini olib boradi.[4]

Sinopsis OpenCL muvofiq mahsulotlar[4]
AMD SDKlari (OpenCL-ni qo'llab-quvvatlaydi Markaziy protsessor va tezlashtirilgan ishlov berish birligi Qurilmalar), (GPU: Terascale 1: OpenCL 1.1, Terascale 2: 1.2, GCN 1: 1.2+, GCN 2+: 2.0+)X86 + SSE2 (yoki undan yuqori) mos CPU 64-bit va 32-bit,[132] Linux 2.6 kompyuter, Windows Vista / 7 / 8.x / 10 kompyuterAMD sintezi E-350, E-240, C-50, C-30 HD 6310 / HD 6250 bilanAMD Radeon / Mobility HD 6800, HD 5x00 seriyali GPU, iGPU HD 6310 / HD 6250, HD 7xxx, HD 8xxx, R2xx, R3xx, RX 4xx, RX 5xx, Vega seriyalariAMD FirePro Vx800 seriyali GPU va undan keyin, Radeon Pro
OpenCL Applications 2013 uchun Intel SDK[133] (Intel Core protsessorlari va Intel HD Graphics 4000/2500 ni qo'llab-quvvatlaydi) OpenCL 2.1 (Gen7 +) bilan haqiqiy 2017 R2, Beta-da SDK 2019,[134]Intel Bilan protsessorlar SSE 4.1, SSE 4.2 yoki AVX qo'llab-quvvatlash.[135][136] Microsoft Windows, LinuxIntel Core i7, i5, i3; Ikkinchi avlod Intel Core i7 / 5/3, Intel HD Graphics 4000/2500 va undan yangiroq uchinchi avlod Intel Core protsessorlariIntel Core 2 Yakkaxon, Duo Quad, Ekstremal va yangiIntel Xeon 7x00,5x00,3x00 (yadro asosida) va yangi
IBM Serverlar OpenCL ishlab chiqarish to'plami Linux-da ishlaydigan Power uchun VSX quvvat[137][138]IBM Power 775 (PERCS ), 750IBM BladeCenter PS70x ExpressIBM BladeCenter JS2x, JS43IBM BladeCenter QS22
IBM OpenCL umumiy ish vaqti (OCR)

[139]

X86 + SSE2 (yoki undan yuqori) mos keluvchi protsessorlar 64 bitli va 32 bitli;[140] Linux 2.6 kompyuterAMD sintezi, Nvidia Ion va Intel Core i7, i5, i3; Ikkinchi avlod Intel Core i7 / 5/3AMD Radeon, Nvidia GeForce va Intel Core 2 Yakkaxon, Duo, To'rtlik, EkstremalATI FirePro, Nvidia Quadro va Intel Xeon 7x00,5x00,3x00 (Core asoslangan)
Nvidia OpenCL drayveri va vositalari,[141] Chipslar: Tesla, Fermi: OpenCL 1.1 (Driver 340+), Kepler, Maxwell, Paskal, Volta, Turing: OpenCL 1.2 (Driver 370+), OpenCL 2.0 beta (378.66)Nvidia Tesla C / D / SNvidia GeForce GTS / GT / GTX,Nvidia IonNvidia Quadro FX / NVX / Plex, Quadro, Quadro K, Quadro M, Quadro P, Quadro Volta bilan, Quadro RTX Turing bilan

Barcha standartlarga mos keluvchi dasturlar klinofo vositalaridan biri yordamida so'ralishi mumkin (bir xil nomdagi va shunga o'xshash xususiyatlar to'plamiga ega bo'lgan bir nechta vositalar mavjud).[142][143][144]

Versiyani qo'llab-quvvatlash

Mahsulotlar va ularning OpenCL qo'llab-quvvatlash versiyasiga quyidagilar kiradi:[145]

OpenCL 3.0-ni qo'llab-quvvatlash

barcha OpenCL 1.2+ bilan jihozlash mumkin, faqat OpenCL 2.x ixtiyoriy, Khronos Test Suite ishlamoqda [146]

  • (2020) Intel NEO Compute: Gen.4 Tiger Leyk uchun Broadwellga 20.41+ [147]

OpenCL 2.2-ni qo'llab-quvvatlash

Hali yo'q: Xronos Test Suite tayyor, Driver Update with all Hardware 2.0 va 2.1 qo'llab-quvvatlanishi mumkin

  • Intel NEO Compute: Haqiqiy mahsulotlar uchun ishlab chiqarish jarayoni[148]
  • ROCm: 3.5+ versiyasi asosan

OpenCL 2.1-ni qo'llab-quvvatlash

  • (2018+) Intel-ning 5-chi va 6-chi gen protsessorlariga qo'llab-quvvatlanadigan qo'llab-quvvatlash (Broadwell, Skylake )
  • (2017+) Intel 7, 8, 9, 10, 11, 12-gen protsessorlari (Kaby ko'li, Qahva ko'li, Kometa ko'li, Muzli ko'l, Tiger ko'li)
  • Xronos: Driver Update yordamida barcha uskunalarni 2.0 qo'llab-quvvatlashi mumkin

OpenCL 2.0-ni qo'llab-quvvatlash

  • (2011+) AMD GCN GPU'si (HD 7700 + / HD 8000 / Rx 200 / Rx 300 / Rx 400 / Rx 500 / Rx 5000-Series), ba'zi GCN 1st Gen faqat 1,2 ba'zi kengaytmalari bilan
  • (2013+) AMD GCN APU'si (Yaguar, Steamroller, Puma, Ekskavator va Zenga asoslangan)
  • (2014+) Intel 5th va 6th gen protsessorlari (Broadwell, Skylake )
  • (2015+) Qualcomm Adreno 5xx seriyali
  • (2018+) Qualcomm Adreno 6xx seriyali
  • (2017+) Android 7.1 va Linux-da ARM Mali (Bifrost) G51 va G71
  • (2018+) ARM Mali (Bifrost) G31, G52, G72 va G76
  • (2017+) to'liq bo'lmagan baholashni qo'llab-quvvatlash: Nvidia Kepler, Maksvell, Paskal, Volta va Turing GPU'si (GeForce 600, 700, 800, 900 & 10-series, Quadro K-, M- & P-series, Tesla K-, M- & P-series) Driver Version 378.66+ bilan

OpenCL 1.2-ni qo'llab-quvvatlash

  • (2011+) ba'zi AMD GCN 1st Gen uchun ba'zi OpenCL 2.0 funktsiyalari bugungi kunda mumkin emas, lekin Terascale-ga qaraganda ko'proq kengaytmalar
  • (2009+) AMD TeraScale 2 va 3 GPU (RV8xx, RV9xx HD 5000, 6000 & 7000 seriyali)
  • (2011+) AMD TeraScale APU (K10, Bobcat va Piledriver bazasida)
  • (2012+) Nvidia Kepler, Maksvell, Paskal, Volta va Turing GPU'si (GeForce 600, 700, 800, 900, 10, 16, 20 seriyalari, Quadro K-, M- & P-seriyalari, Tesla K-, M- & P seriyali)
  • (2012+) Intel 3rd va 4th gen protsessorlari (Ayvi ko'prigi, Xasuell )
  • (2013+) Qualcomm Adreno 4xx seriyali
  • (2013+) ARM Mali Midgard 3rd gen (T760)
  • (2015+) ARM Mali Midgard 4th gen (T8xx)

OpenCL 1.1-ni qo'llab-quvvatlash

  • (2008+) ba'zi AMD TeraScale 1 GPU'lari (HD4000 seriyasidagi RV7xx)
  • (2008+) Nermiya Tesla, Fermi GPU'si (GeForce 8, 9, 100, 200, 300, 400, 500 seriyali, Tesla yoki Fermi GPU bilan ishlaydigan Quadro seriyasi yoki Tesla seriyasi)
  • (2011+) Qualcomm Adreno 3xx seriyali
  • (2012+) ARM Mali Midgard 1st va 2nd gen (T-6xx, T720)

OpenCL 1.0-ni qo'llab-quvvatlash

  • faqat 1,0 uchun birinchi haydovchidan keyin asosan 1,1 va 1,2 ga yangilandi

Portativlik, ishlash va alternativalar

OpenCL-ning asosiy xususiyati - bu portativ xotira va ijro modeli va dasturchi to'g'ridan-to'g'ri inline kabi qo'shimcha qurilmalarga xos texnologiyalardan foydalana olmaydi Parallel ipni bajarish (PTX) Nvidia GPU-lari uchun, agar ular boshqa platformalarda to'g'ridan-to'g'ri ko'chirilishdan voz kechishga tayyor bo'lmasalar. Har qanday muvofiq dasturda OpenCL yadrosini ishlatish mumkin.

Biroq, yadroning ishlashi platformalar bo'ylab ko'chirilishi shart emas. Mavjud dasturlar yadro kodi to'g'ri sozlanganda raqobatbardosh ekanligi isbotlangan va avtomatik sozlash ishlash portativligi muammosiga echim sifatida taklif qilingan,[149] eksperimental chiziqli algebra yadrolarida "ishlashning maqbul darajalari" ni berish.[150] Portability of an entire application containing multiple kernels with differing behaviors was also studied, and shows that portability only required limited tradeoffs.[151]

Da o'rganish Delft universiteti from 2011 that compared CUDA programs and their straightforward translation into OpenCL C found CUDA to outperform OpenCL by at most 30% on the Nvidia implementation. The researchers noted that their comparison could be made fairer by applying manual optimizations to the OpenCL programs, in which case there was "no reason for OpenCL to obtain worse performance than CUDA". The performance differences could mostly be attributed to differences in the programming model (especially the memory model) and to NVIDIA's compiler optimizations for CUDA compared to those for OpenCL.[149]

Another study at D-Wave Systems Inc. found that "The OpenCL kernel’s performance is between about 13% and 63% slower, and the end-to-end time is between about 16% and 67% slower" than CUDA's performance.[152]

The fact that OpenCL allows workloads to be shared by CPU and GPU, executing the same programs, means that programmers can exploit both by dividing work among the devices.[153] This leads to the problem of deciding how to partition the work, because the relative speeds of operations differ among the devices. Mashinada o'qitish has been suggested to solve this problem: Grewe and O'Boyle describe a system of qo'llab-quvvatlovchi-vektorli mashinalar trained on compile-time features of program that can decide the device partitioning problem statically, without actually running the programs to measure their performance.[154]

Shuningdek qarang

Adabiyotlar

  1. ^ "Khronos OpenCL Registry". Khronos guruhi. 2020 yil 27 aprel. Olingan 27 aprel, 2020.
  2. ^ "Android Devices With OpenCL support". Google Docs. ArrayFire. Olingan 28 aprel, 2015.
  3. ^ "FreeBSD Graphics/OpenCL". FreeBSD. Olingan 23 dekabr, 2015.
  4. ^ a b v d e "Conformant Products". Khronos guruhi. Olingan 9 may, 2015.
  5. ^ Sochacki, Bartosz (July 19, 2019). "The OpenCL C++ 1.0 Specification" (PDF). Khronos OpenCL Working Group. Olingan 19 iyul, 2019.
  6. ^ Munshi, Aaftab; Xau, Li; Sochaki, Barosz (April 27, 2020). "The OpenCL C Specification Version: 2.0 Document Revision: 33" (PDF). Khronos OpenCL Working Group. Olingan 27 aprel, 2020.
  7. ^ "OpenGL, OpenCL deprecated in favor of Metal 2 in macOS 10.14 Mojave". AppleInsider. Olingan 3 iyul, 2018.
  8. ^ "Conformant Companies". Khronos guruhi. Olingan 8 aprel, 2015.
  9. ^ Gianelli, Silvia E. (January 14, 2015). "Xilinx SDAccel Development Environment for OpenCL, C, and C++, Achieves Khronos Conformance". PR Newswire. Xilinx. Olingan 27 aprel, 2015.
  10. ^ Howes, Lee (November 11, 2015). "The OpenCL Specification Version: 2.1 Document Revision: 23" (PDF). Khronos OpenCL Working Group. Olingan 16-noyabr, 2015.
  11. ^ a b Gaster, Benedict; Xau, Li; Kaeli, David R.; Mistry, Perhaad; Schaa, Dana (2012). Heterogeneous Computing with OpenCL: Revised OpenCL 1.2 Edition. Morgan Kaufmann.
  12. ^ Tompson, Jonathan; Schlachter, Kristofer (2012). "An Introduction to the OpenCL Programming Model" (PDF). New York University Media Research Lab. Arxivlandi asl nusxasi (PDF) 2015 yil 6-iyulda. Olingan 6 iyul, 2015.
  13. ^ a b v d Tosh, Jon E.; Gohara, David; Shi, Guochin (2010). "OpenCL: a parallel programming standard for heterogeneous computing systems". Fan va muhandislik sohasida hisoblash. 12 (3): 66–73. Bibcode:2010CSE....12c..66S. doi:10.1109/MCSE.2010.69. PMC  2964860. PMID  21037981.
  14. ^ Klöckner, Andreas; Pinto, Nicolas; Lee, Yunsup; Catanzaro, Bryan; Ivanov, Paul; Fasih, Ahmed (2012). "PyCUDA and PyOpenCL: A scripting-based approach to GPU run-time code generation". Parallel hisoblash. 38 (3): 157–174. arXiv:0911.3456. doi:10.1016/j.parco.2011.09.001.
  15. ^ "OpenCL - Open Computing Language Bindings". metacpan.org. Olingan 18 avgust, 2018.
  16. ^ "SPIR - The first open standard intermediate language for parallel compute and graphics". Khronos guruhi. 2014 yil 21-yanvar.
  17. ^ "SYCL - C++ Single-source Heterogeneous Programming for OpenCL". Khronos guruhi. 2014 yil 21-yanvar.
  18. ^ a b v Aaftab Munshi, ed. (2014). "The OpenCL C Specification, Version 2.0" (PDF). Olingan 24 iyun, 2014.
  19. ^ a b "Introduction to OpenCL Programming 201005" (PDF). AMD. 89-90 betlar. Arxivlandi asl nusxasi (PDF) 2011 yil 16 mayda. Olingan 8 avgust, 2017.
  20. ^ "OpenCL" (PDF). SIGGRAPH2008. 2008 yil 14-avgust. Arxivlangan asl nusxasi (PDF) 2012 yil 19 martda. Olingan 14 avgust, 2008.
  21. ^ "Fitting FFT onto G80 Architecture" (PDF). Vasily Volkov and Brian Kazian, UC Berkeley CS258 project report. 2008 yil may. Olingan 14-noyabr, 2008.
  22. ^ "OpenCL on FFT". Olma. 2009 yil 16-noyabr. Olingan 7 dekabr, 2009.
  23. ^ "Khronos Launches Heterogeneous Computing Initiative" (Matbuot xabari). Khronos guruhi. 16 iyun 2008 yil. Arxivlangan asl nusxasi 2008 yil 20-iyunda. Olingan 18 iyun, 2008.
  24. ^ "OpenCL gets touted in Texas". MacWorld. 2008 yil 20-noyabr. Olingan 12 iyun, 2009.
  25. ^ "The Khronos Group Releases OpenCL 1.0 Specification" (Matbuot xabari). Khronos guruhi. 2008 yil 8-dekabr. Olingan 4 dekabr, 2016.
  26. ^ "Apple Mac OS X Snow Leopard-ni ishlab chiquvchilarga oldindan ko'rib chiqadi" (Matbuot xabari). Apple Inc. 9 iyun 2008 yil. Arxivlangan asl nusxasi 2012 yil 19 martda. Olingan 9 iyun, 2008.
  27. ^ "AMD Drives Adoption of Industry Standards in GPGPU Software Development" (Matbuot xabari). AMD. 2008 yil 6-avgust. Olingan 14 avgust, 2008.
  28. ^ "AMD Backs OpenCL, Microsoft DirectX 11". eWeek. 2008 yil 6-avgust. Olingan 14 avgust, 2008.
  29. ^ "HPCWire: RapidMind Embraces Open Source and Standards Projects". HPCWire. 10-noyabr, 2008 yil. Arxivlangan asl nusxasi 2008 yil 18-dekabrda. Olingan 11-noyabr, 2008.
  30. ^ "Nvidia Adds OpenCL To Its Industry Leading GPU Computing Toolkit" (Matbuot xabari). Nvidia. 2008 yil 9-dekabr. Olingan 10 dekabr, 2008.
  31. ^ "OpenCL Development Kit for Linux on Power". alphaWorks. 2009 yil 30 oktyabr. Olingan 30 oktyabr, 2009.
  32. ^ "Khronos Drives Momentum of Parallel Computing Standard with Release of OpenCL 1.1 Specification". Arxivlandi asl nusxasi 2016 yil 2 martda. Olingan 24-fevral, 2016.
  33. ^ "Khronos Releases OpenCL 1.2 Specification". Khronos guruhi. 2011 yil 15-noyabr. Olingan 23 iyun, 2015.
  34. ^ a b v "OpenCL 1.2 Specification" (PDF). Khronos guruhi. Olingan 23 iyun, 2015.
  35. ^ "Khronos Finalizes OpenCL 2.0 Specification for Heterogeneous Computing". Khronos guruhi. 2013 yil 18-noyabr. Olingan 10 fevral, 2014.
  36. ^ "Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming". Khronos guruhi. 2015 yil 16-noyabr. Olingan 16-noyabr, 2015.
  37. ^ "Khronos Announces OpenCL 2.1: C++ Comes to OpenCL". AnandTech. 2015 yil 3 mart. Olingan 8 aprel, 2015.
  38. ^ "Khronos Releases OpenCL 2.1 Provisional Specification for Public Review". Khronos guruhi. 2015 yil 3 mart. Olingan 8 aprel, 2015.
  39. ^ "OpenCL Overview". Khronos guruhi. 2013 yil 21-iyul.
  40. ^ a b "Khronos Releases OpenCL 2.2 Provisional Specification with OpenCL C++ Kernel Language for Parallel Programming". Khronos guruhi. 2016 yil 18-aprel.
  41. ^ Trevett, Neil (April 2016). "OpenCL – A State of the Union" (PDF). IWOCL. Vena: Khronos guruhi. Olingan 2 yanvar, 2017.
  42. ^ "Khronos Releases OpenCL 2.2 With SPIR-V 1.2". Khronos guruhi. 2017 yil 16-may.
  43. ^ a b "OpenCL 2.2 Maintenance Update Released". Xronos guruhi. 2018 yil 14-may.
  44. ^ https://www.phoronix.com/scan.php?page=article&item=opencl-30-spec&num=1
  45. ^ https://www.khronos.org/news/press/khronos-group-releases-opencl-3.0
  46. ^ https://www.khronos.org/registry/OpenCL/specs/3.0-unified/pdf/OpenCL_API.pdf
  47. ^ "Breaking: OpenCL Merging Roadmap into Vulkan | PC Perspective". www.pcper.com. Arxivlandi asl nusxasi 2017 yil 1-noyabrda. Olingan 17 may, 2017.
  48. ^ "SIGGRAPH 2018: OpenCL-Next Taking Shape, Vulkan Continues Evolving - Phoronix". www.phoronix.com.
  49. ^ Clspv is a prototype compiler for a subset of OpenCL C to Vulkan compute shaders: google/clspv, 2019 yil 17-avgust, olingan 20 avgust, 2019
  50. ^ "Vulkan Update SIGGRAPH 2019" (PDF).
  51. ^ Trevett, Neil (May 23, 2019). "Khronos and OpenCL Overview EVS Workshop May19" (PDF). Khronos guruhi.
  52. ^ "OpenCL ICD Specification". Olingan 23 iyun, 2015.
  53. ^ "Apple entry on LLVM Users page". Olingan 29 avgust, 2009.
  54. ^ "Nvidia entry on LLVM Users page". Olingan 6 avgust, 2009.
  55. ^ "Rapidmind entry on LLVM Users page". Olingan 1 oktyabr, 2009.
  56. ^ "Zack Rusin's blog post about the Gallium3D OpenCL implementation". 2009 yil fevral. Olingan 1 oktyabr, 2009.
  57. ^ "GalliumCompute". dri.freedesktop.org. Olingan 23 iyun, 2015.
  58. ^ "Clover Status Update" (PDF).
  59. ^ "mesa / mesa - Mesa 3D Grafika kutubxonasi". cgit.freedesktop.org.
  60. ^ "Gallium Clover With SPIR-V & NIR Opening Up New Compute Options Inside Mesa - Phoronix". www.phoronix.com.
  61. ^ https://xdc2018.x.org/slides/clover.pdf
  62. ^ Larabel, Maykl (January 10, 2013). "Beignet: OpenCL/GPGPU Comes For Ivy Bridge On Linux". Froniks.
  63. ^ Larabel, Maykl (2013 yil 16 aprel). "More Criticism Comes Towards Intel's Beignet OpenCL". Froniks.
  64. ^ Larabel, Michael (December 24, 2013). "Intel's Beignet OpenCL Is Still Slowly Baking". Froniks.
  65. ^ "Beignet". freedesktop.org.
  66. ^ "beignet - Beignet OpenCL Library for Intel Ivy Bridge and newer GPUs". cgit.freedesktop.org.
  67. ^ "Intel Brings Beignet To Android For OpenCL Compute - Phoronix". www.phoronix.com.
  68. ^ "01.org Intel Open Source - Compute Runtime". 2018 yil 7-fevral.
  69. ^ "NEO GitHub README". 2019 yil 21 mart.
  70. ^ "ROCm". GitHub. Arxivlandi asl nusxasi 2016 yil 8 oktyabrda.
  71. ^ "RadeonOpenCompute/ROCm: ROCm - Open Source Platform for HPC and Ultrascale GPU Computing". GitHub. 2019 yil 21 mart.
  72. ^ "A Nice Overview Of The ROCm Linux Compute Stack - Phoronix". www.phoronix.com.
  73. ^ "XDC Lightning.pdf". Google Docs.
  74. ^ "Radeon ROCm 2.0 Officially Out With OpenCL 2.0 Support, TensorFlow 1.12, Vega 48-bit VA - Phoronix". www.phoronix.com.
  75. ^ "Taking Radeon ROCm 2.0 OpenCL For A Benchmarking Test Drive - Phoronix". www.phoronix.com.
  76. ^ https://github.com/RadeonOpenCompute/ROCm/blob/master/AMD_ROCm_Release_Notes_v3.3.pdf
  77. ^ https://www.phoronix.com/scan.php?page=article&item=amd-mi100-rocm4&num=1
  78. ^ https://rocm-documentation.readthedocs.io/en/latest/
  79. ^ Jääskeläinen, Pekka; Sánchez de La Lama, Carlos; Shnetter, Erik; Raiskila, Kalle; Takala, Jarmo; Berg, Heikki (2016). "pocl: A Performance-Portable OpenCL Implementation". Int'l J. Parallel Programming. 43 (5): 752–785. arXiv:1611.07083. Bibcode:2016arXiv161107083J. doi:10.1007/s10766-014-0320-y.
  80. ^ a b v "pocl home page". pocl.
  81. ^ "GitHub - pocl/pocl: pocl: Portable Computing Language". March 14, 2019 – via GitHub.
  82. ^ "HSA support implementation status as of 2016-05-17 — Portable Computing Language (pocl) 1.3-pre documentation". portablecl.org.
  83. ^ http://portablecl.org/pocl-1.3.html
  84. ^ http://portablecl.org/pocl-1.4.html
  85. ^ http://portablecl.org/pocl-1.5.html
  86. ^ "Haqida". Git.Linaro.org.
  87. ^ Gall, T.; Pitney, G. (March 6, 2014). "LCA14-412: GPGPU on ARM SoC" (PDF). Amazon veb-xizmatlari. Olingan 22 yanvar, 2017.
  88. ^ "zuzuf/freeocl". GitHub. Olingan 13 aprel, 2017.
  89. ^ Chjan, Peng; Tish, Tszyanbin; Yang, Canqun; Tang, Tao; Huang, Chun; Wang, Zheng (2018). MOCL: An Efficient OpenCL Implementation for the Matrix-2000 Architecture (PDF). Proc. Xalqaro Konf. on Computing Frontiers. doi:10.1145/3203217.3203244.
  90. ^ "OpenCL Demo, AMD CPU". 2008 yil 10-dekabr. Olingan 28 mart, 2009.
  91. ^ "OpenCL Demo, Nvidia GPU". 2008 yil 10-dekabr. Olingan 28 mart, 2009.
  92. ^ "Imagination Technologies launches advanced, highly-efficient POWERVR SGX543MP multi-processor graphics IP family". Tasavvur texnologiyalari. 2009 yil 19 mart. Olingan 30 yanvar, 2011.
  93. ^ "AMD and Havok demo OpenCL accelerated physics". Kompyuter istiqbollari. 2009 yil 26 mart. Arxivlangan asl nusxasi 2009 yil 5 aprelda. Olingan 28 mart, 2009.
  94. ^ "Nvidia Releases OpenCL Driver To Developers". Nvidia. 2009 yil 20 aprel. Arxivlangan asl nusxasi 2012 yil 19 martda. Olingan 27 aprel, 2009.
  95. ^ "AMD does reverse GPGPU, announces OpenCL SDK for x86". Ars Technica. 2009 yil 5-avgust. Olingan 6 avgust, 2009.
  96. ^ Moren, Dan; Snell, Jason (June 8, 2009). "Live Update: WWDC 2009 Keynote". MacWorld.com. MacWorld. Olingan 12 iyun, 2009.
  97. ^ "ATI Stream Software Development Kit (SDK) v2.0 Beta Program". Arxivlandi asl nusxasi 2009 yil 9-avgustda. Olingan 14 oktyabr, 2009.
  98. ^ "S3 Graphics launched the Chrome 5400E embedded graphics processor". Arxivlandi asl nusxasi 2009 yil 2-dekabrda. Olingan 27 oktyabr, 2009.
  99. ^ "VIA Brings Enhanced VN1000 Graphics Processor]". Arxivlandi asl nusxasi 2009 yil 15 dekabrda. Olingan 10 dekabr, 2009.
  100. ^ "ATI Stream SDK v2.0 with OpenCL 1.0 Support". Arxivlandi asl nusxasi 2009 yil 1-noyabrda. Olingan 23 oktyabr, 2009.
  101. ^ "OpenCL". ZiiLABS. Olingan 23 iyun, 2015.
  102. ^ "Intel discloses new Sandy Bridge technical details". Olingan 13 sentyabr, 2010.
  103. ^ "WebCL related stories". Khronos guruhi. Olingan 23 iyun, 2015.
  104. ^ "Khronos WebGL 1.0 spesifikatsiyasini chiqaradi". Khronos guruhi. Arxivlandi asl nusxasi 2015 yil 9-iyulda. Olingan 23 iyun, 2015.
  105. ^ "Hamjamiyat".
  106. ^ "Welcome to Wikis". www.ibm.com. 2009 yil 20 oktyabr.
  107. ^ "Nokia Research releases WebCL prototype". Khronos guruhi. 2011 yil 4-may. Olingan 23 iyun, 2015.
  108. ^ KamathK, Sharath. "Samsung's WebCL Prototype for WebKit". Github.com. Arxivlandi asl nusxasi 2015 yil 18 fevralda. Olingan 23 iyun, 2015.
  109. ^ "AMD Opens the Throttle on APU Performance with Updated OpenCL Software Development". Amd.com. 2011 yil 8-avgust. Olingan 16 iyun, 2013.
  110. ^ "AMD APP SDK v2.6". Forums.amd.com. 2015 yil 13 mart. Olingan 23 iyun, 2015.
  111. ^ "The Portland Group Announces OpenCL Compiler for ST-Ericsson ARM-Based NovaThor SoCs". Olingan 4-may, 2012.
  112. ^ "WebCL Latest Spec". Khronos guruhi. 2013 yil 7-noyabr. Arxivlangan asl nusxasi 2014 yil 1 avgustda. Olingan 23 iyun, 2015.
  113. ^ "Altera Opens the World of FPGAs to Software Programmers with Broad Availability of SDK and Off-the-Shelf Boards for OpenCL". Altera.com. Arxivlandi asl nusxasi 2014 yil 9 yanvarda. Olingan 9 yanvar, 2014.
  114. ^ "Altera SDK for OpenCL is First in Industry to Achieve Khronos Conformance for FPGAs". Altera.com. Arxivlandi asl nusxasi 2014 yil 9 yanvarda. Olingan 9 yanvar, 2014.
  115. ^ "Khronos Finalizes OpenCL 2.0 Specification for Heterogeneous Computing". Khronos guruhi. 2013 yil 18-noyabr. Olingan 23 iyun, 2015.
  116. ^ "WebCL 1.0 Press Release". Khronos guruhi. 2014 yil 19 mart. Olingan 23 iyun, 2015.
  117. ^ "WebCL 1.0 Specification". Khronos guruhi. 2014 yil 14 mart. Olingan 23 iyun, 2015.
  118. ^ "Intel OpenCL 2.0 Driver". Arxivlandi asl nusxasi 2014 yil 17 sentyabrda. Olingan 14 oktyabr, 2014.
  119. ^ "AMD OpenCL 2.0 Driver". Support.AMD.com. 2015 yil 17-iyun. Olingan 23 iyun, 2015.
  120. ^ "Xilinx SDAccel development environment for OpenCL, C, and C++, achieves Khronos Conformance - khronos.org news". Xronos guruhi. Olingan 26 iyun, 2017.
  121. ^ "Release 349 Graphics Drivers for Windows, Version 350.12" (PDF). 2015 yil 13 aprel. Olingan 4-fevral, 2016.
  122. ^ "AMD APP SDK 3.0 Released". Developer.AMD.com. 2015 yil 26-avgust. Olingan 11 sentyabr, 2015.
  123. ^ "Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming". Khronos guruhi. 2015 yil 16-noyabr.
  124. ^ "What's new? Intel® SDK for OpenCL™ Applications 2016, R3". Intel Software.
  125. ^ "NVIDIA 378.66 drivers for Windows offer OpenCL 2.0 evaluation support". Khronos guruhi. 2017 yil 17-fevral.
  126. ^ Szuppe, Jakub (February 22, 2017). "NVIDIA enables OpenCL 2.0 beta-support".
  127. ^ Szuppe, Jakub (March 6, 2017). "NVIDIA beta-support for OpenCL 2.0 works on Linux too".
  128. ^ "Xronos guruhi". Xronos guruhi. 2019 yil 21 mart.
  129. ^ https://github.com/RadeonOpenCompute/ROCm/tree/roc-3.5.0
  130. ^ "Xronos guruhi". Xronos guruhi. 2019 yil 20-avgust. Olingan 20 avgust, 2019.
  131. ^ "KhronosGroup/OpenCL-CTL: The OpenCL Conformance Tests". GitHub. 2019 yil 21 mart.
  132. ^ "OpenCL and the AMD APP SDK". AMD Developer Central. developer.amd.com. Arxivlandi asl nusxasi 2011 yil 4 avgustda. Olingan 11 avgust, 2011.
  133. ^ "About Intel OpenCL SDK 1.1". software.intel.com. intel.com. Olingan 11 avgust, 2011.
  134. ^ "Intel® SDK for OpenCL™ Applications - Release Notes". software.intel.com. 2019 yil 14 mart.
  135. ^ "Product Support". Olingan 11 avgust, 2011.
  136. ^ "Intel OpenCL SDK – Release Notes". Arxivlandi asl nusxasi 2011 yil 17-iyulda. Olingan 11 avgust, 2011.
  137. ^ "Announcing OpenCL Development Kit for Linux on Power v0.3". Olingan 11 avgust, 2011.
  138. ^ "IBM releases OpenCL Development Kit for Linux on Power v0.3 – OpenCL 1.1 conformant release available". OpenCL Lounge. ibm.com. Olingan 11 avgust, 2011.
  139. ^ "IBM releases OpenCL Common Runtime for Linux on x86 Architecture". 2009 yil 20 oktyabr. Olingan 10 sentyabr, 2011.
  140. ^ "OpenCL and the AMD APP SDK". AMD Developer Central. developer.amd.com. Arxivlandi asl nusxasi 2011 yil 6 sentyabrda. Olingan 10 sentyabr, 2011.
  141. ^ "Nvidia Releases OpenCL Driver". 2009 yil 22 aprel. Olingan 11 avgust, 2011.
  142. ^ "clinfo by Simon Leblanc". Olingan 27 yanvar, 2017.
  143. ^ "clinfo by Oblomov". Olingan 27 yanvar, 2017.
  144. ^ "clinfo: openCL INFOrmation". Olingan 27 yanvar, 2017.
  145. ^ "Khronos Products". Xronos guruhi. Olingan 15 may, 2017.
  146. ^ https://github.com/KhronosGroup/OpenCL-CTS/tree/master/test_conformance
  147. ^ https://www.phoronix.com/scan.php?page=news_item&px=Intel-Compute-20.43.18277
  148. ^ "compute-runtime". 01.org. 2018 yil 7-fevral.
  149. ^ a b Tish, Tszyanbin; Varbanescu, Ana Lucia; Sips, Henk (2011). A Comprehensive Performance Comparison of CUDA and OpenCL. Proc. Xalqaro Konf. on Parallel Processing. doi:10.1109/ICPP.2011.45.
  150. ^ Du, Peng; Veber, Rik; Lyushchek, Pyotr; Tomov, Stanimire; Peterson, Gregori; Dongarra, Jek (2012). "CUDA-dan OpenCL-ga: Ko'p platformali GPU dasturlash uchun ishlashning ko'chma echimiga". Parallel hisoblash. 38 (8): 391–407. CiteSeerX  10.1.1.193.7712. doi:10.1016 / j.parco.2011.10.002.
  151. ^ Dolbeau, Romain; Bodin, François; de Verdière, Guillaume Colin (September 7, 2013). "One OpenCL to rule them all?". 2013 IEEE 6th International Workshop on Multi-/Many-core Computing Systems (MuCoCoS). 1-6 betlar. doi:10.1109/MuCoCoS.2013.6633603. ISBN  978-1-4799-1010-6.
  152. ^ Karimi, Kamran; Dickson, Neil G.; Hamze, Firas (2011). "A Performance Comparison of CUDA and OpenCL". arXiv:1005.2581v3 [cs.PF ].
  153. ^ A Survey of CPU-GPU Heterogeneous Computing Techniques, ACM Computing Surveys, 2015.
  154. ^ Greve, Dominik; O'Boyle, Michael F. P. (2011). A Static Task Partitioning Approach for Heterogeneous Systems Using OpenCL. Proc. Xalqaro Konf. Kompilyator qurilishi to'g'risida. doi:10.1007/978-3-642-19861-8_16.

Tashqi havolalar