Ütemezés, házi feladat

Ütemezés

A tárgy féléves ütemezése INNEN 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 futás átlaga)

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ó, OpenCL esetén az AMD CodeXL-ből kellene hatékonysági információkat kinyerni.
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.
  • Az NVIDIA Visual Profiler Kernel analysis, Memory Bandwidth Analysis, Compute Analysis és Latency Analysis eredményeit (screenshot-ok formájában)

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 (dv).
        • Horizontális szinkronjel (hs).
        • Vertikális szinkronjel (vs).
  • A INNEN 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 projekthez a HLS kimeneti HDL fájljait kell hozzáadni.
    • Vivado implementációs projekt (vivado_top könyvtár). Tartalmazza a HDMI ki- és bemenetet. Implementálható a HLS kimeneti HDL fájljainak hozzáadása után.
  • 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.

 

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!

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

  • A file neve a csoport hallgatóinak vezetékneve ABC sorrendben, tehát: NÉV1_NÉV2.zip
  • A tömörített fájlnak az alábbiakat kell tartalmaznia egy NÉV1_NÉV2 könyvtárban:
    • ​A dokumentációt tartalmazó PDF file NÉV1_NÉV2.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.
    • heterogen_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.
    • heterogen_gpu.exe: A GPU (CUDA vagy 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ás 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.
  • 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-2019 BME MIT | Hibajelentés | Használati útmutató