Lapack: рдорд╛рдирдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛-32 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛-64 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдирд╡ре░ 2020  ┬╖  41рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Reference-LAPACK/lapack

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбреЗрдмрд┐рдпрди рдореЗрдВ (рдХреБрдЫ) blas64 рдФрд░ cblas64 рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реЗрдбрд░ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдирд╣реАрдВ)ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╣реА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рд╕рдВрджрд░реНрдн рдЗрдВрдбреЗрдХреНрд╕ 64 рдПрдкреАрдЖрдИ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ (рд╡реЗ рдмреНрд▓рд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╣реИрдВ)ред

рдХреНрдпрд╛ рд╕реЗрдореЗрдХ рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, BUILD_INDEX64 рдЬреИрд╕рд╛ рдХреБрдЫ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ OFF , рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрдВрдбреЗрдХреНрд╕ -64 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдПрдЧрд╛?
рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдорд╛рдирдХ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдорди рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдереАрдВ - рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ libblas64.so, libcblas64.so, liblapack64.so, liblapacke64.so , рдЗрд╕ рддрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ libblas рдФрд░ libblas64 рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде)ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рджреЛ рдмрд╛рд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдПрдХ рдмрд╛рд░ рдЗрдВрдбреЗрдХреНрд╕ 32 рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рдмрд╛рд░ рдЗрдВрдбреЗрдХреНрд╕ 64 рдХреЗ рд▓рд┐рдП (рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдФрд░ рдбреАрд▓ рдмреНрд░реЗрдХрд░ рдирд╣реАрдВ рд╣реИ)ред
рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдВрдШрд░реНрд╖ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рдВрдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ, рд╡рд╣ рд╣реИ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдоред
рдпрджрд┐ рдбреЗрдмрд┐рдпрди рд╢реИрд▓реА рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ 64 рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ c рд╣реЗрдбрд░ рдХреЛ рднреА рдХреЙрд▓ рдХрд░рдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИред
(рдореИрдВ рдЗрд╕реЗ рдЬреЗрдВрдЯреВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рдбреЗрдмрд┐рдпрди рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рд╣рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВ)

рдкреАрдЖрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ: рджрд┐рд▓:

рдзрдиреНрдпрд╡рд╛рдж,
рдЖрдпрд╢рд╛

Build System Enhancement

рд╕рднреА 41 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп рдЖрдпрд╢рд╛, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рджреВрд╕рд░реЛрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдХреБрдЫ рджрд┐рди рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЬреЗ

рд╕рдмрд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдпреЛрдЬрдирд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдУрдПрдордЬреА @langou
рддреБрдо рдмрд╣реБрдд рддреЗрдЬ рд╣реЛ: рджрд┐рд▓:

рдХреЗрд╡рд▓ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡реЗ рдЪреАрдЬрд╝реЗрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдБ рдЬреЛ рд╣рдореЗрдВ рдЕрднреА рднреА рдХрд░рдиреА рд╣реИрдВ:

  • рдкрддрд╛ рд▓рдЧрд╛рдПрдБ рдХрд┐ рд╣реЗрдбрд░ рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ 32 рдмрд┐рдЯ рдПрдкреАрдЖрдИ 64 рдмрд┐рдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реЛ рд╕рдХреЗ
  • Printf/fprintf рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдХреЛ рдареАрдХ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡реЗ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХреНрд╡рд╛рд▓рд┐рдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ "рд╕рд╛рдл" рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

рдХреБрдЫ рдкреНрд░рд╢реНрди, рдЬреЛ рдореБрдЭреЗ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ

  • рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ cblas_f77.h рдФрд░ cblas_test.h рдмреАрдЪ рдПрдХ рдЯрди рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред рдХреНрдпрд╛ рд╣рдореЗрдВ рд╡рд╛рдХрдИ рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ?
  • рдХреНрдпрд╛ cblas_test.h рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдирд╛рдо (рдФрд░ рдЬрд┐рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдЗрдб рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╣рд╛рдп @ рдПрдкреНрд╕рд┐рд▓реЙрди-0,

рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЬреЛ рдорд╛рдирдХ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдорди рдореЗрдВ рдереАрдВ - рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдирд╛рдо libblas64.so, libcblas64.so, liblapack64.so, liblapacke64.so, рдЗрд╕ рддрд░рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рд╣реИ ( рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ libblas рдФрд░ libblas64 рджреЛрдиреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдЖрдк рдкреАрдЖрд░ #218 рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреАрдЖрд░ рдХреЗ рд▓реЗрдЦрдХ рдлреЗрдбреЛрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдмреНрдпреЛрд░реНрди рдПрд╕реНрд╕реЗрд░ рд╣реИрдВред

рд╣рд╛рдп @ рдПрдкреНрд╕рд┐рд▓реЙрди -0ред рдХреНрдпрд╛ #462 рдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛?

@weslleyspereira рдирд╣реАрдВ, рдпрд╣ рдЕрднреА рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред
рдХреБрдЫ рдФрд░ рд╣реЗрдбрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ/рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдореИрдВ рдЕрдЧрд▓реЗ рдХреБрдЫ рд╣рдлрд╝реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╕реНрдд рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ред
рдореВрд▓ рд░реВрдкрд░реЗрдЦрд╛

  • рд╢реАрд░реНрд╖рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ cblas.h рдФрд░ cblas64.h рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реА рддрд░рд╣ рдЕрдиреНрдп рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП

    • рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдЪрд┐рдд рд╣реЗрдбрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП *.c рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХреБрдЫ рдорд╛рдореВрд▓реА рд╕рдорд╛рдпреЛрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдХреЗ рджреМрд░рд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  • cmake рдлрд╝рд╛рдЗрд▓реЗрдВ lapack64 рдпрд╛ cblas64 рдЖрджрд┐ рдХреЗ рддрд╣рдд рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдареАрдХ рд╣реИ рдореИрдВ рд╕рдордЭрд╛ред рддреНрд╡рд░рд┐рдд рдЕрдиреБрд╡рд░реНрддреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ pkgsrc рдХреЗ рд╕рд╛рде рдЪреАрдЬреЛрдВ рдХреЛ рдкреИрдХреЗрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╛рди рдкрд░реЗрд╢рд╛рдиреА рд╣реИред рдореИрдВ cblas рдФрд░ lapacke рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдХреА рдкреВрд░реА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╛рдореЛрдВ рдФрд░ рдЙрдк-рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

/usr/lib/libopenblas.so
/usr/lib/libopenblas64.so
/usr/lib/libblas.so
/usr/lib/libcblas.so
/usr/lib/libblas64.so
/usr/lib/libcblas64.so
/usr/include/openblas/cblas.h
/usr/include/openblas64/cblas.h
/usr/include/netlib/cblas.h
/usr/include/netlib64/cblas.h
/usr/include/cblas.h -> netlib/cblas.h (for compatibility, having the default)

(рдЗрддреНрдпрд╛рджрд┐)

рд╣рдо рдмрд╛рдЗрдирд░реА рдбрд┐рд╕реНрдЯреНрд░реЛрд╕ рдХреА рддрд░рд╣ рд░рдирдЯрд╛рдЗрдо рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реИ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ cblas.h (рдФрд░ lapacke.h) рдЗрд╕рдХреА рдорд┐рд▓рд╛рди рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ libopenblas рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдирд╛рдоред рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдЪрдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ

BLAS_INCLUDES=-I/prefix/include/netlib64
BLAS_LIBS=-lblas64
CBLAS_LIBS=-lcblas64

(рдЖрджрд┐) .рдкреАрд╕реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдпрд╣реА рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╡реЗ рдЗрд╕рдореЗрдВ рдЕрднреА рддрдХ рд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рддрдХ рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрдкрдиреЗ рдбрд┐рд╕реНрдЯреНрд░реЛрд╕ рдореЗрдВ рд╣реИрдХ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдЧрд░ рд╕рднреА рд╕рдВрджрд░реНрдн libs рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЙрди рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рдорд┐рд▓рд╛ред

рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдореЗрдХ рдмрд┐рд▓реНрдб рдХреЛ рд╣реИрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдлрд┐рдХреНрд╕рдЕрдк рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рджреЗрдЦреЗрдВ https://github.com/Reference-LAPACK/lapack/pull/556)ред рдореБрдЭреЗ libblas.so рдФрд░ libblas64.so рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдареАрдХ рдмрдиреА рд╣реИрдВ, рдореБрдЭреЗ рд╣реЗрдбрд░ рдбреАрдЖрдИрдЖрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ ... рд▓реЗрдХрд┐рди рд╕реНрдерд╛рдкрд┐рдд cblas.h рдФрд░ lapacke.h 32 рдФрд░ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВред рдпрд╣ рдУрдкрдирдмреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рдмрд╛рдзрд╛рдУрдВ рдкрд░ рд╣реИ: рд╡рд╣рд╛рдВ, рдореБрдЭреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдиреЗрдЯрд▓рд┐рдм рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ:

diff -ruN /data/pkg/include/openblas/openblas_config.h /data/pkg/include/openblas64/openblas_config.h
--- /data/pkg/include/openblas/openblas_config.h    2021-06-03 19:03:53.000000000 +0200
+++ /data/pkg/include/openblas64/openblas_config.h  2021-06-03 19:13:36.000000000 +0200
@@ -44,6 +44,7 @@
 #define OPENBLAS_DLOCAL_BUFFER_SIZE 32768
 #define OPENBLAS_CLOCAL_BUFFER_SIZE 16384
 #define OPENBLAS_ZLOCAL_BUFFER_SIZE 12288
+#define OPENBLAS_USE64BITINT 
 #define OPENBLAS_GEMM_MULTITHREAD_THRESHOLD 4
 #define OPENBLAS_VERSION " OpenBLAS 0.3.15 "
 /*This is only for "make install" target.*/

рд╕рдВрджрд░реНрдн рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, 32 рдФрд░ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдмрд┐рд▓реНрдб рдХреЗ рд╕рднреА рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ
cblas.h рдФрд░ -DLAPACK_ILP64 -DHAVE_LAPACK_CONFIG_H рд▓рд┐рдП -DWeirdNEC рдЙрдирдХреЗ рдЭрдВрдбреЗ рдореЗрдВ (30 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдордЬрд╛рдХрд┐рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЪреВрдВрдХрд┐ рд▓реЛрдЧ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдмреАрдПрд▓рдПрдПрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рдордиреЗ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдпреЗ рд╕рдВрджрд░реНрдн рдкрд░ рд╡рд╛рдкрд╕ рдлрд╝реАрдб рдХрд░рддреЗ рд╣реИрдВ, IMHO, рдФрд░ ILP64 рдмрд┐рд▓реНрдб рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рд╣реЗрдбрд░ рдХреЛ 64 рдмрд┐рдЯ рд▓рд┐рдм рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЗ рдРрдк рдХреЛ рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрдВрдХреА рдлрд╝реНрд▓реИрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╕рд╣реА рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рд╣реЗрдбрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рд╕реНрдерд╛рдкрд┐рдд cblas рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рднреА рдЖрд╡рд╢реНрдпрдХ defs рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдХреЛ рдпрд╛рдж рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдЗрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред рд╡реЗ .pc рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдмреЗрдорд╛рдиреА рд╣реИрдВ рдФрд░ BLAS_LIBS etal рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреИрдХреЗрдЬрд░ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cmake-рдирд┐рд░реНрднрд░ рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ рдХрдард┐рди рдмрдирд╛рддреЗ рд╣реИрдВред

рдкреАрдПрд╕: рдЗрдВрдЯреЗрд▓ рдПрдордХреЗрдПрд▓ рдХреЗ рд╕рд╛рде, рдПрдХ рдХреЗрдВрджреНрд░реАрдп рд╕реНрд╡рд┐рдЪ -DMKL_ILP64 рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдореИрдВ рддреБрдЪреНрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ
include/intel-mkl64/cblas.h рд╕рд╛рде

#ifndef MKL_ILP64
#define MKL_ILP64
#endif
#include <mkl_cblas.h>

рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред рдореИрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛ BLAS_INCLUDES рдореЗрдВ рднреА рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд╣реА рдЕрдЬреАрдм рдиреЗрдЯрд▓рд┐рдм рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдмреЗрд╣рддрд░ рд╣реИ? рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ Intel рдпрд╛ OpenBLAS рдХреА рддрд░рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд╕рд╣реА рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рд╣реЗрдбрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИ?

рд╣рд╛рдВред рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдФрд░ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдкреВрд░реЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд▓реАрдирд░ рд╣реИред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рд╕реНрдерд╛рдкрд┐рдд cblas рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рднреА рдЖрд╡рд╢реНрдпрдХ defs рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдХреЛ рдпрд╛рдж рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред

рд╕рд╣реАред рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА 64-рдмрд┐рдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (BUILD_INDEX64=ON) рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИ рдФрд░ рдореБрдЭреЗ WeirdNEC , LAPACK_ILP64 рдпрд╛ HAVE_LAPACK_CONFIG_H рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрд╛ред рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╣рд╛рдВред рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдФрд░ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдкреВрд░реЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд▓реАрдирд░ рд╣реИред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдХреНрд▓реАрдирд░ рд╕рдорд╛рдзрд╛рди рдХреМрди рд╕рд╛ рд╣реИ? рдореИрдВ рдЕрднреА рдЬреЛ рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

#if defined(WeirdNEC) || @HAVE_ILP64@
   #define CBLAS_INDEX long
   #ifndef WeirdNEC
   #define WeirdNEC
   #endif
#else
   #define CBLAS_INDEX int
#endif

CMakeFile HAVE_ILP рдХреЛ 1 рдпрд╛ 0 рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛, рдкрд░рд┐рдгрд╛рдореА рд╣реЗрдбрд░ рд╡рд░реНрддрдорд╛рди рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

(рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ: рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд╣рд╛рдВ рд▓рдВрдмрд╛ рд▓рдВрдмрд╛ рд╣реИ тАж рдпрд╛ int64_t stdint рдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ред)

рд╕рд╣реАред рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА 64-рдмрд┐рдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (BUILD_INDEX64=ON) рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИ рдФрд░ рдореБрдЭреЗ WeirdNEC , LAPACK_ILP64 рдпрд╛ HAVE_LAPACK_CONFIG_H рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрд╛ред рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдПрдХ рдРрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ

cc -I/foo/include/netlib64 -o bar bar.c -L/foo/lib -lcblas64

рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ foo/include/netlib64/cblas.h рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ foo/include/netlib/cblas.h рджреНрд╡рд╛рд░рд╛ (рд╕рдВрднрд╡рддрдГ foo/include/cblas.h рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ)ред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХрд╛ рдорддрд▓рдм _not_ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ ;-)

рдЖрдк 'рдж' рд╣реЗрдбрд░ рдХреЛ /foo/include/cblas.h рдореЗрдВ рд░рдЦрдХрд░ рд╣реЗрдбрд░ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ /foo/include/netlib64/cblas.h рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХреЗрд╡рд▓ WeirdNEC рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ 64 рдмрд┐рдЯ рдФрд░ 32 рдмрд┐рдЯ рдкреИрдХреЗрдЬ рдЙрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЧрдиреНрджрд╛ рд╣реИред рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ/рдирд╛рдореЛрдВ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдирд╛рдо рдХреЛ cblas.h рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк #include <cblas.h> рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдзрд░-рдЙрдзрд░ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, cblas.h рд╢рд╛рдорд┐рд▓ ../cblas.h рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рд╕рд╛рде рд╣реА рд╣рдо cmake рдХреЗ рд▓рд┐рдП _one_ рд╣реЗрдбрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ /foo/include рд╣реИ, рди рдХрд┐ /foo/netlib64/includeред рдореИрдВ рдЗрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдкреИрдХреЗрдЬрд░реНрд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреА рд╣реЛрдЧреА (рдмреАрдПрд╕рдбреА рдореЗрдХ рдЗрди рдкреАрдХреЗрдЬреАрдПрд╕рдЖрд░рд╕реА):

.if !empty(LAPACK_COMPONENT:M*64)
.  if empty(MACHINE_ARCH:M*64)
PKG_FAIL_REASON+=       "${LAPACK_COMPONENT} incompatible with non-64-bit platform"
.  endif
HEADERDIR=netlib64
.else
HEADERDIR=netlib
.endif

# Note: We patch the build to install both static and
# shared libraries.
CMAKE_ARGS=     -DBUILD_DEPRECATED=ON \
                -DBUILD_SHARED_LIBS=ON \
                -DBUILD_STATIC_LIBS=ON \
                -DCMAKE_INSTALL_INCLUDEDIR=${PREFIX}/include/${HEADERDIR} \
                ${LAPACK_COMPONENT_CMAKE_ARGS}

рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдЗрд╕ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рд╛рде 32 рдмрд┐рдЯ cblas.h рдХреЛ рд╢рд┐рдкрд┐рдВрдЧ/рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рдкрд╣рд▓реВ рдпрд╣ рд╣реИ рдХрд┐ рдореВрд▓ рдпрд╛рдВрддреНрд░рд┐рдХреА рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред рдХреЗрд╡рд▓ 64 рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рд╣реА WeirdNEC рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред рдЖрдк рдХреЗрд╡рд▓ 64 рдмрд┐рдЯ рдПрдХ рдХреЛ рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рдЕрдиреНрдп рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдЫреВрддрд╛ рд░рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

рдУрд╣, рдЪрд▓реЛ... CBLAS/cmake/cblas-config-install.cmake.in рднреВрд▓ рдЧрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ -DCMAKE_INSTALL_INCLUDEDIR, рд╣реИ рди?

# Report lapacke header search locations.
set(CBLAS_INCLUDE_DIRS ${_CBLAS_PREFIX}/include)

(рдЯрд┐рдкреНрдкрдгреА рд╢реАрд░реНрд╖ рдкрд░ рдЪреАрдиреА рд╣реИред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реАрдПрдордХреЗ рдмрд┐рд▓реНрдб рдмрд╣реБрдд рдХрдо рдкрд░рд┐рдкрдХреНрд╡ рд╣реИ рдЬреЛ рдХреЛрдИ рд╕реЛрдЪрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреНрд░рд╛рдердорд┐рдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрдВрднреАрд░ рд╣реИ рдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдбреНрд░рд╛рдЗрд╡-рдмрд╛рдп рдпреЛрдЧрджрд╛рди рд╣реИ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреБрд░рд╛рдиреА рд╢реИрд▓реА рдХреЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд▓рдЪрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЪрд╛рд░реЛрдВ рдУрд░ рдХрдо рдЙрдкрджреНрд░рд╡ред рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рд╕реАрдПрдордХреЗ рд╕рд╛рдорд╛рди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдЗрддрдирд╛ рд╕рдордп рд▓рдЧрд╛ рдЪреБрдХрд╛ рд╣реВрдВ, рдХрд┐ рдореИрдВ рд╡реИрд╕реЗ рднреА рдШреГрдгрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдореБрдЭреЗ рдЕрдм рд╣рд╛рд░ рдорд╛рдирдиреА рд╣реЛрдЧреА ... рдореИрдВ cblas.h рдХреЛ cblas.h.in рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cblas.h.in cblas.h @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cblas_f77.h.in cblas_f77.h @ONLY)

CBLAS/include/CMakeLists.txt рдореЗрдВ, рд╕рд╛рде рд╣реА @HAVE_ILP64@ рд╕реЗ 1 рдпрд╛ 0 рдХреЛ рдЯреЙрдкрд▓реЗрд╡рд▓ CMakeLists.txt рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддрд╛ рдХрд┐ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп CMakeLists.txt рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдпрд╛ ${LAPACK_BINARY_DIR}/include (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ? рд╕реНрд░реЛрдд рдкреЗрдбрд╝ рдХреЗ рднреАрддрд░ рдХреЙрдкреА рдХрд░реЗрдВ?)

рдореИрдХреНрд░реЛ append_subdir_files рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд╕рд░реНрдЧ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдкрдереЛрдВ рдореЗрдВ рдкреНрд░реАрдкреЗрдб рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рд╕реНрд░реЛрдд рд╢реАрд░реНрд╖рд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдпрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрде рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореИрдВ рд╕рд┐рд░реНрдл рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рд╡рд╣рд╛рдВ рддрдХ тАЛтАЛрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдзрд┐рдХреНрдХрд╛рд░ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░ рдпрд╣рд╛рдБ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд▓ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рднрд╛рд╡рдирд╛рддреНрдордХ рд░рд╛рд╣рдд рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рддреЛрдбрд╝ рджрд┐рдП рдмрд┐рдирд╛ рд╣реИред

рд╣рд╛рдВред рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдФрд░ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдкреВрд░реЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд▓реАрдирд░ рд╣реИред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред рдХреНрд▓реАрдирд░ рд╕рдорд╛рдзрд╛рди рдХреМрди рд╕рд╛ рд╣реИ? рдореИрдВ рдЕрднреА рдЬреЛ рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

#if defined(WeirdNEC) || @HAVE_ILP64@
   #define CBLAS_INDEX long
   #ifndef WeirdNEC
   #define WeirdNEC
   #endif
#else
   #define CBLAS_INDEX int
#endif

CMakeFile HAVE_ILP рдХреЛ 1 рдпрд╛ 0 рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛, рдкрд░рд┐рдгрд╛рдореА рд╣реЗрдбрд░ рд╡рд░реНрддрдорд╛рди рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

(рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ: рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд╣рд╛рдВ рд▓рдВрдмрд╛ рд▓рдВрдмрд╛ рд╣реИ тАж рдпрд╛ int64_t stdint рдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ред)

рд╕рд╣реАред рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА 64-рдмрд┐рдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (BUILD_INDEX64=ON) рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИ рдФрд░ рдореБрдЭреЗ WeirdNEC , LAPACK_ILP64 рдпрд╛ HAVE_LAPACK_CONFIG_H рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрд╛ред рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдПрдХ рдРрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ

cc -I/foo/include/netlib64 -o bar bar.c -L/foo/lib -lcblas64

рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ foo/include/netlib64/cblas.h рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ foo/include/netlib/cblas.h рджреНрд╡рд╛рд░рд╛ (рд╕рдВрднрд╡рддрдГ foo/include/cblas.h рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ)ред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХрд╛ рдорддрд▓рдм _not_ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ ;-)

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд╕рдордЭрд╛рдПрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдореВрд▓ рд╢реАрд░реНрд╖рд▓реЗрдЦ cblas.h рдФрд░ include/netlib64/cblas.h рдФрд░ include/netlib/cblas.h рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛

#if defined(WeirdNEC)
   #define WeirdNEC
#endif
#include <cblas.h>

рдЖрдк 'рдж' рд╣реЗрдбрд░ рдХреЛ /foo/include/cblas.h рдореЗрдВ рд░рдЦрдХрд░ рд╣реЗрдбрд░ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ /foo/include/netlib64/cblas.h рд╢рд╛рдорд┐рд▓ рд╣реИ, рдХреЗрд╡рд▓ WeirdNEC рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ 64 рдмрд┐рдЯ рдФрд░ 32 рдмрд┐рдЯ рдкреИрдХреЗрдЬ рдЙрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЧрдиреНрджрд╛ рд╣реИред рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ/рдирд╛рдореЛрдВ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдирд╛рдо рдХреЛ cblas.h рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк #include <cblas.h> рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдзрд░-рдЙрдзрд░ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, cblas.h рд╢рд╛рдорд┐рд▓ ../cblas.h рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рд╕рд╛рде рд╣реА рд╣рдо cmake рдХреЗ рд▓рд┐рдП _one_ рд╣реЗрдбрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рд╣рдореЗрдВ include/netlib64 рдФрд░ include рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ dirs рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдпрджрд┐ рд╣рдо рдПрдХ рд╣реЗрдбрд░ рдореЗрдВ рджреВрд╕рд░реЗ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ /foo/include рд╣реИ, рди рдХрд┐ /foo/netlib64/includeред рдореИрдВ рдЗрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдкреИрдХреЗрдЬрд░реНрд╕ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреА рд╣реЛрдЧреА (рдмреАрдПрд╕рдбреА рдореЗрдХ рдЗрди рдкреАрдХреЗрдЬреАрдПрд╕рдЖрд░рд╕реА):

.if !empty(LAPACK_COMPONENT:M*64)
.  if empty(MACHINE_ARCH:M*64)
PKG_FAIL_REASON+=       "${LAPACK_COMPONENT} incompatible with non-64-bit platform"
.  endif
HEADERDIR=netlib64
.else
HEADERDIR=netlib
.endif

# Note: We patch the build to install both static and
# shared libraries.
CMAKE_ARGS=     -DBUILD_DEPRECATED=ON \
                -DBUILD_SHARED_LIBS=ON \
                -DBUILD_STATIC_LIBS=ON \
                -DCMAKE_INSTALL_INCLUDEDIR=${PREFIX}/include/${HEADERDIR} \
                ${LAPACK_COMPONENT_CMAKE_ARGS}

рдпрд╣ рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рддреЛ, рдЖрдк рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рдХ рдЭрдВрдбреЗ _guess_ рдХреЗ рдмрд┐рдирд╛ LAPACK рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рддрд░реАрдХрд╛ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

(рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ: рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡рд╣рд╛рдВ рд▓рдВрдмрд╛ рд▓рдВрдмрд╛ рд╣реИ тАж рдпрд╛ int64_t stdint рдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ред)

рдЬрд╛рдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рдмреАрдПрд▓рдПрдПрд╕ ++ рдФрд░ рд▓реИрдкреИрдХ ++ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рдмрдЬрд╛рдп int64_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

@weslleyspereira рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛:

#if defined(WeirdNEC)
   #define WeirdNEC
#endif
#include "../cblas.h"

/prefix/include/cblas.h рдФрд░ /prefix/include/netlib64/cblas.h рдХреЗ рд╕рд╛рде, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдкреВрд░реНрд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ 64 рдмрд┐рдЯ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╣реЗрдбрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рд╕рдорд╛рдзрд╛рди рд╣реИ?

#if defined(WeirdNEC) || @HAVE_ILP64@
   #define CBLAS_INDEX long
   #ifndef WeirdNEC
   #define WeirdNEC
   #endif
#else
   #define CBLAS_INDEX int
#endif

(рд▓рдВрдмрд╛ рдмрдирд╛рдо int64 рдПрдХ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рдЬреИрд╕реЗ BLAS++)

рд╣реЗрдХ, рдореБрдЭреЗ рдпрд╣ рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ `# рд╢рд╛рдорд┐рд▓ ".../cblas.h" рдХреЗрд╡рд▓ рдЕрдиреНрдп рдЗрдВрдбреЗрдВрдЯреЗрдб рд╣реЗрдбрд░ рдвреВрдВрдвреЗрдЧрд╛ред рд╕реА рдорд╛рдирдХ рдпрд╣ рдХрд╣рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЦреЛрдЬ рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реЛред рдкреИрдХреЗрдЬрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░рд╛ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЙрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдпрд╛ 64 рдмрд┐рдЯ рдкреИрдХреЗрдЬ 32 рдмрд┐рдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЪреВрд╕рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ pkgsrc рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдмрд╛рдж рдореЗрдВ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо 32 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рд╢реАрд░реНрд╖рд▓реЗрдЦ ( -DNETLIB_INDEX_BITS=64 ?) рдХреЗ рд╕рд╛рде рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдкреНрд░рддреАрдХ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдХреНрдпрд╛ рдореБрдЭреЗ рд╣рдорд╛рд░реЗ рдЗрдЪреНрдЫрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣рдорддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?

lib/libcblas64.so
include/optional_subdir64/cblas.h

рддрдерд╛

lib/libcblas.so
include/optional_subdir/cblas.h

LAPACK рдХреЛрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЗрдбрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдареАрдХ рд╣реИ?

рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕реЗ pkgsrc (рд╕рдордп рд╕реАрдорд╛ рдирд┐рдХрдЯ) рдХреА рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реНрдЪреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рд╣рдо рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреИрдЪ рдХреЛ рдПрдХ рдирдИ LAPACK рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рд╕рдХреВрдВред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рд╕рд╛рджреЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдмрд┐рд▓реНрдб рдХреЛ рднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рд╕реАрдПрдордХреЗ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ _my_ рдкреИрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

(рдмрд╕ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрд╕ рдЕрдЬреАрдм рд╕реАрдПрдордХреЗ рдХреЛ рд╕рдмрдорд┐рд╢рди рдореЗрдВ рд╣рд░рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рдЧреБрд╕реНрд╕реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рдмрд┐рд▓реНрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╣реЗрдбрд░ рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ рдШреБрдорд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛рддрд╛ рд╣реИред рдпрд╛ рдЙрди рдЯреВрдЯреА рд╣реБрдИ .cmake рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ ... рд╣рдореЗрдВ pkg-config рдорд┐рд▓ рдЧрдпрд╛!)

рдХреБрдЫ рднреА? рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдУрдкрдирдмреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрдВрдЯреЗрд▓ рдХреЛ 64 рдмрд┐рдЯ/32 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рд╣реЗрдбрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА, рдЙрдирдХреЗ mkl_cblas.h рдФрд░ mkl_lapacke.h рдкрд░ рд▓рдкреЗрдЯрдХрд░ред рдЕрдиреНрдпрдерд╛ рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреИрдХреЗрдЬ рдмрдирд╛рддрд╛ рд╣реВрдВ рдЬреЛ рдмрд╕ рдЙрдирдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

include/mkl-blas/cblas.h
include/mkl-blas64/cblas.h

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

@weslleyspereira рддреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛:

#if defined(WeirdNEC)
   #define WeirdNEC
#endif
#include "../cblas.h"

/prefix/include/cblas.h рдФрд░ /prefix/include/netlib64/cblas.h рдХреЗ рд╕рд╛рде, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдкреВрд░реНрд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдЕрдм рдЖрдк рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ 64 рдмрд┐рдЯ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╣реЗрдбрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рд╕рдорд╛рдзрд╛рди рд╣реИ?

#if defined(WeirdNEC) || @HAVE_ILP64@
   #define CBLAS_INDEX long
   #ifndef WeirdNEC
   #define WeirdNEC
   #endif
#else
   #define CBLAS_INDEX int
#endif

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

(рд▓рдВрдмрд╛ рдмрдирд╛рдо int64 рдПрдХ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рдЬреИрд╕реЗ BLAS++)

рд╕рд╣реАред рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ pkgsrc рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдмрд╛рдж рдореЗрдВ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдо 32 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рд╢реАрд░реНрд╖рд▓реЗрдЦ ( -DNETLIB_INDEX_BITS=64 ?) рдХреЗ рд╕рд╛рде рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдкреНрд░рддреАрдХ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдХреНрдпрд╛ рдореБрдЭреЗ рд╣рдорд╛рд░реЗ рдЗрдЪреНрдЫрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣рдорддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ?

lib/libcblas64.so
include/optional_subdir64/cblas.h

рддрдерд╛

lib/libcblas.so
include/optional_subdir/cblas.h

рд╣рд╛рдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рдкреАрдЖрд░ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдзрдиреНрдпрд╡рд╛рдж! рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NETLIB_INDEX_BITS рдЬреИрд╕рд╛ рдПрдХ рдирдпрд╛ рдкреНрд░рддреАрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 32 рдмрдирд╛ рд░рд╣реЗ, рдФрд░ рд╡рд╣ -DWeirdNEC рдХрд╛ рдЕрд░реНрде рд╣реИ -DNETLIB_INDEX_BITS=64 ред

LAPACK рдХреЛрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЗрдбрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдареАрдХ рд╣реИ?

рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдЗрд╕реЗ pkgsrc (рд╕рдордп рд╕реАрдорд╛ рдирд┐рдХрдЯ) рдХреА рдЖрдЧрд╛рдореА рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реНрдЪреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рд╣рдо рдЙрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреИрдЪ рдХреЛ рдПрдХ рдирдИ LAPACK рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рд╕рдХреВрдВред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде, рд╕рд╛рджреЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдмрд┐рд▓реНрдб рдХреЛ рднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рд╕реАрдПрдордХреЗ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ _my_ рдкреИрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдареАрдХ! рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢рд╛рдпрдж 2021 рдХреЗ рджреВрд╕рд░реЗ рд╕реЗрдореЗрд╕реНрдЯрд░ рдореЗрдВ LAPACK рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдЧреАред рдФрд░ рд╣рд╛рдБ, рдореЗрдХрдлрд╝рд╛рдЗрд▓ рдХреЛ рддрджрдиреБрд╕рд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореИрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдБред

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

https://github.com/numpy/numpy/blob/main/numpy/core/src/common/npy_cblas.h

рдФрд░ рдЗрд╕ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ, рдпрд╣ CBLAS_INDEX=size_t рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

$ grep CBLAS_INDEX ./numpy/core/src/common/npy_cblas_base.h                                                                                                                                  
CBLAS_INDEX BLASNAME(cblas_isamax)(const BLASINT N, const float  *X, const BLASINT incX);
CBLAS_INDEX BLASNAME(cblas_idamax)(const BLASINT N, const double *X, const BLASINT incX);
CBLAS_INDEX BLASNAME(cblas_icamax)(const BLASINT N, const void   *X, const BLASINT incX);
CBLAS_INDEX BLASNAME(cblas_izamax)(const BLASINT N, const void   *X, const BLASINT incX);

рдЕрдВрддрд░:

$ grep cblas_isamax ./numpy/core/src/common/npy_cblas_base.h  /data/pkg/include/cblas.h                                                                                                      
./numpy/core/src/common/npy_cblas_base.h:CBLAS_INDEX BLASNAME(cblas_isamax)(const BLASINT N, const float  *X, const BLASINT incX);
/data/pkg/include/cblas.h:CBLAS_INDEX cblas_isamax(const CBLAS_INDEX N, const float  *X, const CBLAS_INDEX incX);

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдкрд░реЗрд╢рд╛рдиреА рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдиреЗрдЯрд▓рд┐рдм рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднрд┐рдиреНрди рд░рд┐рдЯрд░реНрди рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред OpenBLAS рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ isamax рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд size_t рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди C рдЖрд╡рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдлреЛрд░рдЯреНрд░рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рджреЗрддрд╛ рд╣реИ (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдПрдХ рд╕рдмрд░реВрдЯреАрди рдЬреЛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд 32 рдпрд╛ 64 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдХреЛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд 64 рдмрд┐рдЯ рдЪрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ 64 рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо)ред

рдХреНрдпрд╛ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд░рд╛рдп рд╣реИ? I_guess_ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ size_t рдорд╛рди рд╣рдореЗрд╢рд╛ isamax() рд╕реЗ рдХрд┐рд╕реА рднреА рдЧреИрд░-рдЛрдгрд╛рддреНрдордХ рд░рд┐рдЯрд░реНрди рдХреЛ рдзрд╛рд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ iffy рдмрджрдмреВ рдЖ рд░рд╣реА рд╣реИред (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдк 32 рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ size_t 32 рдмрд┐рдЯреНрд╕ рд╣реИ, рд╣реИ рдирд╛? рдлрд┐рд░ рдЖрдк рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛ рдЧрдПред size_t * рд╕реЗ int * рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреА рдмреЗрдЪреИрдиреА рдХреЗ рдЕрд▓рд╛рд╡рд╛ред)

рдЪреВрдВрдХрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдиреЗ рд╡рд╣рд╛рдВ size_t рдкрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ, рдХреНрдпрд╛ рд╕рдВрджрд░реНрдн рдХреЛ рдЙрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрджрд░реНрдн cblas рдХреЗ рд╕рд╛рде numpy рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХрд┐рддрдирд╛ рдЦрддрд░рдирд╛рдХ рд╣реИ?

OpenBLAS рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред (...)
рдЪреВрдВрдХрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдиреЗ рд╡рд╣рд╛рдВ size_t рдкрд░ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИ, рдХреНрдпрд╛ рд╕рдВрджрд░реНрдн рдХреЛ рдЙрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ numpy (рдпрд╛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдордХреЗрдПрд▓ рдЗрддреНрдпрд╛рджрд┐) рдХреЗ рд▓рд┐рдП рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдУрдкрдирдмреАрдПрд▓рдПрдПрд╕ рдХреЛ рдХрд┐рд╕реА рднреА рд░реВрдк рдореЗрдВ рдорд╛рдирдХ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдХрдо рд╕реЗ рдХрдо рд╕рднреА рд╕рд╛рдкреЗрдХреНрд╖ рдЬреЛ (рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ) рдЖрдо рддреМрд░ рдкрд░ __the__ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ .. .

рдЬрд╝рд░реВрд░ред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ OpenBLAS рдпрд╛ MKL рд╡рд╣реА рд╣реИрдВ рдЬреЛ рд▓реЛрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдиреЗ рд╕рдордЭреМрддрд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ

#define CBLAS_INDEX size_t  /* this may vary between platforms */
#ifdef MKL_ILP64
#define MKL_INT MKL_INT64
#else
#define MKL_INT int
#endif
CBLAS_INDEX cblas_isamax(const MKL_INT N, const float  *X, const MKL_INT incX);

рдпрд╛ рдЗрд╕реА рддрд░рд╣

#ifdef OPENBLAS_USE64BITINT
typedef BLASLONG blasint;
#else
typedef int blasint;
#endif
#define CBLAS_INDEX size_t
CBLAS_INDEX cblas_isamax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float  *x, OPENBLAS_CONST blasint incx);

рдмрдирд╛рдо рд╕рдВрджрд░реНрдн

#ifdef WeirdNEC
   #define CBLAS_INDEX long
#else
   #define CBLAS_INDEX int
#endif
CBLAS_INDEX cblas_isamax(const CBLAS_INDEX N, const float  *X, const CBLAS_INDEX incX);

рдпрд╣ рдХреИрд╕реЗ рдЖрдпрд╛ рдХрд┐ рд╡реЗ рдпрд╣рд╛рдБ рд╕рдВрджрд░реНрдн рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЧрдП рд╣реИрдВ? рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕рдВрд╡рд╛рдж рдерд╛? рд╕рд╛рде рд╣реА ... рдореИрдВ рдПрдордХреЗрдПрд▓ рдФрд░ рдУрдкрдирдмреАрдПрд▓рдПрдПрд╕ рдХреЛ рдРрд╕реЗ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рдВрджрд░реНрдн рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рднреА рдирд╣реАрдВ рд╣реИрдВ:

CBLAS_INDEX cblas_isamin(const MKL_INT N, const float  *X, const MKL_INT incX);
CBLAS_INDEX cblas_idamin(const MKL_INT N, const double *X, const MKL_INT incX);
CBLAS_INDEX cblas_icamin(const MKL_INT N, const void   *X, const MKL_INT incX);
CBLAS_INDEX cblas_izamin(const MKL_INT N, const void   *X, const MKL_INT incX);

CBLAS_INDEX cblas_isamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float  *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_idamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_icamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void  *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_izamin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);

CBLAS_INDEX cblas_ismax(OPENBLAS_CONST blasint n, OPENBLAS_CONST float  *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_idmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_icmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void  *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_izmax(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);

CBLAS_INDEX cblas_ismin(OPENBLAS_CONST blasint n, OPENBLAS_CONST float  *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_idmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST double *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_icmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void  *x, OPENBLAS_CONST blasint incx);
CBLAS_INDEX cblas_izmin(OPENBLAS_CONST blasint n, OPENBLAS_CONST void *x, OPENBLAS_CONST blasint incx);

рддреЛ, рдорд╛рдирдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдПрдХ рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди size_t рдмрдирд╛рдо int 64 рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рдЧрдВрднреАрд░ рдореБрджреНрджрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реБрд▓рдЭрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЗрдЯрд▓рд┐рдм рддрд░реАрдХрд╛ рд╕рдордЭрджрд╛рд░ рд╣реИ: рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдЬреИрд╕рд╛ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдЕрдВрдд рдореЗрдВ рдлреЛрд░рдЯреНрд░рд╛рди рд░реВрдЯреАрди рдХреЛ рдЗрд╕ рддрд░рд╣ рдХрд╣рддреЗ рд╣реИрдВ

c     isamaxsub.f
c
c     The program is a fortran wrapper for isamax.
c     Witten by Keita Teranishi.  2/11/1998
c
      subroutine isamaxsub(n,x,incx,iamax)
c
      external isamax
      integer  isamax,iamax
      integer n,incx
      real x(*)
c
      iamax=isamax(n,x,incx)
      return
      end

... iamax рдХреЗ рд▓рд┐рдП size_t рдХрд╛ рдкрддрд╛ рд╕реМрдВрдкрдирд╛, рдЬреЛ рдХрд┐ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ OpenBLAS рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдЗрд╕ рд╕рдВрджрд░реНрдн рд╕реЗ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдХреНрдпрд╛ рд╡реЗ рд╕рд┐рд░реНрдл рдореВрд░реНрдЦ рд╣реИрдВ рдЬреЛ рдмрд╛рд╣рд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ? рдХреНрдпрд╛ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рд╣рд╛рдп рд╕рдм, рд╕рдВрджрд░реНрдн рдмреАрдПрд▓рдПрдПрд╕, рд╕рдВрджрд░реНрдн рд╕реАрдмреАрдПрд▓рдПрдПрд╕, рд╕рдВрджрд░реНрдн рд▓реИрдкреИрдХ, рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рджреЛ рдореБрдЦреНрдп рдЬреЛрд░ рд╣реИрдВ (1) рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ (2) рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛, рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдЬреЛ рдЗрд╕реЗ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рд▓реЛрдЧ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ (рдУрдкрдирдмреАрдПрд▓рдПрдПрд╕, рдПрдордХреЗрдПрд▓, рдЖрджрд┐) рд╕реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦрдХрд░ рдФрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реИрдВред рд╣рдореЗрдВ рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрдирд╛ рд╣реИред (рдФрд░ рд╣рдо рдЕрдиреНрдп рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд░реИрдЦрд┐рдХ рдмреАрдЬрдЧрдгрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рднреА рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрддреЗ рд╣реИрдВ!) рдХрд┐рд╕реА рднреА рддрд░рд╣: рд╕рдВрджрд░реНрдн рдмреАрдПрд▓рдПрдПрд╕, рд╕реАрдмреАрдПрд▓рдПрдПрд╕, рд▓реИрдкреИрдХ рдЕрдкрдиреЗ рд╕реАрдПрдордХреЗ рдкреИрдХреЗрдЬрд┐рдВрдЧ, рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдХреБрдЫ рд╕реБрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдУрдкрдирдмреАрдПрд▓рдПрдПрд╕ (рдЙрджрд╛рд╣рд░рдг) рдХреА рдмреЗрд╣рддрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рд╣рдо, рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕ рдореЙрдбрд▓ рдХреА рдУрд░ рдмрдврд╝рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

рдХреБрдЫ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рдХрд╛ рдЬрдиреНрдо рдПрдХ рд╕рдорд┐рддрд┐ (рдмреЗрд╕рд┐рдХ рд▓реАрдирд┐рдпрд░ рдЕрд▓рдЬреЗрдмреНрд░рд╛ рд╕рдмрдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдЯреЗрдХреНрдирд┐рдХрд▓ рдлреЛрд░рдо) рд╕реЗ рд╣реБрдЖ рдерд╛, рдЬрд┐рд╕рдиреЗ рдмреАрдПрд▓рдПрдПрд╕ рдкрд░ рджреЛрдмрд╛рд░рд╛ рдЧреМрд░ рдХрд░рдиреЗ рдкрд░ 1996 рд╕реЗ 2000 рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдмреАрдПрд▓рдПрдПрд╕ рдХреЗ рд▓рд┐рдП рд╕реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рджреЗрдЦреЛ:
http://www.netlib.org/blas/blast-forum/
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреЗрдЦреЗрдВ:
http://www.netlib.org/blas/blast-forum/cinterface.pdf
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ LAPACK рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ CBLAS 25 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдмреЗрд╕рд┐рдХ рд▓реАрдирд┐рдпрд░ рдЕрд▓рдЬреЗрдмреНрд░рд╛ рд╕рдмрдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдЯреЗрдХреНрдирд┐рдХрд▓ рдлреЛрд░рдо рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

рдпрджрд┐ рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рде рднреЗрдЬреЗрдВред рдореИрдВ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рддрдзрд╛рд░рдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕реВрдЪрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рддреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣рд┐рд╕реНрд╕рд╛ рдЙрд╕ рд╕реНрдкреЗрдХ рдореЗрдВ рдмреА.2.2 рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ BLAS_INDEX рдЖрдорддреМрд░ рдкрд░ size_t , рд▓реЗрдХрд┐рди рдЗрд╕реЗ (рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд) рдлреЛрд░рдЯреНрд░рд╛рди рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдиреБрдХреНрд░рдордг рдпрд╣ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЗ size_t рдЪреБрдирд╛ рдФрд░ рдиреЗрдЯрд▓рд┐рдм рд╕рдВрджрд░реНрдн рдиреЗ рдЙрд╕реА рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдЪреБрдирд╛ рдЬреЛ рд╡рд╣ рдлреЛрд░рдЯреНрд░рд╛рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЪрд╛рд░реЛрдВ рдУрд░ cblas.h рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬреЛ рдЙрд╕ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде lib (рдЬреИрд╕реЗ numpy, рдмрд╛рд╣рд░реА lib рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╢рд┐рдкрд┐рдВрдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ

#define CBLAS_INDEX size_t  /* this may vary between platforms */

https://github.com/LuaDist/gsl/blob/master/cblas/gsl_cblas.h рдореЗрдВ , рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реИ

/* This is a copy of the CBLAS standard header.
 * We carry this around so we do not have to
 * break our model for flexible BLAS functionality.
 */

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ? 41779680d1f233928b67f5f66c0b239aecb42774 рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП ... рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ CBLAS_INDEX WeirdNEC рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдЪ 64 рдмрд┐рдЯ рдмрд┐рд▓реНрдб рд╕реЗ рдкрд╣рд▓реЗ рд░рд╣рд╛ рд╣реИред рд╡рд╛рд╣, рдХреНрдпрд╛ рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИред рдЕрдм рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ 2015 рддрдХ size_t рд╕рдВрджрд░реНрдн cblas.h рдореЗрдВ рдерд╛, 83fc0b48afd1f9a6d6f8dddb16e69ed7ed0e7242 рдиреЗ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ WeirdNEC рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХреА рдереА рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рд╣рд╛рд▓ рдХрд╛ рд╣реИ! рдмреЗрддрд╣рд╛рд╢рд╛ рднреНрд░рдорд┐рддред

рдореИрдВ рдпрд╣ рднреА рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ cblas.h рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдлреЛрд░рдЯреНрд░рд╛рди рдХреЙрд▓ рдХреЛ int рд╕реМрдВрдк рджрд┐рдпрд╛, рдЕрдм CBLAS_INDEX ред рдпрд╣ рдЕрдм рд╕рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ CBLAS_INDEX рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдФрд░ рдлреЛрд░рдЯреНрд░рд╛рди рднрд╛рдЧ рдореЗрдВ 32 рдпрд╛ 64 рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рдеред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ cblas.h рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ size_t рд╕рд╛рде рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн рд╕реЗ рд╡рд░реНрддрдорд╛рди CBLAS рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрдЧ рдЪрд▓ рд░рд╣реА рд╣реИ? рдХреНрдпрд╛ рд╡реЗ 64 рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ 32 рдмрд┐рдЯ рдХреЗрд╕ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

#include <stdio.h>
#include <stdlib.h>


void ia_max(int a, void *b)
{
    int *ib = (int*)b;
    *ib = a*2;
}


int main(int argc, char **argv)
{
    int i = atoi(argv[1]);
    size_t maxi;
    ia_max(i, &maxi);
    printf("in %d out %ld\n", i, (long)maxi);
    return 0;
}

рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реЛрдЧрд╛

$ gcc -O -o t t.c
$ ./t 42
in 42 out 140724603453524

size_t рдорд╛рди рдХреЛ рд╢реВрдиреНрдп рдкрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рдорд╛рдорд▓реЗ рдореЗрдВред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрддреА? рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред

рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. рд╕рдВрджрд░реНрдн CBLAS рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ size_t ред
  2. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлреЛрд░рдЯреНрд░рд╛рди рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЙрд▓ рдореЗрдВ рдпрд╣ int рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ред
  3. рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо (рдЕрдиреБрдХреВрд▓рд┐рдд рдмреАрдПрд▓рдПрдПрд╕, рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рд╣реЗрдбрд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВред
  4. рд╕рдВрджрд░реНрдн CBLAS рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП WeirdNEC рд╣реИрдХ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, size_t рдХреЛ int рдпрд╛ long рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ (рдлреЛрд░рдЯреНрд░рд╛рди рдкрдХреНрд╖ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ ?!)
  5. рдлреЛрд░рдЯреНрд░рд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рд╣рд░ рдЬрдЧрд╣ CBLAS_INDEX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 64 рдмрд┐рдЯ рд╕рдВрджрд░реНрдн рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЙрд╕рдХреЗ рдКрдкрд░ рдирд┐рд░реНрдорд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  6. рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдиреЗ 64 рдмрд┐рдЯ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ CBLAS_INDEX рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛, рдЬреЛ рдХрд┐ рд╣рдореЗрд╢рд╛ size_t рд╣реЛрддрд╛ рд╣реИред
  7. рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рд░реИрдкрд░ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдлреЛрд░рдЯреНрд░рд╛рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CBLAS_INDEX рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

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

рдУрдкрдирдмреНрд▓рд╛рд╕ рдХрдо рд╕реЗ рдХрдо рд╕рдВрджрд░реНрдн-рд▓реИрдкреИрдХ рд╕реЗ рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рд░реИрдкрд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╕реНрд░реЛрдд рд╡рд╣рд╛рдВ рд╣реИ рд▓реЗрдХрд┐рди рдирд┐рд░реНрдорд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)

@ рдорд╛рд░реНрдЯрд┐рди-рдПрдлрдЖрд░рдмреАрдЬреА рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк x86-64 рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рдкрде рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ cblas_isamax() рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП size_t рдХреИрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореБрдЭреЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд░реНрдиреЗрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛ рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред

рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдИ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреЛрд░рдЯреНрд░рд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП (size_t*) рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдХреЗрд╡рд▓ рдорд╛рди рд▓реЗрдВ

size_t cblas_isamax(тАж)

рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ int рдпрд╛ long (рдпрд╛ int64_t) рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп 64 рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ? рдкрд┐рдЫрд▓реЗ 5 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдиреЗ CBLAS_INDEX рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреЗрдЯрд▓рд┐рдм рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред

рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб OpenBLAS/рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕/imax.c cblas_isamax() рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдХреЙрд▓ рдЧреНрд░рд╛рдл рдореЗрдВ рдХреЛрдИ рдлреЛрд░рдЯреНрд░рд╛рди рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЖрд╣ рдЕрдЪреНрдЫрд╛ред рддреЛ рдПрдХ рдорд╛рдорд▓рд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рд╡рд╣ cblas.h рдХреА рдПрдХ рдкреНрд░рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ NumPy (рдФрд░ SciPy) рдореЗрдВ cblas_isamax() рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рднреА рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП:

  1. рдЕрдиреНрдп рд▓реЛрдЧ int32_t/int64_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдиреЗрдЯрд▓рд┐рдм рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ (рдЪрд▓реЛ рдЙрд╕ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░рд╣реЗрдВ;-) BLAS_INDEX рдЖрдХрд╛рд░ рд░рд┐рдЯрд░реНрди рдФрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рддрд░реНрдХ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдПред
  2. Netlib рдЧреБрдлрд╛рдУрдВ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреА рддрд░рд╣ рдЙрди рд░рд┐рдЯрд░реНрди рдХреЗ рд▓рд┐рдП size_t рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ 32 рдпрд╛ 64 рдмрд┐рдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдкрд╕рдВрдж рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

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

рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдЙрддрдирд╛ рд╣реА рдореИрдВ рд╡рд┐рдХрд▓реНрдк 2 рдХреА рдУрд░ рдЭреБрдХрддрд╛ рд╣реВрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреАрдЖрдИ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП size_t рдерд╛ред рдлрд┐рд░ рдиреЗрдЯрд▓рд┐рдм рдиреЗ рдЙрд╕ size_t рдХреЛ int рдпрд╛ long рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдлреЛрд░рдЯреНрд░рд╛рди рдХреЛрдб рд╕реЗ рдмреЗрд╣рддрд░ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдпрд╛ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, size_t рд╕реНрдерд╛рдкрд┐рдд рдПрдкреАрдЖрдИ рдФрд░ рдиреЗрдЯрд▓рд┐рдм рд╕рдВрджрд░реНрдн рдиреЗ рдЗрд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ред

рдХреНрдпрд╛ рдореБрдЭреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреАрдЖрд░ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП

size_t cblas_isamax(const CBLAS_INDEX N, const float  *X, const CBLAS_INDEX incX);
size_t cblas_idamax(const CBLAS_INDEX N, const double *X, const CBLAS_INDEX incX);
size_t cblas_icamax(const CBLAS_INDEX N, const void   *X, const CBLAS_INDEX incX);
size_t cblas_izamax(const CBLAS_INDEX N, const void   *X, const CBLAS_INDEX incX);

рдлрд┐рд░? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдкрд░ рдЕрдм рдХреЛрдИ рдореИрдХреНрд░реЛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ size_t, рд╣рд░ рдЬрдЧрд╣, рдЕрддреАрдд рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

https://github.com/numpy/numpy/issues/19243 рдореЗрдВ рдЕрдм рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдиреАрдЪреЗ рдЙрддрд░ рдЧрдП рд╣реИрдВ: "рд╕реНрдХреНрд░реВ рдиреЗрдЯрд▓рд┐рдм, size_t рдмрд╛рдХреА рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"ред

size_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддреАрди рдХрд╛рд░рдг рд╣реИрдВ:

  1. рд╕рднреА C рдФрд░ C++ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдп рдЗрд╕ рдорд╛рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, void* malloc(size_t) , size_t strlen() , рдпрд╛ std::size_t std::vector<T>::size() (C++)ред size_t рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд/рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. size_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рд╡реНрдпрдХреНрдд рдорд╛рддреНрд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЛрдгрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЖрдпрд╛рдоред
  3. C рдФрд░ C++ рдорд╛рдирдХ рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ size_t рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд┐ рдЖрдк рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ size_t , cf рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред cppference.com: size_t ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЖрдк 32 рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ size_t 32 рдмрд┐рдЯреНрд╕ рд╣реИ, рд╣реИ рдирд╛? рдлрд┐рд░ рдЖрдк рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛ рдЧрдПред

рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ 4 рдЬреАрдмреА рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ (рд▓рд┐рдирдХреНрд╕ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдПрдХ 32-рдмрд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрднреА рднреА 4 рдЬреАрдмреА рд╕реЗ рдЕрдзрд┐рдХ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИред рдпрд╛рдиреА, 64-рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдКрдкрд░реА 32-рдмрд┐рдЯ рдХрд╛ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

_рд╕реНрдореГрддрд┐ рд╕реАрдорд╛ 64-рдмрд┐рдЯ Linux OS рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА 32-рдмрд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддрдХ_

рдореИрдВ рдпрд╣ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ size_t рд░рдЦрдирд╛ рд╕рд╣реА рдХрд╛рдо рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдмрджрд▓рдирд╛ ABI рдмреНрд░реЗрдХ рдерд╛ рдФрд░ рдмрд╛рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде Netlib рдХреЛ рд╕рд┐рдВрдХ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХреЗ рддрд░реНрдХреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ ;-)

1. All of the C and C++ standard library functions accept and return this value

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

рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЙрд╕ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЕрдВрддрддрдГ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкрд░ рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрддрд╛ рд╣реВрдВред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИ, рдСрдлрд╝рд╕реЗрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ (рдПрдордПрд╕рд╡реАрд╕реА) -unsigned_value рджреНрд╡рд╛рд░рд╛ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреА рд╣реЛрдЧреАред

рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдЖрдХрд╛рд░ рдХреЛ malloc() рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЛ рд╕реМрдВрдкрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, size_t рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдмрд╛рдд рд╣реИ, рдФрд░ рдпрд╣ рд╕реАрдмреАрдПрд▓рдПрдПрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рднреА рд░рд╣рд╛ рд╣реИред

рдХреЛрдб рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЛрдВ рдкрд░, рдмрд┐рд▓реНрдб рдореЗрдВ рд╡рд┐рдХреНрд░реЗрддрд╛ cblas.h рд╕рд╛рде рдмреЗрдореЗрд▓:

рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ 4 рдЬреАрдмреА рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ (рд▓рд┐рдирдХреНрд╕ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдПрдХ 32-рдмрд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрднреА рднреА 4 рдЬреАрдмреА рд╕реЗ рдЕрдзрд┐рдХ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИред рдпрд╛рдиреА, 64-рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдКрдкрд░реА 32-рдмрд┐рдЯ рдХрд╛ рдХрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, size_t 32 рдмрд┐рдЯ рд░рд╣рддрд╛ рд╣реИред рдЬрдм рдЖрдк (рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдиреЗ cblas_isamax() рдХреЛ 64 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛, рдмрд┐рд▓реНрдб рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж long рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди int64_t , рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ?

size_t cblas_isamax(); // really int64_t cblas_isamax()!
size_t value = cblas_isamax(тАж);

x86 рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди 64 рдмрд┐рдЯ рдорд╛рди рдХреЛ EAX рдФрд░ EDX рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдпрд╣ рдПрдХ рд╕реВрдЪрдХ рд╡рд╛рдкрд╕реА рдФрд░ рдХреБрдЫ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ? рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рди рдорд┐рд▓реЗ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЧрд▓рдд рдореВрд▓реНрдпред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рдЙрдЪреНрдЪ 32 рдмрд┐рдЯреНрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЕрдм рдПрдХ рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди 32 рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо (рдПрдЖрд░рдПрдо рдХрд╛ рдХреБрдЫ рд░реВрдк) рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ ... рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдЖрдзрд╛ рднреА рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛?

рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рд╕реНрдкреИрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХреЗ, рдЬрд┐рд╕реЗ 32 рдмрд┐рдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ 64 рдмрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдЧреИрд░-рдорд┐рд▓рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг _at_least_ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрд╕реНрд╡рд╕реНрде рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ ... x86 рд▓рд┐рдирдХреНрд╕ рдкрд░ ( gcc -m32 рдПрдХ x86-64 рд╕рд┐рд╕реНрдЯрдо рдкрд░), рдЖрдк рдмрд╕ рдКрдкрд░реА 32 рдмрд┐рдЯреНрд╕ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред

рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓рд╛ тАж 64 рдмрд┐рдЯ size_t:

size_t cblas_isamax(); // really int32_t cblas_isamax()!
size_t value = cblas_isamax(тАж);

рдлрд┐рд░, x86-64 рдкрд░, 64 рдмрд┐рдЯ RAX рдФрд░ 32 рдмрд┐рдЯ EAX рдХреЗ рдмреАрдЪ рдЕрдЬреАрдмреЛрдЧрд░реАрдм рд╕рдВрдмрдВрдз рдЪреАрдЬреЛрдВ рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рдЭрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдкрд░ 32 рдмрд┐рдЯ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ рдЪреБрдкрдЪрд╛рдк рдКрдкрд░реА 32 рдмрд┐рдЯреНрд╕ рдХреЛ рд╢реВрдиреНрдп рдХрд░ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рдлрдВрдХреНрд╢рди рдбрд┐рдлрд┐рдирд┐рд╢рди рдХреЗ рд╕рд╛рде рдордЬрд╛ рдЖрддрд╛ рд╣реИ:

$ cat ret32.c 
#include <stdint.h>

int32_t ret64(int64_t a)
{
    a += 1LL<<32;
    return a;
}
$ gcc -m64  -g -c -o ret32.o ret32.c 
$ LANG=C objdump -S ret32.o 
[тАж]
   8:   48 89 7d f8             mov    %rdi,-0x8(%rbp)
    a += 1LL<<32;
   c:   48 b8 00 00 00 00 01    movabs $0x100000000,%rax
  13:   00 00 00 
  16:   48 01 45 f8             add    %rax,-0x8(%rbp)
    return a;
  1a:   48 8b 45 f8             mov    -0x8(%rbp),%rax

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

$ cat call.c 
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

INDEX ret64(int64_t);

int main(int argc, char **argv)
{
    if(argc < 2)
        return 1;
    int64_t a = (int64_t)strtoll(argv[1], NULL, 10);
    INDEX  s = ret64(a);
    printf("%lld\n", (long long)s);
    return 0;
}
$ gcc -m64 -g -DINDEX=int32_t -c -o call32_64.o call.c
$ gcc -m64 -g -DINDEX=size_t -c -o call64_64.o call.c
$ ./call32_64 1
1
$ ./call64_64 1
4294967297

рдЖрдирдВрджред рдПрдХ 32 рдмрд┐рдЯ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдЬреЛ 32 рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╕рдВрднрд╡ рд╕реЗ рдЕрдзрд┐рдХ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ) Netlib CBLAS рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ size_t рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ RAX рдХреЗ рдКрдкрд░реА 32 рдмрд┐рдЯ рд╢реВрдиреНрдп рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ ... рд╕рдВрдХрд▓рдХ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЙрд▓рд░ рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдХрдо 32 рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ ... рд╕рд╛рде рд╣реА рд╡рд╣рд╛рдВ рдХрдЪрд░рд╛ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рддреЛ ... рдХреНрдпрд╛ рд╣рдо рдиреЗрдЯрд▓рд┐рдм рдХреЛ рд╡рд╛рдкрд╕ size_t рдкрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдкрд░ рд╕рд╣рдордд рд╣реИрдВ?

рдЗрди рд╕рднреА рдореВрд▓реНрдпрд╡рд╛рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ @langou рдХреЗ рд╕рд╛рде рдереЛрдбрд╝реА рдЪрд░реНрдЪрд╛ рдХреАред рдпрд╣рд╛рдБ рдЪрд░реНрдЪрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ:

рдПрдХ рдЕрд▓рдЧ рдкреАрдЖрд░ рдореЗрдВ:

  1. рд╣рдо рдПрдХ cblas.h рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдорд╛рди рд▓реАрдЬрд┐рдП CBLAS_INDEX рдФрд░ CBLAS_INTред MKL (CBLAS_INDEX рдФрд░ MKL_INT) рдФрд░ OpenBLAS (CBLAS_INDEX рдФрд░ blasint) рдореЗрдВ рдпрд╣реА рд╣реЛрддрд╛ рд╣реИред CBLAS_INDEX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ i*amax рдХреА рд╡рд╛рдкрд╕реА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рдПрдмреАрдЖрдИ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдмреАрдПрд▓рдПрдПрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред
  2. рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдо CBLAS_INDEX рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди size_t рдЪреБрдирддреЗ рд╣реИрдВ рдФрд░ рд╕рдореБрджрд╛рдп рд╕реЗ рд░рд╛рдп рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рдкреАрдЫреЗ рдпрд╣ рдЧрдардмрдВрдзрди (рдпрд╛ рд╢рд╛рдпрдж рд╡рд╣реА) рд╡рд┐рдЪрд╛рд░ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ @drhpc рдиреЗ рдмрддрд╛рдпрд╛,
https://github.com/Reference-LAPACK/lapack/commit/83fc0b48afd1f9a6d6f8dddb16e69ed7ed0e7242 рдиреЗ CBLAS_INDEX рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░
https://github.com/Reference-LAPACK/lapack/commit/41779680d1f233928b67f5f66c0b239aecb42774 рдиреЗ CBLAS_INDEX рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред

рдмрд╕ рдордЬрдмреВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  • OpenBLAS, MKL, GNU рд╕рд╛рдЗрдВрдЯрд┐рдлрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ Numpy рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ size_t рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • рдмреАрдПрд▓рдПрдПрд╕ рдХреЗ рд▓рд┐рдП рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (https://www.netlib.org/blas/blast-forum/cinterface.pdf) рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐, рдЖрдорддреМрд░ рдкрд░, CBLAS_INDEX = size_t ред

рдХреНрдпрд╛ рдЖрдк рд╕рд╣рдордд рд╣реИрдВ? рдЕрдЧрд░ рдЖрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдкреАрдЖрд░ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╛ рд╢рд╛рдпрдж @drhpc рдРрд╕рд╛ рдХрд░рдирд╛

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдФрд░ рдХреГрдкрдпрд╛ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВред

@mgates3 рдиреЗ рд╕реНрд▓реЗрдЯ Google рд╕рдореВрд╣ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛:
https://groups.google.com/a/icl.utk.edu/g/slate-user/c/f5y6gt0aoLs/m/oQyyhikwCgAJ
рдЪрд░реНрдЪрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХрд┐ "CBLAS_INDEX" рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ "CBLAS_INT" рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ CBLAS_INT size_t рдпрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдпрд╛ рдЖрджрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рднрд╛рдЧреА рдЕрдЪреНрдЫреЗ рдЕрдВрдХ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реВрдВред

рдХреГрдкрдпрд╛, #588 рджреЗрдЦреЗрдВред

рдареАрдХ рд╣реИ, size_t 32 рдмрд┐рдЯ рд░рд╣рддрд╛ рд╣реИред рдЬрдм рдЖрдк (рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдиреЗ cblas_isamax() рдХреЛ 64 рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛, рдмрд┐рд▓реНрдб рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж long рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди int64_t , рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ?

size_t cblas_isamax(); // really int64_t cblas_isamax()!
size_t value = cblas_isamax(тАж);

x86 рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди 64 рдмрд┐рдЯ рдорд╛рди рдХреЛ EAX рдФрд░ EDX рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдпрд╣ рдПрдХ рд╕реВрдЪрдХ рд╡рд╛рдкрд╕реА рдФрд░ рдХреБрдЫ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ? рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рди рдорд┐рд▓реЗ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЧрд▓рдд рдореВрд▓реНрдпред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рдЙрдЪреНрдЪ 32 рдмрд┐рдЯреНрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЕрдм рдПрдХ рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди 32 рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо (рдПрдЖрд░рдПрдо рдХрд╛ рдХреБрдЫ рд░реВрдк) рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ ... рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдп рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рдЖрдзрд╛ рднреА рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛?

рдпрд╣ рдЦреЗрд▓ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред 32-рдмрд┐рдЯ рдЖрд░реНрдо рд╕реАрдкреАрдпреВ рдкрд░, рдЪрд╛рд░ 32-рдмрд┐рдЯ рдорд╛рди рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, 64-рдмрд┐рдЯ рдорд╛рди рд▓рдЧрд╛рддрд╛рд░ рджреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рдЖрд░реНрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ рд╕реНрдЯреИрдВрдбрд░реНрдб рдореЗрдВ рдЦрдВрдб 6.1.1.1 рджреЗрдЦреЗрдВред рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреИрд▓реА рдЕрдкрдиреЗ 64-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рджреЗрдЧрд╛; рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдХреЙрд▓рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рд╕рдВрд░реЗрдЦрдг 32 рдмрд┐рдЯ рд╣реИ рд▓реЗрдХрд┐рди 32 рдмрд┐рдЯ рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреИрд▓реА 64 рдмрд┐рдЯ рд▓рд┐рдЦрддрд╛ рд╣реИ; рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдЦреЗрд▓ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ (рдвреЗрд░ рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдмреЗрдореЗрд▓) рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рд╕рднреА рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЙрд╕ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЕрдВрддрддрдГ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкрд░ рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрддрд╛ рд╣реВрдВред рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИ, рдСрдлрд╝рд╕реЗрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ (рдПрдордПрд╕рд╡реАрд╕реА) рдХреЗ рдЕрд▓рд╛рд╡рд╛ -unsigned_value рджреНрд╡рд╛рд░рд╛ рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рд░реВрдкрд╛рдВрддрд░рдг рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреА рд╣реЛрдЧреАред

рдирд╣реАрдВ, рд╕реА рдФрд░ рд╕реА ++ рдХреЗ рдкреАрдЫреЗ рдорд╛рдирдХ рд╕рдорд┐рддрд┐рдпрд╛рдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреА рд╣реИрдВ: рдпрджрд┐ u рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореВрд▓реНрдп рд╣реИ рдФрд░ s рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореВрд▓реНрдп рд╣реИ, рдЬрд╣рд╛рдВ u рдХрдо рд╕реЗ рдХрдо s рд░реВрдк рдореЗрдВ рдХрдИ рдмрд┐рдЯреНрд╕ рд╣реИрдВ, рддреЛ u + s рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ u + s рдУрд╡рд░- рдпрд╛ рдЕрдВрдбрд░рдлреНрд▓реЛ рди рд╣реЛред рдпрджрд┐ рдпрд╣ рдЕрдВрдбрд░-рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯ рдЬрд╛рдПрдЧрд╛, рдпрд╛рдиреА, (u + s) mod 2^b , рдЬрд╣рд╛рдВ b рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ u рдФрд░ s ред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдорд╛рдиреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдорд╛рди рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

C11 рдорд╛рдирдХ рдорд╕реМрджреЗ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЦрдВрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

  • 6.2.5.9: рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗрд╡рд▓ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдСрдкрд░реЗрдВрдб рдХреЗ рд╕рд╛рде рдУрд╡рд░рдлреНрд▓реЛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдкрд░рд┐рдгрд╛рдо рдореЙрдбреНрдпреВрд▓реЛ MAX + 1 , рдЬрд╣рд╛рдВ MAX рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдпреЛрдЧреНрдп рдореВрд▓реНрдп рд╣реИред
  • 6.3.1.3: рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореВрд▓реНрдп s рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЗрд╕реЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореВрд▓реНрдп s рдпрджрд┐ s >= 0 , рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ s + MAX + 1 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • 6.3.1.8: рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдСрдкрд░реЗрдВрдб [рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХреЗ] рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ; рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдСрдкрд░реЗрдВрдб рдХреЛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдЗрд╕рд▓рд┐рдП, u + s (рд╕реА рд╕рд┐рдВрдЯреИрдХреНрд╕) рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

  • (u + s) mod (M + 1) рдЕрдЧрд░ s >= 0 ,
  • (u + s + M + 1) mod (M + 1) рдЕрдиреНрдпрдерд╛ред

рдУрд╡рд░- рдпрд╛ рдЕрдВрдбрд░рдлреНрд▓реЛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ u + s рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдЧреА рдЬреЛ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реИред

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

рдХреБрдЫ C++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ (C++ рдХреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░рдХ рд╕рд╣рд┐рдд) рдЬреЛ рд╣рд░ рдЬрдЧрд╣ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, C++ Core рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦреЗрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ред "рд╣рд░ рдЬрдЧрд╣ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ" рдиреАрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реИрдВ

  • рдиреНрдпреВрдирддрдо рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ: рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдпрд╣ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдиреНрдпреВрдирддрдо рдорд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ, рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ; рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП CWE-839 _рдиреНрдпреВрдореЗрд░рд┐рдХ рд░реЗрдВрдЬ рддреБрд▓рдирд╛ рдмрд┐рдирд╛ рдиреНрдпреВрдирддрдо рдЬрд╛рдВрдЪ рдХреЗ рджреЗрдЦреЗрдВ ред
  • рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣: рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЧрдарди рдХрд░рддрд╛ рд╣реИред

рдЖрдк a + b < a рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреАрд╕реАрд╕реА рдмрдЧ 30475 _assert(int+100 > int) рдЕрдиреБрдХреВрд▓рд┐рдд рджреВрд░_ 2007 рд╕реЗ рджреЗрдЦреЗрдВред рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде ( a рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, b рд╕рдВрднрд╡рддрдГ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдФрд░ b рдореЗрдВ a рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд┐рдЯреНрд╕ рд╣реИрдВ)ред 2020 рд╕реЗ _рдСрдкреНрдЯрдСрдЯ - рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдиреБрдХреВрд▓рди_ рд▓реЗрдЦ рджреЗрдЦрдХрд░, рдЬреАрд╕реАрд╕реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

oxydicer picture oxydicer  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Dichloromethane picture Dichloromethane  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

miroi picture miroi  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pablosanjose picture pablosanjose  ┬╖  41рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

nboelter picture nboelter  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ