Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Национальный Технический Университет Украины
“Киевский Политехнический Институт”
Факультет Информатики и Вычислительной Техники
Кафедра вычислительной техники
Лабораторная работа №7
по дисциплине “Параллельные и распределённые вычисления”
Выполнил студент 3-го курса
Группы ИВ-83
Гулевский Д. В.
Киев, 2011г.
Изучить механизм посылки сообщений на примере механизма рандеву при программировании в ПВС с ЛП.
математическая задача:
Задача T1
|
Задача T2
|
Задача T6
Задача T5, Т7
1. Получить MZН, MBН, a от Т3; 2. Получить MC от Т3; 3. Счет 4. Передать MАН в Т3; |
Задача T3
|
Задача T4
5. Получить MА6Н от Т3; 6. Вывод МА. |
GNAT GPL 2010 (20100603)
Copyright 1992-2010, Free Software Foundation, Inc.
Compiling: lab7.adb (source file time stamp: 2011-05-12 00:38:52)
1. -- **********************
2. -- Lab #7, Ada, Randevous
3. -- MA = MB+ Alpha(MC*MZ);
4. -- st. IO-83
5. -- Gulevsky Denis
6. -- 10/05/2011
7. -- **********************
8. WITH Ada.Text_IO;
9. USE Ada.Text_IO;
10. WITH Ada.Integer_Text_IO;
11. USE Ada.Integer_Text_IO;
12. with Ada.Synchronous_Task_Control;
13. use Ada.Synchronous_Task_Control;
14.
15. Procedure Lab7 is
16. N: integer:=7;
17. P: integer:=7;
18. H: integer:=N/P;
19.
20. Type Vector is array(Positive range<>) of Integer;
21. subtype VectorN is Vector(1..N);
22. Type T_Matrix is array (Positive range <>) of VectorN;
23. subtype MatrixHN is T_Matrix(1..H);
24. subtype Matrix4HN is T_Matrix(1..4*H);
25. subtype Matrix3HN is T_Matrix(1..3*H);
26. subtype MatrixNN is T_Matrix(1..N);
27. subtype Matrix6HN is T_Matrix(1..6*H);
28.
29.
30. function MatrixInput(a: in Integer) return MatrixNN is
31. ret: MatrixNN;
32. begin
33. For i in 1..N loop
34. For j in 1..N loop
35. ret(i)(j) := a;
36. end loop;
37. end loop;
38. return ret;
39. end MatrixInput;
40.
41. function calc(MZ: in MatrixHN; MC: in MatrixNN; MB: in MatrixHN; Alpha: in integer) return MatrixHN is
42. MA: MatrixHN;
43. begin
44. For i in 1..H loop
45. For j in 1..N loop
46. MA(i)(j) := MB(i)(j);
47. For q in 1..N loop
48. MA(i)(j) := MA(i)(j) + Alpha*MZ(i)(q)*MC(q)(j);
49. end loop;
50. end loop;
51. end loop;
52.
53. return MA;
54. end calc;
55.
56. procedure Start is
57. Task Task1 is
58. Entry Input12(MC: in MatrixNN);
59. End Task1;
60.
61. Task Task6 is
62. Entry Input62(MC: in MatrixNN);
63. Entry Input61(MZ: in MatrixHN; MB: in MatrixHN ; alpha: in integer);
64. End Task6;
65.
66. Task Task2 is
67. Entry Input21(MZ: in Matrix6HN; MB: in Matrix6HN ; alpha: in integer);
68. Entry Result21(MA:in MatrixHN);
69. Entry Result26(MA:in MatrixHN);
70. Entry Input22(MC : in MatrixNN);
71. End Task2;
72.
73. Task Task3 is
74. Entry Input31(MZ: in Matrix4HN; MB: in Matrix4HN ; alpha: in integer);
75. Entry Result32(MA:in Matrix3HN);
76. Entry Result35(MA:in MatrixHN);
77. Entry Result37(MA:in MatrixHN);
78. Entry Input32(MC : in MatrixNN);
79. End Task3;
80.
81. Task Task5 is
82. Entry Input52(MC: in MatrixNN);
83. Entry Input51(MZ: in MatrixHN; MB: in MatrixHN ; alpha: in integer);
84. End Task5;
85.
86. Task Task7 is
87. Entry Input72(MC: in MatrixNN);
88. Entry Input71(MZ: in MatrixHN; MB: in MatrixHN ; alpha: in integer);
89. End Task7;
90.
91. Task Task4 is
92. Entry Input41(MZ: in MatrixHN; MB: in MatrixHN ; alpha: in integer);
93. Entry Result43(MA:in Matrix6HN);
94. End Task4;
95.
96.
97. --------------------------------------------------------------
98. Task body Task1 is
99. MC1, MZ1, MB1: MatrixNN;
100. MA1: MatrixHN;
101. a1: Integer;
102. begin
103. Put_line("[Task 1] Started");
104. --1)Ввод MZ, MB, Alpha;
105. MZ1 := MatrixInput(1);
106. MB1 := MatrixInput(1);
107. a1 := 1;
108. --2)Передать MZ_6H, MB_6H, Alpha в Т2.
109. Task2.Input21(MZ1(H+1..7*H), MB1(H+1..7*H), a1);
110. --3)Получить МС
111. Accept Input12(MC: in MatrixNN) do
112. MC1 := MC;
113. end Input12;
114.
115. --4)Счет MA_H
116. MA1 := calc(MZ1(1..H), MC1, MB1(1..H), a1);
117. --5) Передать MA_Н в Т2
118. Task2.Result21(MA1);
119. Put_line("[Task 1] Finished");
120. End Task1;
121. --------------------------------------------------------------
122. Task body Task2 is
123. MC1 : MatrixNN;
124. MZ1, MB1: Matrix6HN;
125. MA1: Matrix3HN;
126.
127. a1: Integer;
128. begin
129. Put_line("[Task 2] Started");
130. --1) Получить MZ_6H, MB_6H, Alphа.
131. Accept Input21(MZ: in Matrix6HN; MB: in Matrix6HN ; alpha: in integer) do
132. MZ1 := MZ;
133. a1:= alpha;
134. MB1:= MB;
135. end Input21;
136. --2) Передать MZ_H, MB_H Alpha В Т6.
137. Task6.Input61(MZ1(H+1..2*H), MB1(H+1..2*H), a1);
138. --3) Получить МС.
139. Accept Input22(MC: in MatrixNN) do
140. MC1 := MC;
141. end Input22;
142. --4) Передать MZ_4H, MB_4H Alpha В Т3.
143. Task3.Input31(MZ1(2*H+1..6*H), MB1(2*H+1..6*H), a1);
144. --5) Передать МС в Т1.
145. Task1.Input12(MC1);
146. --6) Передать МС в Т1.
147. Task6.Input62(MC1);
148. --7) Cчет.
149. MA1(1+H..2*H) := calc(MZ1(1..H), MC1, MB1(1..H), a1);
150. --8) Получить МА_Н от Т1.
151. Accept Result21(MA: in MatrixHN) do
152. MA1(1..H) := MA;
153. end Result21;
154. --9) Получить МА_Н от Т6.
155. Accept Result26(MA: in MatrixHN) do
156. MA1(2*H+1..3*H) := MA;
157. end Result26;
158. --10) Передать МА_3Н в Т3.
159. Task3.Result32(MA1);
160. Put_line("[Task 2] Finished");
161. End Task2;
162. --------------------------------------------------------------
163. Task body Task6 is
164. MC1: MatrixNN;
165. MA1, MZ1, MB1: MatrixHN;
166. a1: Integer;
167. begin
168. Put_line("[Task 6] Started");
169. --1) Получить MZ_H, MB_H, Alphа.
170. Accept Input61(MZ: in MatrixHN; MB: in MatrixHN ; alpha: in integer) do
171. MZ1 := MZ;
172. a1:= alpha;
173. MB1:= MB;
174. end Input61;
175. --2) Получить МС
176. Accept Input62(MC: in MatrixNN) do
177. MC1 := MC;
178. end Input62;
179. --3)Счет MA_H
180. MA1 := calc(MZ1(1..H), MC1, MB1(1..H), a1);
181. --4) Передать MA_Н в Т2
182. Task2.Result26(MA1);
183. Put_line("[Task 6] Finished");
184. End Task6;
185. --------------------------------------------------------------
186. Task body Task5 is
187. MC1: MatrixNN;
188. MA1, MZ1, MB1: MatrixHN;
189. a1: Integer;
190. begin
191. Put_line("[Task 5] Started");
192. --1) Получить МС
193. Accept Input52(MC: in MatrixNN) do
194. MC1 := MC;
195. end Input52;
196. --2) Получить MZ_H, MB_H, Alphа.
197. Accept Input51(MZ: in MatrixHN; MB: in MatrixHN ; alpha: in integer) do
198. MZ1 := MZ;
199. a1:= alpha;
200. MB1:= MB;
201. end Input51;
202. --3)Счет MA_H
203. MA1 := calc(MZ1(1..H), MC1, MB1(1..H), a1);
204. --4) Передать MA_Н в Т2
205. Task3.Result35(MA1);
206. Put_line("[Task 5] Finished");
207. End Task5;
208. --------------------------------------------------------------
209. Task body Task7 is
210. MC1: MatrixNN;
211. MA1, MZ1, MB1: MatrixHN;
212. a1: Integer;
213. begin
214. Put_line("[Task 7] Started");
215. --1) Получить МС
216. Accept Input72(MC: in MatrixNN) do
217. MC1 := MC;
218. end Input72;
219. Put_line("blyanahui7");
220. --2) Получить MZ_H, MB_H, Alphа.
221. Accept Input71(MZ: in MatrixHN; MB: in MatrixHN ; alpha: in integer) do
222. MZ1 := MZ;
223. a1:= alpha;
224. MB1:= MB;
225. end Input71;
226. --3)Счет MA_H
227. MA1 := calc(MZ1(1..H), MC1, MB1(1..H), a1);
228. --4) Передать MA_Н в Т2
229. Task3.Result37(MA1);
230. Put_line("[Task 7] Finished");
231. End Task7;
232. --------------------------------------------------------------
233. Task body Task3 is
234. MC1 : MatrixNN;
235. MZ1, MB1: Matrix4HN;
236. MA1: Matrix6HN;
237. a1: Integer;
238. begin
239. Put_line("[Task 3] Started");
240. --1) Получить МС.
241. Accept Input32(MC: in MatrixNN) do
242. MC1 := MC;
243. end Input32;
244. --2) Передать МС в Т1.
245. Task5.Input52(MC1);
246. --3) Передать МС в Т1.
247. Task7.Input72(MC1);
248. Put_line("blyanahui31");
249. --4) Передать МС в Т1.
250. Task2.Input22(MC1);
251. Put_line("blyanahui3");
252. --5) Получить MZ_4H, MB_4H, Alphа.
253. Accept Input31(MZ: in Matrix4HN; MB: in Matrix4HN ; alpha: in integer) do
254. MZ1 := MZ;
255. a1:= alpha;
256. MB1:= MB;
257. end Input31;
258. --6) Передать MZ_H, MB_H Alpha В Т6.
259. Task7.Input71(MZ1(H+1..2*H), MB1(H+1..2*H), a1);
260. --7) Передать MZ_H, MB_H Alpha В Т3.
261. Task5.Input51(MZ1(2*H+1..3*H), MB1(2*H+1..3*H), a1);
262. --8) Передать MZ_4H, MB_4H Alpha В Т3.
263. Task4.Input41(MZ1(3*H+1..4*H), MB1(3*H+1..4*H), a1);
264. --9) Счет.
265. MA1(1+3*H..4*H) := calc(MZ1(1..H), MC1, MB1(1..H), a1);
266. --10) Получить МА_3Н от Т2.
267. Accept Result32(MA: in Matrix3HN) do
268. MA1(1..3*H) := MA;
269. end Result32;
270. --11) Получить МА_Н от Т5.
271. Accept Result35(MA: in MatrixHN) do
272. MA1(1+4*H..5*H) := MA;
273. end Result35;
274. --12) Получить МА_Н от Т7.
275. Accept Result37(MA: in MatrixHN) do
276. MA1(1+5*H..6*H) := MA;
277. end Result37;
278. --13) Передать МА_6Н в Т3.
279. Task4.Result43(MA1);
280. Put_line("[Task 3] Finished");
281. End Task3;
282. --------------------------------------------------------------
283. Task body Task4 is
284. MC1, MA1: MatrixNN;
285. MZ1, MB1: MatrixHN;
286. a1: Integer;
287. begin
288. Put_line("[Task 4] Started");
289. --1)Ввод MZ, MB, Alpha;
290. MC1 := MatrixInput(1);
291. MA1 := MatrixInput(0);
292. --2)Передать MZ_6H, MB_6H, Alpha в Т2.
293. Task3.Input32(MC1);
294. --3)Получить МС
295. Accept Input41(MZ: in MatrixHN; MB: in MatrixHN ; alpha: in integer) do
296. MZ1 := MZ;
297. a1:= alpha;
298. MB1:= MB;
299. end Input41;
300. --4)Счет MA_H
301. MA1(1+6*H..7*H) := calc(MZ1(1..H), MC1, MB1(1..H), a1);
302. --5) Получить MA_6Н
303. Accept Result43(MA: in Matrix6HN) do
304. MA1(1..6*H) := MA;
305. end Result43;
306. --6) Выволд на экран
307. For i in 1..N loop
308. For j in 1..N loop
309. Put(MA1(i)(j));
310. end loop;
311. New_Line;
312. end loop;
313. Put_line("[Task 4] Finished");
314. End Task4;
315.
316. Begin
317. null;
318. end Start;
319. --------------------------------------------------------------
320. Begin
321. Put_Line("[Main task] started");
322. Start;
323. put_line("[Main task] finished");
324. end Lab7;
325.