Számítógép-architektúrák

A VIK Wikiből
(SzArDataFlowPelda szócikkből átirányítva)
Ugrás a navigációhoz Ugrás a kereséshez

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor kérlek javíts rajta egy rövid szerkesztéssel.

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót


Adatáramlásos (Data Flow) példa

Adott a következő kifejezés: *z := ((a*b) - (c/d))* Készítse el a kifejezés kiszámításának adatáramlásos (data flow) modelljét (adja meg a vonatkozó ai működtetőket, lj csatolókat, F1() és F2() függvényeket és az Mk markingokat.

Date: Tue, 19 Jan 2010 14:14:58 +0100
From: Szép Tamás <szep.tamas.89@gmail.com>
To: info2008@sch.bme.hu
Subject: [info2008] adatáramlásos modell
X-Mailer: Microsoft Office Outlook 11

Sziasztok!



Most, hogy valaki kérdezte ezt az adatáramlásos modell dolgot (rajtam kívűl
is) elmondanám, hogy én mit látok. Szerintem a két kezemen meg tudnám
számolni azokat, akik ezt értik, már csak azért is, mert senki nem mondta
eddig, hogy ami megoldás wikin fenn van, az TÖKÉLETESEN ROSSZ, látszik
rajta, hogy aki csinálta, az sem értette. Vegyünk egy példát:



3. Adott a következő kifejezés: z := ((a*b) - (c/d)). Két feldolgozó egység
áll rendelkezésre. Készítse el a kifejezés kiszámításának adatáramlásos
(data flow) modelljét (adja meg a vonatkozó ai működtetőket, lj csatolókat,
F1() és F2() függvényeket és az Mk markingokat (1,5 pont)



Szeretném felhívni mindenki figyelmét előljáróban, hogy 2 azaz kettő
feldolgozó egység áll rendelkezésre, aki tehát 3 dobozt rajzol, az biztosan
rosszul csinálja. Itt az a lényeg, hogy 2 dobozt kell rajzolni és az egyik
doboznak 2 különböző feladatot kell ellátnia. Az, hogy melyiket fogja
elvégezni a markingtól függ. Tehát:



Az élek jelölésére a kidolgozott példától eltérő, logikusabb jelölést
használok, melynek szignatúrája: (innen, ide).



A = { a1, a2 }

L = { l1, l2, l3, l4, l5, l6, l7 }

E = { (l1, a1), (l2, a1), (a1, l5), (l3, a2), (l4, a2), (l5, a2), (l6, a2),
(a2, l6) [visszacsatolás!], (a2, l7) }

M = { M1, M2, M3 } --> csak azokat a markingokat tüntetem fel, amelyek a
függvényleíráshoz szükségesek. Ehhez hozzávehető még egy M_init és egy
M_ending marking.

M1 = { l1, l2 }

M2 = { l3, l4 }

M3 = { l5, l6 }



F1(a1, M1) = l1 ^ l2	 x := a * b

F2(a1, M1) = l5



F1(a2, M2) = l3 ^ l4	y := c / d

F2(a2, M2) = l6



--> itt az M1 és M2 markingok helyett használhattuk volna M_init - et is, ha
nem szeretnénk különbontani. Nagyobb rendszerek leírásakor nincs értelme
megkülönböztetni minden állapotot, ekkor nem bontanánk külön.



F1(a2, M3) = l5 ^ l6  z := x - y

F2(a2, M3) = l7



--> a kivonást IS a kettes indexű működtető végzi, és nem egy hármas, mivel
csak 2 feldolgozó egységünk van.



És ezzel természtesen konzisztens már a táblázat:

+-----------------+---------------+--------------+
|Lépés/processzor | 1. processzor | 2.processzor |
+-----------------+---------------+--------------+
| 1. lépés		  |	 x := a * b |  y := c / d  |
+-----------------+---------------+--------------+
| 2. lépés		  |					|  z := x - y  |
+-----------------+---------------+--------------+



Ez az én megoldásom, ha valaki szerint nem jó, írjon nyugodtan. Üdv.:



Szép Tomi

Ehhez passzoló diagram:

%ATTACHURL%/df.gif

-- maat - 2010.01.19.

Annyit fűznék hozzá a dologhoz, hogy vizsgán sikerült megkapnom ezt a feladatot, és a fenti megoldást írtam le részletesen. NG javította, természetesen 0 pont. Amikor megkérdeztem hogy mi lett volna a jó megoldás, az alábbi megoldást mondta el. Azt mondta hogy 3 doboz kell.

-- Teve - 2011.01.09.

Rossz(?) megoldás

%ATTACHURL%/df.png

A = {a1, a2, a3} működtetők halmaza
L = {l1, l2, l3, l4, l5, l6, l7} csatolók halmaza
E ⊆ ((A × L) ∪ (L × A)) élek halmaza
E = { {a1, l1}, {a1, l2}, {a2, l3}, {a2, l4}, {l5, a1}, {l6, a2}, {a3, l5}, {a3, l6}, {l7, a3} }

F1(a1, M1) = l1 ^ l2
F2(a1, M1) = l5

F1(a2, M1) = l3 ^ l4
F2(a2, M1) = l6

F1(a3, M2) = l5 ^ l6
F2(a3, M2) = l7

M1 = {l1, l2, l3, l4}
M2 = {l7}


lépés 1. processzor 2.processzor
1 x = a * b y = c / d
2 z = x - y

-- DeVi - 2007.01.13.