Ray Tracing op GPU en CPU - EDM - UHasselt
Ray Tracing op GPU en CPU - EDM - UHasselt
Ray Tracing op GPU en CPU - EDM - UHasselt
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Hoofdstuk 4<br />
<strong>GPU</strong> programmer<strong>en</strong><br />
Dit hoofdstuk handelt over hoe de <strong>GPU</strong> geprogrammeerd kan word<strong>en</strong>. Vooraleer<br />
we daar toe kom<strong>en</strong>, zull<strong>en</strong> we de <strong>GPU</strong> abstraher<strong>en</strong> tot het stream programming<br />
model. Vervolg<strong>en</strong>s zull<strong>en</strong> we dit mapp<strong>en</strong> <strong>op</strong> e<strong>en</strong> concrete taal, namelijk Cg 1 .<br />
Er zal aangehaald word<strong>en</strong> hoe typische shaders, alsook g<strong>en</strong>eral purpose shaders,<br />
eruitzi<strong>en</strong> in Cg. Uiteindelijk word<strong>en</strong> de moeilijkhed<strong>en</strong> van het huidige <strong>GPU</strong><br />
programmer<strong>en</strong> in kaart gebracht.<br />
4.1 Stream programming model<br />
Het stream programming model is e<strong>en</strong> model dat programma’s <strong>op</strong>legt <strong>op</strong> e<strong>en</strong><br />
bepaalde manier geschrev<strong>en</strong> te zijn. Localiteit in de inputdata <strong>en</strong> parallellisme<br />
di<strong>en</strong><strong>en</strong> hiervoor expliciet aangegev<strong>en</strong> te zijn in het programma. Dit maakt dat<br />
het gecompileerd <strong>en</strong> ge<strong>op</strong>timaliseerd kan word<strong>en</strong> voor stream processor<strong>en</strong>.<br />
Het stream programming model bestaat <strong>en</strong>kel uit streams, kernels <strong>en</strong> e<strong>en</strong><br />
read-only geheug<strong>en</strong>. E<strong>en</strong> stream is e<strong>en</strong> verzameling van records, waar<strong>op</strong> e<strong>en</strong><br />
kernel <strong>op</strong>eraties kan uitvoer<strong>en</strong>. E<strong>en</strong> kernel is e<strong>en</strong> proces dat gegev<strong>en</strong> e<strong>en</strong> record<br />
van de input stream, e<strong>en</strong> output stream record g<strong>en</strong>ereert. Meerdere output<br />
streams zijn ev<strong>en</strong>tueel mogelijk (bv. handig voor het sorter<strong>en</strong> van data). Zie<br />
figuur 4.1 voor e<strong>en</strong> schematische voorstelling.<br />
De <strong>GPU</strong> kunn<strong>en</strong> we beschouw<strong>en</strong> als e<strong>en</strong> stream processor, wat natuurlijk de<br />
red<strong>en</strong> is waarom we dit model besprek<strong>en</strong>. E<strong>en</strong> vertex shader krijgt als input<br />
stream e<strong>en</strong> verzameling vertices (met normal<strong>en</strong>, kleur<strong>en</strong>, . . . ). De shader zelf<br />
is dus de voorg<strong>en</strong>oemde kernel. De output stream bevat <strong>op</strong>nieuw vertices (<strong>en</strong><br />
dergelijke), die dan <strong>op</strong>gebouwd zijn <strong>op</strong> basis van e<strong>en</strong> input record, <strong>en</strong> het readonly<br />
geheug<strong>en</strong>. Het read-only geheug<strong>en</strong> kan bijvoorbeeld bestaan uit 3D vector<strong>en</strong>,<br />
e<strong>en</strong> array van floats, . . . . Dit geheug<strong>en</strong> is dus constant voor alle records.<br />
Daarom dat er ook wel gesprok<strong>en</strong> wordt van globaal read-only geheug<strong>en</strong>. E<strong>en</strong><br />
concrete <strong>GPU</strong> versie van figuur 4.1 wordt gegev<strong>en</strong> in figuur 4.2.<br />
1 C for graphics<br />
20