рдЬреНрдпрд╛рдорд┐рддреАрдп рд╕рдорд╛рдирддрд╛ рдХреА рд╡рд┐рдзрд┐ рдФрд░ MPI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ

рдирдорд╕реНрдХрд╛рд░, рдЖрдЬ рдореИрдВ рджреЛ-рдЖрдпрд╛рдореА рдЧрд░реНрдореА рд╕рдореАрдХрд░рдг рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рдорд┐рддреАрдп рд╕рдорд╛рдирддрд╛ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╕реА рдореЗрдВ рдПрдордкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдЕрдВрд╢реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдЗрд╕ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдХреБрдЫ рдирдпрд╛ рдмрддрд╛рдКрдВрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди

рджреЛ рдЖрдпрд╛рдореА рдЧрд░реНрдореА рд╕рдореАрдХрд░рдг рд╕рдореАрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рд╕рд╛рде рд╣реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╢рд░реНрддреЗрдВ:

рд╣рдо рдпрд╣ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдПрдХ рд╕реАрдорд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:

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

рдпрджрд┐ рд╣рдо рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ "рдХреБрдЫ рд╕рдордп рдкрд░рдд" рдкрд░ "рдХреНрд░реЙрд╕" рдХреЗ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдореВрд▓реНрдп рд╕реЗ, рд╣рдо рдХреЗрдВрджреНрд░ рдмрд┐рдВрджреБ рдкрд░ "рдЕрдЧрд▓реА рд╕рдордп рдкрд░рдд" рдкрд░ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдордп рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЪрд░рдг рд╕реБрд╕рдВрдЧрдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:

(рдЗрд╕рдХреЗ рдмрд╛рдж, рдЧреНрд░рд┐рдб рддрдп рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рд╕реНрдерд╛рдирд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдХрджрдо рдПрдЪ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ)
рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк X рдФрд░ Y рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдЧреНрд░рд┐рдб рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдкрд░рдд рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдЧрд▓реА рд╕рдордп рдкрд░рдд рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЧрд▓реА рд╕рдордп рдкрд░рдд рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрд░рдд рд╡рд░реНрддрдорд╛рди рдПрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдкрд░рдд рдХреЗ рдорд╛рди рдЕрдВрддрд┐рдо рдкрд░рдд рдХреЗ рд╕рд░рдгреА рдХреЛ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдЬреНрдпрд╛рдорд┐рддреАрдп рд╕рдорд╛рдирддрд╛ рд╡рд┐рдзрд┐

рдЬреНрдпрд╛рдорд┐рддреАрдп рд╕рдорд╛рдирддрд╛ рдХрд╛ рддрд░реАрдХрд╛ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдХреБрдЫ рдЬреНрдпрд╛рдорд┐рддреАрдп рдирд┐рдпрдорд┐рддрддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдмреАрдЪ рдХрд╛рдо рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ, рд╕реАрдорд┐рдд рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЧреНрд░рд┐рдб рдХреЛ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдорд╛рдирддрд╛ рдХреЛ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдк рд╕рд░рдгреА рдХреЛ рдХрдИ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛ рдПрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд░рдгреА рдХреЛ рдХреНрд╖реИрддрд┐рдЬ рдкрдЯреНрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдореВрд▓рднреВрдд рдЕрдВрддрд░ рдХреЛ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдмрд╛рдж рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдареЗрдХреЗрджрд╛рд░ рдХреЗрд╡рд▓ рд╕рд░рдгреА рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╛рдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛ред

рдиреБрдХрд╕рд╛рди

рдпрджрд┐ рд╣рдо рдЕрдВрддрд░ рдпреЛрдЬрдирд╛ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣рдо рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЖрд░реЗрдЦ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдореЗрд╖ рддрддреНрд╡ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд┐рдЫрд▓реА рдкрд░рдд рдкрд░ рдЗрд╕рдХреЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдерд╛рдирд┐рдХ рдЧреНрд░рд┐рдб рдХреА рдЪрд░рдо рдкрд░рдд рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕реАрдорд╛ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░рдо рддрддреНрд╡ рд╢рд░реНрддреЛрдВ рд╕реЗ рдЬрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕реАрдорд╛ рдкрд░ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХреЛ рдкрдбрд╝реЛрд╕реА рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рддрддреНрд╡ рдкрд░ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
for (int i = 0; i < N; i ++) { MPI_Send(*buf, 1, MPI_DOUBLE, toRank, MESSAGE_ID, MPI_COMM_WORLD); } 

(рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рдпрд╣ рд╡рд┐рдзрд┐ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдХрдИ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ (рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ)ред рдПрдХ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрд╕реНрдЯрдо рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, MPI рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ "рдорд╛рд╕реНрдХ" рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ: MPI_Type_contiguous рдФрд░ MPI_Type_vectorред рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЖрдкрдХреЛ рдПрдХ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ "рдЖрд╡рд╢реНрдпрдХ" рддрддреНрд╡реЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рддрддреНрд╡реЛрдВ рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ "рдЕрдирд╛рд╡рд╢реНрдпрдХ" рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдВрдЫрд┐рддреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИред
 //   -     ,       //   -  ""  //   -   ,       MPI_Datatype USER_Vector; MPI_Type_vector(N, 1, N, MPI_DOUBLE, &USER_Vector); //     ""   MPI_Type_commit(&USER_Vector); 

рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ * buf рд╕рд░рдгреА рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ:
+ реж реж
+ реж реж
+ реж реж
рдпрджрд┐ рдЖрдк рд╕рд░рдгреА рдХреЗ рджреВрд╕рд░реЗ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ * buf рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
реж + реж
реж + реж
реж + реж

рддреЛ рдЖрдк рд╕рд░рдгреА рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдХреЙрд▓рдо рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдФрд░ рдПрдХ рдХреЙрд▓ рдореЗрдВ MPI_SEND:
 MPI_Send(*buf, 1, USER_Vector, (rank + 1), MESSAGE_ID, MPI_COMM_WORLD); 


рдпрджрд┐ рдЖрдк рдХрд▓рд╛рдХрд╛рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк MPI_Type_contiguous рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ MPI_Send рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╣реИред

рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕реНрддрдВрднреЛрдВ рдХреЛ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ: рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЛ рдмрджрд▓реЗ рдореЗрдВ рджрд╛рд╣рд┐рдиреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдХреЙрд▓рдо рдкрд╛рд╕ рдХрд░рдиреЗ рджреЗрдВред рдлрд┐рд░ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдорд┐рд▓рддрд╛ рд╣реИ:

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЪрд┐рддреНрд░рдг рдХреЗрд╡рд▓ рдЪрд╛рд░ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдпрд╣ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд SEND_TIME рдХреЛ рдПрдХ рд╕рдВрдЪрд░рдг рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ (2 * N-2) * SEND_TIME рдХреЛ рд╕рднреА рд╕реНрддрдВрднреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рджреМрд░рд╛рди, рдХреЗрд╡рд▓ рджреЛ рдХрд▓рд╛рдХрд╛рд░ "рдХрд╛рдо" рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрд╛рдХреА рдмреЗрдХрд╛рд░ рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдЗрд╕рдореЗрдВ, рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЛ рдЙрдирдХреА "рд╕рдорддрд╛" рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рдмреБрд░рд╛рдЗрдпрд╛рдБ рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рдХреЛ рдкрд╛рд╕ рдХрд░рддреА рд╣реИрдВ, рдлрд┐рд░ рд╕рднреА рдЦрд╝рд░рд╛рдмрд┐рдпрд╛рдБ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдо рдХреЛ рдкрд╛рд╕ рдХрд░рддреА рд╣реИрдВ, рдлрд┐рд░ рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рдХрд▓рд╛рдХрд╛рд░ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рд╕рднреА рдЕрдЧреНрд░реЗрд╖рдг рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдХреЛрдИ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕реЗ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
 // EVEN_RIGHT, ODD_RIGHT, ODD_LEFT, EVEN_LEFT -      // (  ,      ) const int ROOT = 0; if ((rank % 2) == 0) { if (rank != (size - 1)) MPI_Send(*buf, 1, USER_Vector, (rank + 1), EVEN_RIGHT, MPI_COMM_WORLD); if (rank != ROOT) MPI_Recv(*buf, 1, USER_Vector, (rank - 1), ODD_RIGHT, MPI_COMM_WORLD, &status); if (rank != (size - 1)) MPI_Recv(*buf, 1, USER_Vector, (rank + 1), ODD_LEFT, MPI_COMM_WORLD, &status); if (rank != ROOT) MPI_Send(*buf, 1, USER_Vector, (rank - 1), EVEN_LEFT, MPI_COMM_WORLD); } if ((rank % 2) == 1) { MPI_Recv(*buf, 1, USER_Vector, (rank - 1), EVEN_RIGHT, MPI_COMM_WORLD, &status); if (rank != (size - 1)) MPI_Send(*buf, 1, USER_Vector, (rank + 1), ODD_RIGHT, MPI_COMM_WORLD); MPI_Send(*buf, 1, USER_Vector, (rank - 1), ODD_LEFT, MPI_COMM_WORLD); if (rank != (size - 1)) MPI_Recv(*buf, 1, USER_Vector, (rank + 1), EVEN_LEFT, MPI_COMM_WORLD, &status); } 


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдореЗрдВ 4 * SEND_TIME рд▓рдЧрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд┐рддрдиреА рднреА рд╣реЛред рдХрдИ рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╢реНрд░реЗрд╖реНрдарддрд╛ рд░рдЦрддрд╛ рд╣реИред

(рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рдХреБрдЫ рдЭреВрда рд╣реИ: рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╣реИ, рдФрд░ рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ "рд╕рд╛рдорд╛рдиреНрдп" рдХреНрд░рдо рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкрд╣рд▓реЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЕрд░реНрдерд╛рдд, рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЗрдХрд╛рдИ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддреЗ рд╣реБрдП, рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЗрд╕рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ)

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


All Articles