Aaaaeaiea
I?ia?aiiiia iaania/aiea
Nenoaia i?aaeiacia/aia aeey ?aaiou a naoe, a eioi?ie ethaua aeaa
eiiiuethoa?a iiaoo iaiaieaaoueny aeaiiuie ae?oa n ae?oaii. Ia ethaii
eiiiuethoa?a iiaeao auoue caiooaiii ianeieueei i?ioeannia. Eaaeaeue
i?ioeann iieo/aao aeaiiua /a?ac ii?ou eiii?oa e iiaeao ioneaoue aeaiiua
/a?ac ii?ou yenii?oa ii aeoaai aeaiiuo ae?oaei i?ioeannai.
Caione i?ia?aiiu inouanoaeyaony iiae oi?aaeaieai aeeniao/a?a, eioi?ue
?ani?aaeaeyao i?ioeannu ii eiiiuethoa?ai e onoaiaaeeaaao nayce iaaeaeo
i?ioeannaie. Aeey ii?iaeueiie ?aaiou aeeniao/a?a ia anao eiiiuethoa?ao
aeieaeia auoue caiouaia niaoeeaeueiay i?ia?aiia – iiieoi?. Iiieoi? ii
cai?ino aeeniao/a?a caioneaao i?ioeann, oeacaiiue a cai?ina, ia naiai
eiiiuethoa?a.
Ii?ou eiii?oa eniieuecothony eae i/a?aaee, e iie, iiaeiaii eaiaeai a IN
UNIX, aooa?ecotho iaeii eee iaeieueei niiauaiee aei oao ii?, iiea eo ia
iieo/eo aae?anao. Iauai aooa?a ia?aie/ai aeieueei aeinooiiie aieinoueth
iaiyoe. Eaaeaeue ii?o eiii?oa iiaeao auoue naycai n ianeieueeeie ii?oaie
yenii?oa.
Ii?ou yenii?oa iiaoo eiaoue ianeieueei eaiaeia, /enei eioi?uo
ii?aaeaeyaony aeeniao/a?ii iinea aiaeeca a?aoa aeaiiuo ia yoaia caionea
i?ioeanna. Eaaeaeue eaiae iaycaoaeueii naycai oieueei n iaeiei ii?oii
eiii?oa.
Iiaeaioiaea i?eeeaaeiie i?ia?aiiu e auiieiaieth ninoiec ec neaaeothueo
oaaia:
eiino?oe?iaaiea a?aoa iioiea aeaiiuo i?ia?aiiu
caienue a?aoa iioiea aeaiiuo ia ycuea a?aoia aeaiiuo DGL
ia?aaioea caiene ia ycuea DGL
iaienaiea i?eeeaaeiuo i?ia?aii aeey oceiauo i?ioeannia
eiiieeyoeey oceiauo i?ioeannia a oi?iao DLL
caione oceiauo i?ioeannia aeeniao/a?ii ia iniiaa DGL
I?eia? ia?aeeaeueiie i?ia?aiiu
A ea/anoaa i?eia?a ?aniio?ei caaea/o i?eaeeaeaiiiai au/eneaiey /enea Ie
n eniieueciaaieai i?aaeea i?yiioaieueieeia aeey au/eneaiey
ii?aaeaeaiiiai eioaa?aea
Niaeanii i?aaeeo i?yiioaieueieeia,
.
Neaaeoao ioiaoeoue, /oi yoi «i?ioeanni?iay» i?ia?aiia. Iia ia
cao?aaeaaao iiiaea i?iaeaiu ia?aeeaeueiiai i?ia?aiie?iaaiey, iai?eia?
e?eoe/aneia aeeyiea i?ioeannia aaiaea-auaiaea. Oai ia iaiaa yoa caaea/a
iiiiaeao iciaeiieony n iniiaiuie i?eioeeiaie iino?iaiey i?ia?aii,
?aaioathueo a niioaaonoaee n iaoiaeii oi?aaeaiey iioieii aeaiiuo.
Nouanoaoao iiiaeanoai iiaeoiaeia e ?aoaieth eiio?ieueiie caaea/e.
?aoaiea, i?eaaaeaiiia ieaea, eeethno?e?oao ana iniiaiua oaae ?ac?aaioee
i?ia?aiiu.
Eiino?oe?iaaiea a?aoa iioiea aeaiiuo i?ia?aiiu
A?ao iioiea aeaiiuo i?ia?aiiu (eee a?ao aeaiiuo) ii?aaeaeyao nayce
iaaeaeo i?ioeannaie e aeoaaie aeaiiuo. A?ao aeaiiuo niaoeeoeoee?oao ana
iineaaeoauaa eiino?oe?iaaiea i?ia?aiiu i?eeeaaeiie caaea/e. Aai
nicaeaiea iiaeao iio?aaiaaoue iaiaei oneeee aeey ii?aaeaeaiey oiai, eae
?acaeoue i?ia?aiio ia aeoeaece?oaiua aeaiiuie i?ioeannu, /oiau aeinoe/ue
iaeneiaeueiiai oaaee/aiey nei?inoe auiieiaiey.
A i?aaeaea ?ac?aaaouaaaiay i?ia?aiia iiaeao auoue nicaeaia a aeaea
iaeiiai i?ioeanna, ii i?e yoii oa?yaony ia?aeeaeaeeci. Iiaeii nicaeaoue
iiiaeanoai iaeeeo i?ioeannia, oaeeo eae iaeei iia?aoi? eee aeaaea iaeia
a?eoiaoe/aneay iia?aoeey, /oi i?eaaaeao e ?aceiio oaaee/aieth ?anoiaeia,
naycaiiuo n caioneii eaaeaeiai i?ioeanna e iaiaiii aeaiiuo iaaeaeo ieie.
Neaaeoao ioiaoeoue, /oi no?oeoo?a ?aoaaiie caaea/e /anoi iaaiaeeo ia
oi?ioaa ia?aia i?eaeeaeaiea.
Iinea oiai, eae a?ao aeaiiuo ia?eniaai, eaaeaeue i?ioeann, ia/aei e
eiiaoe eaaeaeie aeoae iiia/athony aoeaaiii-oeeo?iaui eiaiai, eioi?ia
eniieuecoaony a ycuea DGL.
Aeey iiaen/aoa /enea Ie eniieuecoaony ianeieueei ?aai/eo i?ioeannia,
eioi?ua au/eneytho naie /anoe eioaa?aea e ia?anueatho ?acoeueoao
noiie?othuaio i?ioeanno. ?aai/ea i?ioeannu ia?auathony ca i/a?aaeiui
caaeaieai e i?ioeanno ?ani?aaeaeaiey ?aaio. Any ?aaioa ia
?ani?aaeaeyaony ca?aiaa ?aaiiia?ii iaaeaeo i?ioeannaie: iaeei ?aai/ee
i?ioeann, anee ii caiouai ia aieaa auno?ie iaoeia, iiaeao auiieieoue
eueaeioth aeieth ?aaiou.
Caienue a?aoa iioiea aeaiiuo ia ycuea Data Graph Language
Ia?aaiae a?aoa iioiea aeaiiuo a ycue DGL niaa?oaaony iaeiicia/iui
ia?acii. A caiene ia DGL eaaeaeue i?ioeann i?aaenoaaeai caaieiaeii e
nieneii aoiaeiuo e auoiaeiuo ii?oia.
11 DATAFLOW GRAPH Pi;
12
13 NW = nprocs – 2
14
15 PROCESS Manager
16 EXPORT:
17 worker [NW] –> Worker [c]:arg;
18 num_iter –> Summer:num_iter;
19 IMPORT:
20 demand_list;
21 END
22
23 PROCESS Worker [NW]
24 EXPORT:
25 demand –> Manager:demand_list;
26 result –> Summer:part_sum;
27 IMPORT:
28 arg;
29 END
30
31 PROCESS Summer
32 IMPORT:
33 num_iter;
34 part_sum;
35 END
Caienue i?ia?aiiu au/eneaiey Ie ia ycuea DGL
Iinea ia?aaioee a?aoa i?ia?aiiie dglc, ia aeenea aoaeoo nicaeaiu
neaaeothuea oaeeu: Manager.dpr, Worker.dpr, Summer.dpr, ManagerUnit.pas,
WorkerUnit.pas, SummerUnit.pas. I/a?aaeiay caaea/a ninoieo a iaienaiee
i?eeeaaeiuo caaea/ aeey anao oceiauo i?ioeannia. Aeey yoiai ioaeii
nicaeaoue oaeeu ManagerBody.pas, WorkerBody.pas, SummerBody.pas.
Iaienaiea oaea aeey eaaeaeiai i?ioeanna
Eaaeaeue i?ioeann caienuaaaony a aeaea i?ioeaaeo?u ia ycuea Ianeaeue.
Eiy i?ioeaaeo?u – Body – oeene?iaaii e ia iiaeao auoue eciaiaii. Eiy
oaeea i?ia?aiiu ia/eiaaony n eiaie i?ioeanna e caeai/eaaaony neiaii
Body.
10 PROCEDURE Body;
11 VAR
12 Task : RECORD N:word; a,b:real; END;
13 i,WrkId : word;
14 CONST
15 N : word = 10;
16 BEGIN
17 Send (exportNUM_ITER, 0, N, SizeOf(word));
18 Task.N := 10*N;
19 Task.b := 0;
20 FOR i := 1 TO N DO BEGIN
21 Task.a := Task.b;
22 Task.b := i/N;
23 Receive (importDEMAND_LIST, WrkId, SizeOf(word));
24 Send (exportWORKER, WrkId, Task, SizeOf(Task));
25 END;
26 Task.N := 0;
27 FOR i := 1 TO expWORKER.NChannels DO
28 Send (exportWORKER, i, Task, SizeOf(Task));
29 END;
Oaee ManagerBody.pas : oaei i?ioeanna Manager
Ia?aiaiiay Task iienuaaao caaeaiea aeey ?aai/aai i?ioeanna: a,b –
a?aieoeu, N – /enei eioa?aaeia. Eiinoaioa N, iienaiiay a no?iea 15,
?aaia /eneo ?acaeaiee io?acea [0;1].
A ia/aea ?aaiou iinueaai i?ioeanno Summer /enei ?acaeaiee N (no?iea 17)
. A no?iea 23 aeaeai cai?ina io iaeiiai ec ?aai/eo i?ioeannia. Cai?in
i?aaenoaaeyao niaie eaeaioeoeeaoi? cai?aoeaathuaai i?ioeanna. Iieo/ea
cai?in, ionueaai i/a?aaeiia caaeaiea niioaaonoaothuaio ?aai/aio (no?iea
24).
Iinea oiai, eae caaeaiey ?ani?aaeaeaiu, ioaeii niiaueoue ia yoii anai
?aai/ei i?ioeannai. Aeey yoiai neoaeao no?iee 26-28: ii anai eaiaeai
ii?oa expWORKER iinueaai caaeaiea n ioeaaui /eneii eioa?aaeia – neaiae i
caaa?oaiee ?aaiou.
30 PROCEDURE Body;
31 VAR
32 Task : RECORD N:word; a,b:real; END;
33 S : real;
34 i : word;
35 FUNCTION f(x:real):real;
36 BEGIN
37 Result := 4 / (1 + x*x);
38 END;
39 BEGIN
40 Send (exportDEMAND, 0, GetProcessId, SizeOf(TProcessId));
41 WHILE (true) DO WITH Task DO BEGIN
42 Receive (importARG, Task, SizeOf(Task));
43 IF (Task.N = 0) THEN EXIT;
44 h := (b-a)/N;
45 S := 0;
46 FOR i := 1 TO N DO
47 S := S + f(a+(i-0.5)*h);
48 S := h*S;
49 Send (exportPART_SUM, 0, S, SizeOf(S));
50 Send (exportDEMAND, 0, GetProcessId, SizeOf(TProcessId));
51 END;
52 END;
Oaee WorkerBody.pas : oaei i?ioeanna Worker
Aaneiia/iue oeeee 41-51 iaania/eaaao ?aaioo i?ioeanna aei iieo/aiey
neaiaea caaa?oaiey io ?ani?aaeaeeoaey ?aaio Manager.
A no?iea 42 aeaeai i/a?aaeiia caaeaiea Task. Anee /enei eioa?aaeia a
caaeaiee ?aaii 0, oi caaa?oaai ?aaioo. A i?ioeaiii neo/aa au/eneyai
/anoe/ioth noiio ia eioa?aaea (Task.a; Task.b) e ionueaai aa
noiie?othuaio i?ioeanno (no?iee 44-49). A no?iea 50 ia?auaainy e
?ani?aaeaeeoaeth ?aaio ca i/a?aaeiui caaeaieai.
53 PROCEDURE Body;
54 VAR
55 N : word;
56 i : word;
57 TotalSum, S : real;
58 BEGIN
59 Receive (importNUM_ITER, N, SizeOf(N));
60 TotalSum := 0;
61 FOR i := 1 TO N DO BEGIN
62 Receive (importPART_SUM, S, SizeOf(S));
63 TotalSum := TotalSum + S;
64 END;
65 END;
Oaee SummerBody.pas : oaei i?ioeanna Summer
A no?ieao 61-64 niae?athony /anoe/iua noiiu io anao ?aai/eo i?ioeannia e
noiie?othony a ia?aiaiiie TotalSum. *enei /anoe/iuo noii caienuaaai a
ia?aiaiio N ec ii?oa impNUM_ITER (no?iea 59).
Eiiieeyoeey oceiauo i?ioeannia
A n?aaea Delphi iaiaoiaeeii ioeiiieee?iaaoue oaeeu Manager.dpr,
Worker.dpr e Summer.dpr. Iinea eiiieeyoeee aeieaeiu iiyaeony o?e iiauo
oaeea: Manager.dll, Worker.dll, Summer.dll.
Caa?ocea e auiieiaiea i?ia?aiiu
Nia/aea ia eiiiuethoa?ao naoe ioaeii caionoeoue i?ia?aiio-iiieoi?.
Ia?aieoai ioeiiieee?iaiiua oaeeu e oaee Pi.dgl n oaenoii a?aoa iioiea
aeaiiuo ia ycuea DGL a iaeei eaoaeia e caionoei aeeniao/a?, oeacaa
Pi.dgl a ea/anoaa ia?aiao?a.
I?eeiaeaiea A
Neioaenen ycuea DGL
DGL = [“DATAFLOW GRAPH” [identifier] “;”]
{Definitions}
{ProcessDecl}
Definitions = identifier “=” ConstExpr
ProcessDecl = “PROCESS” identifier [“AT” path]
[“[” ConstExpr “]” ]
{“EXPORT:”{ExportDecl} |
“IMPORT:”{ImportDecl}
}
“END”
ExportDecl = identifier [“[” ConstExpr “]”]
“–>”
identifier [“[” Expression “]”]
“:”
identifier “;”
ImportDecl = identifier “;”
ConstExpr = Expression
Expression = Term [AddOp Term]
Term = Fact [MulOp Fact]
Fact = number | identifier | “(” Expression “)”
AddOp = “+” | “-”
MulOp = “*” | “/”
Caia/aiey:
number – oeaeia iieiaeeoaeueiia /enei
ana iia?aoeee ycuea oeaei/eneaiiua
PAGE
PAGE 5
PAGE \# “‘No?: ‘#’
Нашли опечатку? Выделите и нажмите CTRL+Enter