Memória Profiling alapú tervezés
![]() óraadó
Szoba: IE336 |
A kiírás adatai
A mai modern FPGA-k (DSP-k/processzorok/mikrovezérlők) megannyi processzáló magot tartalmaznak. Gondolhatunk itt multi- és many core rendszerekre, soft-core processzorokra stb. Ha adott egy algoritmus, ami egyetlen processzoron nem tud real-time futni, jó lenne kihasználni minél több magot. Igen ám de hogyan? Hiszen a PC k esetén több processz fut, de a beágyazott (főként streaming jellegű feladnál) csak egyetlen egy feladatot kell nagyon gyorsan végrehajtani. Ezért magát az algoritmust kell megvizsgálni, hogy hol lehet a párhuzamosságokat külön elemekre szétbontani, így növelve a számítási teljesítményt.
Az algoritmus profiling általában futási információt jelenít meg, nem tartalmazza az adatok áramlását. A modern többmagos rendszerek esetén az elérhető számítási kapacítás gyakran meghaladja a szükséges mennyiséget, a probléma a számítási magok adattal történő hatékony ellátása. Ezért érdekes felvenni az adatok áramlását is.
Két korábbi halgató segített, egy Python nyelven írt analizátor program megalkotásában. Ami az alábbiakat csinálja:
Vegyünk egy C algoritmust. (Jelenleg JPEG kitömörítő), fordítsuk le egy processzorra. A gépi kódot futtassuk le egy processzor szimulátoron, és közben az összes memória/regiszter hozzáférést loggoljuk. Melyik memóriát mikor/melyik függvény hányadik sora érte el.
Futás után látni fogunk a program Dinamikus Adatfolyam Gráfját (DDFG) amiből generálhatunk csomó grafikont, amelyek a memóriák hozzáférését mutatja.
Egy 64*64 pixeles kép kitömörítése kb 600 ezer utasítás, így a felvett adatgráfot aggregálni kellett, amiből szépen látszank a főbb adatutak.
Jelenleg itt áll a fejlesztés, sok lelkes titánt keresek:
- QEMU interfész implementálására
- Az algoritmus optimalizálására / portolására (C nyelvre)
- Megjelenítő továbbfejelsztése
- A Dinamikus Adatfolyam Gráfjon túl jó lenne felvenni a vezérlési függőségeket
- Illetve gráfelméleti "turkálások". Részgráfok keresése, kritikus út stb.