CUDA (Compute Unified Device Architecture) este o arhitectură software și hardware pentru calculul paralel al datelor dezvoltată de către compania americană NVIDIA. CUDA este utilizată atât în seriile de procesoare grafice destinate utilizatorilor obișnuiți cât și în cele profesionale. O serie de interfețe de calcul din arhitectura CUDA sunt similare cu cele ale principalilor competitori: OpenCL[2] de la Khronos Group și DirectCompute[3] de la Microsoft.
Dezvoltatorii pot accesa prin intermediul CUDA setul de instrucțiuni și memoria elementelor de calcul paralel din procesoarele grafice. Utilizând CUDA, cele mai recente procesoare grafice NVIDIA pot realiza calcule specifice microprocesoarelor. Totuși, spre deosebire de acestea, arhitectura procesoarelor video este concepută pentru execuția simultană a numeroase fire, cu o viteză scăzută și nu a unui singur fir dar foarte rapid. Această tehnică de rezolvare a problemelor de uz general cu ajutorul procesoarelor video este cunoscută ca GPGPU.
În industria jocurilor pe calculator, pe lângă generarea graficii, procesoarele video mai realizează și calculele pentru interacțiunea fizică dintre obiecte (fum, foc, fluide). Un exemplu în acest sens este tehnologia PhysX. CUDA mai este utilizată și în domeniile bioinformaticii, criptografiei precum și în alte arii ale științei și tehnologiei.
CUDA pune la dispoziție atât un API de nivel jos cât și unul de nivel înalt. Primul SDK CUDA a fost făcut public în data de 15 februarie 2007, având versiuni pentru Microsoft Windows și Linux. Versiunea 2.0 oferea suport și pentru Mac OS X[4]. Toate seriile de procesoare NVIDIA (GeForce, Quadro și Tesla) începând cu G8X sunt compatibile CUDA.
Avantaje
CUDA oferă o serie de avantaje față de API-urile tradiționale de prelucrare a datelor cu ajutorul procesoarelor video.
Citiri nesecvențiale – se pot face citiri din locații de memorie arbitrare.
Memorie partajată – CUDA pune la dispoziție o regiune cu memorie partajată de mare viteză (până la 48KB per Multi-Procesor) care poate fi împărțită între firele de execuție. Această regiune poate fi utilizată ca și cache gestionat de utilizator.[5]
Descărcări rapide și recitiri spre și disnpre procesorul video
Suport complet pentru operațiile cu întregi și pe bit.
Limitări
CUDA (având capacitatea de calcul 1.x) suportă un subset al limbajului de programare C și o serie de extensii simple. Lipsesc pointerii la funcții și recursivitatea. Un process ce rulează va utiliza mai multe spații de memorie disjuncte. Arhitectura NVIDIA Fermi oferă suport aproape complet pentru C++.
În cazul dispozitivelor dezvoltate pe arhitectura Fermi (capacitatea de calcul 2.x), în codul compilat pot fi folosite clase C++ atâta timp cât nicio funcție membră a clasei nu este virtuală.[6]
Randarea texturilor nu este suportată.
Pentru formatul în virgulă mobilă cu dublă precizie (pentru procesoare cu capacitatea de calcul 1.3 sau mai mult[7]) există niște abateri de la standardul IEEE 754: rotunjirea la cel mai apropiat număr par este singurul mod de rotunjire suportat pentru inversul, împărțirea și radicalul unui număr.
Lățimea de bandă a magistralei și latența dintre microprocesor și procesorul grafic pot reprezenta o gâturie în cazul anumitor dispozitive.
Pentru a se obține cea mai bună performanță, thread-urile ar trebui să ruleze cel puțin în grupuri de câte 32, atunci când numărul total de thread-uri este de ordinul miilor. Ramificarea execuției codului programului nu afectează semnificativ performanța dacă fiecare din cele 32 de thread-uri urmează aceeași cale de execuție.
Spre deosebire de OpenCL, procesoarele compatibile CUDA sunt fabricate doar de NVIDIA (începând cu seria GeForce 8, Quadro și Tesla).[8]
Uneori codul valid C/C++ poate împiedica procesul de compilare datorită tehnicilor de optimizare pe care compilatorul le aplică dacă este obligat să utilizeze resurse limitate.
Procesoare video compatibile
Capacitatea de calcul (Compute capability) reflectă funcționalitățile suportate de dispozitivele[9] CUDA. Partea întreagă a numărului versiunii indică echipamentele ce au aceeași arhitectură de bază. Modificările minore aduse arhitecturii se deosebesc între ele prin partea zecimală. Cunoașterea acestui număr este utilă în cazul în care se dorește rularea unor aplicații pentru CUDA.
GeForce GTX 280, GeForce GTX 275, GeForce GTX 260, Quadro FX 5800, Quadro FX 4800, Quadro FX 4800 for Mac, Quadro FX 3800, Quadro CX, Quadro Plex 2200 D2, Tesla C1060, Tesla S1070, Tesla M1060
Arhitectura CUDA constă în următoarele componente de bază[11]:
Motoarele de procesare paralelă din interiorul procesoarelor grafice NVIDIA.
Suport pentru inițializare, configurare, la nivelul nucleului sistemului de operare.
Driver video la nivel de utilizator, care furnizează API-ul pentru dezvoltatori.
Set de funcții și instrucțiuni în limbajul de asamblarePTX pentru nucleele de prelucrare paralelă.
Un program scris pentru CUDA apelează o serie de nuclee paralele. Un nucleu se execută în paralel pe un set de thread-uri. Gruparea thread-urilor în blocuri rămâne la latitudinea compilatorului sau a programatorului. Procesorul grafic instanțiază un program nucleu (kernel program în engleză) într-o grilă de blocuri de thread-uri. Fiecare thread din interiorul unui bloc execută o instanță a nucleului și este identificat prin contorul program, regiștri, memorie/thread, parametri de intrare și rezultate (ieșiri). Într-o grilă se execută același nucleu, se citesc intrările din memoria globală, se scriu rezultatele în memoria globala și se sincronizează apelurile de nuclee. În modelul CUDA, fiecărui thread îi este asociat un spațiu de memorie privat, utilizat pentru regiștri, apeluri de funcții și variabile C. Fiecare bloc de thread-uri deține un spațiu de memorie rezervat comunicării între thread-uri, schimb de date și rezultate. Grilele de blocuri de thread-uri pun rezultatele în memoria globală după ce s-a realizat în prealabil o sincronizare de-a lungul nucleelor[12].
Un procesor video execută una sau mai multe grile de nuclee. Un multiprocesor pentru procesarea fluxurilor de date (streaming multiprocessor) execută unul sau mai multe blocuri de thread-uri. Nucleele CUDA și celelalte unități de execuție din cadrul unui SM execută thread-uri. Un SM execută un grup de 32 de thread-uri, numit și warp[13].
G80
În noiembrie 2006 NVIDIA a lansat prima placă video cu nucleul G80, GeForce 8800[14]. În iunie 2008, arhitectura G80 a fost îmbunătățită seminficativ și redenumită GT200. Aceasta îngloba 240 de nuclee CUDA față de cele 128 în cazul G80.
G80 a fost primul procesor video compatibil cu limbajul de programare C, permițând dezvoltatorilor să utilizele resursele video disponibile fără a fi nevoiți să învețe un nou limbaj.
G80 a înlocuit pipeline-urile pentru vertecși și pixeli cu un procesor care să le înglobeze și să execute calcule legate de geometrie, pixeli, vertecși și alte programe.
G80 a utilizat un procesor de thread-uri scalar, eliminând necesitatea ca programatorii să organizeze manual regiștrii pentru vectori.
G80 a introdus modelul de execuție SIMT (single-instruction multiple-thread în engleză) în care o singură instrucțiune se execută concurent pe mai multe thread-uri.
G80 a introdus memoria partajată și sincronizarea cu barieră pentru comunicațiile între thread-uri.
Fermi
Primul procesor grafic proiectat pe arhitectura Fermi conține 3 miliarde de tranzistoare. Dispune de 512 nuclee CUDA care sunt grupate în 16 SM (streaming multiprocessors)[15]. Principalele modificări aduse arhitecturii existente vizează:
Imbunătățirea performanței în cazul operațiilor în virgulă mobilă cu dublă precizie.
Suportul pentru memorii ECC le permite integratorilor de sisteme să utilizeze cu încredere procesoarele video în centrele de date. Aplicațiile de genul celor financiare sau de Imagistică medicală sunt protejate împotriva anumitor erori de memorie.
Introducerea memoriei Cache ierarhice deoarece anumiți algoritmi pentru procesare paralelă nu puteau utiliza memoria partajată a procesorului video. Cantitatea de memorie partajată a fost și ea mărită.
Comutarea mai rapidă a contextelor.
Creșterea vitezei de execuție a operațiilor atomice read-modify-write.
Procesor video
G80
GT200
Fermi
Număr tranzistoare
681 milioane
1,4 miliarde
3 miliarde
Număr nuclee CUDA
128
240
512
Calcul în dublă precizie (virgulă mobilă)
NA
30 operații FMA / ceas
256 operații FMA / ceas
Calcul în simplă precizie (virgulă mobilă)
128 operații MAD / ceas
240 operații MAD / ceas
512 operații MAD / ceas
Unități de planificare Warp / SM
1
1
2
Special Function Units / SM
2
2
4
Memorie partajată / SM
16 KB
16 KB
Configurabil: 48 KB sau 16 KB
L1 Cache / SM
NA
NA
Configurabil: 16 KB sau 48 KB
L2 Cache / SM
NA
NA
768 KB
Compatibilitate Memorie ECC
NU
NU
DA
Nuclee concurente
NU
NU
până la 16
Adresare pentru Load/Store
32-bit
32-bit
64-bit
Exemple
Exemplu de cod C++ care încarcă o textură într-o matrice din procesorul grafic:
voidfoo(){cudaArray*cu_array;texture<float,2,cudaReadModeElementType>tex;// Alocare memorie pentru matricecudaChannelFormatDescdescription=cudaCreateChannelDesc<float>();cudaMallocArray(&cu_array,&description,width,height);// Copiere imagine în matricecudaMemcpyToArray(cu_array,image,width*height*sizeof(float),cudaMemcpyHostToDevice);// Setare parametri pentru textură (implicit)tex.addressMode[0]=cudaAddressModeClamp;tex.addressMode[1]=cudaAddressModeClamp;tex.filterMode=cudaFilterModePoint;tex.normalized=false;// nu normalizează coordonatele// Leagă matricea de texturăcudaBindTextureToArray(tex,cu_array);// Pornește Kerneldim3blockDim(16,16,1);dim3gridDim((width+blockDim.x-1)/blockDim.x,(height+blockDim.y-1)/blockDim.y,1);kernel<<<gridDim,blockDim,0>>>(d_data,height,width);// Desface legătura dintre matrice și texturăcudaUnbindTexture(tex);}__global__voidkernel(float*odata,intheight,intwidth){unsignedintx=blockIdx.x*blockDim.x+threadIdx.x;unsignedinty=blockIdx.y*blockDim.y+threadIdx.y;if(x<width&&y<height){floatc=tex2D(tex,x,y);odata[y*width+x]=c;}}
Mai jos este un exemplu scris în Python[16] care calculează în procesorul grafic produsul a două matrice:
importpycuda.compilerascompimportpycuda.driverasdrvimportnumpyimportpycuda.autoinitmod=comp.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.randn(400).astype(numpy.float32)dest=numpy.zeros_like(a)multiply_them(drv.Out(dest),drv.In(a),drv.In(b),block=(400,1,1))printdest-a*b
Cod Python care simplifică operațiile de înmulțire a matricilor poate fi găsit în programul pycublas[17].
American actress (1899–1991) Aline MacMahonMacMahon in the 1940sBornAline Laveen MacMahon(1899-05-03)May 3, 1899McKeesport, Pennsylvania, U.S.DiedOctober 12, 1991(1991-10-12) (aged 92)New York City, U.S.Alma materBarnard CollegeOccupationActressYears active1920–1975Spouse Clarence Stein (m. 1928; died 1975) Aline Laveen MacMahon[1] (May 3, 1899 – October 12, 1991)[2] was an American actress. Her Broadway ...
جامعة نيفادا، لاس فيغاس معلومات التأسيس 1957 الموقع الجغرافي إحداثيات 36°06′28″N 115°08′38″W / 36.10779°N 115.14376°W / 36.10779; -115.14376 المدينة بارادايس الرمز البريدي 89154[1] البلد الولايات المتحدة إحصاءات عدد الطلاب 28600 (2015)22032 (1 سبتمبر 2021)[2] عدد الموظف
Schüppach mit Phiole (1753) Michael Schüppach (getauft am 26. Juni 1707 in Biglen; † 2. März 1781 in Langnau im Emmental), genannt Michel oder Micheli Schüppach und auch „Schärer Micheli“, war ein über die Landesgrenzen hinaus als „Wunderdoktor“ bekannter Schweizer Chirurg, Mediziner, Apotheker und Kurarzt. Seine Tätigkeit stand in der Tradition der „Bader“ oder „Schärer“ genannten Wundärzte, deren Heilkunst im Rahmen einer handwerklichen Lehre weitervermittelt wurd...
Ferrocarril Sonora Baja California Máquina 2301 en la estación de Benjamín Hill, en 1975.LugarUbicación MéxicoÁrea abastecida Sonora y Baja California.DescripciónTipo FerrocarrilInauguración 16 de diciembre de 1947Clausura 18 de febrero de 1998Estaciones principales Benjamín Hill, SonoraMexicali, Baja CaliforniaCaracterísticas técnicasAncho de vía 1435 mm (4' 81/2) (ancho estándar)Velocidad máxima 90 km/hPropietario Ferrocarriles Nacionales de MéxicoExplotaciónEstado...
Artikel ini membutuhkan rujukan tambahan agar kualitasnya dapat dipastikan. Mohon bantu kami mengembangkan artikel ini dengan cara menambahkan rujukan ke sumber tepercaya. Pernyataan tak bersumber bisa saja dipertentangkan dan dihapus.Cari sumber: Pesawat siluman – berita · surat kabar · buku · cendekiawan · JSTOR (Maret 2019) B-2 Spirit Pesawat siluman (bahasa Inggris: stealth aircraft) atau disebut pesawat amat senyap[1] adalah pesawat yang d...
Януш Моргенштерн Народився 16 листопада 1922(1922-11-16)[1][2][…]Микулинці, Теребовлянський район, Тернопільська область, СРСРПомер 6 вересня 2011(2011-09-06)[4][1][…] (88 років)Варшава, Республіка Польща[1]·хворобаПоховання Військові Повонзки : Країна Республі...
Dzjava / DzauДзауы районჯავის მუნიციპალიტეტი Gemeente in de jure Georgië Rajon in de facto Zuid-Ossetië Dzjava volgens Georgië Situering De jure Regio Sjida Kartli De facto Republiek Zuid-Ossetië Coördinaten 42°23'25,4NB, 43°55'20,3OL Algemeen Oppervlakte 1.500 km²[1]1.144 [3] km² Inwoners 6.939 [4] (4,6 inw./km²) Hoofdplaats Dzjava / Dzau Detailkaart De facto Zuid-Osseets Dzau.Gearceerd de de jure Georgische in...
École nationale de l'aviation civile, salah satu grande école di Toulouse. Grands établissements adalah lembaga publik Prancis di bawah piagam menteri di bawah kategori administratif yang disebut sebagai Établissement public à caractère scientifique, culturel et professionnel (EPCSP).[1] Beberapa grandes écoles seperti Grands établissements, misalnya École nationale de l'aviation civile, Institut Ilmu Politik Paris, CentraleSupélec. Catatan kaki ^ Qu'est-ce qu'un Grand Etabl...
2018 AFL Women's Grand FinalIkon Park, venue for the 2018 AFL Women's Grand Final, as seen during an AFLW match in 2017. Western Bulldogs Brisbane 4.3 (27) 3.3 (21) 1 2 3 4 WB 0.1 (1) 0.1 (1) 3.2 (20) 4.3 (27) BL 1.1 (7) 1.1 (7) 1.1 (7) 3.3 (21) Date24 March 2018StadiumIkon ParkAttendance7,083Broadcast in AustraliaNetworkSeven Network ← 2017 2019 → The 2018 AFL Women's Grand Final was an Australian rules football match held on 24 March 2018 to determine the premiers of t...
First edition; H. R. Millar illustration of Kenneth and the Carp, 1909[1] The Magic World is a collection of twelve short stories by E. Nesbit. It was first published in book form in 1912 by Macmillan and Co. Ltd., with illustrations by H. R. Millar and Gerald Spencer Pryse. The stories, previously printed in magazines such as Blackie's Children's Annual, are typical of Nesbit's arch, ironic, clever fantasies for children. The twelve stories: The Cat-hood of Maurice — a boy abu...
This article is about the former territorial authority district. For the Manukau Central suburb, see Manukau. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Manukau City – news · newspapers · books · scholar · JSTOR (June 2008) (Learn how and when to remove this template message) Territorial authority of Ne...
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This biography of a living person needs additional citations for verification. Please help by adding reliable sources. Contentious material about living persons that is unsourced or poorly sourced must be removed immediately from the article and its talk page, especially if potentially libelous.Find sources: Mark Cresse – ne...
The topic of this article may not meet Wikipedia's notability guideline for sports and athletics. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be merged, redirected, or deleted.Find sources: Stroitel Baku – news · newspapers · books · scholar · JSTO...
Indian politician Dr.Paramasivan SubbarayanSubbarayan on a 1989 stamp of IndiaGovernor of MaharashtraIn office17 April 1962 – 6 October 1962Prime MinisterJawaharlal NehruPreceded bySri PrakasaSucceeded byVijayalakshmi PanditUnion Minister for Transport and CommunicationIn office1959–1962PresidentRajendra PrasadPrime MinisterJawaharlal NehruMember of Parliament (Lok Sabha) for TiruchengodeIn office1957–1962PresidentRajendra PrasadPrime MinisterJawaharlal NehruPreceded byS. Kanda...
В этой статье может быть слишком много ссылок на другие статьи, и, возможно, их количество нужно сократить. Пожалуйста, оформите её согласно правилам расстановки и оформления внутренних ссылок и удалите повторяющиеся ссылки и все ссылки, не относящиеся к контексту. (26 окт...
Localización de Nanyue Nanyue (203 a. C.) Nanyue (en chino tradicional, 南越; pinyin, Nányuè; en cantonés: Nām4yūd6) fue un antiguo reino que abarcaba partes de las modernas provincias chinas de Guangdong, Guangxi y Yunnan y la mayor parte del norte del actual Vietnam. El reino fue establecido por el general han Zhao Tuo de la dinastía Qin, quien asimiló las costumbres del pueblo Yue y de China central en su territorio. Su capital se llamaba Panyu, lo que hoy en día e...
В Википедии есть статьи о других людях с фамилией Ламберт. Альберт Ламберт Дата рождения 6 декабря 1875(1875-12-06)[1] Место рождения Сент-Луис, Миссури, США Дата смерти 12 ноября 1946(1946-11-12)[1] (70 лет) Место смерти Сент-Луис, Миссури, США Страна США Род деятельности и...