Vis enkel innførsel

dc.contributor.advisorSvarstad, Kjetil
dc.contributor.authorJalabert, Rodolfo
dc.date.accessioned2019-11-06T15:03:56Z
dc.date.available2019-11-06T15:03:56Z
dc.date.issued2019
dc.identifier.urihttp://hdl.handle.net/11250/2627032
dc.description.abstractFormålet med dette prosjektet er å fortsette å utforske nye måter å akselerere sequentialcomputer kode, og finne ut om maskinens læringsteknikker tilgjengelig i dag er i stand til å hjelpe oss med denne oppgaven. Kjerneideen forsøker å parallellisere i løpetid (på en måte helt transparent for programmereren) koden som blir utført i CPUen, ved å snoop på RAM-CPU-kommunikasjonsbussen, og i tilfelle et kunstig nevralt nettverk anser denne koden For å være parallelliserbar, bør den da konverteres til en FPGA-modul og utføres på den i stedet. Det bygger på et tidligere prosjekt der vi brukte en veldig enkel RISC-prosessor, kalt LT16x32, og opprettet flere programmer for å hjelpe oss i denne virksomheten. For det første tillater en parametrisk assembly kodegenerator ved navn LoopGen oss å lage mange eksempler på kode med forskjellige grader av parallellitet. Deretter genererte et program som heter LoopSim det neurale nettverks inngangsdatasett ved å kompilere den genererte koden og simulere dens utførelse på CPU. I dette prosjektet forbedret vi på den tidligere nevrale nettverksarkitekturen ved å bytte fra en LSTM til en konvoluttmodell, og oppnå en mye høyere klassifikasjonsnøyaktighet, samtidig som vi har implementert to syntetiserbare maskinvaremodeller av dette nettverket: en basert i High Level C Synthesis (ved hjelp av C ++ i Vivado HLS), og en annen ved tradisjonell RTL betyr (ved hjelp av VHDL i Vivado). I tillegg har vi klart å integrere disse askinvareblokkene med resten av systemet. nemlig CPU, minne og instruksjonsforprosessor, som vellykket replikerer resultatene oppnådd av programvaremodellen. Mens mer arbeid må gjøres for å få et komplett og mer realistisk system, baner dette prosjektet for fremtidige bestrebelser i jakten på automatisk run-time loop parallellisering.
dc.description.abstractThe purpose of this project is to continue exploring new ways of accelerating sequentialcomputer code, and finding out if the machine learning techniques available today are able to help us in this task. The core idea is trying to parallelize during run-time (ina way completely transparent to the programmer) the code that’s being executed in the CPU, by snooping on the RAM-CPU communication bus, and, in case an artificial neural network considers this code to be parallelizable, it should be then converted into an FPGA module and executed on it instead. It build upon a previous project in which we used a very simple RISC CPU, called LT16x32, and created several Software applications to aid us in this enterprise. First, a parametric assembly code generator named LoopGen, allowed us to create many examples of code with different degrees of parallelism. Next, a program called LoopSim generated the neural network’s input datasets by compiling the generated code and simulating its execution on the CPU. In this project we improved on the previous neural network architecture by switching from an LSTM to a convolutional model, achieving a much higher classification accuracy, while also having implemented two synthetizable hardware models of this network: one based in High Level C Synthesis (using C++ in Vivado HLS), and another one by traditional RTL means (using VHDL in Vivado). In addition, we have managed to integrate these hardware blocks with the rest of the system; namely, the CPU, memory and the instruction pre-processor, which successfully replicate the results obtained by the software model. While more work needs to be done in order to obtain a complete and more realistic system, this project paves the way for future endeavours in the quest for automatic run-time loop parallelization.
dc.languageeng
dc.publisherNTNU
dc.titleDeep Learning Based FPGA-CPU Acceleration
dc.typeMaster thesis


Tilhørende fil(er)

Thumbnail

Denne innførselen finnes i følgende samling(er)

Vis enkel innførsel