Thesis Title
Total Page:16
File Type:pdf, Size:1020Kb
PANEPISTHMIO PATRWN TMHMA HLEKTROLOGWN MHQANIKWN KAI TEQNOLOGIAS UPOLOGISTWN Διπλωματική ErgasÐa tou foiτητή tou Τμήματoc Hlektroλόgwn Mhqanik¸n kai TeqnologÐac Upologist¸n thc Poλυτεχνικής Sqoλής tou PanepisthmÐou Patr¸n AsterÐou KwnstantÐnou tou Nikoλάου Ariθμός Mhtr¸ou: 228281 Jèma Ανάπτυξη kai beltistopoÐhsh tou OpenCL driver gia tic NEMA GPUs Implementation and Optimization of the OpenCL driver for the NEMA GPUs Epiblèpwn EpÐkouroc Καθηγητής MpÐrmpac Miχάλης, Panepiστήμιo Patr¸n Ariθμόc Diplwματικής ErgasÐac: 228281/2019 Πάτρα, 12/2019 PISTOPOIHSH PistopoieÐtai όti h Διπλωματική ErgasÐa me jèma Ανάπτυξη kai beltistopoÐhsh tou OpenCL driver gia tic NEMA GPUs Topic: Implementation and Optimization of the OpenCL driver for the NEMA GPUs Tou foiτητή tou Τμήματoc Hlektroλόgwn Mhqanik¸n kai TeqnologÐac Upologist¸n AsterÐou KwnstantÐnou tou Nikoλάου Ariθμός Mhtr¸ou: 228281 Παρουσιάστηκε δημόσια kai exetάστηκε sto Τμήμα Hlektroλόgwn Mhqanik¸n kai TeqnologÐac Upologist¸n stic / /2019 O epiblèpwn O διευθυντής Tomèa MpÐrmpac Miχάλης Paliουράς BasÐleioc EpÐkouroc Καθηγητής Καθηγητής Ariθμόc Διπλωματικής ErgasÐac: 228281/2019 Jèma: Ανάπτυξη kai beltistopoÐhsh tou OpenCL driver gia tic NEMA GPUs Topic: Implementation and Optimization of the OpenCL driver for the NEMA GPUs Foiτητής Epiblèpwn AsterÐou KwnstantÐnoc MpÐrmpac Miχάλης PerÐlhyh I) EISAGWGH Sto παρελθόn όla ta proγράμματa logiσμικού ήτan grammèna gia σειριακή epexergasÐa. Gia na lujeÐ èna πρόβλημα, katασκευάζοntan ènac αλγόριj- moc o opoÐoc ulopoiούντan wc mia σειριακή akoloujÐa entol¸n. H ektèlesh aut¸n twn entol¸n sunèbaine se ènan upologisτή me ènan μόno epexerga- sτή. Μόno mia entoλή εκτελούντan th forά kai αφού teleÐwne h ektèlesh thc miac entoλής, h επόμενη εκτελούntan en suneqeÐa. O χρόnoc ektèleshc opoiουδήποte proγράμματoc ήτan ανάλοgoc tou ariθμού twn entol¸n, thc περιόδου tou rologiού tou upologisτή kai twn kukl¸n pou apaitoύντan gia thn κάθε entoλή. Oi upologistèc me to pèrasma twn et¸n ginόntou- san pio apodotikoÐ όσοn αφορά to χρόno ektèleshc proγραμμάτwn kaj¸c oi mhqanikoÐ katάφερναν na belti¸soun δύο παράγοntec. Katά pr¸ton h συχνόthta tou rologioύ twn upologist¸n aυξήθηκε σημαντικά kai katά δεύτεροn me βάση to nόmo tou Moore o ariθμός twn tranzÐstor se mia epi- φάνεια puritÐou ja διπλασιάζοntan κάθε 1.5 χρόno perÐpou. Qarakthrisτικά anafèroume pwc o perÐfhmoc epexergasτής 8086 eÐqe 29.000 tranzÐstor kai συχνόthta rologiού 5MHz en¸ o σύγχροnoc Intel Core i7 diajètei πάνω από 1 disekatομμύριo tranzÐstor kai συχνόthta rologiού 4GHz. Autèc oi beltistοποιήseic όμως eÐqan wc sunèpeia na auxhjeÐ draματικά h ενεργειακή katανάλωση twn epexergast¸n, h opoÐa dÐnetai από ton τύπο P=CxV2xF, όπου C eÐnai to σύνοlo twn qwrhtikoτήτwn twn opoÐwn h eÐsodoc αλλάζει ανά κύκλo rologiού, V eÐnai h tάση kai F h συχνόthta rologiού. H a- πάντηση twn mhqanik¸n sthn suneq¸c αυξανόμενη ενεργειακή katανάλωση ήτan na dhmiουργούν poλυπύρηνους epexergastèc me ενεργειακά apodoti- κούς πυρήνες. O πυρήνας eÐnai h moνάδα epexergasÐac tou epexergasτή kai όloi oi πυρήνες mporoύν na èqoun πρόσβαση sthn Ðdia jèsh μνήμης tautόqrona. Gia na ekmetalleutούμε touc poλλαπλούς πυρήνες tou epexer- gasτή dhmiουργήσαμε kai proγράμματa pou εκτελούντai παράλληλα. Sta παράλληλα proγράμματa qrhsimopoiούντai pollaplèc moνάδες epexergasÐac tautόqrona gia na λύsoun to πρόβλημα. Autό epiτυγχάνετai ¨σπάζοntας’ to πρόβλημα se μικρόtera kομμάτια, όπου h ektèlesh κάθε ενός mpore- Ð na pragmatopoihjeÐ ανεξάρτητa. Oi moνάδες epexergasÐac pou μπορούν na qrhsimopoiηθούν poikÐloun, kai mporeÐ na eÐnai από ènan upologisτή me poλλαπλούς purήnec, poλλούς diasundedemènouc upologistèc mèqri kai exideikeumèno υλικό (’hardware"). Gia na axiopoihjeÐ sto mègisto thn u- πάρχουσα parallhlÐa tou υλικού kai na elaqistοποιήsoume όσο autό eÐnai dunatό ton χρόno ektèleshc twn proγραμμάτwn, o programmatisτής prèpei na αναδομήσει kai na parallhlÐsei katάλlhla ton k¸dika tou. II) OpenCL - POCL H OpenCL eÐnai èna anoiqtό stάντar gia ton hlwn proγραμμάτwn pou peri- λαμβάνει "gl¸ssa", ARI, bibliοθήκες kai runtime kai dÐnei ètsi th dunatόth- ta συγγραφής forht¸n αλλά apodotik¸n proγραμμάτwn. Qrhsimopoi¸ntac thn OpenCL o programmatisτής mporeÐ na γράψει proγράμματa γενικής χρήσης ta opoÐa εκτελούντai se όlec tic sumbatèc me αυτήν suskeuèc qwrÐc na χρειάzetai na αλλάξει oτιδήποte ston k¸dika tou όtan αλλάζει suskeu- ή. H forhtόthta twn proγραμμάτwn thc OpenCL ανάμεσα se èna μεγάλο εύρος diaforetik¸n ετερόgenwn πλατφόρμων epitυγχάνετai periγράφοntac twn k¸dika thc (kernel) wc strings pou qtÐzontai en suneqeÐa aπό to run- time API gia thn epilegmènh συσκευή πάνω sthn opoÐa jèloume na trèxei. En¸ to plaÐsio CUDA uposthrÐzetai μόno από tic κάρτες grafik¸n thc NVIDIA, efarmogèc thc OpenCL μπορούν na trèxoun se mia σειρά diafo- retik¸n suskeu¸n από διαφορετικούς παρόqouc. Sumbatèc υλοποιήσειc me thn OpenCL eÐnai diajèsimec από etairÐec όπως h Altera, AMD, Xilinx, ARM, Intel kai άλλες. Gia na periγράψουμε tic basikèc idèec pÐsw από thn OpenCL ja χρησιμοποιήσουμε thn ακόloujh ierarqÐa montèlwn : • Montèlo Πλατφόρμας : To montèlo πλατφόρμας thc OpenCL apotele- Ðtai από mia συσκευή ¨οικοδεσπότη’ (host) πάνω sthn opoÐa eÐnai sunde- demènec mÐa ή periσσόterec OpenCL suskeuèc. Oi OpenCL suskeuèc διαιρούντai se mÐa ή periσσόterec upologistikèc moνάδες (Compute Units) oi opoÐec διαιρούντai peraitèrw se èna ή periσσόtera stoiqeÐa epexergasÐac (Processing Elements). 'Ola ta stoiqeÐa epexergasÐac εκτελούν k¸dika OpenCL δηλαδή όloi oi upologismoÐ pou periγράφο- ntai ston k¸dika thc OpenCL sumbaÐnoun ekeÐ. Katά thn ektèlesh ενός OpenCL progrάμμαtoc h συσκευή ¨οικοδεσπότης’ υποβάλλει e- ntolèc gia na enorqhstr¸sei thn ektèlesh tou k¸dika thc OpenCL sta stoiqeÐa epexergasÐac thc epilegmènhc συσκευήc. Ta stoiqeÐa e- pexergasÐac μπορούν na ektelèsoun mÐa ροή entol¸n wc SIMD ή wc SPMD moνάδες. H SIMD moνάδα orÐzetai wc mia κλάση παράλληλων upologist¸n όπου ta stoiqeÐa epexergasÐac tou εκτελούν όla ton Ðdio k¸dika, sthn perÐptwsh mac OpenCL k¸dika, to kajèna me ta δικά tou dedomèna kai koiνό program counter. Από thn άλλη orÐzoume wc SPMD moνάδα to programmatisτικό montèlo όπου poλλαπλά stoiqeÐa epexergasÐac εκτελούν ton Ðdio k¸dika to kajèna me δικά tou dedomèna kai δικό tou program counter. Σχήμα 1: Montèlo Πλατφόρμας • Montèlo Ektèleshc : H ektèlesh ενός OpenCL progrάmmatoc qw- rÐzetai se δύο mèrh : to èna mèroc ekteleÐtai ston όικοδεσπόth' (host) kai to άλλο, o k¸dikac OpenCL δηλαδή, ekteleÐtai se mÐa ή periσσόte- rec epilegmènec suskeuèc pou eÐnai sundedemènec me ton ¨οικοδεσπόth". O ¨οικοδεσπότης’ orÐzei èna plaÐsio (context) gia thn ektèlesh tou OpenCL k¸dika. To plaÐsio autό perièqei touc ακόloujoc πόρους : tic suskeuèc pou μπορούν na qrhsimopoiηθούν aπό ton όικodesπόth', ton kernel δηλαδή ton OpenCL k¸dikac pou ja trèxei se mÐa από tic proanaferjeÐsec suskeuèc, to Program Object δηλαδή to ektelèsi- mo pou kratάei thn αναπαράσtash tou OpenCL k¸dika kai tèloc ta antikeÐmena μνήμης "Memory Objects" δηλαδή mia sulloγή από anti- keÐmena ta opoÐa eÐnai oratά από ton όικοδεσπόth' kai kratούν timèc pou ja qrhsimopoiηθούν από ton OpenCL k¸dika. To πλάιsio (context) orÐzetai από ton όικοδεσπόth' kai qeiragwgeÐtai από autόn qrhsimo- poi¸ntac συναρτήσειc tou OpenCL API. O όικοδεσπόthc' orÐzei mia δομή dedomènwn pou oνομάζετai (command queue) gia na suntonÐsei thn ektèlesh tou OpenCL k¸dika, dhmiourg¸ntac kai topojet¸ntac entolèc πάνω se αυτή thn δομή oi opoÐec ja ektelestούν sthn su- σκευή sthn opoÐa dhmiourγήjhke prohgoumènwc to plaÐsio (context). Autèc oi entolèc mporeÐ na eÐnai entolèc ektèleshc OpenCL k¸dika, entolèc αναφορικά me ta antikeÐmena μνήμης ή entolèc sugqronismo- ύ. 'Otan ènac kernel katatÐjetai gia ektèlesh από ton ¨οικοδεσπόth", ènac "q¸roc perieqomènων’ (index space) orÐzetai. O "q¸roc perieqo- μένων’ pou orÐzetai sthn OpenCL eÐnai ènac N-diastάσεων όπου to N mporeÐ na eÐnai 1,2 ή 3 kai apokaleÐtai NDRange. 'Enac NDRange o- rÐzetai wc ènac pÐnakac akeraÐwn megèjouc N, kai prosdiorÐzei to εύρος tou "q¸rou περιεχομένων’ se κάθε διάσtash na arqÐzei από èna offset F. 'Ena stiγμιόtupo tou kernel ekteleÐtai gia κάje shmeÐo ston "q¸ro Σχήμα 2: Montèlo Ektèleshc perieqomènwn". To κάθε stiγμιόtupo tou kernel oνομάζετai work- item kai tautopoieÐtai από thn jèsh tou ston "q¸ro perieqomènwn", pou tou parèqei mia moναδική global ID ("kajoλική tautόthta"). 'Ola work-item diajètoun ton Ðdio k¸dika allά oi entolèc pou ja ekte- lèsei to κάθε èna από autά kai ta dedomèna pou ja χρησιμοποιήσει diafèroun mporeÐ na diafèroun ανά work-item. Ta work-items or- gan¸nontai se work-groups. Sta work-groups anatÐjetai mia mo- ναδική tautόthta (work-group ID) me diastάσειc Ðdiec me autèc tou "q¸rou perieqomènwn". Sta work-items entόc twn work-groups ana- tÐjetai mia moναδική "toπική tautόthtα’ (local-ID) ètsi ¸ste to κάθε work-item na mporeÐ na anagnwristeÐ eÐte mèsw tou global-ID eÐte mèsw tou sundiασμού tou work-group ID kai tou local-ID. • Montèlo Μνήμης : H OpenCL orÐzei èna Montèlo Μνήμης katά to opoÐo ta work items pou εκτελούν ènan kernel èqoun πρόσβαση se 4 diaforetikèc perioqèc μνήμης. Αρχικά upάrqei h Global Memory ("kajoλική μνήμη¨) sthn opoÐa èqoun prόsbash gia ανάγνωση kai eg- γραφή όla ta work-items από όla ta work-groups. Ta work-items μπορούν na diaβάσουν kai na γράψοun κάθε stoiqeÐo ενός Memory Object. En suneqeÐa υπάρχει h Constant Memory ("stαθερή μνήμη¨) h opoÐa paramènei analloÐwth katά thn ektèlesh tou OpenCL k¸dika kai mporeÐ na grafteÐ μόno prin thn ektèlesh tou. Υπάρχει h Local Memory (¨Τοπική Μνήμη¨) thn opoÐa μοιράζοntai όla ta work-items entόc ενός work-group.