CUDA

**CUDA** is 'n platform vir parallelle verwerking en 'n programmeeerkoppelvlak (API) wat deur Nvidia geskep is. Dit stel 'n programmeerder in staat om 'n grafikaverwerker (ook GPU vir *Graphics Processing Unit*) te gebruik vir algemene verwerking – 'n benadering bekend as GPGPU (*General Purpose Graphics Processing Unit*). Die CUDA-platform is sagteware wat direkte toegang gee tot die grafikaverwerker se virtuele instruksiestel en vermoëns vir parallele verwerking.

Die CUDA-platform word ontwerp om te werk met programmeertale soos C, C++ en Fortran. Dit maak dit makliker om die vermoëns van die grafikaverwerker te gebruik vergeleke met vorige benaderings soos Direct3D en OpenGL wat vaardighede in grafikaprogrammering vereis. Die CUDA SDK en drywers is op 15 Februarie 2008 vrygestel. Die naam CUDA was aanvanklik 'n afkorting in Engels vir: "Compute Unified Device Architecture"), maar NVIDIA het sedertdien die gebruik van die akroniem laat vaar.

## Voordele 
* 'n Programmeertaal wat baie dieselfde is as ANSI C, met 'n paar nuwe funksies om spesifieke take op die grafikaverwerker te verrig
* Vinnige gedeelde geheue
* Volledige steun vir heelgetalbewerkings, insluitend bisgewyse bewerkings

## Beperkings 
* CUDA ondersteun nie die volle C- of C++-standaarde nie
* C++ se Run-Time Type Information (RTTI) word nie ondersteun in CUDA-modus nie
* Die hantering van uitsonderings (*exceptions*) is nie moontlik nie
* Versoenbaarheid met grafikatale soos OpenGL is beperk
* Die kopiëring van geheue tussen die gasheerrekenaar en die toestel se geheue kan werkverrigting vertraag
* Anders as met OpenCL is grafikaverewerkers met CUDA-steun slegs van Nvidia beskikaar
* Geen emulator of terugvalfunksionalilteit is beskikbaar vir moderne weergawes nie

## Hardeware benodig 
CUDA kan slegs loop op sekere grafikaverwerkers wat CUDA steuun. Sedert CUDA bekendgestel is, het nuwe grafikaverwerkers wat Nvidia maak steun vir CUDA. Daar is verskillende vlakke van CUDA-steun, met nuwer verwerkers wat nuwer weergawes van die CUDA-funksionaliteit ondersteun. Dié tabel kan moontlik verouderd wees. Sien gerus ook Nvidia se dokumentasie.

'*' - Slegs "OEM"-produkte

## Physx 
Nvidia het vir Ageia vroeg in 2008 oorgekoop om hul Physx-enjin oor te skryf om met CUDA op die grafikaverwerker te loop. Dit beteken dat alle rekenaarspeletjies wat die Physx-aandrywer bevat, dan deur die grafikaverwerker versnel sal word sonder enige verandering aan die speletjie se kode.
Volgens Nvidia is die proses om die Physx-enjin oor te skryf, byna klaar. Die spoed waarteen die projek voltooi gaan word, is 'n aanduiding van hoe maklik dit is om met CUDA te programmeer. Nvidia het 'n demonstrasie gehou met die Physx-enjin wat 60&nbsp;000 partikels simuleer.

## Spoedvoordeel bo SVE's 
Daar is geen spoedvoordeel of -nadeel van CUDA en ander GPGPU-tegnologie nie, maar wanneer mens dit vergelyk met die spoed van die SVE is die CUDA-implementering 15 tot 20 keer die spoed van 'n gedemonstreerde Intel Nehalem SVE wat teen 3,2 GHZ loop met 4 kerns. Die Intel-demonstrasie het gewys hoe hy 50&nbsp;000 tot 60&nbsp;000 partikels simuleer teen 15-20 RPS (rame per sekonde), by 'n latere demonstrasie deur Nvidia het hulle 'n soortgelyke partikelsimulasie met dieselde getal partikels vertoon wat teen 300&nbsp;RPS loop. Die spoedvoordeel is weens die aanwending van 'n groot aantal stroomverwerkers en baie drade (*threads*) om in parallel die simulasieberekeninge te doen. 'n SVE is geoptimaliseer om so min as moontlik vertraging met geheueskrywings en -lesings te hê, om so vinnig as moontlik 'n enkele draad te voltooi, waar 'n BVE geoptimaliseer is om 'n groot aantal ander drade te voltooi terwyl hy wag vir sy stadiger geheue om te skryf of te lees.

## Verwysings