13 juni 2011

Aangezien mijn vorige post al een stukje van deze week heeft meegenomen is er dus nu iets minder te vertellen.

Maar niet getreurd het was namelijk een interessante week. Voor wat mijn stage betreft het gaat uitstekend met het coderen naar CUDA.
Data word nu verwerkt en dan begint nu het cluster gedeelte. Wat voorheen dus erg traag was moet zo heel snel gaan aangezien de duizenden vergelijking tegelijk zullen gaan.
Maar tot het punt dat het gaat gebeuren moet er nog wat met de data gedaan worden want blijkbaar is het nu te groot om in 1x te verwerken dus ben weer aan het spitten hoe dat opgelost werd in de oude code 😛
Het opsplitsen is niet zo moeilijk de structuur die het huishoud wel. Vandaar.

(meer…)

8 juni 2011

De voortgang van mijn stage is in 1 zin te vermelden ik heb lopen documenteren. Waarna aan het einde van de week te horen krijg dat mijn inlever datum op een geheel andere dag licht. Wel relax natuurlijk meer tijd voor het document en meer tijd voor het project zelf ook.

Een week werken aan een document is best wel saai en hoe vaak ik wel niet vast kom te zitten om de simpelste dingen. Het huis is nog nooit zo schoon geweest aangezien ik schoonmaken blijkbaar leuker vind dan het document :P.

Maar goed een groot hoeveelheid is nu gedocumenteerd en voor mijn gevoel zit het moeilijkste gedeelte van het document erop alleen de voortgang erin proppen.

Meer ruimte voor mijn verhaal klik more…

(meer…)

23 mei 2011

Welkom lezer.

Week 14 van mijn stage was een hele goede week. In ieder geval voor het project. Na flink veel gepuzzeld te hebben met het CUDA Grid, block en thread systeem en ik me een klein beetje verkeken had op de derde dimensie die in het systeem zat kwam er dan op vrijdag ochtend een einde aan het hele hoe krijg ik DeSTIN in CUDA zodat de GPU ook daadwerkelijk wat te doen heeft.

Eerst een kleine uitleg waarop ik mij verkeek DeSTIN bestaat uit lagen nu zijn deze niet zo denderend groot in de huidige form waardoor deze gemakkelijk in één block van CUDA past en hierop ging ik de mist in. Aangezien binnen een node wat dan een hele thread zou worden nog een laag zat en de informatie die ik krijg over CUDA meld dat je de thread klein moet houden.

Wat er gebeurde was dat ik even naar iets anders was gaan kijken DeSTIN maakt nu gebruik van 4 lagen omdat het dan naar een plaatje van 32 bij 32 pixels kan kijken. Omdat we foto’s en eigenlijk live beelden aan DeSTIN willen voeren was ik even gaan kijken naar hoeveel lagen zou ik nodig hebben voor ik een 640 bij 320 pixel plaatje kan bekijken zonder teveel de structuur aan te hoeven passen. Nu kijkt de laagste laag met een 4 bij 4 pixel per node naar het plaatje en als de laagste laag uit 8 bij 8 nodes bestaat kan je een plaatje van 32 bij 32 voeren.

Om een berg berekeningen te besparen kom je op een 9 lagen uit. Dit voornamelijk om de laagste laag het 4 bij 4 pixel gedeelte niet te overschrijden maar wel kleine. Bij negende lagen bestaat de laagste laag uit 256 bij 256 nodes dit past niet meer in één block en dien je meerdere blocks te gaan gebruiken. Een ander gedeelte was het gebruik van geheugen. Het plaatje zit in langzaam geheugen en iedere node kijkt maar naar een klein stukje waarna deze vele malen geraadpleegd word. Je dient dan het kleine stukje te verhuizen naar snel geheugen. (Shared memory voor de gene die weten waar ik het over heb)

Laag ontwerp

Aangezien het snelle geheugen erg klein is kwam dan eindelijk op vrijdag morgen het eureka momentje. Inplaats van de laag in een block te proppen dien ik de laag in de grid te proppen. met een limitering van 65535 blocks in drie richtingen op mijn eigen videokaart en in twee richtingen op de super computer waarbij als ik het goed gelezen heb ik dus daadwerkelijk 65535×65535 mag doen zie ik geen probleem

en in de toekomst wanneer het aantal lagen verhoogt zou moeten worden naar 10 voor HD input. Het resultaat één block word één node binnen de node kan ik super goed gebruik maken van het shared memory aangezien die data zo goed als gelijk blijft binnen de gehele node.

Zoals je hier aan de linkerkant kan zien met mijn prachtige teken kunsten komt het model er dan ongeveer zo eruit te zien. Nu kwam er een vraag terug van mijn opdracht gever of het aantal threads nu niet de limitering word van het netwerk kan ik dit niet met zekerheid zeggen maar met de lage hoeveelheid centroids dat word gebruikt in layer 4 en ik per block max 1024 op eigen of 512 op super machine aan threads kan gebruiken weet ik nog niet of dit echt de limitering is.

Daarbij als ze upgraden naar de zelfde typen videokaart als die ik heb is deze limitering ook verdwenen aangezien de derde dimensie dan gebruikt kan worden van het grid. Hiermee kan je dus ook 65535 blocks omhoog.

Met deze analyse en ontwerp wacht me alleen nog het realiseren, implementeren en documenteren af.

(meer…)

17 mei 2011

Daar gaan we weer. Week 13 nog 4 weken voor ik mijn stageverslag moet inleveren. Of in ieder geval zoals de handleiding het meld dat ik die moet inleveren.
Mijn stagebegeleider had gemeld dat er waarschijnlijk uitstel van inleveren is omdat ik in China zit en de vraag of ik hem dan ook digitaal mag inleveren.
Het enige wat ik hoef te doen is een mailtje naar school te sturen. Dit gesprek was 3 weken terug in week 10. Het mailtje is die zelfde week ook verstuurt echter we zijn weer terug bij af met reageren van school.
Ze reageren namelijk niet. Nu is het niet zo’n probleem dit keer ik kan me ook aan de handleiding houden en het is even wat gehannes om dan een papieren versie op mijn school te krijgen maar heb genoeg familieleden en kennissen die dit ook voor mij kunnen.
Een ander gedeelte is dat de inlever datum bekend zou worden gemaakt op blackboard van onze school. Nu heeft mijn internet hier de laatste tijd wat problemen met adressen buiten China. Maar blijkbaar werkt vandaag meer dan zins afgelopen donderdag tot gisteren. En blackboard meld nog steeds alleen de oude groep mensen.

Maar goed terug naar mijn stage zelf. Het omzetten van de DeSTIN naar een DeSTIN op CUDA versie is op vollen gang. De gewone versie heeft allemaal trucjes die ervoor zorgen dat er slim met data wordt omgegaan. Echter met CUDA is het zo dat het de data graag in één block wilt hebben zodat je vervolgens het weer in kleine stukje op de videokaart kan verdelen. Dus het verdeel trucje word dan nog wel steeds toegepast maar in plaats voor ieder klein stukje het achter elkaar te doen doe je het verdelen van de data in één keer. Waarna je het ook in één keer van verwerken en het resultaat weer opslaan op de videokaart.

Met deze stap ben ik dus bezig en wanneer de eerste laag klaar is dan is de data ook klaar voor de 2de laag en als die klaar is voor weer de volgende. In de tussentijd dat de data omhoog gaat door de lagen hoeft de data niet terug naar de host pas als het de hoogste laag bereikt heeft willen we alle lagen in één keer terug dit zal aardig wat data zijn en hoop dan ook dat ik niet tegen de bottleneck van de overdracht aanloop. Een andere manier is alleen de belangrijkste informatie terug door te geven maar dat zal wat lastiger met het samenvoegen worden. Aangezien de indexen verandert zijn op dat moment maar tot dat punt ben ik nu nog niet.

Oke wanneer de lagen dus van data voorzien zijn zou het clusteren mogelijk moeten zijn. In dit geval is het een versimpelde versie van K-means clusteren (voor die geïnteresseerd even op Wiki zoeken) waarbij het updaten van de centroids iets anders gebeurt. In plaats van alle centroids te updaten word alleen de dichtstbijzijnde geüpdate. Dit word eigenlijk ook wel online clusteren genoemd maar daar is weinig informatie over te vinden alleen wat papers en een YouTube filmpje.

Tot zover mijn vooruitgang van mijn stage: Mijn laptop klaag nog niet blijkbaar is het nog niet te warm of doet de GPU nog te weinig.

(meer…)

3 mei 2011

Daar zijn we weer met een blog/verhaal. Om van mijn vorige tijd gebrek te leren zal ik niet 2 weken wachten met het posten van de volgende blog.

Het project zoals gebruikelijk geef ik een korte inlichting wat er gaande is met mijn stage hier in Xiamen University. Omdat ik aan een onderzoek en ontwikkeling project werk zit ik meer te lezen en uit te dokteren dan dat ik werkelijk aan het schrijven ben. Wat in HBO termen juist heel goed is aangezien je eerst moet denken voor je iets gaat doen.

Een kleine onderschatting daar gelaten maar wat ik op school wel geleerd heb dat het zo lang kan duren is dat ik nu al op de helft zit en ik in week 12 pas echt begin met ontwikkelen. Wat heb ik ondertussen geleerd van het programma DeSTIN:

Om hierin heel simpel te zijn onderzoekers besteden meer tijd aan het bedenken dan aan het ontwikkelen maar dat dit ten goede komt van je code niet echt. Nu is het misschien wel eens handig als onderzoekers in Xiamen ook leren wat source control is. Dit vrij simpele techniek wat je bij het software ontwikkelen ondersteunt als in de form van back-up en deel mogelijkheid.

Kleine uitleg wat source control is. Als je in je eentje of meer werkt is het handig om een kopie van je werk bij te houden. Nu kan je dit doen door je map telkens te kopiëren of om regels uitgecommentarieerd. Ook is er de mogelijkheid om source control aan te zetten dit meestal op een server of tegenwoordig ook een website (is ook een server) beschikbaar is. Gratis!
Wanneer je dan wijzigingen in je programmatuur maakt of een ander dan kan je zien op welk moment wie welke wijziging heeft gemaakt. In je eentje zou je niet een server nodig hebben je kan het dan lokaal bijhouden let dan wel op dat je 2 verschillende locatie gebruikt natuurlijk dat wanneer locatie 1 stuk gaat je de ander nog hebt.

Maar goed terug naar DeSTIN deze heeft de versie van source control dat code is uitgecommentarieerd met als vleugje beslissing structuren om code zodat die ooit nog terug kan switchen. Ondertussen is het andere deel van de code al zoveel beter dat die niet meer terug kan maar goed.

Wat nog meer ow ja een hele grote functie of even in andere taal een hele grote opdrachten die er uit ziet als spaghetti. Dus ben de afgelopen paar weken bezig met het destilleren van DeSTIN en tot nu toe levert dat een snelheidswinst alleen al omdat er stukken code niet meer op gecheckt hoeft te worden en de andere bijkomstigheid is hele stukken code heb ik nu gedocumenteerd omdat ik er maar heb neergezet wat het doet op die plek.

Mijn opdrachtgever vind dat ik niet zoveel hoef te schrijven over het project mijn school echter vind dat ik een product verslag van 30 a 50 pagina’s moet maken voor mijn opdrachtgever. Ow wat zal die blij zijn. Daarnaast moet er ook nog een stageverslag van ongeveer 50 pagina mogen er ook meer zijn. Welke wel speciaal voor school is. Wat mijn opdrachtgever eigenlijk duidelijk maakt is dat er dus +/- 100 pagina’s over dit project geschreven moet worden niet voor hem maar voor school. Maar goed het moet en blijkbaar zullen de andere studenten in Xiamen daar ook profijt van kunnen maken. In plaats van 6 pagina tellende papers de telkens naar elkaar door verwijzen.

(meer…)

25 april 2011

Woops een weekje geen blog neer gezet wat inhoud dat ik er nu 2 in 1 ga stoppen. De afgelopen 2 weken zijn best druk geweest in veel vergaderingen overleg en adviezen over hoe en wat.

Twee weken geleden is mijn stage begeleider Ben Goertzel in Xiamen aangekomen waarmee er direct een berg in gang werd gezet. Na wat wiskundige formule uitleg gehad te hebben en deze te herkennen in de code kwamen we tot de mooie ontdekking dat een groot deel van de formules beschreven in de papers (handleidingen) van DeSTIN er niet of half in zaten. Omdat de formules redelijk complex kunnen worden heeft de maker ze vervangen voor een versimpelde versie. Waarbij en vooral gewerkt word met constante waardes.

Dit is natuurlijk goed te doen wanneer je voorbeelden niet zo groot zijn maar als we het programma met een camera gaan gebruiken dan wordt het probleem een stuk complexer en wordt het toch wel handig om deze formules in het origineel te hebben in plaats van een versimpelde versie. Maar waar beginnen we. Er zit redelijk wat troep in de code of om het zachtjes uit te drukken. Om de werkelijke functie te vinden kan je beter de rest weg gooien :P.

Dat is dus waar we nu mee bezig zijn en zoals wij het mooi omschreven hebben zijn we de code aan het destilleren :P. Dit doen we door een versimpelde versie te maken en tegelijkertijd de originele code te strippen van all troep. De versimpelde versie heeft alleen de formules waarmee dus de hiërarchie  verdwijnt. Deze is wel van belang voor de werking van DeSTIN voor de mensen die het bij houden het lagen model is in de versimpelde versie niet volledig werkend meer. Maar die kan met weinig moeite weer hersteld worden.

Tot zover het stukje over de voortgang van DeSTIN.

(meer…)

Een week en een dag verder ja gisteren had ik het even iets te druk maar vandaag gaat die er dan toch komen.

Zoals gebruikelijk begin ik even met een kleine update wat ik met mijn stage heb gedaan. En zoals sommige niet zou verbazen ben ik bezig met het begrijpen van DeSTIN. Nu snap ik ondertussen wel wat het doet maar hoe dit in de code tot stand komt is toch even iets lastiger dan ik in eerste instantie had bedacht. Daartegen valt het leren van CUDA weer reuze mee das dat compenseert elkaar redelijk.

Oke wat ben ik nu precies aan het bestuderen dan. DeSTIN werk met lagen en op iedere laag zit een raster waarbij ieder vakje gevuld word door een node. De werking van een van die nodes ben ik aan het uitpluizen aangezien er heel veel gebeurt daarbinnen.

Zo dat was het al weer voor mijn stage deze week mede omdat er wat dagen niet gevuld zijn met het werken aan DeSTIN lees hieronder verder.

Want Xiamen University is negentig jaar geworden en dat word groots gevierd zoals jullie in mijn vorige post konden zien werd er een kleine hoeveelheid stoelen uitgezet voor een podium hier ben ik natuurlijk naar toe geweest samen met Meifang. Wat nog redelijk wat geregel was aangezien die kaarten alleen voor studenten zijn en Meifang geen student van Xiamen is en ik wel. Maar e ik ben dan ook weer de enige buitenlander in het lab dus een beetje profiteren daarvan kan geen kwaad. En zodoende twee kaartjes voor de grote show.

(meer…)

3 april 2011

Een week verder. Wat inhoud er komt weer een verhaal aan.

Ook deze week heb ik aan mijn stage opdracht lopen werken hoewel het nog steeds erg veel lezen is en daarnaast veel opschrijven komt het einde nu wel langzaam in zicht zodat ik ook daadwerkelijk aan de verbeteringen kan gaan beginnen. Aan het einde van de week tijdens mijn wekelijkse meeting met mijn opdrachtgever was er zelf een hoofd ontwikkelaar aanwezig die ervaring had heeft met het soort programma waarmee ik werk en heeft me alvast wat hints en tips gegeven wat wel te doen en wat niet.

DeSTIN bestaat uit nodes waarbinnen een cluster ontstaat. de nodes produceren een signaal door het midden te nemen van het cluster wat ook wel een centroid genoemd word. Over de centroid is veel onduidelijkheid en het word er maar niet duidelijker op dus houd het even bij deze waarneming. Dit alles gebeurt in een layer ook wel laag vertaald in het Nederlands. Iedere laag doet precies het zelfde alleen de hoogste laag heeft heel weinig nodes en de laagste heel veel. iedere node leest of een laag lager uit of zelf een plaatje of later video streams.

Omdat iedere node het zelfde doet zou dit uitstekend geschrikt zijn voor parallellisme wat inhoud dat je een zelfde taak in plaats van in serie uitvoert het tegelijk uitvoert. Om een kleine rekensom te illustreren een plaatje van 800 x 600 =  480000 pixels groot. De laagste laag kijkt per node met een diameter van 4×4 = 16. 480000/16 = 30000 nodes één laag hoger kijk vervolgens met een weergaven van 2×2 per node naar de laag lager. 30000/4 = 7500. Één laag hoger weer 7500/4 = 1875 enz enz. Totdat je nog maar een paar nodes overhoud of zoals wij nu met een plaatje van 32×32 doen eindigend met 1.

30000+7500+1875+… +/- = 40000 nodes die allemaal het zelfde doen. Hier komt CUDA om de hoek kijken 40000 x het zelfde doen kan ik ook op de CPU doen alleen heeft die met de aller nieuwste chips maar 8 cores terwijl de GPU vrolijk een paar honderd ter beschikking heeft. En CUDA wordt erg gelukkig als het iets kan uitvoeren dat het liefst per 1000de word opgestart. Misschien ben ik al wat lezer kwijt maar de nummer zijn wat vreemd. waarom zou iets met 1000de opgestart worden als je maar 100 cores ter beschikking hebt. Een programma draait meestal op één of meer threads. 1 core can meerdere threads runnen. In het geval van CUDA kunnen er blokjes met 64,128 of 256 threads opgestart worden en +/- 65000 bloks per kaart gelanceerd worden ook wel grid genoemd.

Of in andere woorden DeSTIN heeft veel kleine identieke taken met CUDA kan ik die vele kleine taken tegelijk uitvoeren. Waarna je alle berekende waardes als een grote bulk weer terug krijgt. Op dit moment ideaal te noemen.

(meer…)

Het is inderdaad een week geleden. En deze week is dan ook geheel gepland om DeSTIN te begrijpen. Dus ik zou hier een heel lang verhaal neer kunnen zetten dat ik heb lopen lezen en nog meer lopen lezen dingen lopen opschrijven en lezen. Maar dan zou het wel heel snel saai worden. Dus op naar het volgende onderwerp.

Om jullie geïnformeerd te houden over mijn communicatie met school. Na ruim 4 weken wachten en zo’n 30 mailtjes a 10 A4tjes vol met tekst eindelijk een reactie van de persoon die mij hoort te antwoorden. Ja je kan dan wel 4 man binnen school over dit onderwerp aanschrijven maar er is geen proces die zegt wanneer punt 1 niet werkt dan doet punt 2 het. En zoals de vuistregel op school is “de student is zelf verantwoordelijk”.
Houd dit in dat wanneer een student een probleem heeft met een docent het de student zijn probleem is.

Wil ook zo’n regel

  1. Ik heb gelijk.
  2. Wanneer ik geen gelijk heb treed regel 1 in werking.

Dus ik heb altijd gelijk. Dus er is weer contact met de juiste persoon nu alleen alle voorgaande mailtjes netjes afhandelen het proces moet wel netjes afgehandeld worden. En hopelijk ook wat lessen uit geleerd worden.
Als er meer te melden valt dan zal ik dat wel melden maar op dit moment is het nu wel even klaar met dit onderwerp.

Verjaardag ja dat is waarschijnlijk het gedeelte wat jullie willen lezen. Dus speciaal voor jullie de link (More…)

(meer…)

20 maart 2011

We zijn weer een week verder.

Het resultaat van deze week is dat er nu een klacht bij school is neergelegd met betrekking tot de voortgang van mijn stage.

Wat heb ik deze week nog meer gedaan na heel veel code door gespit te hebben en er nu nog meer wijsheid van dit pracht programma verkregen te hebben ben ik pas op de helft. Het programma hoe kon het ook anders is best complex en om even CUDA hierop los te laten is toch wel wat meer uitzoekwerk nodig. Ook de nodige frustraties met Linux (2de besturing systeem van mijn laptop) weer achter de rug. Er was mij verteld dat het verstandig is een profiler mee te laten lopen met de code zodat ik kan zien waar het zware werk wordt verricht. In Windows Visual Studio gaat die natuurlijk vanzelf als je op de debug knop klikt in Linux hoe zij het ook anders niet. Weer wat exotische commando’s verstopt in handleidingen van 12 pagina’s groot nee Linux is super gebruiks vriendelijk. Op 1 punt ben ik het daar wel mee eens een bibliotheek aan je code toevoegen gaat in Linux veel makkelijker dan in Windows. Zo alweer genoeg gezegd over dit onderwerp.

(meer…)