01.08.2013 Views

Ray Tracing op GPU en CPU - EDM - UHasselt

Ray Tracing op GPU en CPU - EDM - UHasselt

Ray Tracing op GPU en CPU - EDM - UHasselt

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!