Visual Studio 2019 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 2 рдореЗрдВ MSVC рдмреИрдХрдПрдВрдб рдЕрдкрдбреЗрдЯ: рдирдП рдЕрдиреБрдХреВрд▓рди, рдУрдкрдирдПрдордкреА рдФрд░ рдмрд┐рд▓реНрдб рдереНрд░реВрдкреБрдЯ рд╕реБрдзрд╛рд░


рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдкреНрд░реАрд╡реНрдпреВ 2 рдореЗрдВ рд╣рдордиреЗ C ++ рдмреИрдХрдПрдВрдб рдХреЛ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ, рдирдП рдФрд░ рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде, рдереНрд░реВрдкреБрдЯ рд╕реБрдзрд╛рд░ рдФрд░ рдЬреАрд╡рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдЬрд╛рд░реА рд░рдЦрд╛ рд╣реИред


рдмреНрд▓реЙрдЧ рдореЗрдВ рдореВрд▓

рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ


  • рдПрдХ рдирдИ рдЗрдирд▓рд╛рдЗрди рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реНрд╡рд┐рдЪ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛: -рдУрдмреА 3ред -рдУрдмреА 3 рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЖрдХреНрд░рд╛рдордХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ -рдУрдмреА 2ред -O2 (рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдХрд╛ рдЕрдиреБрдХреВрд▓рди) рдЕрднреА рднреА рдирд┐рд╣рд┐рдд рд╣реИ -рдУрдмреА 2 рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЕрдВрдбрд░-рд▓рд╛рдЗрдирд┐рдВрдЧ рд╣реИ, рддреЛ рдкрд╛рд╕рд┐рдВрдЧ -O2 -Ob3 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
  • OpenMP SIMD рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмреЗрд╕рд┐рдХ рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ (ML) рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ OpenMP рдлреАрдЪрд░ рд╣реИред рд╣рдорд╛рд░рд╛ рдХреЗрд╕ рд╕реНрдЯрдбреА рдЗрдВрдЯреЗрд▓ рдПрдордХреЗрдПрд▓-рдбреАрдПрдирдПрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдиреНрд╕рд░ рдлреНрд▓реЛ рд╕рд╣рд┐рдд рдЕрдиреНрдп рдкреНрд░рд╕рд┐рджреНрдз рдУрдкрди рд╕реЛрд░реНрд╕ рдПрдордПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирдпрд╛ рд╕реАрдПрд▓ рд╕реНрд╡рд┐рдЪ -openmp: рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдХреЗ рд╕рд╛рде рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд▓реВрдкреНрд╕ рдХреЛ "#pragma omp simd" рдХреЗ рд╕рд╛рде рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╡реЗрдХреНрдЯрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рд▓реВрдк рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗрдХреНрдЯрд░рдХреГрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛рдПрдЧреАред рдХрд┐рд╕реА рднреА SIMD рдЦрдВрдб рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЧрдИ рд╕реВрдЪрдирд╛ рдХреЗ рд╕рд╛рде рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
  • рдПрдХ рдирдпрд╛ C ++ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ __CxxFrameHandler4, рдЬреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдУрд╡рд░рд╣реЗрдб рдХреЛ 66% рд╕реЗ рдХрдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдкрд░ 15% рдХреБрд▓ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЖрдХрд╛рд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ C ++ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдВрдж, рдЗрд╕реЗ "/ d2FH4" рдкрд╛рд╕ рдХрд░рдХреЗ рджреЗрдЦреЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ / d2FH4 рдЕрдиреНрдпрдерд╛ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдФрд░ рдЕрд╕рдорд░реНрдерд┐рдд рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╣реИред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ UWP рдРрдкреНрд╕ рдкрд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ UWP рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИред
  • рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдЬреИрд╕реЗ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдпреБрдХреНрдд рд▓реВрдк рдХреЗ рд╣рд╛рде рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MSVC рдЕрдм рд╡реЗрдХреНрдЯрд░ рд╡реЗрдХреНрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓рдШреБ рд╡реЗрдХреНрдЯрд░ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп (SVML) рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП 128-рдмрд┐рдЯ, 256-рдмрд┐рдЯ рдФрд░ 512-рдмрд┐рдЯ рд╡реИрдХреНрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдЧрд╝рд▓рддреА рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдорд░реНрдерд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреЗрд▓ рдЖрдВрддрд░рд┐рдХ рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВред
    рдЕрдкрд╡рд╛рджреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
    • рд╡реЗрдХреНрдЯрд░ рдкреВрд░реНрдгрд╛рдВрдХ рд╕рдВрдпреБрдХреНрдд рд╡рд┐рднрд╛рдЬрди рдФрд░ рд╢реЗрд╖ рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рддрддреНрд╡реЛрдВ рдФрд░ 128-рдмрд┐рдЯ рдФрд░ 256-рдмрд┐рдЯ рд╡реЗрдХреНрдЯрд░ рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдиреНрдп рддрддреНрд╡ рдЖрдХрд╛рд░реЛрдВ рдФрд░ рд╡реЗрдХреНрдЯрд░ рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рднрд╛рдЬрди рдФрд░ рд╢реЗрд╖ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
    • рдПрд╕рд╡реАрдПрдордПрд▓ рд╕реНрдХреНрд╡рд╛рдпрд░-рд░реВрдЯ рдХреЗрд╡рд▓ 128-рдмрд┐рдЯ рдФрд░ 256-рдмрд┐рдЯ рд╡реЗрдХреНрдЯрд░ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред 512-рдмрд┐рдЯ рд╡реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрдк _mm512_sqrt_pd рдпрд╛ _mm512_sqrt_ps рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
    • рд░рд┐рдВрдЯ рдФрд░ рдЖрд╕-рдкрд╛рд╕ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреЗрд╡рд▓ 512-рдмрд┐рдЯ рд╡реЗрдХреНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд░рд╛рдЙрдВрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП _mm256_round_ps (x, _MM_FROUND_CUR_DIRECTION) рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реЗрдВрдЯ рдХреЗ 256-рдмрд┐рдЯ рд╡реЗрдХреНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ _mm256_round_ps (x, _MM_FROUND_TO_NEAREST_INT) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред
    • рдХреЗрд╡рд▓ 512-рдмрд┐рдЯ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк set1 рдФрд░ div рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорддреБрд▓реНрдп рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ 256-рдмрд┐рдЯ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдХреЛ _mm256_div_ps (_mm256_set1_ps (1.0f), (x)) рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
    • рдХреЗрд╡рд▓ 128-рдмрд┐рдЯ рдФрд░ 256-рдмрд┐рдЯ рд╡реЗрдХреНрдЯрд░ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдПрдХрд▓-рд╕рдЯреАрдХ рдЬрдЯрд┐рд▓ рд╡рд░реНрдЧрдореВрд▓, рд▓рдШреБрдЧрдгрдХ рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП SVML рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред

рдирдИ рдФрд░ рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓рди


  • рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдореЗрдорд╕реЗрдЯреНрд╕ рдФрд░ рдмреНрд▓реЙрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдм SSE2 рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (рдпрд╛ рдпрджрд┐ рдЕрдиреБрдорддрд┐ рд╣реЛ рддреЛ AVX рдирд┐рд░реНрджреЗрд╢)ред рдЬреЛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрдЧрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ рд╕реАрдорд╛ рддрджрдиреБрд╕рд╛рд░ рдмрдврд╝ рдЧрдИ рд╣реИ (SSE2 рдХреЗ рд╕рд╛рде рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди: 31 рд╕реЗ 63 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдереНрд░реЗрд╢реЛрд▓реНрдб рдЪрд▓рддрд╛ рд╣реИ, SSE2 рдХреЗ рд╕рд╛рде рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди: рдереНрд░реЗрд╢реЛрд▓реНрдб 79 рд╕реЗ 159 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдЪрд▓рддрд╛ рд╣реИ)ред
  • рдЫреЛрдЯреЗ рдореЗрдорд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб-рдЬреАрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрдирдЗрдЯреЙрд▓-рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ред
  • SSA рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рдирд┐рд░рд░реНрдердХ рд╕реНрдЯреЛрд░ рдЙрдиреНрдореВрд▓рди рдореЗрдВ рд╕реБрдзрд╛рд░: рдмреЗрд╣рддрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд▓реВрдк рд╕реЗ рдмрдЪрдирд╛
  • рд╕рдВрдХрд▓рдХ рдореЗрдореЛрд╡ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ () рдПрдХ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ memmove () рд╕рд╣рд┐рдд std :: copy () рдФрд░ рдЕрдиреНрдп рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдЬреИрд╕реЗ std :: рд╡реЗрдХреНрдЯрд░ рдФрд░ std :: string рдирд┐рд░реНрдорд╛рдг рдкрд░ рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдЪрд╛рд▓рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
  • рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рд╢реЙрд░реНрдЯ, рдлрд┐рдХреНрд╕реНрдб-рд▓реЗрдВрде рдореЗрдореЛрд╡ (), рдореЗрдорд╕реАрдкреА (), рдФрд░ рдореЗрдореНрдХрдореНрдк () рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рдЧрд░реНрдо рдЫреЛрд░реЛрдВ рдХреЗ рдЕрдВрджрд░ рд╕реНрд╡рд┐рдЪ рдХреЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╕реНрд╡рд┐рдЪ рджреЛрд╣рд░рд╛рд╡ рдЕрдиреБрдХреВрд▓рдиред рд╣рдордиреЗ рд╢рд╛рдЦрд╛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдЬрдВрдкрд░реНрд╕ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдЪрд▓рд╛ред
  • SIMD (рд╡реЗрдХреНрдЯрд░) рдЖрдВрддрд░рд┐рдХ, рдлреНрд▓реЛрдЯ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХ рджреЛрдиреЛрдВ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░-рддрд╣ рдФрд░ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рд░рд▓реАрдХрд░рдг рдЬреЛрдбрд╝реЗред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдорд╛рдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдм SSE2 рдФрд░ AVX2 рдЗрдВрдЯреНрд░рд┐рдВрд╕рд┐рдХреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рд╕реЗ рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡реЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдкред
  • рдХрдИ рдирдП рд╕реНрдХреЗрд▓рд░ рдлреНрдпреВрдЬреНрдб рдорд▓реНрдЯреА-рдРрдб (FMA) рдкреИрдЯрд░реНрди / рдЖрд░реНрдХ: AVX2 / fp: рдлрд╛рд╕реНрдЯ рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдорд╛рдиреНрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: (x + 1.0) * y; (x тАУ 1.0) * y; (1.0 тАУ x) * y; (-1.0 тАУ x) * y (x + 1.0) * y; (x тАУ 1.0) * y; (1.0 тАУ x) * y; (-1.0 тАУ x) * y
  • рдХреЛрдб рдХреЗ рдЕрдиреБрдХреНрд░рдо рдЬреЛ рдПрдХ __m128 SIMD (рд╡реЗрдХреНрдЯрд░) рдорд╛рди рддрддреНрд╡-рджрд░-рддрддреНрд╡ рдХреЛ рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдПрдХ _mm_set_ps рдЖрдВрддрд░рд┐рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ред рдпрд╣ рдирдП SIMD рдЕрдиреБрдХреВрд▓рди рдХреЛ рднрд╛рд╡реЛрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рдЕрдЧрд░ рдореВрд▓реНрдп рдореЗрдВ рдХреЗрд╡рд▓ рдирд┐рд░рдВрддрд░ рддрддреНрд╡ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдХрд╛ рдЕрдкрдбреЗрдЯ рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред
  • рд╕рд╛рдорд╛рдиреНрдп рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрдиреНрдореВрд▓рди (рд╕реАрдПрд╕рдИ) рдЪрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╣реИ рдЬреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рдкрддрд╛ рд╣реИред
  • рдмреЗрдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ / рдХрдХреНрд╖рд╛ рдХреА рдкреНрд░рддрд┐рдпрд╛рдБ рдХрдИ рдФрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рдХрд╛рд▓реА рдЬрд╛ рд░рд╣реА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдкреНрд░рддрд┐рдпрд╛рдБ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдФрд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ C ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдорд╛рди рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
  • рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ (рдпрджрд┐ / / / рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ) рд╕реЗ рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЪрд░ рд░реЗрдВрдЬ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред Gsl :: span рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╕реБрдзрд╛рд░ рджреЗрдЦрддрд╛ рд╣реИ, рдХреБрдЫ рд░реЗрдВрдЬ рдЪреЗрдХ рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИрдВ рдЕрдм рд╣рдЯрд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
  • рд╡рд┐рдЪрд▓рди рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрдм рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд╡рд╕рд░ рдорд┐рд▓реЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдЬрдм рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЕрдирд╛рдо рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдереНрд░реВрдкреБрдЯ рд╕реБрдзрд╛рд░ рдмрдирд╛рдПрдВ


  • рдбрд┐рдмрдЧ рд╕реЗрдХреНрд╢рди рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рд▓рд┐рдВрдХрд░ рдереНрд░реВрдкреБрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдкреНрд░рддреАрдХреЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдбрд┐рдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВред 15.9 рд╕реЗ 16.0 рддрдХ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕реЗ рд▓рд┐рдВрдХрд░ рдХреЛ рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░ 40% рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдкреАрдбреАрдмреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд▓рдп рдФрд░ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд▓рд┐рдВрдХ рд╕рдордп рдореЗрдВ рд╕реБрдзрд╛рд░ред
  • 15.9 рд╕реЗ 16.0 рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ 2 рдЧреБрдирд╛ рд╕реНрдкреАрдбрдЕрдк рддрдХ рд▓рд┐рдВрдХ рд╕рдордп рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Chrome рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ / DEBUG: full рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп 1.75X рд▓рд┐рдВрдХ рдЯрд╛рдЗрдо рд╕реНрдкреАрдбрдЕрдк рд╣реБрдЖ, рдФрд░ / DEBUG: рдлрд╛рд╕реНрдЯрд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп 1.4X рд▓рд┐рдВрдХ рдЯрд╛рдЗрдо рд╕реНрдкреАрдбрдЕрдкред

рдЬреАрд╡рди рд╕реБрдзрд╛рд░ рдХреА рдЧреБрдгрд╡рддреНрддрд╛


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

 main.obj : error LNK2019: unresolved external symbol _foo referenced in function _main Hint on symbols that are defined and could potentially match: "int __cdecl foo(int)" (?foo@@YAHH@Z) "bool __cdecl foo(double)" (?foo@@YA_NN@Z) @foo@0 foo@@4 main.exe : fatal error LNK1120: 1 unresolved externals 
  • рд╕реНрдерд┐рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рддреЗ рд╕рдордп, LIB.exe рдХреЛ / LTCG рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
  • рдПрдХ рд▓рд┐рдВрдХрд░ рд╡рд┐рдХрд▓реНрдк / LINKREPROTARGET рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛: [рдмрд╛рдЗрдирд░реА_рдирд╛рдо] рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд░рд┐рдкреНрд░реЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣% LINK_REPRO% рдпрд╛ / LINKREPRO: [directory_name] рдХреЛ рдХрдИ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реЗ рдмрд┐рд▓реНрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд▓рд┐рдВрдХрд░ рдХреЗрд╡рд▓ / linkreprotarget рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП repro рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЖрдкрд╕реЗ рдкреНрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ рдИрдореЗрд▓ ( visualcpp@microsoft.com ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк Visual Studio рдпрд╛ MSVC рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдБ рдЙрдард╛рддреЗ рд╣реИрдВ, рдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд╕реБрдЭрд╛рд╡ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛> рдлрд╝реАрдбрдмреИрдХ рднреЗрдЬреЗрдВ> рд╕рдорд╕реНрдпрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ / рдЙрддреНрдкрд╛рдж рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджреЗрдВ , рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рд╕рдореБрджрд╛рдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрддрд╛рдПрдБред рдЖрдк рд╣рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ ( @VisualC ) рдФрд░ рдлреЗрд╕рдмреБрдХ (msftvisualcpp) рдкрд░ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles