Ütemezés, házi feladat

Ütemezés

A tárgy féléves ütemezése INNEN(TBD) tölthető le. Az előadások sorrendjében előfordulhatnak módosulások, a gyakorlatok témája fix.

 

Házi feladat

Feladat kiírás

A házi feladat egy 5x5 ablak méretű medián szűrő megvalósítása három technológia segítségével. A bemenet a gyakorlatokon is használt jpg fájl (illetve HDMI), a szűrést az egyszerűség kedvéért itt is színkomponensenként kell elvégezni.

A házi feladat elsődleges célja adott algoritmus minél hatékonyabb implementációja, így két nagyon hasonló elvű algoritmus közül lehet választani:

A teljes házi feladat 3 nagyobb részből áll, minden részben ugyanazt a választott algoritmust kell megvalósítani.

1. C nyelvű, optimalizálatlan implementáció.
A további részek verifikálására, illetve a gyorsulás mérésére szolgáló optimalizálatlan C kód. A dokumentáció tartalmazza az olvashatóan tördelt, kommentezett forráskódot.

2. C nyelvű, optimalizált implementáció.
Az 1. feldatban megvalósított algoritmus implementációja több szálon, és vektor utasítások használatával.
A dokumentáció tartalmazza:

  • A többszálú végrehajtás és a vektorizáció elvét ábrákkal és szövegesen magyarázva
  • Az olvashatóan tördelt, kommentezett forráskódot
  • A futási idő eredményeket (~200-1000 futás átlaga)

Az INNEN letölthető megoldás (OpenMP + AVX2, illetve OpenMP + SSE) szolgálhat körülbelüli teljesítmény referenciaként. Megjegyzendő, hogy ez nem egy végletekig optimalizált implementáció, ennél jóval gyorsabb is készíthető. Tehát inkább arra szolgál, hogy lássátok, mi a minimum elérendő teljesítmény. A HF-ek futtatására használt processzoron ~2000 MP/s a teljesítménye.

3. GPU gyorsított implementáció CUDA-ban vagy OpenCL-ben.
A megvalósítás során törekedjen az optimalizációs lehetőségek kihasználására! (Nem elegendő egy triviális, globális memóriát használó verzió!)
CUDA esetén az NVIDIA Visual Profiler használható.
A dokumentáció tartalmazza:

  • A megvalósítás elvét szövegesen és ábrákkal magyarázva.
  • Az olvashatóan tördelt, kommentezett forráskódot.
  • A használt GPU típusát.
  • Az NVIDIA Visual Profiler által szolgáltatott kernel futási időt. (OpenCL használata esetén nem kell!)
  • Az NVIDIA Visual Profiler Kernel analysis, Memory Bandwidth Analysis, Compute Analysis és Latency Analysis eredményeit (screenshot-ok formájában). (OpenCL használata esetén nem kell!)

Referenciaként az alábbi megvalósítások szolgálnak. Ezekre ugyanaz igaz, mint a CPU-s referenciára: a HF célja gyorsabb megoldást készíteni.

  • A CUDA referencia INNEN tölthető le. Futtatásához NVIDIA GPU szükséges.
  • Az OpenCL megvalósítás INNEN tölthető le. Az exe fájlnak parameétere, hogy hányszor futtassa a kernel-t (pl "median_ocl 1000" parancs ezerszer futtatja), ennek alapértéke 100. CPU esetén célszerű ~10-re állítani, gyors GPU esetén kb. 1000 már pontos eredményt ad.

Megj.: Gyors GPU-val sem kell az AVX megoldásnál nagyságrendekkel rövidebb futási időt várni, lassabb GPU-val az is könnyen előfordulhat, hogy a GPU verzió a lassabb. A laborban a GTX 1070-t tartalmazó gépen célszerű tesztelni.
A HF-ek futtatására használt Titan Xp-n a CUDA referencia teljesítménye ~5800 MP/s.

4. FPGA implementáció Xilinx Vivado HLS környezetben.
Az FPGA implementáció során a bemenet a Logsys kártyán található HDMI bemeneti interfész, a feldolgozott képet pedig a HDMI kimeneten kell kiadni. A maximális felbontás 1600x900 @ 60 Hz, ehhez kb. 100 Mhz pixel frekvencia tartozik. Követelmény a valós idejű működés.
Megjegyzések:

  • Az előző megoldásokkal ellentétben itt nem áll rendelkezésre a memóriában a teljes kép, a bemeneti pixelek soronként, ezen belül oszloponként érkeznek. A megfelelő mennyiségű adat buffereléséről a HLS kódban kell gondoskodni.
  • A megvalósítása során NEM feltételezheti, hogy a bejövő videó jel mindig ekkora felbontású, de azt igen, hogy ez a maximuma. Tehát a generált hardvernek minden ennél kisebb felbontású videóval helyesen kell működnie.
  • Paraméterek:
    • A használt FPGA típusa:  xc7k70tfbg676-1.
    • Portok (mind a ki-, mind pedig a bemeneten):
      • Pixel adatok: 3x8 bit (R, G, B)
      • Vezérlő jelek
        • Adat érvényes: a pixel az aktív képtartomány része (de).
        • Horizontális szinkronjel (hs).
        • Vertikális szinkronjel (vs).
  • A lap aljáról belépés után letölthető ZIP fájl az alábbiakat tartalmazza:
    • Vivado HLS projekt (hls könyvtár). Található benne egy C++ testbench, amely a projektben található BMP fájlt megfelelő időzítési paraméterekkel beadja a tesztelt függvénynek, a kimenetet pedig fájlba írja.
    • Vivado testbench projekt (vivado_tb könyvtár). A HLS-ben generált HDL kód tesztelésére szolgáló projekt. Elsősorban a megfelelő időzítés gyors ellenőrzésére, a funkcionális helyességet a C++ testbench ellenőrzi. A projekt a HLS-ben implementált részt Vivado Block Design IP-ként tartalmazza.
    • Vivado implementációs projekt (vivado_top könyvtár). Tartalmazza a HDMI ki- és bemenetet. A projekt a HLS-ben implementált részt Vivado Block Design IP-ként tartalmazza.
  • Dokumentáció
    • Magas szintű blokkvázlat az elképzelt megoldásról.
    • Kommentezett, normálisan tördelt forráskód, a használt direktívák és azok rövid indoklása, valamint a szintézis eredmények.
    • A terv időzítési paramétereit ellenőrizze implementáció után, s ezt is mellékelje a dokumentációban!
    • A működő projektet be kell mutatni élőben.
  • Referencia erőforrás igény
    • ~4200 FF, ~9200 LUT, 12 BRAM

 

Ellenőrzés

A megavlósított algoritmusnak természetesen funkcionálisan helyesnek kell lennie. Ennek ellenőrzéséhez az alábbi fájlok használhatók:

  • Helyes kimeneti kép JPG formátumban. A gyakorlaton használt kód veszteségesen tömörített JPG formátumú fájlt ment. Ugyanbból a bemeneteből ugyanazt a képet generálja a tömörítés, így a kimeneti fájl mérete meg kell, hogy egyezzen a linkelt fájllal.
  • Helyes kimeneti kép BMP formátumban. Amennyiben a kimeneti fájl kiterjesztését bmp-re módosítjuk a C kódban, a DdevIL tömörítetlen BMP fájlt ment. Értelemszerűen a fájl mérete ebben az esetben ugyanakkora a tartalomtól függetelenül, de pixelenkénti ellenőrzésre ez alkalmasabb.

Beadandó

A házi feladat beadási határideje a szorgalmi időszak vége, illetve késedelmes leadás esetén a pótlási hét vége (azaz vasárnap éjfél). A házi feladat eredményét egy ZIP file-ban a MIT házi feladat portálra kell feltölteni. A file-t a HF csoport névsorban előrébb lévő hallgatója töltse fel!

Sablon a dokumentációhoz a lap alján érhető el, belépés után.

Követelmények a feltöltött file-lal:

  • A file neve a hallgató vezetékneve: NÉV.zip
  • A tömörített fájlnak az alábbiakat kell tartalmaznia egy NÉV könyvtárban:
    • ​A dokumentációt tartalmazó PDF file NÉV.pdf névvel.
    • A bemeneti kép. Kötelezően a gyakorlaton is használt kép.
    • A futáshoz szükséges DLL fájlok.
    • cpu.exe: A vektorizált, többszálú megoldásból generált futtatható állomány, amely a konzol ablakban kiírja a futási időt.
    • gpu.exe: A GPU (OpenCL) megvalósításból generált futtatható állomány, amely a konzol ablakban kírja egy kernel (memória másolás nélkül!) futási idejét.
  • A feltöltött futtatható állományoknak kicsomagolás után működniük kell, ezt feltöltés előtt próbáljátok ki!
  • Ugyancsak kiemelendő, hogy a kimeneti fájlnak természetesen helyesnek kell lennie, ellenkező esetben az adott részfeladat eredménye 0.

Osztályozás

Az osztályozás alapja a dokumentáció és a futási idő eredmények:

  • A dokumentációnak tartalmaznia kell a fent megadott elemeket.
  • A SIMD és GPU implementáció esetében a beadott megoldásokat az elért idők alapján sorbarendezzük, az első 33% részeredménye 5, a második 33%-é 4, a harmadik 33%-é 3. A beadott megoldásoknak funkcionálisan helyesnek kell lennie. Az elfogadás további feltétele, hogy a beadott megvalósítás a fenti referencia megoldás sbességének legalább a 70%-t elérje.
  • A HLS megoldásnak teljesítenie kell a fent megadott teljesítmény követelményt, a megavlósítás minőségét a terv erőforrás igénye határozza meg.
  • A végleges HF jegy a fenti részeredmények alapján adódik.

A mérésekhez használt rendszer specifikációja:

  • CPU: Intel Core i5-8600K (6 mag), DDR4-2666 memória
  • GPU: NVIDIA TITAN Xp. Pascal architektúra, Compute Capability 6.1.

 

© 2010-2024 BME MIT | Hibajelentés | Használati útmutató