Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Irányítástechnikai és Informatika Tanszék Markovits Tibor Gergely Magas szintű logikai szintézis Dekompozíciós eljárás Súlyozott Normalizált vágás algoritmussal Témavezető: Dr. Arató Péter Rácz György
1 Bevezetés A multiprocesszoros rendszerek az elmúlt évtizedben egyre fontosabb szerepet kaptak a digitális célrendszerek terén. A bonyolultabb feladatok nagyobb számítási kapacitást igényelnek, ugyanakkor a nagyobb és komplexebb rendszerek esetében a megvalósítás nem feltétlen egyértelmű, a követelmények gyakorta megnehezítik a tervezés menetét. Követelményként beszélhetünk például az anyagi költségekről, sebességről, pipeline működésről, párhuzamosíthatóságról, stb. A követelmények egymástól is függnek, hiszen például ha az anyagi keretek lehetővé teszik, rendszerünket megvalósíthatjuk egy vagy több nagyteljesítményű processzorral, tekintet nélkül arra, hogy hogyan használjuk ki, illetve mekkora adatcsomagokat továbbítanak egymás között, és milyen módon. A rendszerszintű logikai szintézis (továbbiakban SLS) során arra törekszünk, hogy a lehető legjobban használjuk ki a rendelkezésre álló erőforrásokat, tehát hatásfokuk kimagasló legyen. Az elmúlt 20 évben a processzorgyártó cégek nagy energiát fordítottak a műveletvégző egységek számítási kapacitásának megsokszorozására. Erre több lehetőség is adódik. A legkézenfekvőbb megoldás a processzor órajelének növelése, azonban ez erősen függ a technológiától, amely gátat szab a frekvencia növelésének. Számba vehetjük a belső részegységek (pl. magok), vagy magának az egész processzor többszörözésének lehetőségét. Ez a megoldás ugyan költséges, azonban segíthet a fent leírt követelmények betartásában, abban az esetben, ha megfelelő SLS algoritmussal osztjuk szét és ütemezzük a feladatokat. Létrehozhatunk vagy többszörözhetünk speciális, belső műveletvégző egységeket, melyek ugyan egyetlen feladatot képesek elvégezni, de azt nagy hatékonysággal. Ilyen művelet lehet például az FFT (Fast Fourier Transform) vagy a konvolúció. A fentiek alapján kijelenthetjük, hogy a feladat-specifikus rendszerek esetében figyelembe kell venni az előre meghatározott, időigényes feladatokat. Az ilyen típusú számításokat egy általános célú CPU-nál sokkal hatékonyabban tudják elvégezni a digitális jelfeldolgozó egységek (DSP-k), GPU-k és FPGA-k. Ezeket a komponens processzorokat feladat-specifikus multiprocesszoros rendszerek esetén érdemes összekombinálni a hagyományos, általános célú CPU-kkal, vagy mikrokontrollerekkel. Az ilyen heterogén architektúrákat hívjuk Heterogen Multiprocessing Systems-nek (továbbiakban HMS-nek). 1.1 Heterogén multiprocesszoros rendszerek A rendszertervezés során tehát figyelembe kell vennünk a feladatok típusait. Fontos ügyelni arra is, hogy ezeket a feladatokat milyen komponens processzorokkal valósítjuk meg. Szignifikáns jellemzőjük a relatív hatékonyságuk (pl. számítási kapacitás, fogyasztás), illetve flexibilitásuk. A flexibilitás jellemzően a tárolt programú gépek tulajdonsága, amely lehetővé teszi könnyen változtatható programok futtatását. Beláthatjuk azonban, hogy a feldolgozó egységek flexibilitása a hatékonyság rovására megy. Minél flexibilisebb egy processzor, annál kevésbé lesz hatékony a feladat-specifikus rendszerek esetében. (1. ábra) Az ASIC-eket, (Application-Specific Integrated Circuit), mint nevéből is kiderül, alkalmazás-orinetált, egyedi feladatokra fejlesztik ki. Hatékonyságuk kimagasló, azonban rendszertervezés során ezeket az építőelemeket gyártási költségeik miatt nagyon ritkán használják fel. A következő feldolgozó egység típus az ASSP (Application-Specific Standard Product), amelyek már nem egy egyedi, hanem széles körben elterjedt feladatot valósítanak meg (pl. videó konvertálás), ezért előállításuk jóval olcsóbb, és megtalálhatók a piacon. Nagyobb rendszerek esetén kifejezetten érdemes használni, hiszen egy ASSP komoly tehermentesítést jelenthet a CPU-k, DSP-k, vagy GPU-k számára. Az FPGA-k (Field Programmable Gate Array) jóval nagyobb mozgási teret adnak a felhasználónak, mint a 1
Hatékonyság ASIC ASSP FPGA DSP CPU instr. set CPU, µc Flexibilitás 1. ábra: Feldolgozóegységek hatékonysága a flexibilitás függvényében korábban említett ASIC és ASSP feldolgozó egységek. Változatos méretük viszonylagosan olcsó megvalósítást tesz lehetővé. Az FPGA-k ma már lehetőséget adnak arra, hogy a huzalozott logika mellett létrehozzunk chipen belül lágyprocesszorokat, ún. Soft Core-okat. Ezáltal nem csak a CPU-t tehermentesítheti, hanem át is vállalhat bizonyos feladatokat annak érdekében, hogy a processzorok közötti adatkommunikáció minimálisra csökkenjen. Az előbb megismertekhez nagyon hasonlóak a DSP-k, azzal a különbséggel, hogy ezeknek előre meghatározott belső műveletvégző egységeik, és Harvard architektúrájuk van. HMS esetében manapság egyre többet használják, mivel rendkívül hatékony, ugyanakkor áruk évről évre csökken. Ezt követik azok az általános célú CPU-k, amelyek kibővített utasításkészlettel rendelkeznek, tipikusan ilyenek az asztali PC-k processzorai. Ez a típusú processzor a legkevésbé alkalmazás-specifikus, nem tartalmaz periféria áramköröket, és nehéz beleintegrálni a rendszerbe, ezért használatuk egyáltalán nem jellemző HMS rendszerek esetében. A leginkább flexibilis feldolgozó egységek maradtak a végére; ezek az általános célú CPU-k és a mikrokontrollerek. Architektúrájuk lehetővé teszi különféle programok és bonyolultabb számítási műveletek végrehajtását is, ugyan jóval kisebb hatékonysággal, mint a korábban megismert komponens processzorok. 1.2 Rendszerszintű tervezés heterogén multiprocesszoros rendszerek esetén A rendszerszintű tervezés akkor eredményes, ha az előbb felsorolt eszközök közül ki tudjuk választani azokat, amik az elvégzendő feladatok számára a leghatékonyabbak, és ezeket egyetlen rendszerbe bele tudjuk helyezni, effektív kommunikációt kialakítva egymást között. Szemléltetve a fenti kijelentést, vegyünk példának egy bonyolultabb matematikai műveletet, a konvolúciót. A konvolúció megvalósítása lehetséges általános célú CPU segítségével is, de igazán hatékonyak akkor vagyunk, ha ezt DSP-vel oldjuk meg, ami akár több, mint egy nagyságrenddel gyorsabb műveletvégzést biztosít, processzortípustól függően. Ezen túl kihasználhatjuk a DSP magját arra, hogy átvállaljon bizonyos számítási műveleteket a hozzá kapcsolódó és az adatokat szolgáltató általános célú CPU-tól, aminek segítségével a 2
processzorok közötti kommunikáció csökkenhet. Így időt és számítási teljesítményt spórolhatunk meg, ami a Real-Time HMS rendszerek esetében rendkívül fontos. A dekompozíciós eljárás során érdemes úgy felosztani a feladatokat, hogy az azonos típusú műveletvégző eszközökkel elvégzendő számítások egy szegmensbe kerüljenek. Ezáltal csökkentjük a különböző felesleges komponens processzorok darabszámát, és csak azokat a műveleteket végeztetjük el velük, amik feltétlen szükségesek. Így spórolhatunk az anyagi költségeken, mivel általánosságban elmondható, hogy a legolcsóbb erőforrások az általános célú CPU-k és mikrokontrollerek, ezért a rendszertervezést mindig ezekkel a processzorokkal kezdjük. A tanulmányban tárgyalt dekompozíciós algoritmus nem veszi figyelembe a feladat típusát, így nem tudja a számításigényes, speciális műveleteket egy csoportba tenni. Erre a problémára többféle megoldás is adódik, későbbiekben ezekre még visszatérünk. 2 A rendszer szintű szintézis lépései HMS esetében Először célszerű megvizsgálni a rendszerszintű szintézis követelményeit és főbb lépéseit az általánosított rendszertervezési szempontok szerint, mivel az SLS algoritmus nem csak és kizárólag heterogén multiprocesszoros rendszerek tervezésére alkalmas; érdemes magasabb absztrakciós szintről indulni. A későbbiekben ezt átültetjük a jelen tanulmány által tárgyalt SLS algoritmusra és annak lépéseire. 2.1 A rendszerszintű szintézis alapkövetelményei és általános lépései Rendszertervezés során az egymást befolyásoló döntések nem mindig láthatók előre, az SLS algoritmusa nem tud minden körülményt figyelembe venni a kialakuló rendszer tulajdonságaira vonatkozóan. Ezáltal nincs lehetőséget determinisztikus algoritmusok kifejlesztésére, ezért a jelenlegi rendszerszintű tervezés nagy részben intuitív jelleggel, próbálgatással történik. Létezik ugyan több olyan magas szintű logikai szintézer eszköz (HLS Tool), amely próbálja ezeket a problémákat kiküszöbölni és elfogadható megoldást találni. Az SLS első lépése a probléma megfogalmazása, mely feladattól függően sokféle lehet. A leggyakoribb a HMS rendszerek esetében egy adott programnyelven leírt forráskód, de kiindulhatunk pszeudokódból, vagy akár magából a folyamatgráfból is. A legfontosabb, hogy a feladatokat, és a feladatokat összekötő kapcsolatokat definiáljuk. Továbbá bemeneti paraméterként szolgálnak a tervező által megadott követelmények is (2. ábra). A bemeneti paraméterek megadása után az SLS algoritmus először a dekompozíciót hajtja végre a felhasználó által megadott irányelvek szerint, majd a HLS tervező eszköz beütemezi, és kiosztja az egyes műveletvégrehajtó egységek számára a feladatokat. Pipeline működés esetén elvégzi az újraindítási idő beállítását. Eredménykényt megkapjuk, hogy mely feladatokat milyen műveletvégző egységekkel kell megoldani, valamint hogy milyen kommunikációs költségekkel kell számolni az implementálás során. Beláthatjuk, hogy a fent leírt algoritmust kis módosításokkal de szinte bármilyen feladatfelosztást és ütemezést igénylő feladatra lehet alkalmazni. 3
A rendszer által megoldandó feladat leírásának fogadása A tervező által megadandó követelmények A komponens processzorokra vonatkozóan számuk kapacitásuk minimális kitöltöttségük (energiafelhasználás) áruk párhuzamos feldolgozásra való alkalmasságuk utasítás-végrehajtási időik Pipeline működés szükségessége A kívánt újraindítási idő A rendszer felépítésére vonatkozóan a következők priorításának megállapítása: Kommunikációs teher Feladatok egyenletes felosztása Dekompozíció HLS tervező eszköz Eredmények Komponens processzorok (számuk, fajtájuk) A feladatok hozzárendelése az egyes komponens processzorokhoz Kommunikációs feladatok leírása 2. ábra: A rendszerszintű szintézis általános lépései és követelményei 4
2.2 A rendszerszintű szintézis lépései HMS rendszerek esetében A 2.1-es fejezetben felvázoltuk a rendszerszintű szintézis alapkövetelményeit és általános lépéseit, most ültessük át a gondolatmenetet és vizsgáljuk meg a rendszerszintű szintézis lépéseit HMS rendszerek esetére. Három fő lépést tudunk elkülöníteni (3. ábra): A probléma megfogalmazását itt is magával a feladat leírásával kezdjük, mely feladat általában egy magas szintű nyelven (pl. C, Java) leírt program, ez a felhasználó által relatív könnyen érthető. Feladatleírás C, Java, stb nyelven A gráf előállítása Dekompozíció Ütemezés Allokáció Eredmény SLS algoritmus 3. ábra: A rendszerszintű szintézis lépései Ennek ellenére a bemenetet képezhetik sokkal komplikáltabb nyelvek, mint például az alacsony szintű programozási nyelvek (Assembly), vagy a nagyon magas szintű programozási nyelvek (pl. Python, JavaScript, vagy a kereskedelmi szoftverek nyelvei). Tekintettel arra, hogy egy C programot is a fordító egyfajta Assembly nyelvre fordít le, illetve a magasabb szintű programozási nyelveket is előszeretettel vezetik vissza ismertebb magas szintű nyelvekre, az algoritmusnak bizonyos kiegészítésekkel nem jelenthet problémát bármely szintű nyelven írt program SLS szintézise. 2.2.1 A folyamatgráf előállítása Az első lépés a folyamatgráf előállítása. A folyamatgráfok segítségével a multiprocesszoros feladatok reprezentálhatók. A gráf pontjai jelképezik a folyamatban elvégzendő feladatokat, a hozzá tartozó súlyok pedig meghatározzák a feladatok komplexitását, ami különböző műveletvégző egységek esetén különböző számítási időt jelent. A gráf élei a feladatok közötti adatkommunikációt jelöli. Az élekhez tartozó súlyok értékét a kommunikációban résztvevő adatok mérete határozza meg; minél nagyobb az átküldendő adat, annál több időt vesz igénybe az átküldése. Azok között a feladatok között, ahol nem történik adatkommunikáció, szintén feljegyezhetjük, és behúzhatunk közéjük éleket, melyeknek súlya zérus. Ez rengeteg kérdést vet fel, melyeket a jelen tanulmány nem tárgyal. Azonban ahhoz, hogy a szintézis következő lépéseit jobb hatásfokkal lehessen elvégezni, néhány dolgot meg kell fontolni. Általánosságban elmondható, hogy a dekompozíciós algoritmusok nem tudják feldolgozni a hurkokat. A hurkok több szempontból osztályozhatók, és megoldásuk is számos lehet [2]. Azonban rengeteg probléma megoldása során elő szoktak kerülni, tipikusan például szabályzási körök esetén, ezért ezeket a folyamatgráf előállítása során célszerű elkerülni. A folyamatgráf előállítása közben olyan információk birtokába juthatunk, amelyek a későbbi lépések folyamán még hasznosnak bizonyulhatnak, ezeket érdemes a feldolgozás során egy külső fájlba elmenteni. Olyan információkra gondolunk, mint például a feltételvizsgálatok 5
default ágának megállapítása, egyes ciklusok futási idejének megbecslése vagy a számításigényes feladatok kiszűrése. A folyamatgráfok előállításával a tanulmány következő részeiben nem foglalkozunk, a továbbiakban feltételezzük, hogy a gráf már rendelkezésre áll a dekompozíciós algoritmus számára. 2.2.2 Dekompozíció Az SLS algoritmus második lépése a dekompozíció. A dekompozíció során a gráf pontjait felosztjuk kettő vagy több csoportra, mely csoportok műveleteit az egyes CPU-k fogják elvégezni. A dekompozíció legfontosabb bemeneti paramétere maga a gráf, melyet az előző lépésből kaptunk. Ezen kívül a felhasználónak lehetősége van megadni bizonyos feltételek prioritási sorrendjét. Sokféle dekompozíciós algoritmus létezik[7-11], melyeknek a legkülönfélébb céljuk van. Nem mindegyik algoritmusnak ugyanaz a feladata, ezáltal a gráf kivételével a bemeneti paraméterek is különbözőek lehetnek. Nyilvánvaló, hogy a legjobb megoldás relatív fogalom. Egy rugalmas dekompozíciós algoritmus lehetőséget ad arra a felhasználónak, hogy eldöntse melyik feltétel fontosabb. A jelen tanulmány dekompozíciós algoritmusának célja a feladatok egyenletes eloszlása, valamint a kommunikáció minimalizálása közötti egyensúly megtalálása. Továbbá lehetőségünk van meghatározni az egyes szegmensek számát. A dekompozíciós algoritmus kimeneteként megkapjuk, hogy az egyes számítási műveleteket melyik processzornak kell elvégeznie ahhoz, hogy a felhasználó kívánsága szerinti prioritás teljesüljön. 2.2.3 Ütemezés és allokáció Az ütemezés feladata a dekompozíció által meghatározott szegmensek által kijelölt részfeladatok kezdeti időpontjának meghatározása úgy, hogy elvégzésükhöz lehetőség szerint minél kevesebb műveletvégző egységre legyen szükség, ugyanakkor betartsuk az előírt időzítéseket, például a lappangási, vagy újraindítási időt. Az allokáció célja pedig, hogy a beütemezett részműveleteket konkrét feldolgozóegységekhez rendelje. 6
3 A dekompozíciós algoritmus felépítése A tanulmány következő fejezetei a dekompozíciós algoritmussal foglalkoznak. Szeretnénk egy új eljárást bemutatni a folyamatgráfok partícionálására, amely rugalmas a felhasználó által előre meghatározott priorítások tekintetében. Az eljárás egy korábbi dekompozíciós algoritmuson alapul, melyet Normalizált vágásnak hívnak. A Normalizált vágást minimalizálási elve és rendszerleírása alapján választottam ki az új dekompozíciós algoritmus kiindulópontjaként. A minimalizálási elv a Rayleigh hányadoson alapul, a rendszerleírás pedig a Laplace mátrix szerint történik, amely a minimalizálandó függvény zárt alakját biztosítja. Az eljárásnak köszönhetően, a régi algoritmus gondolatmenetére egy teljesen újat ültetve megkaphatjuk az SLS szintézishez szükséges, a Normalizált vágás után elnevezett Súlyozott Normalizált vágást. Az új algoritmus három fejezetben kerül bemutatásra: 1) Az eredeti dekompozíciós algoritmus A Normalizált vágás című fejezetben megismerhetjük azt az algoritmust, amelyből a fejlesztés során kiindultunk. Ez Jianbo Shi és Jitendra Malik, a Berkeley Egyetem kutatóinak a munkája [1], melyet képszegmentálásra használnak fel. (4. fejezet) 2) A módosított dekompozíciós algoritmus A Súlyozott Normalizált vágás című fejezetben kifejtjük az előzőben megismert algoritmus problémáit a HMS rendszerek esetén történő partícionálás szempontjából. Bemutatjuk az új algoritmusnak, a Súlyozott Normalizált vágásnak a lépéseit és levezetését, melyek a problémák korrigálására szolgálnak. (5. fejezet) 3) A csoportosító algoritmus A priorítási sorrendek érvényre jutása című fejezet a dekomponált rendszernek, a felhasználó által megadott egyes paraméterek szerinti csoportosítási lehetőségeit mutatja be. Ettől a funkciótól válik az algoritmus rugalmassá és sokoldalúvá. (6. fejezet) A dekompozíció első lépése a rendszer analizálása, melyet a 5. alfejezetben tárgyalunk, a második lépés pedig a csoportosítás, az analizált adatok alapján. A csoportosítás során a felhasználó több szempontot is megadhat az algoritmusnak, mely alapján különböző szegmensekre oszthatók. A jelen tanulmány csoportosító algoritmusa kétféle lehetőséget ad a felhasználónak; az egyik a szegmensek darabszámára vonatkozó paraméter meghatározása, a másik a feladatok egyenletes elosztása, valamint a kommunikáció minimalizálása közötti egyensúlyra vonatkozó paraméter. Ez biztosítja azt a rugalmasságot, amely lehetővé teszi a felhasználó számára, hogy a célok között rangsorolni tudjon. 4 Az eredeti dekompozíciós algoritmus A Normalizált vágás Egy G = (V, E) gráf pontjai két különálló csoportra bontható, A-ra, illetve B,-re, melyekre igaz, hogy A B = V és A B =. Ezt a kiválasztott élek elvételével érhetjük el. Feltételezve, hogy az egyes élek adatok kommunikációját reprezentálják előre meghatározott élsúllyal, az eltávolított élek súlyainak összege a két diszjunkt halmaz közötti teljes adatkommunikáció. Gráfelméleti nyelven ezt a vágásnak hívjuk: cut A, B = 2 4,5 6 w u, v. (1) 7
Könnyen beláthatjuk, hogy dekompozíciós szempontból akkor járunk jól, ha ennek a vágás értékének a minimalizálására törekszünk. Számos gráf partícionáló algoritmus létezik [6], amely Jobb vágás Mincut1 Mincut2 4. ábra: Olyan eset, ahol a minimális vágás rossz eredményt ad megtalálja a minimális vágást. Ugyanakkor több tudományos munka is beszámolt már arról, hogy a minimális vágás kritérium kedvez a gráf kisebb izolált pontjai számára. Ez nem meglepő, hiszen az imént definiált vágás (1) nem veszi figyelembe az egyes szegmensek élsúlyainak összegét, és egymáshoz viszonyított számukat. A 4. ábra egy ilyen szituációt mutat be. Feltételezve, hogy az élek súlya fordítottan arányos a pontok közötti távolsággal, láthatjuk, hogy a Mincut1 vagy a Mincut2 vágásra relatív kicsi értéket kapunk. Beláthatjuk, hogy bármelyik vágás a jobb térrészen elvégezve kisebb eredményt fog hozni, mint ha középen vágnánk két partícióra az ábrát. Annak érdekében, hogy cut A, B A, és B csoport közel azonos számú pontot tartalmazzon, és egyik csoportot se egyetlen izolált pont alkosson, új típusú disszociációs leírást vezetünk be a gráfok partícionálásának érdekében. Az élek összsúlyának minimalizálása helyett az élek súlyát vesszük az összes élsúly hányadosában. A terminológiában ezt hívják Normalizált vágásnak: Ncut A, B = cut A, B assoc A, V cut A, B assoc B, V, (2) ahol assoc A, V = w(u, t) D E,F G az összes kapcsolat az A csoport és a G gráf összes pontja között, és assoc(b, V) is hasonlóan definiálható. Az Ncut A, B bevezetésével A, és B csoporthoz tartozó élek súlyának összege közel azonos lesz, ez nem hoz létre izolált pontokat. A fenti példát tekintve a normalizált vágás értéke nagyobb lesz Mincut1 és Mincut2 esetében. Papadimitriou által bizonyított [3], hogy a normalizált vágás egy NP teljes probléma, még az egyszerűbb gráfok esetében is. Ugyanakkor megtapasztalhatjuk, hogy a gyakorlatban létezik olyan diszkrét közelítő megoldás, ami hatékonyan fel tudja osztani a folyamatgráfot két csoportra a normalizált vágás követelményének megfelelően. 4.1 A partíciók meghatározása Adott egy gráf V pontjainak két partíciója A és B, illetve legyen x egy N = dim x = V dimenziós jelzővektor, mely x L = 1, ha az i-edik pont az A csoporthoz tartozik, és 1, ha nem. Legyen d i = R w(i, j) azon élek súlyainak összege, melyek az i-edik pontból indulnak ki, és az összes többi pontba tartanak. Az x, illetve a d vektorok definíciójának ismeretében újra felírhatjuk az Ncut A, B normalizált vágást, mint: 8
Ncut A, B = = cut(a, B) assoc(a, V) cut(a, B) assoc(b, V) = xw XY,x Z [Y w LR x L x R xw XY d L xw [Y,x Z XY w LR x L x R. xw [Y d L (3) Legyen D egy N N-es diagonális mátrix, melynek az átlója rendre a d vektor elemeit tartalmazza, W pedig szintén egy N N-es szimmetrikus mátrix, melyre igaz, hogy W i, j = w LR, k = xw XY d L, (4) L d L és 1 legyen egy N 1-es vektor, melynek mindegyik eleme 1-et tartalmaz. Vezessünk be x L > 0 és x L < 0 esetén új jelzővektorokat. Könnyen beláthatjuk, hogy 1dx illetve 1fx jelzővektorok kiváltják a pontok két csoportba osztására szolgáló x e L és x R vektorokat, hiszen 1-et, illetve 1-et behelyettesítve 0-át kapunk, mely segít kiválasztani azokat az éleket és ezáltal pontokat, amelyek az egyik partíció részét fogják képezni. Az új jelzővektorok nevezőjét átrendezhetjük az egyenlet másik oldalára, mivel ez a minimalizálási problémát nem fogja befolyásolni, ugyanakkor egyszerűsíti az egyenletünket. Ezeknek ismeretében átírhatjuk az Ncut(x) függvényünket 4 Ncut(x) -re a következőképpen: ez tovább alakítható: 4 Ncut(x) = 1 x h (D W)(1 x) k(1 h D1) 4 Ncut x = xh D W x 1 h D W 1 k 1 k 1 h D1 A továbbiakban legyen α x = x h D W x, e, 1 x h (D W)(1 x) (1 k)(1 h, (5) D1) 2(1 2k)1h D W x k(1 k)(1 h. (6) D1) β x = 1 h D W x, (7) γ = 1 h D W 1, és M = 1 h D1. (8) 9
Ezekkel a behelyettesítésekkel élve tovább alakíthatjuk az egyenletet: = α x γ 2(1 2k)β(x) k(1 k)m α x γ 2 1 2k β x k 1 k M 2 α x γ M = 2α x M 2γ M. (9) Az utolsó értéket elhagyhatjuk, hiszen γ = 0, mivel a (D W) mátrix pozitív szemidefinit. Ezután a tagokat összevonva a következő kifejezést kapjuk: = (1 2k 2ke ) α x γ 2(1 2k)β(x) k(1 k)m (1 2k 2k e ) 2(1 2k) (1 k) e α x γ (1 k) e β(x) Legyen b = o, és mivel γ = 0, ezért: pfo k (1 k) M = (1 be ) α x γ 2(1 b e )β(x) bm 2α x M = 2α x M. 2bα x bm = = (1 be ) α x γ bm 2(1 be )β(x) bm 2bα x bm 2bγ bm. Az α(x), β(x), γ, és M kifejezéseket visszahelyettesítve: = 1 be (x h D W x 1 h D W 1) b1 h D1 2bxh D W x b1 h D1 = 1 x h (D W)(1 x) b(1 h D1) 2(1 be )1 h D W x b1 h D1 2b1h D W 1 b1 h D1 = be 1 x h (D W)(1 x) b(1 h D1) 2b 1 x h (D W)(1 x) b(1 h D1) = = 1 x b 1 x h (D W) 1 x b 1 x b(1 h D1). 10
Válasszunk x jelzővektor helyére egy új, y vektort: y = 1 x b(1 x). Fontoljuk meg, hogy ha y vektort használjuk a pontok csoportba rendezésére, akkor y h D1 = d L x W XY b x W [Y d L = 0, (10) mivel b = o pfo = xw rs d W xw ts d W, azaz az egyik csoportban szereplő élek számosságát ki lehet fejezni a másik csoportban lévő élek számosságának és b-nek szorzatával. Miután levezettük, hogy y h D1 = 0, lássuk be, hogy y h Dy = b1 h D1, hiszen mindent összevetve y h Dy = d L x W XY b e d L x W [Y = b d L b e d L x W [Y x W [Y = (11) = b d L b d L x W [Y x W [Y = b1 h D1. Ha az eredeti feladatot tekintjük, az Ncut(x) függvényt a fentiek alapján átírhatjuk a következő minimalizálási problémára: min Ncut x = min x y y h (D W)y y h Dy, (12) megfelelve a következő feltételeknek: y h D1 = 0 és y(i) 1, b, tehát az y jelzővektor az i-edik pontra vonatkozóan nem a diszkrét 1 vagy 1 értéket fogja adni. Erre a későbbiekben még visszatérünk. Az y vektor szerinti minimalizálási probléma már egy jó közelítéssel megoldható feladat. Vegyük észre, hogy a fenti kifejezés egy Rayleigh hányados [3]. Ha y R, akkor minimalizálhatjuk (12)-es egyenletet a generált sajátérték rendszer megoldásával, D W y = λdy. (13) Mindemellett két kényszerünk is van y-ra nézve, amelyek az x jelzővektor feltételeiből adódnak. Először is gondoljunk az y h D1 = 0 feltételre. Láthatjuk, hogy ez a feltétel automatikusan kielégül az generált sajátérték rendszer kiszámításával. Vegyük a (13)-as egyenletet, transzformáljuk át standard sajátérték rendszerre, és lássuk be, hogy az előbbi feltétel kielégül. A (13)-as egyenletet felírhatjuk a következőféleképpen: D fp e D W D fp ez = λz, (14) 11
ahol z = D z {y. Könnyedén ellenőrizhetjük, hogy z Y = D z {1 a 0-ás sajátértékhez tartozó sajátvektor, melyet az áttranszformált sajátérték rendszerből írtunk fel. Ezek alapján az első feltétel igaznak bizonyul, hiszen z Y = D z {1-t behelyettesítve a (14)-es egyenletbe a következőt kapjuk: D fp e D W D fp ed p e1 = λd p e1 D fp e D W 1 = λd p e1 (15) D W 1 = λd1. Továbbá tudjuk, hogy (D W), akárcsak D fz { D W D fz {, pozitív szemidefinit mátrixok. (D W) mátrixot másnéven Laplace mátrixnak is szokták nevezni. A Laplace mátrixban a sorok és az oszlopok összege 0, tehát ha a (15)-ös egyenlet alsó sorát tekintjük, beláthatjuk, hogy az egyenlet bal oldala ekvivalensen nullvektort eredményez, tehát D W 1 = 0, ami csak akkor lehet, ha az egyenlet jobb oldalán λ = 0. Ennélfogva z Y a legkisebb sajátértékhez, tehát a 0-hoz tartozó sajátvektora lesz a (14)-es egyenletből generált sajátérték rendszernek és az összes egyenlethez tartozó sajátvektor merőleges lesz egymásra. Feltételezve, hogy a sajátértékek szerint növekvő sorrendben számozzuk a sajátvektorokat, z p a második legkisebb sajátértékhez tartozó sajátvektor, amely merőleges z Y -ra. Ha az előbbi állításokat visszahelyettesítjük a (13)-as egyenletben szereplő generált sajátérték rendszerbe, a következőket kapjuk: 1) y Y = 1 a legkisebb sajátértékhez tartozó sajátvektor, és 2) z p h z Y = 0, behelyettesítve z = D z {y, illetve z Y = D z {1 kifejezéseket, láthatjuk, hogy y p h D1 = 0, ahol y p a második legkisebb sajátvektora a (13)-as egyenletnek. Tekintsünk meg egy egyszerű tényt a Rayleigh hányadossal kapcsolatban[3]: A fentieket figyelembe véve: Legyen A egy valós, szimmetrikus mátrix. Azzal a kikötéssel, hogy x ortogonális, tehát x p,, x Rfp vektorok merőlegesek egymásra, a hányados x Ax minimalizálható a következő legkisebb sajátvektorral, x x x R -vel, és a minimum értéke a hozzá tartozó sajátérték, λ R. z p = arg. min z z s ƒy z h D fp e D W D fp ez z h z, (16) és következetesen: y p = arg. min y D1ƒY y h (D W)y y h Dy. (17) 12
Így a generált sajátvektor rendszer második legkisebb sajátértékhez tartozó sajátvektora fogja adni a valós megoldást a normalizált vágás problémához. Azonban sajnos ez az algoritmus nem szolgálja ki teljes mértékben az eredeti problémánkat, mivel az y vektor egyes elemei nem a két diszkrét értéket veszik fel, hanem egy valós számot 1 és b között. Később látni fogjuk, hogy ez a módszer nem feltétlen hátrányos a dekompozíciós algoritmus számára, hiszen a folytonos egyenesen felvett valós értékek bizonyos rugalmasságot engednek meg a felhasználó számára. Az 6. fejezetben visszatérünk rá, hogy hogyan kell a második legkisebb sajátvektor adataiból előállítani a partícionálásra szolgáló diszkrét értékeket. 5 A módosított dekompozíciós algoritmus A Súlyozott Normalizált vágás 5.1 A normalizált vágás hibái Az előző fejezetben láthattuk, hogy bár a Normalizált vágás NP teljes probléma, egy jó közelítő algoritmussal meg tudjuk oldani a minimalizálási feladatot. Azonban ez az algoritmus nem ültethető át teljes egészében a gyakorlati alkalmazásba HMS rendszerek esetén, mert számos problémát tartalmaz, ami alkalmatlanná teszi a folyamatgráf dekompozíciójára. Shi és Malik a Normalizált vágás algoritmusát kép szegmentálás céljából fejlesztették ki, melyben a pixelek közötti színátmenetet a gráf egyes éleinek súlyával jelölik. A pontoknak önmagukban nincs tulajdonságuk, ezért a normalizált vágás egyenletében (Ncut(x)) nem szerepelnek szignifikáns tulajdonságaik szerint, csupán x L jelzővektorokban, melyek az egyenletben figyelembe vett élek kiválasztására szolgálnak. Azonban a multiprocesszoros rendszerek esetében a folyamatgráf pontjai tartalmazzák az egyes műveletek számítási igényeit, melyet v(i)-vel, a pontok súlyának értékeivel tudunk kifejezni. Ez többnyire megszabja a processzor műveletvégzési idejét, így ügyelnünk kell arra, hogy mennyi feladattal látjuk el az egyes komponens processzorokat. Olyan algoritmusra van szükség a folyamatgráf dekomponálásához, amely figyelembe veszi nem csak a vágás értékét és az egyes csoportban található élsúlyok összegének egyenlőségét, hanem azt is, hogy a két szegmensbe kerülő pontok összsúlya közel azonos legyen. Ezek alapján ha v(i) V, akkor: v(i) v i 5(L) 4 5 L 6 0, (18) feltéve, hogy A B =. Ez visszavezet a 4. fejezetben tárgyalt izolált pontok problémájához, hiszen beláthatjuk, hogy a (18)-as egyenlet, illetve a min Cut(A, B) egyidejű teljesülésével szintén garantálni tudjuk, hogy a vágás ne eredményezzen izolált pontokat. A Normalizált vágásnak ismerjük egy másik fontos problémáját, mely a komponens processzorokra vonatkozik. Az algoritmus nem tudja megkülönböztetni az egyes komponens processzorok típusát, mivel a különböző feladatok súlyát mi magunk, vagy éppen a folyamatgráf előállító algoritmus határozza meg, bizonyos megfontolások alapján. Nincs referencia arra vonatkozóan, hogy az egyes komponens processzorok az adott feladatokat mennyi idő alatt, és milyen hatékonysággal tudják elvégezni. Továbbá ha néhány feladat műveletvégző egységeit előre kijelöljük, akkor a gráf egyes pontjait rákényszerítjük egy 13
bizonyos szegmensbe tartozásra. Ez meggátolja az algoritmus működését, hiszen ellentmondhat a minimalizálási problémának, ezért a továbbiakban rendszerünket homogénnek tekintjük. A későbbiekben az ütemező HLS Tool-ok segítségével kiszűrhetők és beütemezhetők azok a feladatok, melyeket más komponens processzorok hatékonyabban oldanak meg. A következőkben bemutatott Súlyozott Normalizált vágás algoritmus csak a pontsúlyok egyenletes elosztásának problémáját tudja megoldani, heterogén rendszertervezés ezzel az algoritmussal polinom időben nem kivitelezhető. 5.2 A Súlyozott Normalizált vágás Elméleti megközelítés Modellezzük a problémát a 4. fejezetben már megismert ponthalmazzal. Adott egy G = (V, E) gráf, w LR E és legyen w LR d i, j, (19) ahol d(i, j) az i-edik és a j-edik pont közötti távolságot jelöli. Minél közelebb van egymáshoz két pont, az őket összekötő él súlya annál nagyobb. Beláthatjuk, hogy ha P L x, y és P R (x, y) pontot a végtelenségig közelítjük egymáshoz, távolságuk infinitezimálisan kicsi lesz, határértéke 0: lim W Z d(i, j) = 0, (20) a fordított arányosság miatt pedig: lim (L,R) Y w LR =. (21) A fentiek értelmében ha a P L pont tart P R -hez, w a -be divergál, ennek következtében az Ncut(x) algoritmus a pontokat azonos szegmensbe fogja besorolni, tehát P L, illetve P biztosan egy csoportba kerülnek, mivel a korábban tárgyalt generált sajátérték rendszer megoldása során (13) az x vektorban a hozzá tartozó értékük azonos lesz. Tételezzük fel, hogy P pont infinitezimálisan kicsi környezetében pontosan v i 1 darab pont helyezkedik el, tehát az eredeti pontot is számításba véve P L,5 L, P L,5 L fp, P L,5 L fe P L,e, P L,p, mely pontok mind kapcsolatban vannak egymással, és az őket összekötő élek súlyát w L,o = -nek tekintjük. Vegyük észre, hogy ezek a pontok egy K 5(L) teljes gráfot alkotnak, mely az előbbi P L,o pontokkal kibővített G gráf klikke, tehát: K 5 L V, E G V, E, (22) 14
mely valódi részgráf az eredeti gráf P pontját helyettesíti v i súlyt reprezentálva. Vizsgáljuk meg az eredeti G, az új G gráf és K 5(L) pontjai, valamint élei közötti kapcsolatot. Vegyük az alábbi ábrán látható egyszerű példát: P fp P P dp 5. ábra: Teljes gráf növesztése P pontra Láthatjuk, hogy P egyaránt szerepel a zöld színnel jelölt K 5(L) és az eredeti, fekete színnel jelölt G gráfban is, ahol súlyát E = v i = 5-re állítottuk be. Beláthatjuk, hogy E E = P L, tehát a két részgráf egyetlen közös pontja P, vagyis a Normalizált vágásban bevezetett x jelzővektorunk x(i)-edik pontjához kapcsolódó élek nem szűnnek meg, így azok továbbra is kijelölhetők maradnak. Lássuk be, hogy a G gráf minimális vágása sosem fogja tartalmazni V ž egyetlen elemét sem, hiszen ha V V =, V V Ÿ = V, (23) hiszen V és V diszjunkt halmazok, és akkor lim L R w LR WZ =, (24) min Cut(G, x) = min Cut(G, x). x x (25) A fentiek értelmében két kényszerünk is van arra nézve, hogy a minimális vágás nem fogja elvágni K 5 L teljes részgráfot. 1) V és V diszjunkt halmazok, ezért ha az eredeti G gráfhoz hozzávesszük a teljes gráfot, V halmaz elemei, és a rajtuk végzett minimális vágás sértetlen marad. 2) Ha a teljes részgráfot összekötő élek értékét közelítőleg -nek tekintjük, a minimalizáló algoritmus sohasem fogja őket kiválasztani, hiszen G gráf élei továbbra is rendelkezésre állnak az algoritmus számára, amely minimalizálásra törekszik. Azonban vegyük figyelembe, hogy egy gráf élsúlyának értéke a valóságban nem lehet, ami az előbb vizsgált 2. kényszernek mond ellent. A Súlyozott Normalizált vágás Gyakorlati megközelítés című alfejezetben bebizonyítjuk, hogy tudunk egy olyan felső becslést adni a klikk éleinek súlyára, amely minden esetben elegendő lesz ahhoz, hogy ne vágja el a teljes részgráfot. E mellett megoldást adunk az imént vizsgált élsúlyok pontok szerinti kezelésére, amely az egyenletes pontsúlyok alapján történő elosztást fogja biztosítani. 15
Ezen kívül számolnunk kell még egy fontos problémával. Vegyük észre, hogy a 4. fejezetben a vágás normalizálására az assoc(a, V), illetve az assoc(b, V) kifejezések szolgálnak, melynek definíciója assoc X, V = D,F G w(u, t). Ennek értelmében a (2)-es egyenlet minimalizálása nem a gráf pontjait osztja egyenletesen két részre, hanem arra ügyel, hogy az p p értéke minimális legyen. A feltétel az élsúlyok összegének egyenletes E,G ª,G eloszlását biztosítja, ami nem feltétlen egyezik meg a pontsúlyok egyenletes elosztásával, ezért más módon kell garantálni az pontsúlyok összegének egyenlőségét az egyes szegmensekben. A probléma megoldásával a következő fejezetben foglalkozunk. 5.3 A Súlyozott Normalizált vágás Gyakorlati megközelítés Egy G = (V, E) gráf pontjai két diszjunkt halmazra bontható A-ra, illetve B-re. A korábban megismert Ncut(A, B) analógiájára felírhatjuk az új, Súlyozott Normalizált vágást, (Weighted Normalized cut) WNcut(A, B): WNcut A, B = cut(a, B) assoc A, V sum(a) cut(a, B) assoc B, V sum(b), (26) ahol a cut A, B = 2 4,o 6w(u, k) -t jelöli, tehát a vágásban szereplő élek összsúlya, assoc A, V = D E,F G w(u, t) az összes kapcsolat az A csoport és a G gráf összes pontja között, sum A = L 4 v(i), vagyis az A csoportban szereplő pontsúlyok összege. Az assoc B, V és sum(b) kifejezéseket hasonlóképpen definiáljuk azzal a kivétellel, hogy nem az A, hanem a B csoportra vonatkoztatjuk őket. Idézzük fel a 4. fejezet elején bevezetett N = V dimenziós x jelzővektort, mely 1 vagy 1 diszkrét értékeket vesz fel a gráf pontjainak hovatartozása függvényében. Definiáltuk d i vektort, mint azon élek súlyainak összegét, melyek az i-edik pontból indulnak ki, és az összes többi pontba tartanak. A fentiek ismeretében a (3)-as egyenletet átírhatjuk a következő képpen: WNcut x = xw XY,x Z [Y w LR x L x R xw XY d L xw XY v L xw [Y,x Z XY w LR x L x R. (27) xw [Y d L xw [Y v L Legyen D a már korábban megismert N N-es diagonális mátrix, melynek az átlója rendre a d vektor elemeit tartalmazza, D pedig egy M M-es diagonális mátrix, ahol M = ± Lƒp v(i), (28) és átlója rendre d vektor elemeit tartalmazza. A d vektor d és d elemeit tartalmazza, mely d az i-edik pontra növesztett, K 5(L) klikk pontjaiból kiinduló élek súlyának összegeit tartalmazza: d L = w Ro. Z²,W (29) 16
Ennek analógiájára a W szintén egy N N-es szimmetrikus mátrix, mely a Normalizált vágás algoritmusából megismert G gráf szomszédossági mátrixa, és W i, j = w, tehát a gráf élsúlyait tartalmazza. W pedig legyen egy M M-es mátrix, mely tartalmazza az i-edik pontra növesztett, K 5(L) klikk éleit is, a d vektor szerinti sorrendben elhelyezkedve. Vegyük észre, hogy K 5(L) teljes gráf éleinek száma kölcsönösen egyértelműen függ = v i -től, vagyis a gráf pontjainak számától: E V = E E 1 2. (30) Lássuk be, hogy a kölcsönösen egyértelmű függvénykapcsolat következtében az eredeti G gráf pontsúlyait az egyes pontokra illesztett teljes gráf élei képesek reprezentálni. Azonban az összefüggés négyzetes, ezért minden egyes, a gráfban szereplő klikk esetén, az őket összekötő élek száma csoportonként összeszámolva azt eredményezné, hogy a pontok nem lennének egyenlően elosztva. Ezt korrigálni tudjuk, ha a G-ben szereplő klikkek élsúlyát nem konstansnak tekintjük, hanem külön-külön értéket adunk nekik: w Ro, žw = 2 E,L 1 w L, (31) ahol w L az a minimális élsúly, amely mellett az algoritmus nem fogja elvágni a klikk éleit. A fenti egyenlet alapján pedig v i = w Ro, žw. WZ,W (32) e A fentiek értelmében ha D és W mátrixban a klikkek éleinek súlyát kicseréljük w fp L - re, ekkor a pontok súlyát a pontok helyére helyettesített részgráf éleinek összsúlya fogja reprezentálni. A klikkek alkalmazása és az élsúlyok korrigálása után a 4 Ncut(x) függvényt: 4 Ncut(x) = 1 x h (D W )(1 x ) k (1 h D 1 ) átírhatjuk 4 WNcut(x) -re a következőféleképpen: 4 WNcut(x) = 1 x h (D W)(1 x) k(1 h D1) 1 x h (D W )(1 x ) (1 k )(1 h, (33) D 1 ) 1 x h (D W)(1 x) (1 k)(1 h. (34) D1) Az új függvényben k = xw rs d W d W W, és 1 legyen egy M 1-es vektor. Az x jelzővektor új dimenziója dim x = M. A korábban már megismert (19)-es egyenlet feltételei a gyakorlati megvalósítás során sérülnek, hiszen nem választhatunk élsúlynak -t. Azonban létezik olyan módszer, amivel felső becslést adhatunk arra nézve, hogy mekkorának kell lennie a klikk élsúlyainak, annak 17
érdekében, hogy min x Cut(G, x) = min x Cut(G, x) igaz maradjon. A definícióból adott, hogy D mátrix az egyes pontokhoz tartozó élek összsúlyait tartalmazza. Beláthatjuk, hogy ha a gráfban található összes él súlyát összeadjuk, akkor még legkedvezőtlenebb esetben is: tr D 1 x h (D W )(1 x), (35) tehát a D mátrix trace-e biztosan nagyobb lesz, mint a vágás értéke a lehető legrosszabb esetben, amikor az összes él szerepel a vágásban. Ennél fogva ha a klikk száma kisebb, mint az eredeti G gráf minimális vágása, és a klikk éleinek tr D -t választjuk, a minimális vágás ez esetben sem fogja tartalmazni V elemeit. Az 5.2 fejezetben szereplő 1. kényszer, illetve az előbb tett becslés alapján a minimális vágás nem fogja tartalmazni W W halmaz elemeit, ezáltal a klikkek éleinek nincsen hatása a kibővített G gráfra. Most lássuk be, hogy a Normalizált vágás sem fogja megváltoztatni G gráf minimális vágását. Legyen: Θ x = 1 x T D W 1 x, (36) ahol a Θ x függvény valamely x vektor által kijelölt vágás értékét jelenti. Továbbá ha definiáljuk: φ x = k = xw XY d L, (37) L d L akkor a (28) egyenletből felírhatunk egy egyenlőtlenséget (34). Az alábbi egyenlőtlenségben vizsgáljunk meg két esetet, melyben két különböző felosztás szerint analizálunk. Az x p jelzővektort tartalmazó esetben a vágás nem tartalmazza egyetlen klikk élét sem, x 2 esetében pedig a vágást úgy jelöltük ki, hogy az egyik klikk valamely élét elvágja. Igazoljuk, hogy optimális esetben egy klikk éleit is tartalmazó vágás értéke soha nem lehet kisebb, mint ha a vágás egyetlen klikk élét sem tartalmazza, vagyis a Rayleigh hányados felírásával generált sajátérték rendszer minimalizálása után az algoritmus a bal oldali esetet fogja adni: Θ x p tr D φ x p Θ x p tr D (1 φ x p ) < Θ x e tr D φ x e Θ x e tr D (1 φ x e ) Θ x p tr D φ x p (1 φ x p ) < Θ x 2 tr D φ x 2 (1 φ x 2 ). (38) Mivel tr D R d, ezért azt kiejthetjük az egyenlőtlenségből, ezzel is igazolva, hogy a minimális vágás értéke nem függ a kibővített gráf klikkjeitől. Továbbá felhasználjuk azt a tényt, hogy φ x (1 φ x ) Θ x R d : Θ x p φ x p (1 φ x p ) < Θ x 2 φ x 2 (1 φ x 2 ) (39) 18
Lássuk be, hogy x e vágás esetén Θ x 2 értéke minimum: Θ x 2 Θ x 1 tr D, (40) mivel a két vágás között az a különbség, hogy x e tartalmazza valamelyik klikk legalább egy élét, mely eredményeképpen x e vágás belevág a teljes részgráfba. Θ x p Θ x p tr D < φ x p (1 φ x p ) φ x 2 (1 φ x 2 ) (41) Ha x p -t és x e -t a lehető legrosszabbnak választjuk, vagyis majdnem összes élet kijelöljük velük, az egyenlőtlenség bal oldalán a lehető legnagyobb érték maximum 0,5 lehet, hiszen tr D Θ x, ezért a legkedvezőtlenebb esetben FÀ D FÀ D dfà D = 0,5. Ha a legkedvezőtlenebb esetet tekintjük, tehát mindkét jelzővektort csupa egyre állítjuk be, akkor az egyenlet jobb oldalán: φ x p (1 φ x p ) 1, (42) φ x 2 (1 φ x 2 ) ami nagyobb 0,5-nél. A minimalizáló algoritmus φ x 2 = (1 φ x 2 )-re fog törekedni, és ebben az esetben a nevezőben 0,25-öt található, akkor kiszámolható, hogy mekkora az a felosztási arány, aminél az egyenlőtlenség már nem lesz igaz. Számítások alapján a pontok 15% 85%-os felosztási aránynál rosszabb eredmények esetén nem fog teljesülni az egyenlőtlenség, mely a minimalizálási probléma miatt a gyakorlatban soha nem fog előfordulni, hiszen egyenlő felosztásra törekszünk. A fenti levezetésből láthatjuk, hogy w Ã Ä = tr D -re érdemes beállítani, azonban figyelembe kell vennünk a korábban tárgyalt teljes gráf pontjai és élei közötti összefüggést. Az egyes éleket úgy kell meghatározni, hogy a legkisebb pontszámú klikkhez tartozó élek súlyai tr D legyen. Ahhoz, hogy ez teljesüljön, a (26)-os egyenletben szereplő w L -t át kell írni w L (max v i 1) w L L -re, ezáltal biztosíthatjuk a fent leírt követelményeket. Ezek alapján az egyes klikkek élsúlyai a következőképpen határozhatók meg: w Ro, žw = 2 (max v i 1) tr D L E,L 1. (43) A kibővített gráf élsúlyainak ismeretében felírható D és W mátrixból, az új M dimenziós x jelzővektor segítségével a (28)-as egyenlet, mely a Normalizált vágással megegyező algoritmussal tovább alakítható b = o = ÇW rs W bevezetésével a következőre: pfo ÇW ts W WNcut(x) = 1 x b 1 x h (D W) 1 x b 1 x b(1 h D1). (44) 19
A 4. fejezetben megismert módszerek segítségével a fenti egyenlet átírható: WNcut y = yh D W y y h, (45) Dy y = 1 x b(1 x) helyettesítéssel. Az ebből generált sajátérték rendszert felírva és áttranszformálva standard sajátérték problémára, a következőket kapjuk: D fp e D W D fp ez = λz, (46) A korábban tárgyalt Rayleigh hányadossal kapcsolatos kritériumokat és állításokat alkalmazva a fenti egyenletre, megkaphatjuk a minimalizálás módszerét: z p = arg. min z z s ƒy z h D fp e D W D fp ez z h z, (47) és következetesen: y p = arg. min y D1ƒY y h (D W)y y h Dy. (48) Az eredeti, Normalizált vágás algoritmushoz hasonlóan, a generált sajátérték rendszer második legkisebb sajátértékéhez tartozó sajátvektor fogja megadni a megoldás kulcsát. Azonban, ahogy azt már a Normalizált vágásnál láthattuk, a Súlyozott Normalizált vágásnál sem ad y p vektor diszkrét megoldást, hanem a priorítások függvényében ki lehet választani több realizációt is a probléma megoldására. Összefoglalva a Súlyozott Normalizált vágást minden olyan gráf partícionálására ajánljuk, melyek pontsúlyokat is tartalmaznak, továbbá elsődleges célpontok között szerepel a vágás minimalizálása, valamint a pontok súlyuk szerinti egyenlő eloszlása. 6 A csoportosító algoritmus A priorítási sorrendek érvényre jutása Ebben a fejezetben megismerhetjük azokat a módszereket, amely az előző részben kapott y sajátvektorból diszkrét megoldást ad a folyamatgráf partícionálására, a felhasználó által megadott priorításoktól függően. A Súlyozott Normalizált vágás használatát feltételezve a felhasználó az SLS algoritmus bemeneti paramétereként megadhatja a gráf partícióinak a számát, illetve azt, hogy mit preferál jobban; a vágás minimális értékét, vagy a pontsúlyok teljesen egyenletes eloszlását. Az egyes komponens processzorok által megvalósított partíciók számának meghatározása független y sajátvektortól, ezért ezzel a feltétellel külön fogunk foglalkozni a későbbiekben. A további bemeneti paramétereket (pl.: a processzorok kapacitása, áruk, utasítás-végrehajtási idejüket, 20
párhuzamos feldolgozásra való alkalmasságukat) a csoportosító algoritmus nem tudja figyelembe venni. A diszkrét megoldástól függően a pipeline működés szükségességét és a beállítások elvégzését a HLS Tool állapítja meg, mely az SLS algoritmus utolsó lépése. A következő eljárás a bemutatja, hogy hogyan állapítsunk meg diszkrét megoldást a felhasználó által megadott paraméterből, mely azt hivatott jelölni, hogy mire törekedjünk jobban: a processzorok közötti adatkommunikáció, vagyis a vágás értékének minimalizálására, vagy a feladatok processzoronkénti teljesen egyenletes elosztásra, mely a tervező által megadott követelmények közül a minimális kitöltöttségre van hatással. 6.1 Minimális kommunikációs teher versus egyenletes feladatelosztás Beláthatjuk, hogy a kommunikációs teher minimalizálása, vagyis a vágás értékének minimalizálása és a feladatok feldolgozóegységek közötti egyenletes feladatmegosztás az esetek nagy többségében nem teljesülhet egyidejűleg. Ezért meg kell adnunk a csoportosító algoritmusnak egy vezérelvet, ami az y sajátvektorban található értékek alapján megállapítja, hogy az egyes pontok melyik szegmensbe tartoznak. Két fő elvet ismerünk a pontok csoportokba osztására: 1) Az y(i) vektor elemeiből képzett számtani közép alkalmazása, mint választópont. Ennek értelmében ha y(i) > 1 dim (y) É Ã (Ê) ƒp y(i) akkor különben P L A P L B (49) tehát ha y vektor i-edik eleme nagyobb, mint a vektorból képzett számtani közép, akkor az A csoportba tartozik, ha pedig kisebb, akkor B csoportba. Egyenlőség esetén a tervező maga dönthet a pont hovatartozásáról a vágás értéke és a pontok eloszlásának függvényében. Az így definiált választópontot a továbbiakban mean(y)-al jelöljük. 2) Ha a gráfot két teljesen egyenlő részre akarjuk osztani, akkor y elemeinek csoportba rendezéséhez a legjobb módszer a vektor alkotta adatsokaság mediánját alkalmazni választópontként. Az y vektor mediánját a továbbiakban median(y)-al jelöljük. Mediánnal történő csoportosítás esetén, ha y(i) > median(y) akkor P L A különben P L B (50) Beláthatjuk, hogy a második módszer választása egy erőltetett megoldást eredményez, hiszen a medián mindenképpen teljesen egyenletes feladatelosztást eredményez, amiből következik, hogy a gráf pontsúlyait reprezentáló klikkeket is elvághatja. Ennek kiküszöbölése érdekében ha a módszer elvágja a gráf egyik klikkjét, y vektor következő legkisebb, vagy legnagyobb értékét kell venni választópontnak, attól függően, hogy mean(y) kisebb vagy nagyobb median(y)-nál. Az első módszer választása szemben a második módszerrel a vágás értékét minimalizálja úgy, hogy közben ügyel a pontok lehető legegyenletesebb elosztására. Ez a módszer nem fogja elvágni a klikkek éleit, melyet az 5. fejezetben bizonyítottunk. 21
A sorba rendezett y vektor elemeit egy számegyenesre illeszthetve bejelölhetjük rajta mean(y)-t és median(y) értékét. Beláthatjuk, hogy e között a két érték között mozogva, a második módszert választjuk alapul és median(y)-tól indulva mean(y)-hez tartva, minél közelebb érünk hozzá, annál jobban érvényesül a minimális vágási érték. Megfordítva ugyanúgy igaz, hogy ha az első módszert vesszük alapul, mean(y)-től indulva median(y) felé haladva egyre jobban fog érvényesülni a pontok egyenletes eloszlása. Ez alapján definiálhatunk egy arányszámot, mely kifejezi, hogy melyik feltétel priorítása fontosabb számunka, az első, vagy a második: prior(y, p) = p mean y median(y) min mean y, median(y) (51) A fenti egyenlet prior(y, p) értéke fogja adni a felhasználó által kívánt választópontot, ahol (0 p 1) és p R kifejezi, hogy melyik feltétel érvényesülését szeretnénk jobban. 6.2 Folyamatgráf felosztása több partícióra Az eddig tárgyalt gráfokat mindig két részre osztottuk, azonban előfordulhat, hogy a folyamat felosztását a három, vagy több partíció tudná hatékonyan kiszolgálni. Erre két féle megoldást is létezik, melyeket röviden bemutatunk: 1) Rekurzív kétutas Súlyozott Normalizált vágás: A rekurzív Súlyozott Normalizált vágás algoritmus lépései összefoglalva: 1. Adott egy súlyozott G gráf, melyből a Súlyozott Normalizált vágás lépései szerint felírható W és D mátrixok. 2. Megoldjuk a D W y = λdy generált sajátértékrendszer problémát. 3. Felhasználjuk a második legkisebb sajátértékhez tartozó sajátvektort a 6.1 fejezetben megismert biparticionáló módszerekhez és megadjuk a diszkrét megoldást. 4. Ellenőrizzük a partícionált gráf stabilitását, hogy vágott-e klikk élet, illetve megfelelő-e a kapott eredmény. 5. Rekurzívan megismételjük az 1. 4. pontokat, feltételezve, hogy az egyes gráfok az előző felosztott gráf A vagy B részgráfja. 2) K-utas Súlyozott Normalizált vágás többszörös sajátértékeket felhasználva: A K-utas algoritmussal az előzővel ellenétben nem csak kettő hatvány számú partíciója lehet. A megoldási menete a 2., illetve 3. sajátértékhez tartozó sajátvektort használja fel, mely egy két dimenziós vektorteret generál, és ez szolgál a diszkrét eredmény kiértékelésére. A kiértékelő algoritmus több fajta is lehet, de a 2 dimenziós vektortér pontjainak csoportosítására legtöbbnyire a k-means algoritmust szokás alkalmazni. 22
7 Példa Vegyük a következő egyszerű példát: v(1) = 3 v(2) = 4 v(3) = 5 6. ábra: Három pontú gráf A fenti gráf minden élsúlyának értéke 1, pontjainak a súlya rendre 3, 4, 5. Az 5. fejezet alapján a kibővített gráf a következőképpen néz ki:!"!#!$ 7. ábra: A kibővített példagráf A kibővített gráfból felírható a szomszédossági mátrix. A szomszédossági mátrix főátlója nullvektor A kibővített gráf Laplace mátrixa: L = 1.0000-0.0200-0.0200-0.2449-0.2449-0.2449-0.2449 0 0 0 0 0-0.0200 1.0000-0.0200 0 0 0 0-0.3266-0.3266-0.3266 0 0-0.0200-0.0200 1.0000 0 0 0 0 0 0 0-0.4899-0.4899-0.2449 0 0 1.0000-0.2500-0.2500-0.2500 0 0 0 0 0-0.2449 0 0-0.2500 1.0000-0.2500-0.2500 0 0 0 0 0-0.2449 0 0-0.2500-0.2500 1.0000-0.2500 0 0 0 0 0-0.2449 0 0-0.2500-0.2500-0.2500 1.0000 0 0 0 0 0 0-0.3266 0 0 0 0 0 1.0000-0.3333-0.3333 0 0 0-0.3266 0 0 0 0 0-0.3333 1.0000-0.3333 0 0 0-0.3266 0 0 0 0 0-0.3333-0.3333 1.0000 0 0 0 0-0.4899 0 0 0 0 0 0 0 1.0000-0.5000 0 0-0.4899 0 0 0 0 0 0 0-0.5000 1.0000 1. táblázat: A kibővített gráf Laplace mátrixa A fent látható Laplace mátrixból jól kivehető, hogy az első három sora és oszlopa tartalmazza az eredeti gráf éleit. A mátrix bővítése pontonként történik, az egyes pontsúlyoknak 23