Boshqa lug'atlarda "CUDA" nima ekanligini ko'ring. Cuda yordamida U SM dasturlarining kompyuter resurslari

Va u host-kodni (asosiy, nazorat kodi) va qurilma kodini (apparat kodini) (.cu kengaytmasi bo'lgan fayllarni) har qanday dasturlash muhitida yakuniy dastur yoki kutubxonani yaratish uchun mos ob'ektli fayllarga tarjima qilish uchun mo'ljallangan. NetBeans -da.

CUDA arxitekturasida tarmoqli xotira modeli, klasterlarni ulash va SIMD ko'rsatmalari qo'llaniladi. Bu nafaqat yuqori sifatli grafik hisoblash uchun, balki nVidia grafik kartalaridan foydalangan holda har xil ilmiy hisoblash uchun ham amal qiladi. Olimlar va tadqiqotchilar CUDA -ni astrofizika, hisoblash biologiyasi va kimyo, suyuqlik dinamikasini modellashtirish, elektromagnit o'zaro ta'sirlar, kompyuter tomografiyasi, seysmik tahlil va boshqalarni o'z ichiga olgan turli sohalarda keng qo'llaydilar. CUDA OpenGL va Direct3D yordamida ilovalarga ulanish imkoniyatiga ega. CUDA-Linux, Mac OS X va Windows kabi operatsion tizimlar uchun platformalararo dasturiy ta'minot.

2010 yil 22 martda nVidia OpenCL -ni qo'llab -quvvatlaydigan CUDA Toolkit 3.0 -ni chiqardi.

Uskunalar

CUDA Platformasi birinchi marta bozorda sakkizinchi avlod NVIDIA G80 chipining chiqarilishi bilan paydo bo'ldi va GeForce, Quadro va NVidia Tesla tezlatgichlar oilalarida ishlatiladigan keyingi grafik chiplar seriyasida paydo bo'ldi.

CUDA SDK-ni qo'llab-quvvatlaydigan birinchi apparat G8x, CUDA SDK-ni API sifatida ishlatadigan 32-bitli bitta aniqlikdagi vektorli protsessorga ega edi (CUDA C ikki turini qo'llab-quvvatlaydi, lekin hozir uning aniqligi 32-bitli suzuvchi darajaga tushirildi. nuqta). Keyinchalik GT200 protsessorlari 64-bitli aniqlikni qo'llab-quvvatlaydilar (faqat SFU uchun), lekin ishlash 32-bitli aniqlikdan ancha yomonroq (har bir oqim uchun ko'p protsessorli ikkita SFU va sakkiz skalyar protsessor borligi sababli). . GPU barcha GPU resurslaridan foydalanishga imkon beradigan apparat ko'p ishlov berishni tashkil qiladi. Shunday qilib, jismoniy tezlatgichning funktsiyalarini grafik tezlatgichga o'tkazish istiqbollari ochiladi (amalga oshirishga misol nVidia PhysX). Shuningdek, murakkab grafik bo'lmagan hisoblarni bajarish uchun kompyuterning grafik uskunasidan foydalanish uchun keng imkoniyatlar mavjud: masalan, hisoblash biologiyasi va fanning boshqa sohalarida.

Afzalliklar

Grafik API imkoniyatlari orqali umumiy maqsadli hisoblashni tashkil qilishning an'anaviy yondashuvi bilan taqqoslaganda, CUDA arxitekturasi bu sohada quyidagi afzalliklarga ega:

Cheklovlar

  • Qurilmada bajariladigan barcha funktsiyalar rekursiyani qo'llab -quvvatlamaydi (CUDA Toolkit 3.1 da ko'rsatgichlar va rekursiyalarni qo'llab -quvvatlaydi) va boshqa cheklovlar mavjud.

Qo'llab -quvvatlanadigan GPU va grafik tezlatgichlar

Nvidia uskunalarini ishlab chiqaruvchi CUDA texnologiyasini to'liq qo'llab-quvvatlaydigan qurilmalar ro'yxati Nvidia rasmiy veb-saytida berilgan: CUDA-Enabled GPU Products.

Aslida, bugungi kunda kompyuter uskunalari bozorida CUDA texnologiyasini quyidagi qo'shimcha qurilmalar qo'llab -quvvatlaydi:

Texnik versiya GPU Video kartalar
1.0 G80, G92, G92b, G94, G94b GeForce 8800GTX / Ultra, 9400GT, 9600GT, 9800GT, Tesla C / D / S870, FX4 / 5600, 360M, GT 420
1.1 G86, G84, G98, G96, G96b, G94, G94b, G92, G92b GeForce 8400GS/GT, 8600GT/GTS, 8800GT/GTS, 9600 GSO, 9800GTX/GX2, GTS 250, GT 120/30/40, FX 4/570, 3/580, 17/18/3700, 4700x2, 1xxM, 32 /370M, 3/5/770M, 16/17/27/28/36/37/3800M, NVS420/50
1.2 GT218, GT216, GT215 GeForce 210, GT 220/40, FX380 LP, 1800M, 370 / 380M, NVS 2 / 3100M
1.3 GT200, GT200b GeForce GTX 260, GTX 275, GTX 280, GTX 285, GTX 295, Tesla C/M1060, S1070, Quadro CX, FX 3/4/5800
2.0 GF100, GF110 GeForce (GF100) GTX 465, GTX 470, GTX 480, Tesla C2050, C2070, S / M2050 / 70, Quadro Plex 7000, Quadro 4000, 5000, 6000, GeForce (GF110) GTX 560 TI 448, GTX570, GTX580, GTX590
2.1 GF104, GF114, GF116, GF108, GF106 GeForce 610M, GT 430, GT 440, GTS 450, GTX 460, GTX 550 Ti, GTX 560, GTX 560 Ti, 500M, Quadro 600, 2000
3.0 GK104, GK106, GK107 GeForce GTX 690, GTX 680, GTX 670, GTX 660 Ti, GTX 660, GTX 650 Ti, GTX 650, GT 640, GeForce GTX 680MX, GeForce GTX 680M, GeForce GTX 675MX, GeForce GTX 670MX, GTX 660M, GTX 660M GeForce GT 645M, GeForce GT 640M
3.5 GK110
Nvidia GeForce ish stoli
GeForce GTX 590
GeForce GTX 580
GeForce GTX 570
GeForce GTX 560 Ti
GeForce GTX 560
GeForce GTX 550 Ti
GeForce GTX 520
GeForce GTX 480
GeForce GTX 470
GeForce GTX 465
GeForce GTX 460
GeForce GTS 450
GeForce GTX 295
GeForce GTX 285 uchun
GeForce GTX 280
GeForce GTX 275
GeForce GTX 260
GeForce GTS 250
GeForce GT 240
GeForce GT 220
GeForce 210
GeForce GTS 150
GeForce GT 130
GeForce GT 120
GeForce G100
GeForce 9800 GX2
GeForce 9800 GTX +
GeForce 9800 GTX
GeForce 9800 GT
GeForce 9600 GSO
GeForce 9600 GT
GeForce 9500 GT
GeForce 9400 GT
GeForce 9400 mGPU
GeForce 9300 mGPU
GeForce 8800 GTS 512
GeForce 8800 GT
GeForce 8600 GTS
GeForce 8600 GT
GeForce 8500 GT
GeForce 8400 GS
Nvidia GeForce Mobile
GeForce GTX 580M
GeForce GTX 570M
GeForce GTX 560M
GeForce GT 555M
GeForce GT 540M
GeForce GT 525M
GeForce GT 520M
GeForce GTX 485M
GeForce GTX 480M
GeForce GTX 470M
GeForce GTX 460M
GeForce GT 445M
GeForce GT 435M
GeForce GT 425M
GeForce GT 420M
GeForce GT 415M
GeForce GTX 285M
GeForce GTX 280M
GeForce GTX 260M
GeForce GTS 360M
GeForce GTS 350M
GeForce GTS 160M
GeForce GTS 150M
GeForce GT 335M
GeForce GT 330M
GeForce GT 325M
GeForce GT 240M
GeForce GT 130M
GeForce G210M
GeForce G110M
GeForce G105M
GeForce 310M
GeForce 305M
GeForce 9800M GTX
GeForce 9800M GT
GeForce 9800M GTS
GeForce 9700M GTS
GeForce 9700M GT
GeForce 9650M GS
GeForce 9600M GT
GeForce 9600M GS
GeForce 9500M GS
GeForce 9500M G
GeForce 9300M GS
GeForce 9300M G
GeForce 9200M GS
GeForce 9100M G
GeForce 8800M GTS
GeForce 8700M GT
GeForce 8600M GT
GeForce 8600M GS
GeForce 8400M GT
GeForce 8400M GS
Nvidia Tesla *
Tesla C2050 / C2070
Tesla M2050 / M2070 / M2090
Tesla S2050
Tesla S1070
Tesla M1060
Tesla C1060
Tesla C870
Tesla D870
Tesla S870
Nvidia Quadro ish stoli
Quadro 6000
Quadro 5000
Quadro 4000
Quadro 2000
Quadro 600
Quadro FX 5800
Quadro FX 5600
Quadro FX 4800
Quadro FX 4700 X2
Quadro FX 4600
Quadro FX 3700
Quadro FX 1700
Quadro FX 570
Quadro FX 470
Quadro FX 380 past profili
Quadro FX 370
Quadro FX 370 past profili
Quadro CX
Quadro NVS 450
Quadro NVS 420
Quadro NVS 290
Quadro Plex 2100 D4
Quadro Plex 2200 D2
Quadro Plex 2100 S4
Quadro Plex 1000 modeli IV
Mobil kompyuterlar uchun Nvidia Quadro
Quadro 5010M
Quadro 5000M
Quadro 4000M
Quadro 3000M
Quadro 2000M
Quadro 1000M
Quadro FX 3800M
Quadro FX 3700M
Quadro FX 3600M
Quadro FX 2800M
Quadro FX 2700M
Quadro FX 1800M
Quadro FX 1700M
Quadro FX 1600M
Quadro FX 880M
Quadro FX 770M
Quadro FX 570M
Quadro FX 380M
Quadro FX 370M
Quadro FX 360M
Quadro NVS 5100M
Quadro NVS 4200M
Quadro NVS 3100M
Quadro NVS 2100M
Quadro NVS 320M
Quadro NVS 160M
Quadro NVS 150M
Quadro NVS 140M
Quadro NVS 135M
Quadro NVS 130M
  • Tesla C1060, Tesla S1070, Tesla C2050 / C2070, Tesla M2050 / M2070, Tesla S2050 modellari sizga GPUda hisob -kitoblarni ikki baravar aniqlikda bajarishga imkon beradi.

Turli xil versiyalarning xususiyatlari va xususiyatlari

Xususiyatlarni qo'llab -quvvatlash (ro'yxatda bo'lmagan xususiyatlar
barcha hisoblash qobiliyatlari uchun qo'llab -quvvatlanadi)
Hisoblash qobiliyati (versiya)
1.0 1.1 1.2 1.3 2.x

Global xotirada 32 bitli so'zlar
Yo'q Ha

global xotiradagi suzuvchi nuqta qiymatlari
Butun atom funktsiyalari ishlaydi
Umumiy xotirada 32 bitli so'zlar
Yo'q Ha
atomicExch () 32-bitda ishlaydi
umumiy xotiradagi suzuvchi nuqta qiymatlari
Butun atom funktsiyalari ishlaydi
Global xotirada 64 bitli so'zlar
Warp ovoz berish funktsiyalari
Ikkita aniqlikdagi suzuvchi nuqtali operatsiyalar Yo'q Ha
Atom funktsiyalari 64-bitda ishlaydi
umumiy xotiradagi tamsayı qiymatlari
Yo'q Ha
O'zgaruvchan nuqtali atom qo'shimchasi ishlaydi
Global va umumiy xotirada 32 bitli so'zlar
_ovoz berish ()
_farrux_sistemasi ()
_syncthreads_count (),
_syncthreads_and (),
_syncthreads_or ()
Yuzaki funktsiyalar
Ip blokining 3D tarmog'i
Texnik tavsiflar Hisoblash qobiliyati (versiya)
1.0 1.1 1.2 1.3 2.x
Ip bloklari panjarasining maksimal o'lchamliligi 2 3
Ip bloklari katakchasining maksimal x-, y- yoki z-o'lchami 65535
Ip blokining maksimal o'lchamliligi 3
Blokning maksimal x yoki y o'lchamlari 512 1024
Blokning maksimal z o'lchami 64
Har bir blok uchun maksimal iplar soni 512 1024
Burilish o'lchami 32
Ko'p protsessor uchun maksimal blokli bloklar soni 8
Ko'p protsessor uchun maksimal burilishlar soni 24 32 48
Ko'p protsessor uchun maksimal oqimlar soni 768 1024 1536
Ko'p protsessor uchun 32 bitli registrlar soni 8 K. 16 K 32 K
Bir protsessor uchun maksimal xotira hajmi 16 KB Hajmi 48 KB
Umumiy xotira banklari soni 16 32
Har bir mavzu bo'yicha mahalliy xotira hajmi 16 KB Hajmi 512 KB
Doimiy xotira hajmi 64 KB
Doimiy xotira uchun ko'p protsessorli keshlar to'plami 8 KB
To'qimali xotira uchun ko'p protsessorli kesh ishchi to'plami Qurilmaga bog'liq, 6 KB dan 8 KB gacha
1D to'qimalarining maksimal kengligi
8192 32768
1D to'qimalarining maksimal kengligi
chiziqli xotiraga havola
2 27
Qatlamlarning maksimal kengligi va soni
1D qatlamli tekstura ma'lumotnomasi uchun
8192 x 512 16384 x 2048
2D uchun maksimal kenglik va balandlik
bog'langan tekstura
chiziqli xotira yoki CUDA qatori
65536 x 32768 65536 x 65535
Maksimal kenglik, balandlik va raqam
2D qatlamli to'qimalarga mos yozuvlar uchun qatlamlar
8192 x 8192 x 512 16384 x 16384 x 2048
Maksimal kenglik, balandlik va chuqurlik
chiziqli bog'langan 3D tekstura uchun
xotira yoki CUDA qatori
2048 x 2048 x 2048
To'qimalarning maksimal soni
yadro bilan bog'lanishi mumkin
128
1D sirt uchun maksimal kenglik
havola CUDA qatoriga bog'langan
Yo'q
qo'llab -quvvatlanadi
8192
2D uchun maksimal kenglik va balandlik
sirt mos yozuvlari CUDA qatoriga bog'langan
8192 x 8192
Sirtlarning maksimal soni
yadro bilan bog'lanishi mumkin
8
Maksimal ko'rsatmalar soni
yadro
2 mln

Misol

CudaArray * cu_array; to'qimalar< float , 2 >matn; // cudaMalloc qatorini ajratish (& cu_array, cudaCreateChannelDesc< float>(), kengligi, balandligi); // Rasm ma'lumotlarini cudaMemcpy (cu_array, image, width * height, cudaMemcpyHostToDevice) qatoriga nusxalash; // Massivni teksturaga bog'lang cudaBindTexture (teks, cu_array); // dim3 blockDim yadrosini ishga tushirish (16, 16, 1); dim3 gridDim (width / blockDim.x, height / blockDim.y, 1); yadro<<< gridDim, blockDim, 0 >>> (d_odata, kenglik, balandlik); cudaUnbindTexture (teks); __global__ bo'sh yadro (float * odata, int balandligi, int kengligi) (imzosiz int x = blockIdx.x * blockDim.x + threadIdx.x; imzosiz int y = blockIdx.y * blockDim.y + threadIdx.y; float c = texfetch (tex, x, y); odata [y * kenglik + x] = c;)

Pycuda.driver ni drv import numpy drv.init () dev = drv.Device (0) ctx = dev.make_context () mod = drv.SourceModule ( "" "__global__ void multiply_them (float * dest, float * a, float * b) (const int i = threadIdx.x; dest [i] = a [i] * b [i];" "") multiply_them = mod.get_function ("multiply_them") a = numpy.random .randn (400) .astype (numpy.float32) b = numpy.random (a) multiply_them (drv.Out (dest), drv.In (a), drv.In (b), block = (400, 1, 1)) print dest-a * b

CUDA universitetlarda fan sifatida

2009 yil dekabr holatiga ko'ra, CUDA dasturlash modeli dunyoning 269 universitetida o'qitilmoqda. Rossiyada CUDA o'quv kurslari Sankt -Peterburg politexnika universiteti, V.I nomidagi Yaroslavl davlat universitetida o'qitiladi. PG Demidov, Moskva, Nijniy Novgorod, Sankt -Peterburg, Tver, Qozon, Novosibirsk, Novosibirsk davlat texnika universiteti Omsk va Perm davlat universitetlari, Xalqaro tabiat universiteti va inson "Dubna", Ivanovo davlat energetika universiteti, Belgorod davlat universiteti, MSTU ularni. Bauman, RKTU ularni. Mendeleyev, RAS mintaqalararo superkompyuter markazi. Bundan tashqari, 2009 yil dekabr oyida Dubna shahrida joylashgan Rossiyaning birinchi "Parallel hisoblash" ilmiy -o'quv markazi ishga tushirilgani e'lon qilindi, uning vazifalari GPUda hisoblashning murakkab muammolarini hal qilish bo'yicha trening va konsalting.

Ukrainada CUDA kurslari Kiev tizimlarini tahlil qilish institutida o'qitiladi.

Havolalar

Rasmiy manbalar

  • CUDA zonasi (ruscha) - CUDA rasmiy sayti
  • CUDA GPU Computing - CUDA hisoblashga bag'ishlangan rasmiy veb -forumlar

Rasmiy bo'lmagan manbalar

Tomning uskunalari
  • Dmitriy Chekanov. nVidia CUDA: GPU hisoblashmi yoki CPU o'limmi? ... Tomning uskunalari (2008 yil 22 -iyun). Arxivlangan
  • Dmitriy Chekanov. nVidia CUDA: asosiy bozor uchun GPU ko'rsatkichlari. Tomning uskunalari (2009 yil 19 may). 2012 yil 4 martda arxivlangan. 2009 yil 19 mayda olingan.
iXBT.com
  • Aleksey Berillo. NVIDIA CUDA - GPUlarda grafik bo'lmagan hisoblash. 1-qism . iXBT.com (2008 yil 23 sentyabr). Asl nusxadan 2012 yil 4 martda arxivlangan. 2009 yil 20 yanvarda olingan.
  • Aleksey Berillo. NVIDIA CUDA - GPUlarda grafik bo'lmagan hisoblash. 2 -qism. iXBT.com (2008 yil 22 oktyabr). - NVIDIA CUDA dasturiga misollar. Asl nusxadan 2012 yil 4 martda arxivlangan. 2009 yil 20 yanvarda olingan.
Boshqa manbalar
  • Boreskov Aleksey Viktorovich. CUDA asoslari (20 yanvar, 2009 yil). Asl nusxadan 2012 yil 4 martda arxivlangan. 2009 yil 20 yanvarda olingan.
  • Vladimir Frolov. CUDA texnologiyasi bilan tanishish. "Kompyuter grafikasi va multimediya" tarmoq jurnali (2008 yil 19 dekabr). Asl nusxadan 2012 yil 4 martda arxivlangan. 2009 yil 28 oktyabrda olingan.
  • Igor Oskolkov. NVIDIA CUDA - bu katta hisoblash dunyosiga arzon chipta. Computerra (2009 yil 30 aprel). 2009 yil 3 -mayda olingan.
  • Vladimir Frolov. CUDA texnologiyasiga kirish (2009 yil 1 -avgust). Asl nusxadan 2012 yil 4 martda arxivlangan. 2010 yil 3 aprelda olingan.
  • GPGPU.ru. Hisoblash uchun grafik kartalardan foydalanish
  • ... Parallel hisoblash markazi

Eslatmalar (tahrir)

Shuningdek qarang

Keling, tarixga qaytaylik - 2003 yilga kelib, Intel va AMD eng kuchli protsessor uchun qo'shma poygada qatnashgan. Bir necha yil ichida, bu poyga natijasida, ayniqsa, Intel Pentium 4 chiqarilgandan keyin soat tezligi sezilarli darajada oshdi.

Ammo poyga tezlik bilan o'z chegarasiga yaqinlashdi. Soat tezligining katta o'sish to'lqinidan so'ng (2001-2003 yillar orasida Pentium 4 soat tezligi 1,5 dan 3 gigagertsgacha ikki baravar ko'paydi), foydalanuvchilar ishlab chiqaruvchilar siqib chiqarishga qodir bo'lgan gigagertsning o'ndan bir qismi bilan kifoyalanishi kerak edi (2003 yildan). 2005 yilgacha soat tezligi 3 dan 3, 8 gigagertsgacha oshdi).

Hatto Preskott kabi yuqori soat tezligi uchun optimallashtirilgan arxitekturalar ham qiyinchiliklarga duch kela boshladilar va bu safar nafaqat ishlab chiqarish. Chip ishlab chiqaruvchilar oddiygina fizika qonunlari bilan yugurishdi. Ba'zi tahlilchilar hatto Mur qonuni o'z faoliyatini to'xtatishini bashorat qilishgan. Lekin bunday bo'lmadi. Qonunning asl ma'nosi ko'pincha buziladi, lekin u silikon yadro yuzasidagi tranzistorlar soniga taalluqlidir. Uzoq vaqt davomida protsessorda tranzistorlar sonining ko'payishi ishlashning mos ravishda oshishi bilan kechdi - bu ma'noning buzilishiga olib keldi. Ammo keyin vaziyat yanada murakkablashdi. CPU arxitekturasining dizaynerlari daromadni pasaytirish qonuniga murojaat qilishdi: ishlashning kerakli o'sishi uchun qo'shilishi kerak bo'lgan tranzistorlar soni tobora ko'payib bordi, bu esa oxirigacha olib keldi.



CPU ishlab chiqaruvchilari muammolarining echimini topishga urinib, boshlarining oxirgi sochlarini yurganda, GPU ishlab chiqaruvchilari Mur qonunining afzalliklaridan katta foyda ko'rishda davom etishdi.

Nega ular protsessor me'morlari bilan bir xilda qolmagan? Sababi juda oddiy: protsessorlar har xil ma'lumotlarni (butun sonlar va suzuvchi nuqta raqamlari) qayta ishlaydigan, xotiraga tasodifiy kirishni ta'minlaydigan va hokazo ko'rsatmalar oqimining maksimal ishlashi uchun mo'ljallangan. Hozirgacha ishlab chiquvchilar ko'rsatmalarni ko'proq parallelligini ta'minlashga harakat qilmoqdalar - ya'ni iloji boricha parallel ravishda iloji boricha ko'proq ko'rsatmalarni bajaradilar. Shunday qilib, masalan, ma'lum sharoitlarda tsikl bo'yicha ikkita ko'rsatmani bajarish mumkin bo'lganda, Pentium superscalar bajarilishi paydo bo'ldi. Pentium Pro buyruqlarning tartibsiz bajarilishini oldi, bu esa hisoblash birliklarining ishini optimallashtirish imkonini berdi. Muammo shundaki, ketma -ket ko'rsatmalar oqimining parallel bajarilishi aniq cheklovlarga ega, shuning uchun hisoblash birliklari sonining ko'r -ko'rona ko'payishi hech qanday foyda keltirmaydi, chunki ular ko'pincha bo'sh qoladi.

Aksincha, GPU ishi nisbatan sodda. Bu bir tomondan ko'pburchaklar guruhini qabul qilishdan va boshqa tomondan piksellar guruhini yaratishdan iborat. Ko'pburchaklar va piksellar bir -biridan mustaqil, shuning uchun ularni parallel qayta ishlash mumkin. Shunday qilib, GPUda kristalning katta qismini hisoblash birliklariga ajratish mumkin, bu protsessordan farqli o'laroq, aslida ishlatiladi.



Kattalashtirish uchun rasmni bosing.

GPU protsessordan nafaqat shu bilan farq qiladi. GPU xotirasiga kirish juda bog'liq - agar matn o'qilsa, bir necha soat tsiklidan so'ng qo'shni matn o'qiladi; piksel yozilganda, bir necha soat tsiklidan so'ng qo'shni yoziladi. Xotirani oqilona tashkil qilib, siz nazariy tarmoqli kengligiga yaqin ishlashga erishishingiz mumkin. Bu shuni anglatadiki, GPU, protsessordan farqli o'laroq, katta keshni talab qilmaydi, chunki uning vazifasi teksturali operatsiyalarni tezlashtirishdir. Ikki tomonlama va uchburchakli filtrlarda ishlatiladigan bir nechta matnlarni o'z ichiga olgan bir necha kilobayt kerak.



Kattalashtirish uchun rasmni bosing.

Yashasin GeForce FX!

Ikki dunyo uzoq vaqt bir -biridan ajralib turardi. Biz ofis vazifalari va veb -ilovalar uchun protsessorni (yoki hatto bir nechta protsessorlarni) ishlatardik va GPU faqat ko'rsatishni tezlashtirish uchun yaxshi edi. Ammo bitta xususiyat hamma narsani o'zgartirdi: dasturlashtiriladigan GPUlarning paydo bo'lishi. Avvaliga markaziy ishlov berish bo'linmalarida qo'rqadigan hech narsa yo'q edi. Dastlabki dasturlashtiriladigan GPU (NV20 va R200) ​​deyarli xavf tug'dirmadi. Dasturdagi ko'rsatmalar soni taxminan 10 bilan cheklangan, ular 9 yoki 12 bitli sobit nuqta raqamlari kabi juda ekzotik ma'lumotlar turlarida ishlagan.



Kattalashtirish uchun rasmni bosing.

Ammo Mur qonuni yana o'zining yaxshi tomonini ko'rsatdi. Transistorlar sonining ko'payishi nafaqat hisoblash birliklari sonini ko'paytirdi, balki ularning egiluvchanligini ham oshirdi. NV30 ning paydo bo'lishi bir necha sabablarga ko'ra oldinga siljish bo'ldi. Albatta, o'yinchilarga NV30 kartalari unchalik yoqmadi, lekin yangi GPU -lar GPU -larning tasavvurini grafik tezlatgich sifatida emas, balki o'zgartirishga mo'ljallangan ikkita xususiyatga tayanishni boshladilar.

  • Yagona aniqlikdagi suzuvchi nuqta hisoblarini qo'llab -quvvatlash (hatto IEEE754 standartiga mos kelmasa ham);
  • mingdan ortiq ko'rsatmalarni qo'llab -quvvatlash.

Shunday qilib, biz har doim qo'shimcha hisoblash quvvatini qidiradigan kashshof tadqiqotchilarni jalb qiladigan barcha sharoitlarga egamiz.

Matematik hisob -kitoblar uchun grafik tezlatgichlardan foydalanish g'oyasi yangi emas. Birinchi urinishlar o'tgan asrning 90 -yillarida qilingan. Albatta, ular juda ibtidoiy edi-aksariyat hollarda, marshrutni topish yoki ko'rsatish kabi vazifalarni tezlashtirish uchun rasterizatsiya va Z-buferlar kabi ba'zi qo'shimcha qurilmalarga asoslangan xususiyatlardan foydalanish bilan cheklangan. Voronoy diagrammasi .



Kattalashtirish uchun rasmni bosing.

2003 yilda, rivojlangan shaderlarning paydo bo'lishi bilan, yangi benchmarkga erishildi - bu safar matritsa hisob -kitoblari. Bu yil SIGGRAPH ("GPUlar bo'yicha hisoblar") ning butun bo'limi IT -ning yangi sohasiga bag'ishlangan edi. Bu dastlabki tashabbus GPGPU (GPU uchun umumiy maqsadli hisoblash) deb nomlandi. Va birinchi burilish nuqtasi tashqi ko'rinish edi.

BrookGPU rolini tushunish uchun hamma narsa paydo bo'lishidan oldin qanday sodir bo'lganligini tushunish kerak. 2003 yilda GPU resurslarini olishning yagona yo'li ikkita grafik API -dan birini ishlatish edi Direct3D yoki OpenGL. Shunday qilib, hisoblash uchun GPU quvvatini olishni istagan ishlab chiquvchilar yuqorida aytib o'tilgan ikkita API -ga tayanishga majbur bo'lishdi. Muammo shundaki, ular har doim ham video kartalarni dasturlash bo'yicha mutaxassislar emas edilar, bu esa texnologiyaga kirishni juda qiyinlashtirdi. 3D -dasturchilar shader, tekstura va bo'laklar bilan ishlasa, parallel dasturlash sohasidagi mutaxassislar iplar, yadrolar, tarqoqlik va boshqalarga tayanadi. Shuning uchun, avvalo, ikki dunyo o'rtasidagi o'xshashliklarni chizish kerak edi.

  • Oqim bir xil turdagi elementlar oqimi, GPUda u tekstura bilan ifodalanishi mumkin. Asosan, klassik dasturlashda massiv kabi analog mavjud.
  • Yadro- oqimning har bir elementiga mustaqil qo'llaniladigan funksiya; pikselli shaderga tengdir. Klassik dasturlashda pastadir o'xshashligini amalga oshirish mumkin - u ko'p sonli elementlarga qo'llaniladi.
  • Yadroni oqimga qo'llash natijalarini o'qish uchun tekstura yaratish kerak. Xotiraga to'liq kirish imkoniga ega bo'lgani uchun protsessorda ekvivalenti yo'q.
  • Yozuv amalga oshiriladigan xotiradagi joy (tarqatish / tarqatish operatsiyalarida) tepalik shader orqali boshqariladi, chunki piksel shader qayta ishlangan piksel koordinatalarini o'zgartira olmaydi.

Ko'rib turganingizdek, berilgan analogiyalarni hisobga olgan holda ham, vazifa oddiy ko'rinmaydi. Va Bruk yordamga keldi. Bu nom C tilining kengaytmalarini bildiradi ("oqimlar bilan C", "oqimlar bilan C"), Stenford ishlab chiquvchilari ularni chaqirishgan. Brukning asosiy vazifasi 3D API ning barcha komponentlarini dasturchidan yashirish edi, bu esa GPUni parallel hisoblar uchun protsessor sifatida taqdim etish imkonini berdi. Buning uchun Bruk kompilyatori .br faylini C ++ kodi va kengaytmalari bilan qayta ishladi, so'ngra kutubxonaga har xil chiqishlar (DirectX, OpenGL ARB, OpenGL NV3x, x86) bilan bog'langan C ++ kodini yaratdi.



Kattalashtirish uchun rasmni bosing.

Brukning bir qancha xizmatlari bor, ulardan birinchisi - GPGPU -ni soyadan olib chiqish, shunda keng jamoatchilik bu texnologiya bilan tanishishi mumkin. Garchi loyiha e'lon qilingandan so'ng, bir qator IT -saytlar Brukning chiqarilishi CPU -lar borligiga shubha tug'dirayotganidan juda umidvor edilar, ular yaqinda yanada kuchli GPU -lar bilan almashtiriladi. Lekin, ko'rib turganimizdek, bu besh yildan keyin sodir bo'lmadi. Rostini aytsam, biz hech qachon bunday bo'lmaydi deb o'ylamaymiz. Boshqa tomondan, tobora ko'proq parallellik tomon yo'naltirilgan protsessorlarning muvaffaqiyatli evolyutsiyasini (ko'proq yadrolar, SMT ko'p ishlov berish texnologiyasi, SIMD bloklarini kengaytirish), shuningdek, aksincha tobora ko'proq universal bo'lib borayotgan GPU -larni ko'rib chiqish. (suzuvchi nuqta hisoblarini qo'llab -quvvatlash yagona aniqlik, butun sonli hisoblash, er -xotin aniqlikni qo'llab -quvvatlash), GPU va CPU yaqinda birlashadiganga o'xshaydi. Keyin nima bo'ladi? Matematik protsessorlarda bo'lgani kabi, GPU -lar CPU tomonidan yutib yuboriladimi? Juda mumkin. Intel va AMD hozirda shunga o'xshash loyihalar ustida ishlamoqda. Lekin hali ko'p narsani o'zgartirish mumkin.

Ammo bizning mavzuimizga qaytamiz. Brukning afzalligi GPGPU kontseptsiyasini ommalashtirish edi, bu GPU resurslariga kirishni sezilarli darajada soddalashtirdi, bu esa ko'proq foydalanuvchilarga yangi dasturlash modelini o'zlashtirishga imkon berdi. Boshqa tomondan, Brukning barcha fazilatlariga qaramay, GPU resurslarini hisoblash uchun foydalanish uchun hali ko'p yo'l bor edi.

Muammolardan biri turli darajadagi mavhumlik, shuningdek, 3D API tomonidan yaratilgan ortiqcha yuk bilan bog'liq bo'lib, ular sezilarli darajada seziladi. Ammo Bruk ishlab chiquvchilari hech narsa qila olmaydigan muvofiqlik muammosi jiddiyroq. GPU ishlab chiqaruvchilari o'rtasida qattiq raqobat bor, shuning uchun ular ko'pincha haydovchilarini optimallashtiradi. Agar bu optimallashtirish o'yinchilar uchun ko'p jihatdan yaxshi bo'lsa, ular Bruk bilan uyg'unlikni bir zumda tugatishi mumkin. Shu sababli, biron bir joyda ishlaydigan ishlab chiqarish kodida ushbu API -dan foydalanishni tasavvur qilish qiyin. Va uzoq vaqt Bruk havaskor tadqiqotchilar va dasturchilar bo'lib qoldi.

Biroq, Brukning muvaffaqiyati ATI va nVidia e'tiborini jalb qilish uchun etarli edi va ular bunday tashabbusga qiziqish bildirishdi, chunki bu bozorni kengaytirib, kompaniyalar uchun muhim yangi sektorni ochishi mumkin edi.

Dastlab Bruk loyihasi bilan shug'ullangan tadqiqotchilar tezda Santa Klara shahridagi rivojlanish guruhlariga qo'shilib, yangi bozorni rivojlantirishning global strategiyasini taqdim etdilar. GPGPU vazifalariga mos keladigan apparat va dasturiy ta'minot kombinatsiyasini yaratish g'oyasi edi. NVidia ishlab chiqaruvchilari o'zlarining GPU -larining barcha sirlarini bilishgani uchun, grafik API -ga ishonish mumkin emas, balki GPU bilan haydovchi orqali muloqot qilish mumkin. Garchi, albatta, bu o'z muammolariga ega. Shunday qilib, CUDA (Compute Unified Device Architecture) ishlab chiqish guruhi GPU bilan ishlash uchun dasturiy qatlamlar to'plamini yaratdi.



Kattalashtirish uchun rasmni bosing.

Diagrammada ko'rib turganingizdek, CUDA ikkita API -ni taqdim etadi.

  • Yuqori darajali API: CUDA Runtime API;
  • past darajadagi API: CUDA Driver API.

Yuqori darajali API past darajadagi API orqali amalga oshirilganligi sababli, har bir ish vaqti funktsiyasi chaqiruvi Driver API ishlov beradigan oddiy ko'rsatmalarga bo'linadi. E'tibor bering, ikkita API bir -biridan farq qiladi: dasturchi u yoki bu APIdan foydalanishi mumkin, lekin ikkita API funktsiyalariga qo'ng'iroqlarni aralashtirish ishlamaydi. Umuman olganda, "yuqori darajadagi API" atamasi nisbiydir. Hatto Runtime API ham shundayki, ko'pchilik uni past darajali deb hisoblaydi; ammo, u ishga tushirish yoki kontekstni boshqarish uchun juda qulay bo'lgan funktsiyalarni ta'minlaydi. Ammo, ayniqsa, yuqori darajadagi mavhumlikni kutmang - siz hali ham nVidia GPU va ularning qanday ishlashini yaxshi bilishingiz kerak.

Driver API bilan ishlash yanada qiyinroq; GPU -ni qayta ishlash uchun ko'proq harakat talab etiladi. Boshqa tomondan, past darajadagi API yanada moslashuvchan, agar kerak bo'lsa, dasturchiga qo'shimcha nazorat beradi. Ikki API OpenGL yoki Direct3D resurslari bilan ishlashga qodir (bugungi kunda faqat to'qqizinchi versiya). Bu funksiyaning afzalliklari yaqqol ko'rinib turibdi - CUDA yordamida grafik API -ga o'tish mumkin bo'lgan manbalarni (geometriya, protsessual to'qimalar va h.k.) yaratish mumkin, yoki aksincha, siz 3D API -ni ko'rsatish natijalarini CUDA -ga yuborishingiz mumkin. dastur, bu esa o'z navbatida keyingi ishlov berishni amalga oshiradi. Bunday o'zaro ta'sirlarning ko'plab misollari bor va ularning afzalligi shundaki, resurslar GPU xotirasida saqlanishda davom etadi, ularni PCI Express avtobusi orqali o'tishning hojati yo'q, bu esa haligacha tiqilinch.

Ammo shuni ta'kidlash kerakki, video xotiradagi resurslarni almashish har doim ham mukammal emas va ba'zi "bosh og'rig'iga" olib kelishi mumkin. Masalan, piksellar sonini yoki rang chuqurligini o'zgartirganda, grafik ma'lumotlar birinchi o'ringa chiqadi. Shuning uchun, agar siz ramka buferidagi resurslarni ko'paytirishingiz kerak bo'lsa, haydovchi buni CUDA dasturlari resurslari hisobidan osonlikcha bajaradi, bu esa xato bilan "o'chib ketadi". Albatta, juda oqlangan emas, lekin bu holat tez -tez sodir bo'lmasligi kerak. Va biz kamchiliklar haqida gapirishni boshlaganimizda: agar siz CUDA dasturlari uchun bir nechta GPUlardan foydalanmoqchi bo'lsangiz, avval SLI rejimini o'chirib qo'yishingiz kerak, aks holda CUDA ilovalari faqat bitta GPUni "ko'rish" imkoniyatiga ega bo'ladi.

Nihoyat, uchinchi dasturiy qatlam kutubxonalarga beriladi - aniqrog'i, ikkitasi.

  • CUBLAS, bu erda GPUda chiziqli algebrani hisoblash uchun zarur bloklar mavjud;
  • Signallarni qayta ishlashda keng qo'llaniladigan algoritm Fourier transformatsiyasini hisoblashni qo'llab -quvvatlovchi CUFFT.

CUDA -ga kirishdan oldin, nVidia hujjatlarida tarqalgan bir qator atamalarni aniqlab beray. Kompaniya o'ziga xos terminologiyani tanladi, unga ko'nikish qiyin. Avvalo shuni e'tiborga oling ip CUDA -da protsessor ipi bilan bir xil ma'no yo'q, yoki bu bizning GPU -dagi maqolalarimizga teng emas. Bu holda GPU ishchi qismi qayta ishlanishi kerak bo'lgan ma'lumotlar to'plamidir. CPU oqimlaridan farqli o'laroq, CUDA tarmoqlari juda "engil", ya'ni kontekstni ikki tarmoq o'rtasida almashtirish hech qachon resurslarni talab qiladigan operatsiya emas.

CUDA hujjatlarida tez -tez uchraydigan ikkinchi atama burish... Bu erda hech qanday chalkashlik yo'q, chunki rus tilida o'xshashi yo'q (agar siz Start Trek yoki Warhammer o'yinining muxlisi bo'lmasangiz). Aslida, bu atama to'qimachilik sanoatidan olingan bo'lib, u erda to'qilgan iplar dastgohda cho'zilgan iplar orqali tortiladi. Warp in CUDA - 32 ta oqimdan iborat guruh bo'lib, CUDA ko'p protsessorlarida SIMD usuli bilan ishlov berilgan ma'lumotlarning minimal miqdori hisoblanadi.

Ammo bu "donlik" har doim ham dasturchi uchun qulay emas. Shuning uchun, CUDA -da, to'g'ridan -to'g'ri burmalar bilan ishlashning o'rniga, siz bilan ishlashingiz mumkin bloklar / blok 64 dan 512 gacha iplarni o'z ichiga oladi.

Nihoyat, bu bloklar birlashadi panjara / panjara... Bu guruhlashning afzalligi shundaki, bir vaqtning o'zida GPU tomonidan qayta ishlanadigan bloklar soni apparat resurslari bilan chambarchas bog'liq, biz quyida ko'rib chiqamiz. Tarmoqlardagi bloklarni guruhlash sizga ushbu cheklovdan butunlay chiqarib tashlash va bitta resursda yadro / yadroni bir xil qo'ng'iroqlar davomida qo'llash imkonini beradi. Bularning barchasi uchun CUDA kutubxonalari javobgardir. Bundan tashqari, bunday model yaxshi tarozida. Agar GPU resurslari kam bo'lsa, u bloklarni ketma -ket bajaradi. Agar hisoblash protsessorlari soni ko'p bo'lsa, u holda bloklarni parallel bajarish mumkin. Ya'ni, xuddi shu kod boshlang'ich darajadagi GPUlarda ham, yuqori darajadagi va hatto kelajakdagi modellarda ham ishlashi mumkin.

CUDA API -da protsessorga taalluqli boshqa atamalar mavjud ( mezbon / uy egasi) va GPU ( qurilma / qurilma). Agar bu kichik kirish sizni qo'rqitmagan bo'lsa, demak CUDA bilan yaqindan tanishish vaqti keldi.

Agar siz Tomning Uskuna qo'llanmasini muntazam o'qib tursangiz, nVidia -dan eng yangi GPU arxitekturasi sizga tanish. Agar yo'q bo'lsa, maqolani o'qishni tavsiya etamiz ". nVidia GeForce GTX 260 va 280: keyingi avlod grafik kartalari"CUDA nuqtai nazaridan, nVidia arxitekturani biroz boshqacha tarzda taqdim etadi va ilgari yashirilgan ba'zi tafsilotlarni ko'rsatadi.

Yuqoridagi rasmdan ko'rinib turibdiki, nVidia shader yadrosi bir nechta to'qimali protsessor klasterlaridan iborat. (Tekstura protsessorlari klasteri, TPC)... Masalan, 8800 GTX sakkizta klasterdan, 8800 GTS oltidan va boshqalardan foydalangan. Har bir klaster, aslida, tekstura birligidan va ikkitadan iborat oqimli ko'p protsessor... Ikkinchisiga ko'rsatmalarni o'qiydigan va dekodlaydigan, shuningdek ularni bajarishga yuboradigan quvur liniyasi boshi (oldingi uchi) va sakkizta hisoblash moslamasi va ikkita o'ta funktsional qurilmadan iborat quvurning oxiri (orqa uchi) kiradi. . SFU (Super funktsional birlik) bu erda ko'rsatmalar SIMD printsipiga muvofiq bajariladi, ya'ni bitta ko'rsatma burilishdagi barcha iplarga qo'llaniladi. nVidia bu usulni shunday deb ataydi SIMT(bitta ko'rsatma bir nechta mavzu, bitta ko'rsatma, ko'p ip). Shuni ta'kidlash kerakki, quvurning oxiri uning boshlanishidan ikki baravar ko'p ishlaydi. Amalda, bu shuni anglatadiki, bu qism avvalgisidan ikki baravar "kengroq" ​​ko'rinadi (ya'ni sakkiz kanalli blok o'rniga 16 kanalli SIMD bloki kabi). Oqimli ko'p protsessorlar quyidagicha ishlaydi: har bir soat tsiklida, quvur liniyasining boshlanishi bajarishga tayyor burilish tanlaydi va ko'rsatmani bajarishni boshlaydi. Burilishdagi barcha 32 ta ipga qo'llanilishi uchun to'rt soatlik tsikl kerak bo'ladi, lekin u ishga tushirish chastotasidan ikki baravar ko'p bo'lgani uchun faqat ikki soatlik tsiklni oladi (quvur liniyasi boshlanishi nuqtai nazaridan). Shunday qilib, quvur liniyasining boshlanishi tsiklni bekor qilmasligi va qo'shimcha qurilmalar iloji boricha yuklangan bo'lishi uchun, ideal holda, siz har bir tsiklni almashtirishingiz mumkin - bitta tsikldagi klassik ko'rsatma va SFU uchun ko'rsatma. boshqa.

Har bir ko'p protsessorda tushunishga arziydigan ma'lum manbalar to'plami mavjud. Deb nomlangan kichik xotira maydoni mavjud "Umumiy xotira", Ko'p protsessor uchun 16 KB. Bu hech qachon kesh xotirasi emas: dasturchi uni o'z xohishiga ko'ra ishlatishi mumkin. Ya'ni, bizning oldimizda SPU ning Hujayra protsessorlari mahalliy do'koniga yaqin narsa bor. Bu tafsilot qiziq, chunki u CUDA dasturiy va apparat texnologiyalarining kombinatsiyasi ekanligini ta'kidlaydi. Bu xotira maydoni pikselli shaderlar uchun ishlatilmaydi, bu nVidia "piksellar bir -birlari bilan gaplashganda bizga yoqmaydi", deb beparvolik bilan ta'kidlaydi.

Bu xotira maydoni iplar o'rtasida ma'lumot almashish imkoniyatini ochib beradi. bitta blokda... Bu cheklovni ta'kidlash muhim: blokdagi barcha iplar bitta ko'p protsessor tomonidan bajarilishi kafolatlangan. Aksincha, bloklarning turli xil protsessorlarga ulanishi umuman belgilanmagan va har xil bloklardan ikkita ip ish vaqtida bir -biri bilan ma'lumot almasha olmaydi. Ya'ni, umumiy xotiradan foydalanish oson emas. Biroq, umumiy xotira hali ham oqlanadi, faqat bir nechta tarmoqlar bir xil xotira bankiga kirishga harakat qilib, nizo keltirib chiqaradi. Boshqa hollarda, umumiy xotiraga kirish ro'yxatga olish kabi tez.

Umumiy xotira ko'p protsessor kira oladigan yagona xotira emas. Ular video xotiradan foydalanishlari mumkin, lekin kam tarmoqli kengligi va yuqori kechikish bilan. Shuning uchun, bu xotiraga kirish chastotasini kamaytirish uchun nVidia ko'p protsessorlarni doimiy va teksturalarni saqlaydigan kesh (ko'p protsessor uchun taxminan 8KB) bilan jihozladi.

Ko'p protsessorda 8192 ta registr mavjud bo'lib, ular ko'p protsessorda faol bo'lgan barcha bloklarning barcha oqimlari uchun umumiydir. Ko'p protsessor uchun faol bloklar soni sakkizdan oshmasligi kerak va faol burmalar soni 24 ta (768 ta ip) bilan cheklangan. Shunday qilib, 8800 GTX bir vaqtning o'zida 12 288 tagacha ishlay oladi. Bu cheklovlarning hammasini aytib o'tish joiz edi, chunki ular mavjud resurslar asosida algoritmni optimallashtirishga imkon beradi.

Shunday qilib, CUDA dasturini optimallashtirish bloklar soni va ularning o'lchamlari o'rtasida maqbul muvozanatni olishdan iborat. Xotiraning kechikishini kamaytirish uchun har bir blok uchun ko'proq ish zarrachalari foydali bo'ladi, lekin har bir oqim uchun mavjud bo'lgan registrlar soni ham kamayadi. Bundan tashqari, 512 ta ipdan iborat blok samarasiz bo'ladi, chunki ko'p protsessorda faqat bitta blok faol bo'lishi mumkin, bu esa 256 ta ipning yo'qolishiga olib keladi. Shuning uchun, nVidia 128 yoki 256 ta tarmoqli bloklardan foydalanishni tavsiya qiladi, bu past kechikish va ko'p yadro / yadro uchun registrlar soni o'rtasida eng yaxshi murosani ta'minlaydi.

Dasturiy nuqtai nazardan, CUDA BrookGPU -ga o'xshash C tilining kengaytmalari to'plamidan va bir nechta o'ziga xos API qo'ng'iroqlaridan iborat. Kengaytmalar funktsiyalar va o'zgaruvchilar bilan bog'liq turdagi spetsifikatorlarni o'z ichiga oladi. Asosiy so'zni eslab qolish juda muhimdir __jahon__, funktsiyadan oldin berilgan, bu yadro / yadroga tegishli ekanligini ko'rsatadi - bu funksiya CPU tomonidan chaqiriladi va u GPUda bajariladi. Prefiks __qurilma__ funktsiya GPUda bajarilishini bildiradi (aytmoqchi, CUDA "qurilma / qurilma" deb ataydi), lekin uni faqat GPU orqali chaqirish mumkin (boshqacha aytganda, boshqa __device__ funktsiyasidan yoki __global__ funktsiyasidan). Nihoyat, prefiks __host__ ixtiyoriy, bu protsessor tomonidan chaqiriladigan va protsessor tomonidan bajariladigan funktsiyani, boshqacha aytganda, oddiy funktsiyani bildiradi.

__Device__ va __global__ funktsiyalari bilan bir qator cheklovlar mavjud: ular rekursiv bo'la olmaydi (ya'ni o'zlarini chaqirishadi) va ular o'zgarmaydigan sonli argumentlarga ega bo'la olmaydi. Nihoyat, __device__ funktsiyalari GPU xotira maydonida joylashganligi sababli, siz ularning manzilini ololmaysiz. Variantlar, shuningdek, ular saqlanadigan xotira maydonini ko'rsatadigan bir qator saralashlarga ega. O'zgaruvchan prefiks __kelishgan bu oqim ko'p protsessorining umumiy xotirasida saqlanishini bildiradi. __Global__ funktsiyasi chaqiruvi biroz boshqacha. Gap shundaki, qo'ng'iroq qilayotganda, siz bajarilish konfiguratsiyasini - aniqrog'i, yadro / yadro qo'llaniladigan panjara / panjara hajmini, shuningdek har bir blok o'lchamini o'rnatishingiz kerak. Masalan, quyidagi imzo qo'yilgan yadroni olaylik.

__global__ void Func (float * parametri);

U shunday nomlanadi

Func<<< Dg, Db >>> (parametr);

bu erda Dg - tarmoq o'lchami va Db - blok o'lchami. Bu ikkita o'zgaruvchi CUDA yordamida kiritilgan yangi turdagi vektorga tegishli.

CUDA API -da VRAM -da xotira bilan ishlash funktsiyalari mavjud: xotirani ajratish uchun cudaMalloc, cudaFree -ni bo'shatish va xotirani RAM va VRAM o'rtasida nusxalash uchun cudaMemcpy va aksincha.

Biz ushbu sharhni CUDA dasturi tuzilgan juda qiziqarli tarzda yakunlaymiz: kompilyatsiya bir necha bosqichda amalga oshiriladi. Birinchidan, CPU kodi olinadi va standart kompilyatorga uzatiladi. GPU-ga xos kod avval PTX oraliq tiliga aylanadi. Bu montaj tiliga o'xshaydi va potentsial samarasizlikni qidirib kodingizni o'rganishga imkon beradi. Nihoyat, oxirgi bosqich - oraliq tilni GPU -ning maxsus ko'rsatmalariga tarjima qilish va ikkilik fayl yaratish.

NVidia hujjatlarini ko'rib chiqib, men shu hafta CUDA -ni sinab ko'rmoqchiman. Haqiqatan ham, o'z dasturingizni yaratish orqali APIni baholashdan yaxshiroq nima bo'lishi mumkin? Qachonki hamma narsa qog'ozda mukammal ko'rinsa ham, ko'pchilik muammolar paydo bo'lishi kerak. Bundan tashqari, amaliyot CUDA hujjatlarida ko'rsatilgan barcha tamoyillarni qanchalik yaxshi tushunganingizni ko'rsatib beradi.

Bunday loyihaga kirish juda oson. Bugungi kunda ko'p sonli bepul, lekin yuqori sifatli asboblarni yuklab olish mumkin. Sinov uchun biz sizga kerak bo'lgan hamma narsaga ega bo'lgan Visual C ++ Express 2005 dasturidan foydalandik. Eng qiyin qismi - GPU -ga ulanish uchun bir necha hafta kerak bo'lmagan, ammo harakatlarimizni yaxshi holatda ushlab turish uchun etarlicha qiziqarli bo'lgan dasturni topish. Nihoyat, biz balandlik xaritasini oladigan va tegishli normal xaritani hisoblaydigan kodni tanladik. Biz bu funktsiyani batafsil ko'rib chiqmaymiz, chunki bu maqolada unchalik qiziq emas. Qisqacha aytganda, dastur maydonlarning egriligi bilan shug'ullanadi: biz boshlang'ich tasvirning har bir pikseli uchun hosil bo'lgan tasvirning rangini qo'shni piksellar yordamida aniqlaydigan matritsani yuklaymiz, yoki undan ko'p murakkab formuladan foydalanamiz. Bu xususiyatning afzalligi shundaki, uni parallellashtirish juda oson, shuning uchun bu test CUDA imkoniyatlarini mukammal namoyish etadi.


Yana bir afzalligi shundaki, bizda protsessorda dastur mavjud, shuning uchun biz uning natijasini CUDA versiyasi bilan taqqoslashimiz mumkin va g'ildirakni qaytadan kashf qilmaymiz.

Yana bir bor takrorlaymizki, testning maqsadi CPU va GPU versiyalarini qiyosiy sinovdan o'tkazish emas, balki CUDA SDK yordam dasturlari bilan tanishish edi. Bu CUDA dasturini yaratish bo'yicha birinchi urinishimiz bo'lgani uchun, biz yuqori ko'rsatkichlarga erishishga umid qilmaganmiz. Kodning bu qismi muhim emasligi sababli, CPU uchun versiya optimallashtirilmagan, shuning uchun natijalarni to'g'ridan -to'g'ri taqqoslash unchalik qiziq emas.

Ishlash

Biroq, biz CUDA -ni eng qo'pol dasturda ham ishlatishning afzalligi bormi yoki GPU -dan foydalansak, qandaydir daromad olish uchun uzoq va zerikarli amaliyot kerak bo'ladimi -yo'qmi, biz bajarish vaqtini o'lchadik. Sinov mashinasi bizning ishlab chiqarish laboratoriyamizdan olingan - Core 2 Duo T5450 protsessorli noutbuk va Vista bilan ishlaydigan GeForce 8600M GT grafik kartasi. Bu superkompyuterdan uzoqda, lekin natijalar juda qiziq, chunki GPU uchun test "keskinlashtirilmagan". NVidia-ning dahshatli GPU va katta o'tkazish qobiliyatiga ega tizimlarda katta yutuqlarga erishganini ko'rish har doim yoqimli, lekin amalda bugungi kunda kompyuter bozorida CUDA-ni qo'llab-quvvatlaydigan 70 million GPU-larning ko'pchiligi unchalik kuchli emas, shuning uchun ham bizning testimiz to'g'ri. hayotga.

2.048 x 2.048 pikselli tasvir uchun biz quyidagi natijalarni oldik.

  • 1 ta protsessor: 1 419 milodiy;
  • CPU 2 ta tarmoqli: 749 ms;
  • CPU 4 ta tarmoqli: 593 ms
  • GPU (8600M GT) 256 ta tarmoqli bloklari: 109 ms;
  • GPU (8600M GT) 128 ta tarmoqli bloklari: 94 ms;
  • GPU (8800 GTX) 128 ta / 256 ta tarmoqli bloklari: 31 ms.

Natijalardan bir nechta xulosalar chiqarish mumkin. Dastlabki dangasalik haqida gapirishga qaramay, biz protsessorning dastlabki versiyasini bir nechta mavzu uchun o'zgartirdik. Yuqorida aytib o'tganimizdek, kod bu holat uchun juda mos keladi - faqat dastlabki tasvirni qancha oqim bo'lsa, shuncha ko'p zonaga bo'lish kifoya. E'tibor bering, ikki yadroli protsessorda bitta ipdan ikkiga o'tish tezligi deyarli chiziqli bo'lib chiqdi, bu ham test dasturining parallelligini ko'rsatadi. To'rt kutubli versiya ham kutilmaganda tezroq bo'lib chiqdi, garchi bu bizning protsessorimizga juda g'alati tuyulsa - aksincha, qo'shimcha iplarni boshqarish xarajatlari tufayli samaradorlikni pasayishini kutish mumkin edi. Bu natijani qanday izohlash mumkin? Aytish qiyin, lekin Windows ish oqimini rejalashtiruvchisi aybdor bo'lishi mumkin; har holda, natija takrorlanishi mumkin. Kichikroq to'qimalarga ega (512x512), iplarga bo'linishdan olingan daromad unchalik aniq emas edi (taxminan 35% ga nisbatan 100%) va to'rtta ipdan iborat versiyaning xulq -atvori mantiqiyroq bo'lib, ikki ipli versiyaga nisbatan o'smadi. GPU hali ham tezroq edi, lekin unchalik aniq emas edi (8600M GT ikki tarmoqli versiyadan uch baravar tezroq).



Kattalashtirish uchun rasmni bosing.

Ikkinchi muhim kuzatish shundaki, hatto eng sekin GPU -ni amalga oshirish protsessorning eng yuqori versiyasidan olti barobar tezroq bo'lgan. Birinchi dastur va algoritmning takomillashmagan versiyasi uchun natija juda dalda beradi. E'tibor bering, biz kichik bloklarda ancha yaxshi natijaga erishdik, lekin sezgi boshqacha taklif qilishi mumkin. Tushuntirish juda oddiy - bizning dasturimiz har bir oqim uchun 14 ta registrdan foydalanadi va 256 -ipli bloklar bilan har bir blok uchun 3584 ta registr talab qilinadi va biz ko'rsatganimizdek, protsessorning to'liq yuklanishi uchun 768 ta oqim talab qilinadi. Bizning holatda, bu uchta blok yoki 10572 registr. Ammo ko'p protsessorda faqat 8192 ta registr bor, shuning uchun u faqat ikkita blokni faol saqlashi mumkin. Bundan farqli o'laroq, 128 ta ipdan iborat bloklar uchun har bir blok uchun 1792 ta registr kerak; agar 8 192 1922 ga bo'linib, eng yaqin butun songa yaxlitlangan bo'lsa, biz to'rtta blokni olamiz. Amalda, iplar soni bir xil bo'ladi (ko'p protsessor uchun 512, garchi nazariy jihatdan to'liq yuklanish uchun 768 kerak bo'lsa ham), lekin bloklar sonining ko'payishi GPUga xotiraga kirishda moslashuvchanlikni beradi. yuqori kechikishlar davom etmoqda, siz natijalarni olishni kutib, boshqa blokdan ko'rsatmalarni bajarishni boshlashingiz mumkin. To'rt blok kechikishni aniq kamaytiradi, ayniqsa, bizning dasturimiz bir nechta xotiraga kirishni ishlatishini hisobga olsak.

Tahlil

Nihoyat, yuqorida aytganlarimizga qaramay, biz vasvasaga dosh berolmadik va 8800 GTX dasturida ishladik, bu blok o'lchamidan qat'i nazar, 8600 -dan uch barobar tezroq bo'ldi. Amalda, tegishli arxitekturada, natija to'rt yoki undan ko'p marta yuqori bo'ladi, deb o'ylashingiz mumkin: 128 ALU / shader protsessorlari soat tezligi 32 va undan yuqori (1,35 gigagertsli 950 MGts gacha), lekin bu natija bermadi. Ehtimol, xotiraga kirish cheklovchi omil bo'lgan. Aniqroq aytganda, boshlang'ich tasvirga ko'p o'lchovli CUDA massivi sifatida kirish mumkin - bu to'qimadan boshqa narsa emas. Ammo bir nechta afzalliklari bor.

  • tekstura keshidan foyda olish;
  • biz protsessor versiyasidan farqli o'laroq, tasvir chegaralarini qayta ishlashga hojat bo'lmagan o'rash rejimidan foydalanamiz.

Bundan tashqari, biz "o'rniga" va "o'rniga" ni normalizatsiya qilingan "bepul" filtrlash imkoniyatidan foydalanishimiz mumkin, lekin biz uchun bu unchalik foydali emas. Ma'lumki, 8600 88 ta GTX uchun 32 ga nisbatan 16 ta tekstura birligiga ega. Shuning uchun, ikki me'morchilikning nisbati faqat ikkitadir. Bunga chastotalar farqini qo'shing va biz (32 x 0.575) / (16 x 0.475) = 2.4 nisbatini olamiz - biz "uchdan biriga" yaqin. Bu nazariya G80 -da nima uchun bloklar hajmi deyarli o'zgarmasligini ham tushuntiradi, chunki ALU hali ham tekstura bloklariga tayanadi.



Kattalashtirish uchun rasmni bosing.

Umidli natijalar bilan bir qatorda, biz tanlagan qulay bo'lmagan sharoitlarni hisobga olgan holda, CUDA bilan birinchi tanishuvimiz juda yaxshi o'tdi. Vista noutbukida ishlab chiqish CUDA SDK 2.0 -ni hali beta -versiyada, 174.55 drayveri bilan ishlatishni anglatadi, bu ham beta. Shunga qaramay, biz hech qanday yoqimsiz kutilmagan hodisalar haqida xabar bera olmaymiz - faqat birinchi xatolarni tuzatish paytida, bizning dasturimiz hali "xato" bo'lib, ajratilgan maydondan tashqarida xotiraga murojaat qilishga urinib ko'rdi.

Monitor bexosdan miltilladi, keyin ekran qorayib ketdi ... Vista haydovchilarni ta'mirlash xizmatini ishga tushirmaguncha va hammasi yaxshi edi. Ammo biz kabi standart dasturlarda segmentatsiya xatosining odatiy xatosini ko'rishga odatlangan bo'lsangiz, hali ham hayratlanarli. Nihoyat, nVidia -ga nisbatan kichik tanqid: CUDA uchun mavjud bo'lgan barcha hujjatlarda, Visual Studio uchun rivojlanish muhitini sozlash bo'yicha bosqichma -bosqich ko'rsatma beradigan kichik qo'llanma yo'q. Aslida, muammo unchalik katta emas, chunki SDKda CUDA dasturlari doirasini tushunish uchun o'rganilishi mumkin bo'lgan misollar to'liq to'plami bor, lekin yangi boshlanuvchilar uchun qo'llanma foydali bo'ladi.



Kattalashtirish uchun rasmni bosing.

Nvidia CUDA -ni GeForce 8800 -ning chiqarilishi bilan tanishtirdi. O'sha paytda va'dalar jozibali bo'lsa -da, biz haqiqiy sinovgacha g'ayratimizni saqladik. Darhaqiqat, o'sha paytda GPGPU to'lqinida qolish ko'proq hududiy belgi bo'lib tuyuldi. Agar mavjud SDK bo'lmasa, bu muvaffaqiyatsiz bo'ladigan boshqa marketing qo'g'irchog'i emas, deyish qiyin. Yaxshi tashabbus juda erta e'lon qilingan va qo'llab -quvvatlanmagani uchun, ayniqsa, bunday raqobatbardosh sektorda ochilmagan birinchi marta emas. Endi, e'lon qilinganidan bir yarim yil o'tgach, biz ishonch bilan aytishimiz mumkinki, nVidia o'z so'zida turdi.

SDK 2007 yil boshida juda tez beta -versiyada paydo bo'ldi va shu vaqtdan boshlab tez yangilanib, bu loyihaning nVidia qiymatini isbotladi. Bugungi kunda CUDA juda yaxshi rivojlanmoqda: SDK allaqachon asosiy operatsion tizimlar uchun beta 2.0 versiyasida mavjud (Windows XP va Vista, Linux va Mac OS X uchun 1.1) va nVidia saytning butun qismini ishlab chiquvchilar uchun ajratgan.

Ko'proq professional darajada, CUDA bilan birinchi qadamlarning taassuroti juda ijobiy edi. Agar siz GPU arxitekturasini yaxshi bilsangiz ham, uni osongina aniqlashingiz mumkin. Agar API birinchi qarashda oddiy ko'rinsa, siz darhol ishonchli natijalarga erishishingizga ishona boshlaysiz. Ammo hisoblash vaqtini protsessordan GPUga o'tkazilgan ko'p sonlar behuda ketmaydimi? Sinxronizatsiya ibtidosiga ega bo'lmagan bu minglab iplarni qanday ishlatish kerak? Biz barcha qo'rquvlarni hisobga olgan holda tajribalarimizni boshladik. Bizning algoritmning birinchi versiyasi, juda ahamiyatsiz bo'lsa ham, protsessorga qaraganda ancha tezroq bo'lganida, ular tezda tarqalib ketishdi.

Shunday qilib, CUDA universitet rasmiylarini GeForce sotib olishga ishontirmoqchi bo'lgan tadqiqotchilar uchun qutqaruvchi emas. CUDA - bu allaqachon mavjud bo'lgan texnologiya, har qanday C dasturchisi, agar ular yangi dasturlash paradigmasiga ko'nikish uchun vaqt va kuch sarflashga tayyor bo'lsa, foydalanishi mumkin. Agar sizning algoritmlaringiz yaxshi parallel bo'lsa, bu harakat behuda ketmaydi. Bundan tashqari, nVidia-ga CUDA dasturchilarini izlayotganlar uchun to'liq va sifatli hujjatlarni taqdim etgani uchun minnatdorchilik bildiramiz.

Taniqli API bo'lish uchun CUDA nima talab qiladi? Bir so'z bilan aytganda: portativlik. Bilamizki, IT -ning kelajagi parallel hisoblashda - bugun hamma shunday o'zgarishlarga tayyorgarlik ko'rmoqda va barcha tashabbuslar, ham dasturiy, ham texnik vositalar shu yo'nalishga qaratilgan. Ammo, ayni paytda, agar biz paradigmalarning rivojlanishiga nazar tashlasak, biz hali ham boshlang'ich bosqichdamiz: biz oqimlarni qo'lda yaratamiz va umumiy resurslarga kirishni rejalashtirishga harakat qilamiz; agar siz yadrolar sonini bir qo'lning barmoqlariga sanash mumkin bo'lsa, siz qandaydir tarzda bularning barchasini engishingiz mumkin. Ammo bir necha yil ichida, protsessorlar soni yuzlab bo'lganda, bu imkoniyat boshqa bo'lmaydi. CUDA -ning chiqarilishi bilan nVidia bu muammoni hal qilish uchun birinchi qadamni qo'ydi - lekin, albatta, bu yechim faqat shu kompaniyaning GPU -lariga mos keladi va hatto hamma uchun ham emas. Bugungi kunda CUDA dasturlari bilan faqat GF8 va 9 (va ularning Quadro / Tesla lotinlari) ishlashi mumkin. Va yangi 260/280 liniyasi, albatta.



Kattalashtirish uchun rasmni bosing.

Nvidia butun dunyo bo'ylab CUDA-ga mos keladigan 70 million GPU sotilgani bilan maqtanishi mumkin, lekin bu amalda standart bo'lish uchun hali ham etarli emas. Raqobatchilar qo'lidan o'tirmasligini hisobga olsak. AMD o'z SDK (Stream Computing) ni taklif qiladi va Intel hali mavjud bo'lmasa -da, yechim (Ct) e'lon qildi. Standartlar urushi yaqinlashmoqda va bozorda uchta raqobatchiga joy qolmaydi, masalan, Microsoft kabi boshqa o'yinchi umumiy API ni ishlab chiqmasa, bu albatta ishlab chiquvchilar hayotini osonlashtiradi.

Shuning uchun, nVidia CUDA -ni tasdiqlashda juda ko'p qiyinchiliklarga duch keladi. Garchi texnologik jihatdan bizda, shubhasiz, muvaffaqiyatli yechim bor bo'lsa -da, ishlab chiquvchilarni o'z istiqbollariga ishontirishda davom etmoqda - va bu oson bo'lmaydi. Biroq, so'nggi API e'lonlari va yangiliklariga qaraganda, kelajak noaniq ko'rinadi.

- past darajadagi dasturiy interfeyslar to'plami ( API) o'yinlar va boshqa yuqori samarali multimediyali ilovalarni yaratish. Yuqori ishlashni qo'llab -quvvatlashni o'z ichiga oladi 2D- va 3D-grafik, ovoz va kirish qurilmalari.

Direct3D (D3D) - uch o'lchovli chiqish interfeysi ibtidoiylar(geometrik jismlar). Kiritilgan .

Opengl(ingliz tilidan. Grafika kutubxonasini oching, so'zma-so'z-ochiq grafik kutubxona)-ikki o'lchovli va uch o'lchovli kompyuter grafikasidan foydalangan holda ilovalarni yozish uchun dasturlash tilidan mustaqil o'zaro faoliyat platformali dasturlash interfeysini belgilaydigan spetsifikatsiya. Oddiy ibtidoiylardan murakkab 3D sahnalarni chizish uchun 250 dan ortiq funktsiyalarni o'z ichiga oladi. U video o'yinlar, virtual haqiqat, ilmiy tadqiqotlarda vizualizatsiya yaratishda ishlatiladi. Platformada Windows bilan raqobatlashadi .

OpenCL(ingliz tilidan. Hisoblash tilini ochish, so'zma -so'z - ochiq hisoblash tili) - ramka har xil grafikada parallel hisob -kitoblarga tegishli kompyuter dasturlarini yozish uchun dasturiy ta'minot tizimi. GPU) va ( ). Ramkaga OpenCL dasturlash tili va dasturiy interfeysni o'z ichiga oladi ( API). OpenCL ko'rsatmalar darajasida va ma'lumotlar darajasida parallellikni ta'minlaydi va bu texnikani amalga oshirishdir GPGPU.

GPGPU(ingliz tilidan qisqartirilgan. Umumiy maqsadli G ta`riflar, Ularni bitirish, so'zma -so'z - GPU Umumiy maqsad)-bu odatda bajariladigan umumiy hisoblar uchun grafik protsessor-video kartadan foydalanish usuli.

Shader(ing. shader) - ob'ekt yoki tasvirning yakuniy parametrlarini aniqlash uchun uch o'lchovli grafikada ishlatiladigan sintezlangan tasvirlarni soyalash dasturi. Odatda yorug'likni yutish va tarqatish, teksturani xaritalash, aks ettirish va sinish, soyalash, sirt siljishi va qayta ishlashdan keyingi ta'sirlarning tasodifiy murakkablik tavsiflarini o'z ichiga oladi. Murakkab sirtlarni oddiy geometrik shakllar yordamida ko'rsatish mumkin.

Render qilish(ing. ko'rsatish) - vizualizatsiya, kompyuter grafikasida, dasturiy ta'minot yordamida modeldan tasvir olish jarayoni.

SDK(ingliz tilidan qisqartirilgan. Dasturiy ta'minot ishlab chiqish to'plami) - dasturiy ta'minot ishlab chiqish vositalari to'plami.

Markaziy protsessor(ingliz tilidan qisqartirilgan. Markaziy ishlov berish birligi, so'zma -so'z - markaziy / asosiy / asosiy hisoblash qurilmasi) - markaziy (mikro); mashina ko'rsatmalarini bajaruvchi qurilma; hisoblash operatsiyalari (operatsion tizim va dasturiy ta'minot bilan belgilanadi) va barcha qurilmalarning ishini muvofiqlashtirish uchun mas'ul bo'lgan apparat qismi.

GPU(ingliz tilidan qisqartirilgan. Grafik ishlov berish birligi, so'zma -so'z - grafik hisoblash qurilmasi) - grafik protsessor; grafik ko'rsatishni (ko'rsatishni) bajaradigan alohida qurilma yoki o'yin konsoli. Zamonaviy GPU -lar kompyuter grafikasini juda samarali ishlaydi. Zamonaviy video adapterlardagi grafik protsessor uch o'lchovli grafikalar uchun tezlatgich sifatida ishlatiladi, lekin uni ba'zi hollarda hisoblash uchun ham ishlatish mumkin ( GPGPU).

Muammolar Markaziy protsessor

Uzoq vaqt davomida an'anaviy ko'rsatkichlarning o'sishi asosan soat chastotasining ketma -ket o'sishi bilan bog'liq edi (ishlashning qariyb 80 foizi soat chastotasi bilan aniqlangan) va bir vaqtning o'zida bitta kristalli tranzistorlar sonining ko'payishi. . Biroq, soat chastotasining yanada oshishi (3,8 gigagertsdan yuqori chastotada, chiplar haddan tashqari qizib ketadi!) Bir qator fundamental fizik to'siqlarga qarshi chiqadi (chunki texnologik jarayon atom hajmiga juda yaqin: va kremniy atomining o'lchami taxminan 0,543 nm):

Birinchidan, kristall hajmi kamayib, soat chastotasi oshgani sayin, tranzistorlarning oqish oqimi oshadi. Bu energiya sarfining oshishiga va issiqlik emissiyasining oshishiga olib keladi;

Ikkinchidan, yuqori soat tezligining afzalliklari qisman xotira kechikishi bilan qoplanadi, chunki xotiraga kirish vaqti ortib borayotgan soat tezligiga mos kelmaydi;

Uchinchidan, ba'zi ilovalar uchun an'anaviy ketma -ket arxitekturalar "fon Neumann darboğazi" deb nomlangan soat tezligi oshishi bilan samarasiz bo'lib qoladi - bu ketma -ket hisob -kitoblar oqimining natijasi. Shu bilan birga, rezistiv-sig'imli signal uzatilishining kechikishi oshadi, bu esa soat chastotasining oshishi bilan bog'liq bo'lgan qo'shimcha to'siqdir.

Rivojlanish GPU

Ning rivojlanishi bilan parallel ravishda GPU:

2008 yil noyabr - Intel 4 yadroli liniyani taqdim etdi Intel Core i7 yangi avlod mikroarxitekturasiga asoslangan Nehalem... Protsessorlar 2,6-3,2 gigagertsli soat tezligida ishlaydi. 45nm texnologik texnologiya asosida ishlab chiqarilgan.

2008 yil dekabr - 4 yadroli etkazib berish AMD Phenom II 940(kod nomi - Deneb). 45 nm texnologik texnologiya yordamida ishlab chiqarilgan 3 gigagertsli chastotada ishlaydi.

2009 yil may - kompaniya AMD GPU versiyasini taqdim etdi ATI Radeon HD 4890 asosiy soat tezligi 850 MGts dan 1 Gigagertsgacha ko'tarildi. Bu birinchi grafik 1 gigagertsli protsessor. Chipning hisoblash quvvati, chastotaning oshishi hisobiga, 1,36 dan 1,6 teraflopsgacha oshdi. Protsessor 800 (!) Hisoblash yadrolarini o'z ichiga oladi, video xotirasini qo'llab -quvvatlaydi GDDR5, DirectX 10.1, ATI CrossFireX va zamonaviy video karta modellariga xos bo'lgan boshqa texnologiyalar. Chip 55nm texnologiyasi asosida ishlab chiqarilgan.

Asosiy farqlar GPU

O'ziga xos xususiyatlar GPU(bilan solishtirganda ) quyidagilar:

- arxitektura, maksimal darajada to'qimalar va murakkab grafik ob'ektlarni hisoblash tezligini oshirishga qaratilgan;

- tipik tepalik kuchi GPU dan ancha yuqori ;

- maxsus konveyer arxitekturasi tufayli, GPU ga qaraganda grafik ma'lumotlarni qayta ishlashda ancha samaralidir.

"Janr inqirozi"

"Janr inqirozi" uchun 2005 yilgacha pishgan - ular o'sha paytda paydo bo'lgan. Ammo texnologiya rivojlanganiga qaramay, mahsuldorlik o'sib bormoqda sezilarli darajada kamaydi. Bir vaqtning o'zida ishlash GPU o'sishda davom etmoqda. Shunday qilib, 2003 yilga kelib, bu inqilobiy g'oya kristallashdi - grafikning hisoblash kuchidan foydalaning... GPU "grafik bo'lmagan" hisoblash uchun faol ishlatila boshlandi (fizikani simulyatsiya qilish, signallarni qayta ishlash, hisoblash matematikasi / geometriyasi, ma'lumotlar bazasi operatsiyalari, hisoblash biologiyasi, hisoblash iqtisodiyoti, kompyuterni ko'rish va boshqalar).

Asosiy muammo shundaki, dasturlash uchun standart interfeys yo'q edi GPU... Ishlab chiquvchilar foydalangan Opengl yoki Direct3D lekin bu juda qulay edi. Korporatsiya NVIDIA(grafik, ommaviy axborot vositalari va aloqa protsessorlari, shuningdek simsiz media protsessorlarning eng yirik ishlab chiqaruvchilardan biri; 1993 yilda tashkil etilgan) ba'zi birlashtirilgan va qulay standartni ishlab chiqishga kirishdi va texnologiyani taqdim etdi. CUDA.

Qanday boshlandi

2006 - NVIDIA namoyish etadi CUDA ™; hisoblash inqilobining boshlanishi GPU.

2007 - NVIDIA arxitekturani chiqaradi CUDA(original versiya CUDA SDK 2007 yil 15 fevralda kiritilgan); jurnalining "Eng yaxshi yangilik" nominatsiyasi Ommabop fan va nashrdan "O'quvchilar tanlovi" HPCWire.

2008 yil - texnologiya NVIDIA CUDA dan "Texnik mahorat" nominatsiyasida g'olib bo'ldi Kompyuter jurnali.

Nima CUDA

CUDA(ingliz tilidan qisqartirilgan. Yagona qurilma arxitekturasini hisoblash, so'zma -so'z - qurilmalarning yagona hisoblash arxitekturasi) - bajarishga imkon beradigan arxitektura (dasturiy va texnik vositalar to'plami). GPU umumiy maqsadli hisob-kitoblar GPU aslida kuchli protsessor vazifasini bajaradi.

Texnologiya NVIDIA CUDA ™ Bu dasturlash tilidagi yagona rivojlanish muhiti C, bu ishlab chiqaruvchilarga GPU -larning qayta ishlash kuchi tufayli murakkab hisoblash muammolarini qisqa vaqt ichida hal qilish uchun dasturiy ta'minot yaratishga imkon beradi. Dunyoda allaqachon millionlab odamlar ishlaydi GPU qo'llab -quvvatlash bilan CUDA, va minglab dasturchilar allaqachon (bepul!) Asboblardan foydalanmoqdalar CUDA dasturlarni tezlashtirish va resurslar talab qiladigan eng murakkab vazifalarni hal qilish - video va audio kodlashdan tortib neft va gazni qidirish, mahsulotni modellashtirish, tibbiy tasvirlash va ilmiy tadqiqotlar.

CUDA ishlab chiqaruvchiga o'z xohishiga ko'ra, grafik tezlatgichning ko'rsatmalar to'plamiga kirishni tashkil etish va uning xotirasini boshqarish, undagi murakkab parallel hisoblarni tashkil etish imkoniyatini beradi. Qo'llab -quvvatlaydigan grafik tezlatgich CUDA hozirgi kabi kuchli dasturlashtiriladigan ochiq arxitekturaga aylanadi. Bularning barchasi ishlab chiqaruvchiga uskunalarga past darajadagi, taqsimlangan va yuqori tezlikda kirishni ta'minlaydi CUDA kompilyatorlar, tuzatuvchilar, matematik kutubxonalar, dasturiy platformalar kabi yuqori darajadagi jiddiy vositalarni qurishda zarur asos.

Uralskiy, etakchi texnologiya mutaxassisi NVIDIA solishtirish GPU va , shunday deydi: " Bu SUV. U mashinani istalgan vaqtda, istalgan joyda boshqaradi, lekin unchalik tez emas. A GPU Bu sport avtomobili. Yomon yo'lda u hech qaerga ketmaydi, lekin yaxshi yoritadi - va u hamma tezligini ko'rsatadi, bu SUV hech qachon orzu qilmagan! .. ".

Texnologik imkoniyatlar CUDA

Yadrolar CUDA - belgi skalyar hisoblash birliklari video chiplarda NVidia, bilan boshlanadi G 80 (GeForce 8 xxx, Tesla C-D-S870, Fx4/5600 , 360 mln). Chiplarning o'zi arxitekturadan olingan. Aytgancha, chunki kompaniya NVidia shuning uchun ular o'z protsessorlarini ishlab chiqishga tayyor edilar Tegra seriyasi ham asoslanadi RISC arxitektura. Men bu me'morchilikda katta tajribaga egaman.

CUDA yadro bittasini o'z ichiga oladi bitta vektor va bitta skalyar hisob -kitoblarni boshqa ko'p protsessorga o'tkazadigan yoki keyingi ishlov berish uchun bitta vektor va bitta skalyar operatsiyani bajaradigan birliklar. Yuzlab va minglab bunday yadrolar majmuasi katta hisoblash quvvatini ifodalaydi va agar uni qo'llab -quvvatlaydigan dasturiy ta'minot mavjud bo'lsa, talablarga qarab turli vazifalarni bajarishi mumkin. Ilova har xil bo'lishi mumkin: video oqimini dekodlash, 2D / 3D grafikani tezlashtirish, bulutli hisoblash, maxsus matematik tahlillar va boshqalar.

Ko'pincha, birlashgan professional NVidia Tesla kartalari va NVidia Quadro zamonaviy superkompyuterlarning tayanchidir.

CUDA- yadrolar bundan buyon jiddiy o'zgarishlarga duch kelmagan G 80, lekin ularning soni ortadi (boshqa bloklar bilan birga) ROP, Tekstura birliklari va boshqalar) va bir -biri bilan parallel ta'sir o'tkazish samaradorligi (modullar takomillashtirildi) Giga ipi).

Masalan:

GeForce

GTX 460 - 336 CUDA yadrolari
GTX 580 - 512 CUDA yadrolari
8800GTX - 128 CUDA yadrolari

Oqim protsessorlari sonidan ( CUDA), shader hisoblashdagi ko'rsatkich deyarli mutanosib ravishda oshadi (boshqa elementlar sonining bir xil o'sishi bilan).

Chipdan boshlab GK110(NVidia GeForce GTX 680) - CUDA yadrolar endi ikki barobar chastotaga ega emas, lekin chipning boshqa barcha bloklari bilan keng tarqalgan. Buning o'rniga, ularning soni taxminan ortdi Uch marta oldingi avlod bilan solishtirganda G110.

Darvinning evolyutsiya nazariyasiga ko'ra, birinchi yirik maymun (agar
aniqrog'i - homo oldingi, inson salafiy) keyinroq burildi
bizda. Ming yoki undan ortiq radio naychali ko'p tonnali hisoblash markazlari,
butun xonalarni egallab, yarim kilogrammli noutbuklar bilan almashtirildi.
ishlashda birinchisiga bo'ysunmaydi. Antediluv yozuv mashinalari aylandi
har qanday narsani va hamma narsani chop etishda (hatto inson tanasida ham)
ko'p funktsiyali qurilmalar. Protsessor gigantlari to'satdan g'isht yig'ishga qaror qilishdi
"tosh" da grafik yadro. Va video kartalar nafaqat rasm ko'rsatishni boshladi
maqbul FPS va grafik sifati, lekin har xil hisob -kitoblarni bajaradi. Ha
qanday ishlab chiqarish kerak! GPU yordamida ko'p tarmoqli hisoblash texnologiyasi haqida va muhokama qilinadi.

Nima uchun GPU?

Qizig'i shundaki, ular nima uchun barcha hisoblash quvvatini grafikaga o'tkazishga qaror qilishdi
adapter? Ko'rib turganingizdek, protsessorlar hali ham modada va ular iliqlikdan voz kechishlari dargumon
joy. Ammo GPU -da joker va yenglari bilan bir qatorda yengida bir nechta kozok bor.
yetarli. Maksimal darajaga erishish uchun zamonaviy markaziy protsessor keskinlashtirilgan
butun ma'lumotlar va suzuvchi ma'lumotlarni qayta ishlashda ishlash
vergul, ma'lumotni parallel qayta ishlashdan xavotir olmang. Shu bilan birga
Vaqt, video kartaning arxitekturasi sizga tez va oson "parallelizatsiya" qilish imkonini beradi.
ma'lumotlarni qayta ishlash. Bir tomondan, ko'pburchaklar hisoblanmoqda (3D konveyer tufayli),
Boshqa tomondan, piksel to'qimasini qayta ishlash. Ko'rinib turibdiki, "yaxshi muvofiqlashtirilgan
buzilish "karta yadrosidagi yuk. Bundan tashqari, xotira va video protsessor ishlaydi
"RAM-kesh-protsessor" kombinatsiyasidan ko'ra yaxshiroq. Ma'lumot birligining momenti
video kartada bitta GPU oqim protsessori, boshqasi qayta ishlana boshlaydi
bir birlik boshqasiga parallel ravishda yuklanadi va bunga erishish oson
GPU yuki avtobus o'tkazuvchanligi bilan taqqoslanadi,
ammo buning uchun konveyerlarni yuklash bir xilda, usiz bajarilishi kerak
har qanday shartli dallanma va tarmoqlanish. Markaziy protsessor, tufayli
universallik to'liq keshni talab qiladi
ma `lumot.

Mutaxassislar parallel hisoblashda GPUlarning ishi haqida o'ylashgan
matematika va ko'plab ilmiy hisob -kitoblar ko'p jihatdan o'xshash bo'lgan nazariyani chiqarib tashladi
3D grafikani qayta ishlash. Ko'pgina mutaxassislarning fikricha, asosiy omil
rivojlanish GPGPU (GPU -da umumiy maqsadli hisoblash - universal
video karta yordamida hisoblash
) 2003 yilda Bruk GPU loyihasining paydo bo'lishi edi.

Loyihani Stenford universitetining ijodkorlari qiyin vazifani hal qilishlari kerak edi
muammo: apparat va dasturiy ta'minot grafik adapterni ishlab chiqarishga majbur qiladi
ko'p tomonlama hisob -kitoblar. Va ular buni qildilar. Umumiy C tilidan foydalanib,
Amerikalik olimlar GPUni moslashtirilgan protsessor kabi ishlashga majbur qilishdi
parallel ishlov berish. Brukdan keyin bir qator VGA loyihalari paydo bo'ldi.
Accelerator kutubxonasi, Brahma kutubxonasi, tizim kabi
GPU ++ metaprogramlash va boshqalar.

CUDA!

Rivojlanish istiqbollari taqdimoti AMD va NVIDIA
pitbull kabi Bruk GPU -ga yopishib oling. Agar biz marketing siyosatidan voz kechsak,
Agar siz hamma narsani to'g'ri bajargan bo'lsangiz, siz nafaqat grafik sohasida, balki o'z o'rnini egallashingiz mumkin
bozor, balki hisoblashda ham (maxsus hisoblash kartalariga qarang va
serverlar Tesla yuzlab ko'p protsessorli), odatdagi protsessorlarni almashtiradi.

Tabiiyki, "FPS ustalari" qoqinish joyida har biri o'ziga xos tarzda tarqalishdi.
yo'l, lekin asosiy tamoyil o'zgarishsiz qoldi - hisob -kitob qilish
GPU vositalari. Va endi biz "yashil" texnologiyasini batafsil ko'rib chiqamiz - CUDA
(Yagona qurilma arxitekturasini hisoblash).

Bizning "qahramonimiz" ning vazifasi API va birdaniga ikkitasini taqdim etishdir.
Birinchisi, yuqori darajadagi CUDA Runtime, bu vazifalarni bajaradi
Ular oddiy darajalarga bo'linadi va past API - CUDA Driver -ga o'tkaziladi. Shunday qilib
"yuqori darajali" iborasi cho'zish jarayoniga tegishli. Hamma tuz
u haydovchida va kutubxonalar tomonidan yaratilgan
ishlab chiquvchilar NVIDIA: CUBLAS (matematik hisoblar uchun asboblar) va
FFT (Fourier algoritmi yordamida hisoblash). Xo'sh, keling, amaliy mashg'ulotlarga o'taylik
materialning qismlari.

CUDA terminologiyasi

NVIDIA CUDA API uchun juda o'ziga xos ta'riflar bilan ishlaydi. Ular
markaziy protsessor bilan ishlashda ishlatiladigan ta'riflardan farq qiladi.

Ip- ishlov beriladigan ma'lumotlar to'plami (yo'q
ko'p ishlov berish resurslarini talab qiladi).

Warp- 32 oqimdan iborat guruh. Ma'lumotlar faqat qayta ishlanadi
burmalar, shuning uchun burilish - bu ma'lumotlarning minimal miqdori.

Bloklash- oqimlar to'plami (64 dan 512 gacha) yoki to'plam
burmalar (2 dan 16 gacha).

Tarmoq Bu bloklar to'plami. Bu ma'lumotlarni ajratish
faqat ish faoliyatini yaxshilash uchun ishlatiladi. Shunday qilib, agar raqam
ko'p protsessorlar katta, keyin bloklar parallel ravishda bajariladi. Agar bo'lsa
karta omadsiz edi (ishlab chiquvchilar foydalanishni tavsiya qiladi
adapter GeForce 8800 GTS 320 MB darajasidan past emas), keyin ma'lumotlar bloklari qayta ishlanadi
izchil.

Shuningdek, NVIDIA kabi tushunchalarni taqdim etadi yadro, mezbon
va qurilma.

Biz ishlayapmiz!

CUDA bilan to'liq ishlash uchun sizga kerak:

1. GPU shader yadrolarining tuzilishini bilish, dasturlashning mohiyati sifatida
ular orasidagi yukni teng taqsimlashdir.
2. Ba'zi jihatlarni hisobga olgan holda C muhitida dasturlash imkoniyatiga ega bo'lish.

Ishlab chiquvchilar NVIDIA bir nechta video kartaning "ichki" tomonlarini ochib berdi
biz ko'rganga qaraganda boshqacha. Shunday qilib, xohlaganingizcha, siz hamma narsani o'rganishingiz kerak
arxitekturaning nozik jihatlari. Keling, afsonaviy G80 "tosh" ning tuzilishini tahlil qilaylik GeForce 8800
GTX
.

Shader yadrosi sakkizta TPC (tekstura protsessorlari klasteri) - klasterlardan iborat
tekstura protsessorlari (masalan, GeForce GTX 280- 15 yadro, 8800 GTS
ulardan oltitasi bor, 8600 - to'rt va boshqalar). Bular, o'z navbatida, ikkitadan iborat
oqimli ko'p protsessorlar (bundan keyin SM). SM (bor
16) oldingi uchidan iborat (ko'rsatmalarni o'qish va dekodlash masalasini hal qiladi) va
orqa (ko'rsatmalarning yakuniy chiqishi) quvurlari, shuningdek sakkiz skalyar SP (shader
protsessor) va ikkita SFU (super funktsional birliklar). Har bir o'lchov uchun (bittasi
vaqt) old tomondan burilishni tanlaydi va uni qayta ishlaydi. Urushning barcha oqimlariga
(esda tuting, ularning 32 tasi bor) qayta ishlangan, quvur oxirida 32/8 = 4 tsikl kerak.

Har bir ko'p protsessor umumiy xotira deb ataladi.
Uning hajmi 16 kilobayt bo'lib, dasturchiga to'liq erkinlik beradi.
harakat Istaganingizcha tarqating :). Umumiy xotira tarmoqli aloqasini ta'minlaydi
bitta blok va pikselli shaderlar bilan ishlash uchun mo'ljallanmagan.

Shuningdek, SM -lar GDDR -ga kirishlari mumkin. Buning uchun ular 8 kilobaytga "tikilgan"
kesh xotirasi, ish uchun eng muhim narsalarni saqlaydi (masalan, hisoblash
doimiylar).

Ko'p protsessor 8192 ta registrga ega. Faol bloklar soni bo'lishi mumkin emas
sakkizdan ortiq va burmalar soni 768/32 = 24 dan oshmaydi. Bundan G80 ko'rinib turibdiki
vaqt birligiga maksimal 32 * 16 * 24 = 12288 ta ipni qayta ishlashi mumkin. Bo'lishi mumkin emas
kelajakda dasturni optimallashtirishda bu raqamlarni hisobga oling (bitta panada
- blok o'lchami, boshqa tomondan - iplar soni). Parametrlar balansi o'ynashi mumkin
shuning uchun kelajakda muhim rol o'ynaydi NVIDIA bloklardan foydalanishni tavsiya qiladi
128 yoki 256 ta ip bilan. 512 ta ipdan iborat blok samarasiz, chunki u bor
kechikishlarning ko'payishi. GPU video karta tuzilishining barcha nozikliklarini hisobga olgan holda
yaxshi dasturlash qobiliyatlari, siz juda samarali yaratishingiz mumkin
parallel hisoblash vositasi. Dasturlash haqida gapirganda ...

Dasturlash

"Ijodkorlik" uchun CUDA bilan birgalikda talab qilinadi GeForce video kartasi past emas
sakkizinchi seriya
... BILAN

rasmiy sayt, siz uchta dasturiy ta'minot paketini yuklab olishingiz kerak: bilan haydovchi
CUDA -ni qo'llab -quvvatlash (har bir OS uchun - o'z), to'g'ridan -to'g'ri CUDA SDK to'plami (ikkinchisi
beta) va qo'shimcha kutubxonalar (CUDA asboblar to'plami). Texnologiya qo'llab -quvvatlaydi
operatsion tizimlar Windows (XP va Vista), Linux va Mac OS X. o'rganish uchun
Vista Ultimate Edition x64 ni tanladi (oldinga qarab, aytamanki, tizim o'zini tutdi
Faqat mukammal). Yozish paytida quyidagilar ish uchun dolzarb edi
ForceWare haydovchi 177.35. Ishlatilgan asboblar qutisi shunday edi
Borland C ++ 6 Builder dasturiy to'plami (garchi u bilan ishlaydigan har qanday muhit
til C).

Tilni bilgan odamning yangi muhitga ko'nikishi oson bo'ladi. Faqat oladi
Asosiy parametrlarni eslang. _Global_ kalit so'zi (funktsiyadan oldin joylashtirilgan)
funktsiya yadroga tegishli ekanligini ko'rsatadi. U markaz tomonidan chaqiriladi
protsessor va barcha ishlar GPUda bo'ladi. _Global_ ga qo'ng'iroq ko'proq narsani talab qiladi
aniq tafsilotlar, ya'ni to'r o'lchami, blok o'lchami va qaysi yadro bo'ladi
qo'llanilgan. Masalan, _global_ void saxpy_parallel qatori<<>>, bu erda X -
panjara kattaligi va Y - blok o'lchami, bu parametrlarni o'rnatadi.

_Device_ belgisi funktsiya grafik yadro tomonidan chaqirilishini bildiradi
barcha ko'rsatmalarga amal qiladi. Bu funksiya ko'p protsessor xotirasida joylashgan.
shuning uchun uning manzilini olishning iloji yo'q. _Host_ prefiksi qo'ng'iroqni bildiradi
va ishlov berish faqat CPU ishtirokida amalga oshiriladi. Shuni yodda tutish kerakki, _global_ va
_device_ bir -biriga qo'ng'iroq qila olmaydi va o'zlarini chaqira olmaydi.

Shuningdek, CUDA tilida video xotira bilan ishlash uchun bir qancha funktsiyalar mavjud: cudafree
(GDDR va RAM o'rtasida xotirani bo'shatish), cudamemcpy va cudamemcpy2D (nusxa ko'chirish)
GDDR va RAM o'rtasidagi xotira) va cudamalloc (xotira ajratish).

Barcha dastur kodlari CUDA API tomonidan tuzilgan. Birinchisi olinadi
faqat CPU uchun mo'ljallangan va ta'sir qiladigan kod
standart kompilyatsiya va grafik adapter uchun boshqa kod,
uchun PTX (assemblerga juda o'xshash) oraliq tiliga qayta yoziladi
mumkin bo'lgan xatolarni aniqlash. Bu "raqslar" dan keyin final
buyruqlarni GPU / CPU uchun tushunarli tilga tarjima qilish (tarjima qilish).

O'quv to'plami

Dasturlashning deyarli barcha jihatlari hujjatlarda tasvirlangan
haydovchi va ikkita dastur bilan birga, shuningdek ishlab chiquvchi saytida. Hajmi
ularni tasvirlash uchun maqola etarli emas (qiziqqan o'quvchi ilova qilishi kerak
ozgina harakat va materialni mustaqil o'rganing).

CUDA SDK brauzeri yangi boshlanuvchilar uchun maxsus mo'ljallangan. Har kim qila oladi
O'zingizning teringizga parallel hisoblash kuchini his eting (eng yaxshi test
barqarorlik - artefaktlar va avariyalarsiz misollar ishi). Ilovada bor
katta miqdordagi ko'rsatuvli mini-dasturlar (61 "test"). Har bir tajriba bor
batafsil PDF hujjatlari. Odamlar ekanligi darhol aniq bo'ladi
brauzerda o'z ijodlari bilan hozir bo'lganlar jiddiy ish qilmoqdalar.
Bundan tashqari, ishlov berish paytida protsessor va video kartaning tezligini solishtirish mumkin
ma'lumotlar. Masalan, video karta yordamida ko'p o'lchovli massivlarni skanerlash GeForce 8800
GT
256 ta ipdan iborat blokli 512 MB 0,17109 millisekundda ishlab chiqaradi.
Texnologiya SLI tandemlarini tan olmaydi, shuning uchun agar sizda duet yoki trio bo'lsa,
Ishdan oldin "ulanish" funktsiyasini o'chiring, aks holda CUDA faqat bittasini ko'radi
qurilma. Ikki yadroli AMD Athlon 64 X2(yadro chastotasi 3000 MGts) bir xil tajriba
2,761528 millisekundda o'tadi. Ma'lum bo'lishicha, G92 16 martadan ko'proq
"tosh" dan tezroq AMD! Ko'rib turganingizdek, bu ekstremal tizimdan uzoq
ko'pchilik yoqtirmaydigan operatsion tizim bilan tandem yaxshi
natijalar.

Brauzerdan tashqari, jamiyat uchun foydali bo'lgan bir qancha dasturlar mavjud. Adobe
mahsulotlarini yangi texnologiyalarga moslashtirdi. Photoshop CS4 endi tugadi
hech bo'lmaganda grafik adapterlarning resurslaridan foydalanadi (siz maxsus yuklab olishingiz kerak
plagin). Badaboom media konverteri va RapiHD kabi dasturlar
videoni MPEG-2 formatida dekodlash. Ovozni qayta ishlash yomon emas
bepul yordamchi Accelero qiladi. CUDA API uchun moslashtirilgan dasturlar soni,
o'sishi shubhasiz.

Va bu vaqtda ...

Ayni paytda, siz ushbu materialni o'qiyapsiz, protsessor tashvishidan qattiq ishlayotganlar
GPUlarni protsessorlarga birlashtirish uchun o'z texnologiyasini ishlab chiqmoqdalar. Tomonidan AMD hamma
tushunarli: ular bilan katta tajribaga ega ATI.

"Mikro -ishlab chiquvchilar" ning yaratilishi, Fusion, ostidagi bir nechta yadrolardan iborat bo'ladi
kodli buldozer va video chip RV710 (Kong). Ularning munosabatlari shunday bo'ladi
takomillashtirilgan HyperTransport avtobusi tufayli amalga oshirildi. Ga bog'liq
yadrolar soni va ularning chastotali xususiyatlari AMD butun narxni yaratishni rejalashtirmoqda
"toshlar" ierarxiyasi. Shuningdek, noutbuklar uchun protsessorlar ishlab chiqarish rejalashtirilgan (Falcon),
va multimediya gadjetlari uchun (Bobcat). Bundan tashqari, bu texnologiyadan foydalanish
portativ qurilmalarda kanadaliklar uchun birinchi qiyinchilik bo'ladi. Rivojlanish bilan
parallel hisoblash, bunday "toshlar" dan foydalanish juda mashhur bo'lishi kerak.

Intel vaqtidan biroz orqada, Larrabee bilan. Mahsulotlar AMD,
agar hech narsa bo'lmasa, do'kon javonlarida 2009 yil oxirida - erta paydo bo'ladi
2010 yil. Va dushman qarori deyarli ikkitadan keyin oshkor bo'ladi
yilning.

Larrabee ko'p sonli (yuzlab o'qish) yadrolarga ega bo'ladi. Boshida
8 - 64 yadro uchun mo'ljallangan mahsulotlar bo'ladi. Ular Pentiumga juda o'xshash, lekin
deyarli qayta ishlangan. Har bir yadroda 256 kilobayt L2 kesh mavjud
(vaqt o'tishi bilan u kattalashib boradi). Aloqalar orqali amalga oshiriladi
1024-bitli ikki tomonlama halqali avtobus. Intel ularning "bolasi" xohlashini aytadi
DirectX va Open GL API bilan yaxshi ishlaydi (Yabloko uchun), shuning uchun yo'q
hech qanday dasturiy aralashuv talab qilinmaydi.

Nega bularning hammasini sizga aytdim? Shubhasiz, Larrabee va Fusion o'rnini bosmaydi
Oddiy, statsionar protsessorlar bozordan chiqarilmaydi, xuddi bozordan
video kartalar. O'yinchilar va o'ta sevuvchilar uchun asosiy orzu qoladi
ko'p yadroli protsessor va bir nechta yuqori darajali VGA tandemi. Lekin nima bo'lsa ham
protsessor kompaniyalari printsiplarga asoslangan parallel hisob -kitoblarga o'tmoqdalar
GPGPU -ga o'xshash, ko'p narsani aytadi. Xususan, bunday
CUDA kabi texnologiya mavjud bo'lish huquqiga ega va bo'lishi mumkin
juda mashhur.

Kichik xulosa

Video karta bilan parallel hisoblash - bu yaxshi vosita
mehnatkash dasturchi qo'lida. Mur qonuni boshchiligidagi protsessorlar
oxiri keladi. Kompaniyalar NVIDIA hali uzoq yo'l bor
uning API -ni ommaga targ'ib qilish (buni aqlli bola haqida ham aytish mumkin ATI / AMD).
Bu nima bo'lishini kelajak ko'rsatadi. Shunday qilib, CUDA qaytadi :).

P.S. Men boshlang'ich dasturchilar va qiziquvchilarga tashrif buyurishni tavsiya qilaman
Quyidagi "virtual muassasalar":

NVIDIA rasmiy veb -sayti va veb -sayti
GPGPU.com. Hammasi
taqdim etilgan ma'lumotlar ingliz tilida, lekin hech bo'lmaganda sizga yoqilmaganligingiz uchun rahmat
Xitoy. Shunday qilib, boring! Umid qilamanki, muallif sizga ozgina yordam berdi
CUDAni o'rganishning ajoyib urinishlari!