Intel┬о Cilk тДв Plus рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ

OpenMP 4.0 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рд╣рд╛рд▓рд┐рдпрд╛ рдкреЛрд╕реНрдЯ рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ Intel Cilk Plus рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЦреИрд░, рдЪреВрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирдпрд╛ рдУрдкрдирдПрдордкреА рдорд╛рдирдХ рдмрди рдЧрдпрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдереЗред

рдореИрдВ рдирд╛рдо рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рд╣реА рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдБред
рддреЛ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реБрдЖред 1994 рд╕реЗ, MIT рдиреЗ Cilk рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА, рдЬрд┐рд╕рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╕рдВрдЧрд╛рдорд┐рддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ C рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рд╕рднреА Cilk рдХреАрд╡рд░реНрдб рд╣рдЯрд╛рдХрд░, рдпрд╣ "syshch" рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╕рдордп рдХреЗ рд╕рд╛рде, Cilk рдХрд╛ рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬрд┐рд╕реЗ Cilk ++ рдХрд╣рд╛ рдЧрдпрд╛ред рдпрд╣, рдмрджрд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реА ++ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рдерд╛, рдФрд░ рдЬреАрд╕реАрд╕реА рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрдЧрдд рдерд╛, рдФрд░ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╕рдВрдЧрдарди рд╕рд┐рд▓рдХ рдЖрд░реНрдЯреНрд╕, рдЗрдВрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рдерд╛ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ Cilk рдЯреНрд░реЗрдбрдорд╛рд░реНрдХ рдХреЗ рддрд╣рдд Cilk Arts, Cilk ++ рддрдХрдиреАрдХ рдЦрд░реАрдж рдХрд░ Intel рдЕрдВрджрд░ рдЖрддрд╛ рд╣реИред рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЦреБрдж рдЗрдВрдЯреЗрд▓ рдореЗрдВ 2008 рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рд╣рдорд╛рд░реЗ рд╕рдВрдХрд▓рдХ рдореЗрдВ Cilk рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдпрд╛рдж рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрд▓реНрдж рд╣реА, рдЕрд░реНрдерд╛рддреН 2010 рдореЗрдВ, Intel Cilk Plus рдирд╛рдордХ рдкрд╣рд▓рд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ Intel C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХреНрдпреЛрдВ рдкреНрд▓рд╕, рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ? рд╣рд╛рдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрдЯреЗрд▓ Cilk рдкреНрд▓рд╕ рдХрд╛ рдХреЗрд╡рд▓ рдЖрдзрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЙрд╕ Cilk ++ рддрдХрдиреАрдХ рд╕реЗ рд╣реИ, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирддрд╛ рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдереАред рджреВрд╕рд░реА рдЫрдорд╛рд╣реА рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдкрд░ рд╕рдорд╛рдирддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



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

рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ - рдирдП рдХреАрд╡рд░реНрдб рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛, 3 рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде: cilk_spawn, cilk_sync рдФрд░ cilk_for ред рдЕрдВрджрд░ рдПрдХ рдЖрдзреБрдирд┐рдХ, рд╣рд▓реНрдХрд╛ рдФрд░ рдХреБрд╢рд▓ рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪрдХ рд╣реИ рдЬреЛ рд▓реЛрдб рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдкрд╣рд▓реА рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрдВрдХрд╛рд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдЬреА () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрдореВрд░реНрдд рд░реВрдк рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП), рддреЛ рдпрд╣ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

void f() { g(); work work } void g() { work work } 

рдЕрдм, "рдХрд▓рд╛рдИ рдХреА рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ" рдХреЗ рд╕рд╛рде рд╣рдо рдХреЛрдб рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ:

 void f() { cilk_spawn g(); work work cilk_sync; work } 

рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рд╣рдо рдЬреА () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп (рдХрд╛рд░реНрдп) рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬреЛ рдХрд╛рдо рд▓рд╛рдЗрди cilk_sync (рд╕рд┐рд▓реНрдХрд╛ - рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рддрдХ f () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдПрдХ рд╕рд╛:

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


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдХреЛрд░ рдХрд╛рдо рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рд╡реИрд╕реЗ, рдЗрдВрдЯреЗрд▓ рдереНрд░реЗрдбрд┐рдВрдЧ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ (рдЯреАрдмреАрдмреА) рдореЗрдВ рдПрдХ рд╣реА рд╢реЗрдбреНрдпреВрд▓рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред cilk_sync рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдмрд┐рдВрджреБ рд╣реИред

Cilk_for рдирд┐рд░реНрдорд╛рдг рдЗрд░рд╛рджрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдХреИрдкреНрдЯрди рдПрд╡рд┐рдбреЗрдВрд╕ рдХрд╣рддреЗ рд╣реИрдВ, рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрд╛рдорд┐рддрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдореИрдВ рд╕реАрдзрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░реЛрддреНрддреЗрдЬрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рджреЛ рдбреЗрдЯрд╛ рдЪрдХреНрд░ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?

 for (int x = 0; x < n; ++x) { cilk_spawn f(x); } cilk_for (int x = 0; x < n; ++x) { f(x); } 

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

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕реНрдкреЙрди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐, рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ cilk_for рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдЕрдм рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫред рдпрд╣ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛, reducers рдХреА рдорджрдж рд╕реЗред рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ Cilk рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдирдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рдо рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЬрд╛рд░реА рд░рдЦреЗрдВ:

 int sum=3; void f() { cilk_spawn g(); work sum += 2; work } void g() { work sum++; work } 

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде "рдЦрд░рд╛рдм" рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 cilk::reducer_opadd<int> sum(3); 

рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ reducers, cilk рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ :: monoid_base рдФрд░ cilk :: reducer classesред рдпрд╣, рдУрдкрдирдПрдордкреА рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ Intel Cilk Plus рдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣рд╛рдБ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╣реИ - рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирддрд╛ Cilk рдХреЗ рдХреАрд╡рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░рд╡рд╛рдж рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП (рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрдЧрд╛рдорд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рдУ, рдФрд░ "рддреБрдореНрд╣рд╛рд░реЗ рд╕рд╛рде рдмрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ"!

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


All Articles