Ü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, 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:

Az implementációt az alábbi platformokon kell elvégezni:

  1. C nyelvű, optimalizálatlan implementáció. A dokumentáció tartalmazza az olvashatóan tördelt, kommentezett forráskódot, a használt számítógép specifikációját és a futási időeredményeket (~200 futás átlaga). Ezen megvalósítás elsődleges célja, hogy a továbbiakban rendelkezzetek egy referenciával, ami a hibakereséshez használható.
  2. C nyelvű, optimalizált implementáció. Implementáció több szálon, és vektor utasítások használatával. A dokumentáció tartalmazza az olvashatóan tördelt, kommentezett forráskódot és 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:
    • 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)
    • Az NVIDIA Visual Profiler eredményei közül (nem minden GPU-n szerepel mindegyik!):
      • Regs
      • Static SMEM
      • Warp Execution Efficiency
      • Issue Stall Reasons (mind)
      • Global Memory Load és Store Efficency
      • L2 Hit Rate
      • Shared Memory Efficiency
      • Instruction Replay Overhead (mind)
      • Executed IPC
  4. FPGA implementáció Xilinx Vivado HLS környezetben. A megoldás akkor fogadható el, ha szimulációban megfelelő eredményt szolgáltat, valamint a szintetizált hardver a Vivado HLS reportjai alapján képes a valós idejű működésre 1280x720p 60 Hz bemeneti videó formátumot feltételezve (74,25 MHz pixel órajel). Követelmények:
    • 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 HD-nál kisebb felbontású videóval helyesen kell működnie.
    • A használt FPGA típusa:  xc7k70tfbg676-2
    • A terv időzítési paramétereit ellenőrizze implementáció után! (Export RTL / Vivado synthesis, place and route után a konzol ablakban fog megjelleni az elérhető órajel, és az implementáció utáni erőforrás igény.)
    • A HLS implementációra szánt C kód verifikációjához készítsen C testbench file-t, és a többi feladatban is használt képet megszűrve ellenőrizze az implementáció megfelelő működését.
    • 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
        • Új kép: a képkocka legelső aktív pixele alatt 1 érték, egyébként 0
        • Új sor: minden sor legelső aktív pixele alatt 1 értékű, egyébként 0
    • A dokumentáció ennél a feladatnál is tartalmazza a kommentezett, normálisan tördelt forráskódot, a használt direktívákat és azok rövid indoklását, valamint a szintézis eredményeket.
    • Megjegyzés. A szintézisre szánt kódban a rendezés megvalósítása (nem számítva a buffer kezelést) nagyon hasonló az 1. pont optimalizálatlan C kódjához, de nem feltétlenül ugyanolyan. Ahhoz, hogy a generált hardver megfelelően pipeline-osítható legyen, a HLS számára egy adatfolyam jellegű leírás megadása célszerű. Azaz nem feltétlenül vezet megfelelő implementációra az a kód, amiben a rendezést egyetlen, 25 elemű tömbön hajtjuk végre, ebben az esetben ugyanis túl hosszú kombinációs útvonalak generálódnak, így nem teljesíthető az elérendő órajel. A megoldás a C kód "kézi pipeline-osítása", azaz az egyes műveletvégzési szinteket kódszinten szétbontjuk: minden szint bemenete a 25 elemű [i]-edik tömb, kimenete pedig az ugyancsak 25 elemű [i+1]-ik tömb.

A fentieken kívül minden implementációnál ismertesse a megvalósítás elvét szövegesen, illetve ábrákkal.

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:
    • ​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ény - teljesítmény aránya 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ó