рд╢реБрдн рд╕рдВрдзреНрдпрд╛
рд╣рдорд╛рд░реЗ рдкрд╛рдареНрдпрдХреНрд░рдо
"рд╕реА ++ рдбреЗрд╡рд▓рдкрд░" рд╕реЗ рд╣рдо рдЖрдкрдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЕрдзреНрдпрдпрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред
рд╕реА ++ 17 рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ "рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓" рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрд╕рдЯреАрдПрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдо 10-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде 10x рддреНрд╡рд░рдг рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╛ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ? рдпрд╛ рдХрдо рд╣реИ? рдЪрд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкрд░рд┐рдЪрдп
C ++ 17 рд╕рдмрд╕реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдиреАрддрд┐ рд╕реЗрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- sequenced_policy - рдирд┐рд╖реНрдкрд╛рджрди рдиреАрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░, рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдзрд┐рднрд╛рд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░реАрдХрд░рдг рдЕрд╕рдВрднрд╡ рд╣реИ: рд╕рдВрдмрдВрдзрд┐рдд рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ
std::execution::seq
; - рд╕рдорд╛рдирд╛рдВрддрд░_рдкреЙрд▓рд┐рд╕реА - рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдзрд┐рднрд╛рд░ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд╖реНрдкрд╛рджрди рдиреАрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдВрднрд╡ рд╣реИ: рд╕рдВрдмрдВрдзрд┐рдд рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ
std::execution::par
; - рд╕рдорд╛рдирд╛рдВрддрд░_рдЕрдиреБрдХреНрд░рдорд┐рдд_рдкреЙрд▓рд┐рд╕реА - рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдзрд┐рднрд╛рд░ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдФрд░ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд╖реНрдкрд╛рджрди рдиреАрддрд┐: рд╕рдВрдмрдВрдзрд┐рдд рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ
std::execution::par_unseq
;
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:
std::execution::seq
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ std::execution::seq
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП std::execution::seq
;std::execution::par
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ std::execution::par
рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП std::execution::par
(рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдереНрд░реЗрдб рдкреВрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ);- рд╡реЗрдХреНрдЯрд░ рдХрдорд╛рдВрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SSE, AVX) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП
std::execution::par_unseq
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдПрдХ рддреНрд╡рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдХреЙрд▓
std::sort
рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ
std::sort
рдХрд░реЗрдВ:
std::sort(std::execution::par, myVec.begin(), myVec.end());
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ! рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдХреНрдпрд╛ рдпрд╣ рдЧрддрд┐ рдмрдврд╝рд╛рдПрдЧрд╛? рдпрд╛ рдХреЛрдИ рдордВрджреА рд╣реИ?
рд╕рдорд╛рдирд╛рдВрддрд░ std::transform
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ
std::transform
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдЕрдиреНрдп рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд┐рдзрд┐рдпреЛрдВ (
std::transform_reduce
,
for_each
,
scan
,
sort
...) рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
std::transform(execution_policy,
рдорд╛рди рд▓реЗрдВ рдХрд┐
ElementOperation
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдИ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдб рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
ElementOperation
рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЧрдгрдирд╛ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдЖрджреЗрд╢ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрддреНрд╡реЛрдВ рдХреЗ рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдереНрд░реЗрдб (рд╕рдВрднрд╡рддрдГ рдПрдХ рдереНрд░реЗрдб рдкреВрд▓ рдореЗрдВ) рд╕реНрдкреЙрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
- рд╡реЗрдХреНрдЯрд░ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЖрдХрд╛рд░ рдмрдбрд╝рд╛ рдпрд╛ рдЫреЛрдЯрд╛ рд╣реИ;
- рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реВрдкрд╛рдВрддрд░рдг рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рд╕реНрдореГрддрд┐ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ;
- рдЕрдзрд┐рдХ рдЕрдВрдХрдЧрдгрд┐рдд (ALU) рд╕рдВрдЪрд╛рд▓рди;
- рдЕрдзрд┐рдХ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ ALUред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рди рдХреЗрд╡рд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдЪреНрдЫреЗ" рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдмрд▓реНрдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдПрдПрд▓рдпреВ рд╕рдВрдЪрд╛рд▓рди рднреАред
рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЬреИрд╕реЗ рд╕реЙрд░реНрдЯрд┐рдВрдЧ, рд╕рдВрдЪрдп (рдПрд╕рдбреА рдХреЗ рд░реВрдк рдореЗрдВ :: рдХрдо рдХрд░рдирд╛) рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрд╛рдо рднреА рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдФрд░ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдиреЛрдЯ
рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2017, 15.8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - рдЪреВрдВрдХрд┐ рдпрд╣ рд▓реЛрдХрдкреНрд░рд┐рдп / рдПрд╕рдЯреАрдПрд▓ рд╕рдВрдХрд▓рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдордп (рдирд╡рдВрдмрд░, 2018) (рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЬреАрд╕реАрд╕реА!)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдХреЗрд╡рд▓
execution::par
рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛
execution::par
рдмрд╛рдж рд╕реЗ
execution::par_unseq
MSVC рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ (рдпрд╣
execution::par
рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ
execution::par
)ред
рджреЛ рдХрдВрдкреНрдпреВрдЯрд░ рд╣реИрдВ:
- i7 8700 - рдкреАрд╕реА, рд╡рд┐рдВрдбреЛрдЬ 10, i7 8700 - 3.2 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬ, 6 рдХреЛрд░ / 12 рдзрд╛рдЧреЗ (рд╣рд╛рдЗрдкрд░рдереНрд░реЗрдбрд┐рдВрдЧ);
- i7 4720 - рд▓реИрдкрдЯреЙрдк, рд╡рд┐рдВрдбреЛрдЬ 10, i7 4720, 2.6 GHz, 4 рдХреЛрд░ / 8 рдзрд╛рдЧреЗ (рд╣рд╛рдЗрдкрд░рдереНрд░реЗрдбрд┐рдВрдЧ)ред
рдХреЛрдб рдХреЛ x64 рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдзрд┐рдХ рдЬрд╛рд░реА рдХрд░реЗрдВ, рдСрдЯреЛ-рд╡реЗрдХреНрдЯрд░рдХрд░рдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИ, рдореИрдВрдиреЗ рдХрдорд╛рдВрдб (SSE2) рдФрд░ рдУрдкрдирдПрдордкреА (2.0) рдХрд╛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реЗрдЯ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред
рдХреЛрдб рдореЗрд░реЗ
рдЧрд┐рддреБрдм рдореЗрдВ рд╣реИ :
github / fenbf / ParSTLTests / TransformTests / Transformsests.ppOpenMP (2.0) рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
#pragma omp parallel for for (int i = 0; ...)
рдореИрдВ 5 рдмрд╛рд░ рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдиреНрдпреВрдирддрдо рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддрд╛ рд╣реВрдВред
рдЪреЗрддрд╛рд╡рдиреА : рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдореЛрдЯреЗ рдЕрд╡рд▓реЛрдХрди рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ, рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдФрд░ рдкрд░рд┐рд╡реЗрд╢ рдореЗрд░рд╛ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрдЖрдк
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ MSVC рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░
рдпрд╣рд╛рдВ рдмрд┐рд▓ рдУ'рдиреАрд▓ рдХреА рдирд╡реАрдирддрдо
рд░рд┐рдкреЛрд░реНрдЯ CppCon 2018 (MSVC рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд╕рдЯреАрдПрд▓ рд▓рд╛рдЧреВ) рдХреЗ рд╕рд╛рде рд╣реИред
рдареАрдХ рд╣реИ, рдЪрд▓реЛ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ!
рд╕рд░рд▓ рд░реВрдкрд╛рдВрддрд░рдгрдЬрдм рдЖрдк рдПрдХ рдЗрдирдкреБрдЯ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рддрддреНрд╡реЛрдВ рдХреА рдирдХрд▓ рдпрд╛ рдЧреБрдгрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
std::transform(std::execution::par, vec.begin(), vec.end(), out.begin(), [](double v) { return v * 2.0; } );
рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ 6 рдпрд╛ 4 рдХреЛрд░ рд╣реИрдВ ... рдХреНрдпрд╛ рдореИрдВ 4..6 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрд╣рд╛рдБ рдореЗрд░реЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ (рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдордп):
рдЖрдкрд░реЗрд╢рди | рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ | i7 4720 (4 рдХреЛрд░) | i7 8700 (6 рдХреЛрд░) |
---|
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 10k | 0.002763 | 0.001924 |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 10k | 0.009869 | 0.008983 |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 10k | 0.003158 | 0.002246 |
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 100k | 0.051318 | 0.028872 |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 100k | 0.043028 | 0.025664 |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 100k | 0.022501 | 0.009624 |
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 1000k | рез.ремреп,релрежрео | .релреи,рекрезреп |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 1000k | рез.ремрел,релремрез | 0.359619 |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 1000k | рез.релреж,ремренрео | 0.344863 |
рдПрдХ рддреЗрдЬрд╝ рдорд╢реАрди рдкрд░, рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 1 рдорд┐рд▓рд┐рдпрди рддрддреНрд╡ рд▓рдЧреЗрдВрдЧреЗред рджреВрд╕рд░реА рдУрд░, рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рд╕рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдзреАрдорд╛ рдереЗред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдРрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдРрд╕рд╛ рдХреНрдпреЛрдВ?
рдЪреВрдВрдХрд┐ рдСрдкрд░реЗрд╢рди рдкреНрд░рд╛рдердорд┐рдХ рд╣реИрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдЪрдХреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВред рддреЛ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╡реЗ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдЪрд░ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓рдЧрднрдЧ 2-3 рдЪрдХреНрд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдЗрд╕реЗ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдХреИрд╢ рдирд╣реАрдВ рд╣реИ рддреЛ рдХрдИ рд╕реМ рдЪрдХреНрд░редhttps://www.agner.org/optimize/optimizing_cpp.pdfрдЖрдк рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдкрдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдореЛрд░реА рдирд┐рд░реНрднрд░ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдЕрдзрд┐рдХ рдЧрдгрдирд╛рдЪреВрдВрдХрд┐ рдореЗрдореЛрд░реА рдмреИрдВрдбрд╡рд┐рдбреНрде рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рдЪреАрдЬреЛрдВ рдХреА рдЧрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ ... рдЖрдЗрдП рдЧрдгрдирд╛ рдХреА рдорд╛рддреНрд░рд╛ рдмрдврд╝рд╛рдПрдВ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддреНрд░рд┐рдХреЛрдгрдорд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
sqrt(sin*cos)
(рдпреЗ рдЧреИрд░-рдЗрд╖реНрдЯрддрдо рд░реВрдк рдореЗрдВ рд╕рд╢рд░реНрдд рдЧрдгрдирд╛ рд╣реИрдВ, рдмрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред
рд╣рдо
sqrt
,
sin
рдФрд░
cos
рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ ~ 20 рдкреНрд░рддрд┐
sqrt
рдФрд░ ~ 100 рдкреНрд░рддрд┐ рддреНрд░рд┐рдХреЛрдгрдорд┐рддреАрдп рдлрдВрдХреНрд╢рди рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдЧрдгрдирд╛ рдХреА рдпрд╣ рд░рд╛рд╢рд┐ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рд╡рд┐рд▓рдВрдм рдХреЛ рдХрд╡рд░ рдХрд░ рд╕рдХрддреА рд╣реИред
рдЯреАрдо рджреЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП,
Agner Fogh рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдХреГрд╖реНрдЯ
рдкрд░рдлреЗрдХреНрдЯ рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВред
рдпрд╣рд╛рдБ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб рд╣реИ:
std::transform(std::execution::par, vec.begin(), vec.end(), out.begin(), [](double v) { return std::sqrt(std::sin(v)*std::cos(v)); } );
рдФрд░ рдЕрдм рдХреНрдпрд╛? рдХреНрдпрд╛ рд╣рдо рдкрд┐рдЫрд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣рд╛рдБ рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ (рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдордп):
рдЖрдкрд░реЗрд╢рди | рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ | i7 4720 (4 рдХреЛрд░) | i7 8700 (6 рдХреЛрд░) |
---|
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 10k | 0.105005 | 0.070577 |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 10k | 0.055661 | .режрей,резренрем |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 10k | 0.096321 | 0.024702 |
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 100k | рез.режрео,ренрелрел | 0.707048 |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 100k | 0.259354 | .резрен,резрепрел |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 100k | 0.898465 | 0.189915 |
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 1000k | 10.5159 | рен.резрем,реирелрек |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 1000k | реи.рекрек,рекренреи | рез.резреж,режрепреп |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 1000k | рек.ренрео,ремреорез | рез.реореп,режрезрен |
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдЪреНрдЫреА рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ :)
1000 рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП (рдпрд╣рд╛рдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛), рд╕рдорд╛рдирд╛рдВрддрд░ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЧрдгрдирд╛ рд╕рдордп рд╕рдорд╛рди рдереЗ, рдЗрд╕рд▓рд┐рдП 1000 рд╕реЗ рдЕрдзрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рджреЗрдЦрддреЗ рд╣реИрдВред
100 рд╣рдЬрд╛рд░ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП, рддреЗрдЬреА рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкрд░рд┐рдгрд╛рдо рд╕реАрд░рд┐рдпрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 9 рдЧреБрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рдЗрд╕реА рддрд░рд╣ OpenMP рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП)ред
рдПрдХ рд▓рд╛рдЦ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо 5 рдпрд╛ 8 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред
рдРрд╕реА рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ "рд░реИрдЦрд┐рдХ" рддреНрд╡рд░рдг рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред рдЬрд┐рд╕рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рдиреА рдереАред
рдлреНрд░реЗрд╕реНрдиреЗрд▓ рдФрд░ рддреАрди рдЖрдпрд╛рдореА рд╡реИрдХреНрдЯрд░рдЙрдкрд░реЛрдХреНрдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ "рдЖрд╡рд┐рд╖реНрдХрд╛рд░" рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдЪрд▓реЛ рдПрдХ рдЪрд┐рдХрдиреА, рд╕рдкрд╛рдЯ рд╕рддрд╣ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рд╡рдХреНрд░рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдлреНрд░реЗрд╕реНрдиреЗрд▓ рд╕рдореАрдХрд░рдгреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред 3 рдбреА рдЧреЗрдо рдореЗрдВ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдкреНрд░рдХрд╛рд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рддрд░реАрдХрд╛ рд╣реИред

рд╡рд┐рдХрд┐рдореАрдбрд┐рдпрд╛ рд╕реЗ рдлреЛрдЯреЛрдПрдХ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ
рдпрд╣ рд╡рд┐рд╡рд░рдг рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛ред
GLM рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВрдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ
glm рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВ рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ OpenGl рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдХреЙрдирди рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдкреИрдХреЗрдЬ рд╕реЗ
рд▓рд┐рдВрдХ рдХрд░реЗрдВ ред
рдХреЙрдирди рдлрд╝рд╛рдЗрд▓:
[requires] glm/0.9.9.1@g-truc/stable [generators] visual_studio
рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди (рдпрд╣ рдкреНрд░реЙрдкрд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)
conan install . -s build_type=Release -if build_release_x64 -s arch=x86_64
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рд╣реЗрдбрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдФрд░ рдмреЗрдВрдЪрдорд╛рд░реНрдХрдореИрдВрдиреЗ glat рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ scratchapixel.com рд╕реЗ
рд▓рд┐рдпрд╛ :
рдХреЛрдб рдХрдИ рдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ, рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж, рдЧреБрдгрди, рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдбрдмрд▓ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП 4 рддрддреНрд╡реЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдмреЗрдВрдЪрдорд╛рд░реНрдХ:
std::transform(std::execution::par, vec.begin(), vec.end(), vecNormals.begin(),
рдФрд░ рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдо (рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдордп) рд╣реИрдВ:
рдЖрдкрд░реЗрд╢рди | рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ | i7 4720 (4 рдХреЛрд░) | i7 8700 (6 рдХреЛрд░) |
---|
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 1k | 0.032764 | 0.016361 |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 1k | 0.031186 | 0.028551 |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 1k | 0.005526 | 0.007699 |
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 10k | 0.246722 | 0.169383 |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 10k | 0.090794 | 0.067048 |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 10k | 0.049739 | 0.029835 |
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 100k | реи.рекреп,ренреиреи | рез.ремреп,ренремрео |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 100k | 0.530157 | 0.283268 |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 100k | 0.495024 | 0.291609 |
рдирд┐рд╖реНрдкрд╛рджрди :: seq | 1000k | 25.0828 | 16.9457 |
рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ | 1000k | рел.резрел,реирейрел | реи.рейрей,ренремрео |
рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ | 1000k | рел.резрез,реорежрез | реи.репрел,репрежрео |
"рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рджреЛ рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрдиреЛрдВ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд▓рдЧрднрдЧ рд░реИрдЦрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рддреНрд╡рд░рдг рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ред
рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдУрдкрдирдПрдордкреА рдФрд░ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдП: рдПрдордПрд╕рд╡реАрд╕реА рдФрд░ рдУрдкрдирдПрдордкреА рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддреАрди рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦрд╛ред рдорд╛рдирдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдПрд╕рдЯреАрдбреА рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ :: рдирд┐рд╖реНрдкрд╛рджрди :: рдмрд░рд╛рдмрд░ рд╕рдВрд╕реНрдХрд░рдг рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ! рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдпрд╛ рдореЗрдореЛрд░реА рдкрд░ рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдЕрд▓рдЧ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рддреЗрдВ:
- рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди, рдЖрдорддреМрд░ рдкрд░, рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рди рдХреЗрд╡рд▓ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдмрд▓реНрдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдкреНрдд рд╣реИ;
- рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдФрд░ рдЕрдиреНрдп рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ;
- рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд╛рдо рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ;
- рдпрджрд┐ рдЖрдкрдХреЗ рдСрдкрд░реЗрд╢рди рдореЗрдореЛрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдзреАрдорд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ;
- рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдордп рдХреЛ рдорд╛рдкреЗрдВ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JFT рдХрд╛ рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдВ:
рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
рдЗрдВрдЯреЗрд▓ рд╕рдорд╛рдирд╛рдВрддрд░ STL рдФрд░ C ++ 17 рд╕рдорд╛рдирд╛рдВрддрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХреИрд╕реЗ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдВрдЕрдВрдд
рд╣рдо рдЙрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдпрд╣рд╛рдВ рдпрд╛ рд╣рдорд╛рд░реЗ
рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдЦреБрд▓реЗ рджрд░рд╡рд╛рдЬреЗ рдкрд░ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред