рд╕реА ++ рдЗрдирд▓рд╛рдЗрдирд░ рдЗрдВрдкреНрд░реВрд╡рдореЗрдВрдЯ: рдж рдЬрд┐рдкрд▓рд╛рдЗрдирд░

рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рд╕рдВрд╕реНрдХрд░рдг 16.3 рдФрд░ 16.4 рдореЗрдВ C ++ рдЗрдирд▓рд╛рдЗрдирд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд░реВрдЯреАрди рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ "Zipliner" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдХреБрдЫ рдорд╛рдореВрд▓реА рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рд╕реБрдзрд╛рд░ рдФрд░ / рдпрд╛ рдкреНрд░рдореБрдЦ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо (рдХрдВрдкрд╛рдЗрд▓рд░ рдереНрд░реВрдкреБрдЯ) рд╕реБрдзрд╛рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред


рд╕реА 2 рдЗрдирд▓рд╛рдЗрдирд░


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

  1. рдЗрдирд▓рд╛рдЗрдирд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд╛рдо рдлрд┐рд░ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрдирд▓рд╛рдЗрди рдирд┐рд░реНрдгрдп рд╕рдВрджрд░реНрдн рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ рд▓рд╛рднрджрд╛рдпрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
  2. рдЗрдирд▓рд╛рдЗрдирд░ рдмрд╣реБрдд рдмрдЬрдЯ рдХреЗ рдкреНрд░рддрд┐ рдЬрд╛рдЧрд░реВрдХ рд╣реИред рдЗрд╕рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЖрдХрд╛рд░ рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрдард┐рди рдХрд╛рдо рд╣реИред
  3. рджреБрдирд┐рдпрд╛ рдХреЗ рдЗрдирд▓рд╛рдЗрдирд░ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрд╢рд╛ "рдкреВрд░реНрд╡-рдЕрдиреБрдХреВрд▓рд┐рдд" рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрдкреА рдкреНрд░рдЪрд╛рд░ рдФрд░ рдбреЗрдб рдХрдВрдЯреНрд░реЛрд▓ рдкрдереЛрдВ рдХрд╛ рдмрд╣реБрдд рд╕реАрдорд┐рдд рдЬреНрдЮрд╛рди рд╣реИред

рдЖрдзреБрдирд┐рдХ рд╕реА ++


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

Eigen::Matrix<float,-1,1,0,-1,1>::outerStride(void) 

рдЬреЛ рднреАрддрд░ рдХрд╣рддрд╛ рд╣реИ:

 template<typename Derived> class DenseBase ... Index innerSize() const {    return IsVectorAtCompileTime ? this->size()        : int(IsRowMajor) ? this->cols() : this->rows(); } 

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

 ?outerStride@?$Matrix@N$0?0$0?0$0A@$0?0$0?0@Eigen@@QEBA_JXZ PROC ; Eigen::Matrix<double,-1,-1,0,-1,-1>::outerStride, COMDAT mov    rax, QWORD PTR [rcx+8]    ret 0 

рдЕрдиреБрдХреВрд▓рд┐рдд рдЖрдИрдЖрд░


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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдЙрдЯрд░рд╕реНрдЯреНрд░рд╛рдЗрдб рдЗрд╕ рддреЗрдЬреА рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИ рдЬрдм рдЗрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ c2.dll рдЙрдирдХреЗ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджрд┐рдирдЪрд░реНрдпрд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ)ред рдлрд┐рд░, рдЗрдирд▓рд╛рдЗрдирд░ рдЙрд╕ рдПрдХреНрд╕рдЯреНрд░рд╛рд╕реНрдЯреНрд░рд╛рдЗрдб рдЗрдВрд╕реНрдЯреЗрдВрдЯреЗрд╢рди рдХреЛ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

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

рд▓рд╛рдн


Eigen рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЖрдЙрдЯрд░рд╕реНрдЯреНрд░рд╛рдЗрдб рдЬреИрд╕реЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рдмрдбрд╝реЗ рдХреЙрд▓ рдЯреНрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рдпрд╛ рджреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдИрдЧреБрдг рдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдереНрд░реВрдкреБрдЯ рд╕реБрдзрд╛рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ; рд╣рдордиреЗ рдРрд╕реЗ рд░рд┐рдкреЙрд░реНрд╕ рдХреЗ рд▓рд┐рдП 25-50% рдХрдо рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЛ рдорд╛рдкрд╛ред

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

рдлреАрдЪрд░ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдБ


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

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


All Articles