KUTATÁSI TÉMÁK

Az alábbi témákhoz keresek vállalkozó kedvű és kimagasló képességű hallgatókat. A témákat - a feldolgozás mélységétől függően - egyaránt ajánlom önálló laborhoz, tudományos diákköri munkához, diplomamunkához vagy doktori kutatási tevékenységhez.
Valamennyi téma eredményes kidolgozásához szükség van a következőkre: algoritmikus gondolkodás, programozási ismeretek, angol nyelvtudás, igényesség, kitartás.

 

1. CPU - GPU OPTIMALIZÁLÁS

A grafikus processzorok (GPU) ugrásszerű fejlődése révén manapság minden modern PC-ben olyan GPU van, melynek hatékonysága vetekszik a CPU-éval. Mivel a GPU kapacitásának jelentős része általában nincs kihasználva, kínálkozik a lehetőség, hogy a GPU átvegye a CPU terhelésének egy részét (GPGPU: General-Purpose computing on the GPU). Ez egy még gyerekcipőben járó kutatási terület, mely azonban egyre szélesebb körben kelt érdeklődést.

A cél a CPU és GPU közötti optimális munkamegosztás kialakítása. Ennek alapja, hogy bizonyos típusú műveletcsoportokat (melyeknél ugyanazt a műveletet kell nagy mennyiségű adaton végrehajtani) a GPU hatékonyabban tud megvalósítani, míg más műveletcsoportok esetében a CPU a hatékonyabb. Azt is figyelembe kell venni, hogy a CPU és GPU közötti adatmozgatás időveszteséggel jár. Vizsgálhatók olyan modellek, amikor előre, statikusan kell eldönteni, hogy mi kerüljön a CPU-ra és mi a GPU-ra, valamint olyanok is, amikor ezeket a döntéseket futási időben, dinamikusan kell meghozni.

Konkrét feladatok:

  • A kapcsolódó szakirodalom áttanulmányozása
  • A probléma különböző matematikai modelljeinek definiálása, az egyes optimalizálási problémák komplexitásának vizsgálata
  • Algoritmusok kidolgozása a definiált optimalizálási problémákra
  • A hardver/szoftver particionálási algoritmusok alkalmazhatóságának vizsgálata
  • Az algoritmusok implementálása
  • Tesztkörnyezet kialakítása az algoritmusok teszteléséhez
  • Az algoritmusok tesztelése, empirikus kiértékelése és összevetése
  • Az eredmények publikálása

 

2. ÜTEMEZÉS TÖBBMAGOS PROCESSZOROKON

A félvezetőipar aktuális trendjei ahhoz vezetnek, hogy a mikroprocesszorok órajele már nem gyorsul tovább, ugyanakkor a processzorban több párhuzamos feldolgozó egység (mag) kerül kialakításra, ilyen módon téve lehetővé a további gyorsítást. Azonban egyáltalán nem nyilvánvaló, hogy a processzoron futó szoftver mennyire tudja kihasználni ezt a párhuzamosságot. A magok közötti kommunikáció pedig ronthatja a teljes rendszer hatásfokát.

A kutatás célja olyan algoritmusok kifejlesztése, melyek automatikusan rendelik hozzá egy program vagy programhalmaz részeit (pl. threadeket, objektumokat vagy akár egyes utasításokat) a rendelkezésre álló magokhoz, olyan módon, hogy a teljes rendszer működése optimális legyen. Az optimalitáshoz részben a futási időt, részben pedig az energiafelhasználást érdemes minimalizálni. A programrészek magokhoz allokálásakor figyelembe kell venni a programrészek közötti függőségeket (pl. ha az egyik mindenképp meg kell, hogy előzze a másikat, akkor hiába allokáljuk őket külön magra, nem tudnak párhuzamosan futni, így nem érünk el gyorsulást) és kommunikációt is.

Konkrét feladatok:

  • A kapcsolódó szakirodalom áttanulmányozása
  • A probléma különböző matematikai modelljeinek definiálása, az egyes optimalizálási problémák komplexitásának vizsgálata
  • Algoritmusok kidolgozása a definiált optimalizálási problémákra
  • Ismert ütemezési algoritmusok alkalmazhatóságának vizsgálata
  • Az algoritmusok implementálása
  • Tesztkörnyezet kialakítása az algoritmusok teszteléséhez
  • Az algoritmusok tesztelése, empirikus kiértékelése és összevetése
  • Az eredmények publikálása

 

3. MEMÓRIA OPTIMALIZÁLÁS

A mikroprocesszorok gyors fejlődése révén a programok futtatása során egyre inkább a memóriahasználat lett a szűk keresztmetszet: mind futási idő, mind energiafelhasználás szempontjából igen költséges a memóriából való olvasás és a memóriába való írás. Ez két fontos kutatási terület kialakulásához vezetett: egyrészt a memóriaelérések átlagos költségét csökkentő hardver- és mikroarchitektúra megoldások (pl. különböző cache-ek), másrészt pedig a memóriaelérések számát csökkentő és lokalitásukat növelő program-optimalizáló technikák.

A kutatás célja kettős. Egyrészt azt kívánjuk vizsgálni, hogy a két fent említett terület eredményei mennyiben kombinálhatóak. Ennek elsősorban beágyazott rendszerek esetén van létjogosultsága, ahol lehetőség van a hardver és a szoftver együttes optimalizálására. A másik cél annak vizsgálata, hogy a modern többmagú processzorok esetében milyen optimalizációs módszerek a célravezetőek. Ezek jellemzően elosztott cache-rendszert tartalmaznak, mely újabb kihívást jelent.

Konkrét feladatok:

  • A kapcsolódó szakirodalom áttanulmányozása
  • A probléma különböző matematikai modelljeinek definiálása, az egyes optimalizálási problémák komplexitásának vizsgálata
  • Algoritmusok kidolgozása a definiált optimalizálási problémákra
  • Az algoritmusok implementálása
  • Tesztkörnyezet kialakítása az algoritmusok teszteléséhez
  • Az algoritmusok tesztelése, empirikus kiértékelése és összevetése
  • Az eredmények publikálása

 

4. OPTIMALIZÁLÓ ALGORITMUSOK EMPIRIKUS VIZSGÁLATA

A bonyolultság klasszikus elmélete arra a kérdésre koncentrál, hogy egy adott problémára van-e olyan algoritmus, melynek lépésszáma legrosszabb esetben is felülről becsülhető az input hosszának polinomjával. Ennek a gyakorlati alkalmazása számos kihívást rejt. Először is, a legtöbb gyakorlatban előforduló probléma NP-nehéz, ezekre nem ismerünk a fenti tulajdonságokkal rendelkező algoritmust. Ennek ellenére a gyakorlatban fontos minél hatékonyabb megoldó algoritmusokat kifejlesztenünk ezekre a nehéz problémákra. Másrészt gyakorlati szempontból általában konkrét probléma példányok bonyolultsága az érdekes, nem pedig az adott probléma worst-case bonyolultsága.

Az utóbbi években kialakult egy új kutatási terület, mely NP-nehéz problémák konkrét példányainak bonyolultságát vizsgálja, elsősorban mérésekkel, másodsorban pedig a mérési eredményeket megmagyarázó modellek felállításával. Az egyik legfontosabb eredmény, hogy a legrosszabb esetben reménytelenül nehéz problémák konkrét példányait sok esetben hatékonyan meg tudjuk oldani. Továbbá, e bonyolultsági vizsgálatokból számos olyan felismerés született, amely jelentősen hozzájárult a megoldó algoritmusok fejlődéséhez is.

A kutatás célja az ilyen típusú vizsgálatok folytatása. A következő kérdésekre keressük a választ: Mi tesz egy probléma példányt könnyűvé illetve nehézzé? Hogy lehet gyorsan felismerni egy probléma példányról, hogy mennyire nehéz? A bonyolultság mennyire a probléma példány sajátossága, illetve mennyire függ a megoldó algoritmustól? Hogyan lehet eldönteni egy probléma példányról, hogy milyen algoritmussal oldható meg a leggyorsabban? Mennyire tér el a valós és a véletlenszerűen generált probléma példányok bonyolultsága?

Konkrét feladatok:

  • A kapcsolódó szakirodalom áttanulmányozása
  • Keretrendszer kialakítása optimalizáló algoritmusok implementálásához és vizsgálatához
  • Néhány benchmark algoritmus implementálása
  • Az algoritmusok empirikus kiértékelése véletlen és valós probléma példányokon
  • Az eredmények publikálása


Vissza a főoldalra
© Mann Zoltán, 2009.
E-mail: x.y@gmail.com, ahol x=zoltan, y=mann