рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рд╕рдорд╛рдирд╛рдВрддрд░ рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

Microsoft рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, Microsoft рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рдореЗрдВ рд╕рдорд╡рд░реНрддреА рдФрд░ рд╕рдордиреНрд╡рдп рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдзреНрд╡рдирд┐ рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп (рдФрд░ рди рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ) рд░реЛрдмреЛрдЯ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдирд┐рдореНрди рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдХреНрдЯрд░ рдмреА (1 ├Ч n рддрддреНрд╡реЛрдВ) рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ A (m ├Ч n рддрддреНрд╡реЛрдВ) рдХреЛ рдЧреБрдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдКрдВрдЧрд╛: ред рд╡реЗрдХреНрдЯрд░ C (m ├Ч 1 рддрддреНрд╡реЛрдВ) рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЗ ith рддрддреНрд╡ рдХрд╛ рдореВрд▓реНрдп рдЙрд╕рдХреЗ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕реВрддреНрд░реЛрдВ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, Microsoft рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред

1. Microsoft рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп


Microsoft рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рдореЗрдВ рдХрдИ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

Microsoft рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рдХреБрдВрдЬреА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ:

2. рдПрдХ рд╕реЗрд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛


рд╕рд░реНрд╡рд┐рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Microsoft рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рдЯреИрдм рдкрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЪрд┐рддреНрд░ 1 рджреЗрдЦреЗрдВ)ред


рдЕрдВрдЬреАрд░ред 1. рдПрдХ рд╕реЗрд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди, рдЙрд╕ рд╕рдВрдЧрдарди рдХрд╛ рдбреЛрдореЗрди рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рд╕рд╛рде рд╣реА рд╡рд░реНрд╖ рдФрд░ рдорд╣реАрдиреЗ рднреА рд╕реЗрд╡рд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рдбреЛрдореЗрди рдФрд░ рджрд┐рдирд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрд╡рд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреА рд╕реАрдзреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА)ред


рдЕрдВрдЬреАрд░ред 2. рд╕реЗрд╡рд╛ рд╕реЗрдЯрдЕрдк

рдПрдХ рд╕реЗрд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ:

рд╕реЗрд╡рд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, dll рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдФрд░ рдПрдХ рдкреНрд░рдХрдЯрди рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдореИрдирд┐рдлреЗрд╕реНрдЯ - рдПрдХреНрд╕рдПрдордПрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рдЙрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рд╕реЗрд╡рд╛ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рддреА рд╣реИред рд╕реЗрд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИрдВ рддрд╛рдХрд┐ рд╕реЗрд╡рд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рд░реНрдорд┐рдд dll рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ \ bin рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдХреЙрдкреА рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдПред
рд╕реЗрд╡рд╛ рдХреЛ dsshost рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рдХрдЯ рдФрд░ рдЙрд╕рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред

3. рд╕реЗрд╡рд╛ рд╕рдВрд░рдЪрдирд╛


рд╕реЗрд╡рд╛ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдбреАрдПрд╕ рдиреЛрдб (dsshost.exe) рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдПрдВ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдореЗрдВ рд░рдЦреА рдЬрд╛рддреА рд╣реИрдВ):
 protected override void Start() { base.Start(); //   //    } 

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рддреАрди рдбреАрдПрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ:

рдЖрдк рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рди рдХреЗрд╡рд▓ F5 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╕реЗрд╡рд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯрд╛рд░реНрдЯ рдореЗрдиреВ \ MRDS рдореЗрдВ "DSS рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ" рдЪреБрдиреЗрдВред рдирддреАрдЬрддрди, рд╢реЗрд▓ рд╡рд┐рдВрдбреЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧреА, рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 dsshost /p:50000 /t:50001 /m:"<    >" 

4. рдЕрдиреБрдорд╛рдирд┐рдд рдиреЗрддреГрддреНрд╡ рд╕рдордп


рд╕реНрдЯреЙрдкрд╡реЙрдЪ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
 Stopwatch sWatch = new Stopwatch(); sWatch.Start(); < > sWatch.Stop(); Console.WriteLine(sWatch.ElapsedMilliseconds.ToString()); 

5. рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


5.1ред рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛

рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдП, рд╡реИрдХреНрдЯрд░ рдмреА рдФрд░ рд╕реА рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдирдХреЗ рдЖрдХрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЪрд░:
 int[,] A; int[] B; int[] C; int m; int n; 

TestFunction () рд╡рд┐рдзрд┐ рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд┐рдзрд┐ рдореЗрдВ, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдБ рдЖрд░рдВрднрд┐рдХ рд╣реИрдВ:
 nc = 2; //   m = 11000; //    n = 11000; //    A = new int[m, n]; B = new int[n]; C = new int[m]; 

рдореИрдЯреНрд░рд┐рдХреНрд╕ A рдФрд░ рд╡реЗрдХреНрдЯрд░ B рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ:
 Random r = new Random(); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) A[i, j] = r.Next(100); } for (int j = 0; j < n; j++) B[j] = r.Next(100); 

5.2ред рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЧреБрдгрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 Stopwatch sWatch = new Stopwatch(); sWatch.Start(); for (int i = 0; i < m; i++) { C[i] = 0; for (int j = 0; j < n; j++) C[i] += A[i, j] * B[j]; } sWatch.Stop(); Console.WriteLine("  = {0} .", sWatch.ElapsedMilliseconds.ToString()); 

5.3ред рд╕рдорд╛рдирд╛рдВрддрд░ рдЧреБрдгрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо

рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╡рд┐рдзрд┐ рдХреА рдХрдИ рдкреНрд░рддрд┐рдпрд╛рдБ рдЪрд▓рд╛рдХрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрд╛рдЧ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдиреМрдХрд░реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, InputData рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 public class InputData { public int start; //   public int stop; //   } 

рдХрдХреНрд╖рд╛ рдХреЗ рдкреНрд░рд╛рд░рдВрдн / рд╕реНрдЯреЙрдк рдлрд╝реАрд▓реНрдб рд╡реЗрдХреНрдЯрд░ C рдХреЗ рдкреНрд░рд╛рд░рдВрдн / рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреА рдЧрдгрдирд╛ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╡рд┐рдзрд┐ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИред
ParallelMul рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 //       InputData[] ClArr = new InputData[nc]; for (int i = 0; i < nc; i++) ClArr[i] = new InputData 

рдЕрдЧрд▓рд╛, рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
 //       nc  int step = (Int32)(m / nc); //    int c = -1; for (int i = 0; i < nc; i++) { ClArr[i].start = c + 1; ClArr[i].stop = c + step; c = c + step; } 

рдПрдХ рдбрд┐рд╕реНрдкреИрдЪрд░ рджреЛ рдзрд╛рдЧреЛрдВ рдХреЗ рдкреВрд▓ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 Dispatcher d = new Dispatcher(nc, "Test Pool"); DispatcherQueue dq = new DispatcherQueue("Test Queue", d); 

рдЙрд╕ рдкреЛрд░реНрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧрдгрдирд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореВрд▓ () рд╡рд┐рдзрд┐ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ:
 Port<int> p = new Port<int>(); 

Arbiter.Activate рд╡рд┐рдзрд┐ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрддрд╛рд░ рдореЗрдВ рджреЛ рдХрд╛рд░реНрдп (рдореВрд▓ рд╡рд┐рдзрд┐ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг) рдбрд╛рд▓рддрд╛ рд╣реИ:
 for (int i = 0; i < nc; i++) Arbiter.Activate(dq, new Task<InputData, Port<int>>(ClArr[i], p, Mul)); 

Arbiter.Activate рд╡рд┐рдзрд┐ рдХрд╛ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрддрд╛рд░ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛, рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рд╣реИред
Arbiter.MultipleItemReceive рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдХрд╛рд░реНрдп (рд░рд┐рд╕реАрд╡рд░) рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкреЛрд░реНрдЯ рдкреА рдкрд░ рджреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ:
 Arbiter.Activate(Environment.TaskQueue, Arbiter.MultipleItemReceive(true, p, nc, delegate(int[] array) { Console.WriteLine(" "); })); 

рдЧрдгрдирд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рд╕реАрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреЛрд░реНрдЯ рдкреА рдкрд░ рджреЛ рд╕рдВрджреЗрд╢ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд░рд┐рд╕реАрд╡рд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдореЗрдВ, рдЖрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЧреБрдгрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореВрд▓ () рд╡рд┐рдзрд┐ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдПрдХ рднрд╛рдЧ рдХреЛ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рддреА рд╣реИ:
 void Mul(InputData data, Port<int> resp) { Stopwatch sWatch = new Stopwatch(); sWatch.Start(); for (int i = data.start; i < data.stop; i++) { C[i] = 0; for (int j = 0; j < n; j++) C[i] += A[i, j] * B[j]; } sWatch.Stop(); Console.WriteLine(" тДЦ {0}:   = {1} .", Thread.CurrentThread.ManagedThreadId, sWatch.ElapsedMilliseconds.ToString()); resp.Post(1); } 

рдореВрд▓ () рд╡рд┐рдзрд┐ рдХреЗ рджреЛ рдорд╛рдкрджрдВрдб рд╣реИрдВ:
1) рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рддрддреНрд╡ рдХрд╛ рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдзрд┐ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ;
2) рдкреВрд░реНрдгрддрд╛ рдХрд╛ рдмрдВрджрд░рдЧрд╛рд╣, рдЬрд┐рд╕рдХреА рдЧрдгрдирд╛ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЧрдгрдирд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореВрд▓ рд╡рд┐рдзрд┐ рдкреЛрд░реНрдЯ p рдкрд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рднреЗрдЬрддрд╛ рд╣реИ (рднреЗрдЬрд╛ рдЧрдпрд╛ рдореВрд▓реНрдп рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдВрдЬреАрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред 3ред


рдЕрдВрдЬреАрд░ред 3. рдЧрдгрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо

рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ

Source: https://habr.com/ru/post/In204466/


All Articles