Lapack: рд▓реИрдкреИрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдЬреВрди 2021  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Reference-LAPACK/lapack

рд╣рдо LAPACK рдХреЗ .NET рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдордиреЗ рдПрдХ рдлреЛрд░рдЯреНрд░рд╛рди рдХрдВрдкрд╛рдЗрд▓рд░ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕рд╣рд┐рдд рд╕рднреА LAPACK рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ (рд▓рдЧрднрдЧ) рдкрд░ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рдкрд░ рд╣рдо рдЕрднреА рднреА рдХреБрдЫ рд╕рдЯреАрдХ рдореБрджреНрджреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг:
XEIGTSTZ < zec.in - ZLAHQR рдореЗрдВ рдХрдо рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо: ZGET37 -> knt == 31, ZHSEQR -> ZLAHQR -> рджреВрд╕рд░реЗ рдХреНрдпреВрдЖрд░ рдЪрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ (ITS == 2) рдирд┐рдореНрди рдХреЛрдб рдЕрдВрдбрд░рдлреНрд▓реЛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ (рдХреБрдЫ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░, рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)

TEMP = H( I, I-1 )
    IF( DIMAG( TEMP ).NE.RZERO ) THEN
        RTEMP = ABS( TEMP)    ! <-- underflow on TEMP = (~1e-0173, ~1e-0173)
        IF (RTEMP .EQ. RZERO) RTEMP = CABS1(TEMP)
        H( I, I-1 ) = RTEMP
        TEMP = TEMP / RTEMP
        IF( I2.GT.I )

рд╣рдорд╛рд░рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ .NET CLR рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЬреЗрдЖрдИрдЯреА рдПрдмреАрдПрд╕ (рдЯреАрдИрдПрдордкреА) рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдИ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдорд╛рдг рдХреА рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рдореЗрдВ рдЕрдВрдбрд░рдлреНрд▓реЛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрдлреЛрд░реНрдЯ (рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ) рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдВрдбрд░рдлреНрд▓реЛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕рдХреА рдмрдбрд╝реА рд▓рдВрдмрд╛рдИ рдХреЗ рдХрд╛рд░рдг: 80 рдмрд┐рдЯреНрд╕)ред рдореИрдВ LAPACK рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рдХреА рдПрдХ рд╕реНрдкрд╖реНрдЯ (рдПрд░) рддрд╕реНрд╡реАрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░/рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реЗ рд╕рдЯреАрдХ/рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

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

рдореИрдВрдиреЗ рдХреБрдЫ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рддрд▓рд╛рд╢ рдХреА рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЗрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдХрд┐рд╕реА рднреА рд▓рд┐рдВрдХ рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

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

рдЕрдВрдбрд░рдлреНрд▓реЛ рд╣реА рдЕрд╕рд▓реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдВрдбрд░рдлреНрд▓реЛ рдХреЗ рдмрд╛рдж, рдПрд▓реНрдЧреЛрд░рд┐рдердо CABS1 рдкрд░ рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрдВрдбрд░рдлреНрд▓реЛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реЛрддреА рд╣реИред рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЯреАрдИрдПрдордкреА рдмрд┐рд▓реНрдХреБрд▓ рдПрдХрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЬреЗрдб рдореЗрдВ рд░рд╛рдЙрдВрдбрдСрдл рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди CABS1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реНрд╡-рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ ABS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣реА рдХрд░рдирд╛ рд╣реИ (рдкрд╣рд▓реА рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг, ABS рдЕрдм рдУрд╡рд░рдлрд╝реНрд▓реЛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред (рдореБрдЭреЗ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рдЕрдВрдбрд░рдлреНрд▓реЛ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛)

IF (RTEMP .EQ. RZERO) THEN
    RTEMP = CABS1(TEMP)
    H( I, I-1 ) = RTEMP
    TEMP = TEMP / RTEMP
    RTEMP = ABS( TEMP)
    H( I, I-1 ) = H( I, I-1 )*RTEMP
    TEMP = TEMP / RTEMP
END IF

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

рд╢реБрдХреНрд░рд┐рдпрд╛! рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реИред
рд╣рдордиреЗ CABS1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрдбрд░рдлреНрд▓реЛ рд╕реЗ рдЙрдмрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд╛рдлреА рджреВрд░ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ...

*
*        Ensure that H(I,I-1) is real.
*
         TEMP = H( I, I-1 )
         IF( DIMAG( TEMP ).NE.RZERO ) THEN
            RTEMP = ABS( TEMP)
            IF (RTEMP .EQ. RZERO) THEN 
                RTEMP = CABS1(TEMP)
                H( I, I-1 ) = RTEMP
                TEMP = TEMP / RTEMP
                RTEMP = ABS( TEMP)
                H( I, I-1 ) = H( I, I-1 )*RTEMP
            ELSE 
                H( I, I-1 ) = RTEMP
            END IF
            TEMP = TEMP / RTEMP
            IF( I2.GT.I )
     $         CALL ZSCAL( I2-I, DCONJG( TEMP ), H( I, I+1 ), LDH )
            CALL ZSCAL( I-I1, TEMP, H( I1, I ), 1 )
            IF( WANTZ ) THEN
               CALL ZSCAL( NZ, TEMP, Z( ILOZ, I ), 1 )
            END IF
         END IF
*
  130 CONTINUE

... рдпрд╣ рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рд╣реЛрддреА рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдмреАрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдИ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднреА ())ред

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

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

@hokb рдФрд░ @thijssteel рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдХреНрдпрд╛ рдореБрдЭреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреАрдЖрд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреНрдпрд╛ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реИрдВ, @hokb?

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реАрдорд┐рдд рдЕрдиреБрднрд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕ рдФрд░ рдЖрдкрдХреЗ рдкреАрдЖрд░ рдХреЛ рдкреЙрдЯ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдХрд╛ рдореМрдХрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ рднрд╛рд╡реА рдкреАрдЖрд░... (рдпрджрд┐ рдпрд╣ рдареАрдХ рд╣реИ?)

рд╣рд╛рдп @ рд╣реЛрдХрдм ,

рдореИрдВрдиреЗ рдХреБрдЫ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рддрд▓рд╛рд╢ рдХреА рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЗрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдХрд┐рд╕реА рднреА рд▓рд┐рдВрдХ рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╣реАрдВ рднреА рдХреБрдЫ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред

рд╣рдорд╛рд░рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ .NET CLR рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЬреЗрдЖрдИрдЯреА рдПрдмреАрдПрд╕ (рдЯреАрдИрдПрдордкреА) рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдИ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдорд╛рдг рдХреА рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рдореЗрдВ рдЕрдВрдбрд░рдлреНрд▓реЛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрдлреЛрд░реНрдЯ (рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ) рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдВрдбрд░рдлреНрд▓реЛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕рдХреА рдмрдбрд╝реА рд▓рдВрдмрд╛рдИ рдХреЗ рдХрд╛рд░рдг: 80 рдмрд┐рдЯреНрд╕)ред рдореИрдВ LAPACK рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рдХреА рдПрдХ рд╕реНрдкрд╖реНрдЯ (рдПрд░) рддрд╕реНрд╡реАрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░/рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реЗ рд╕рдЯреАрдХ/рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдмреЛрд▓реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ: рдпрджрд┐ рд╕рднреА рдЧрдгрдирд╛ IEEE 64-рдмрд┐рдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ LAPACK рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

LAPACK рдХрд┐рд╕реА рднреА рд╕рдордп рдЗрд╕рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 80-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдЖрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ 64-рдмрд┐рдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм, рдЬреИрд╕рд╛ рдХрд┐ @thijssteel рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, LAPACK рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕/рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпреЗ рдХрдВрдкрд╛рдЗрд▓рд░/рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрднреА-рдХрднреА 80-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХреЗрд╡рд▓ 64-рдмрд┐рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ 80-рдмрд┐рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╣рдордиреЗ рдЗрди рдореБрджреНрджреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдпрд╛рддреНрд░рд╛ рдореЗрдВ рдХреБрдЫ рднреА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдХрд╛рдлреА рдЦреБрд╢ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░, рдЕрдЧрд░ 80-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдХреБрдЫ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛред

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

рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ 1% рд╕реЗ рднреА рдХрдо рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдореБрджреНрджреЛрдВ (рд╣рдорд╛рд░реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп) рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдЕрд░реЗ рдореЗрд░рд╛ред 1%? рдпрд╣ рдПрдХ рдбрд░рд╛рд╡рдиреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

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

рдЕрдВрдбрд░-рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рдмрдирд╛рдиреЗ рд╕реЗ LAPACK рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИред

рдЕрдзрд┐рдХ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд░реБрдЪрд┐ рд╣реИред рдПрдХ рдФрд░ рд░реБрдЪрд┐ рдЬреАрдПрдордкреА рдЬреИрд╕реЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдЯреАрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд╕рдЯреАрдХрддрд╛ рдкреВрд░реЗ рдЧрдгрдирд╛ рдореЗрдВ рддрдп рдХреА рдЬрд╛рддреА рд╣реИред (рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк 256-рдмрд┐рдЯ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП 300-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИред)

рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣рдорд╛рд░рд╛ (рдЕрд╕рдлрд▓) рдкреНрд░рдпрд╛рд╕ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╢рд╛рдпрдж рд╣реА рдЕрдкрдиреА рддрд░рдл рд╕реЗ рд╕реБрдзрд╛рд░ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рдХрдИ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдПрдХ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдпрд╛рддреНрд░рд╛ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред

рд╣рд╛рдВред рд╣рдореЗ рд░реВрдЪрд┐ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЗрддрдирд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдорд╛рд░реА рдкреНрд▓реЗрдЯреЛрдВ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдПрдХ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд▓реЗрдВ, рдФрд░ рд╣рдо рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдХрд┐рддрдиреА рджреВрд░ рдЬрд╛рддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдиреАрдЪреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, gfortran рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ -mfpmath=sse -msse2 рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЧрдгрдирд╛рдУрдВ рдХреЛ 64-рдмрд┐рдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реАрдорд┐рдд рдЕрдиреБрднрд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕ рдФрд░ рдЖрдкрдХреЗ рдкреАрдЖрд░ рдХреЛ рдкреЙрдЯ рдХреЗ рд▓рд┐рдП рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдХрд╛ рдореМрдХрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ рднрд╛рд╡реА рдкреАрдЖрд░... (рдпрджрд┐ рдпрд╣ рдареАрдХ рд╣реИ?)

рдЬрд╝рд░реВрд░! рдХреГрдкрдпрд╛, #577 рджреЗрдЦреЗрдВред

@weslleyspereira рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдореИрдВ рдЕрднреА рднреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдЕрдЧрд░ рдпрд╣ CLAHQR рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЕрдкрдирд╛ рдкрд░рд┐рдгрд╛рдо ASAP (рдХрд▓) рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛

рдирдорд╕реНрддреЗ @langou !

рдмреЛрд▓реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ: рдпрджрд┐ рд╕рднреА рдЧрдгрдирд╛ IEEE 64-рдмрд┐рдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ LAPACK рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдЪреНрдЫрд╛! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, 'рдХрд╛рдо' рд╕реЗ рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рд╣реИ: рдЬрдм 'рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рдореЗрдВ' рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛?

LAPACK рдХрд┐рд╕реА рднреА рд╕рдордп рдЗрд╕рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 80-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдЖрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ 64-рдмрд┐рдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм, рдЬреИрд╕рд╛ рдХрд┐ @thijssteel рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, LAPACK рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕/рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпреЗ рдХрдВрдкрд╛рдЗрд▓рд░/рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрднреА-рдХрднреА 80-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдХреЗрд╡рд▓ 64-рдмрд┐рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ 80-рдмрд┐рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╣рдордиреЗ рдЗрди рдореБрджреНрджреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдпрд╛рддреНрд░рд╛ рдореЗрдВ рдХреБрдЫ рднреА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдХрд╛рдлреА рдЦреБрд╢ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЯреЗрд╕реНрдЯ рд╕реВрдЯ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░, рдЕрдЧрд░ 80-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдХреБрдЫ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдРрд╕рд╛ рд╣реА рд╣реЛред

рдмрд╣реБрдд рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ!

рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ 1% рд╕реЗ рднреА рдХрдо рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдореБрджреНрджреЛрдВ (рд╣рдорд╛рд░реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп) рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдЕрд░реЗ рдореЗрд░рд╛ред 1%? рдпрд╣ рдПрдХ рдбрд░рд╛рд╡рдиреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рдЦреИрд░, рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕рд╕реЗ 'рдмрд╣реБрдд рдХрдо' рд╣реИ;)

рдЕрдзрд┐рдХ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд░реБрдЪрд┐ рд╣реИред рдПрдХ рдФрд░ рд░реБрдЪрд┐ рдЬреАрдПрдордкреА рдЬреИрд╕реЗ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕рдЯреАрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд╕рдЯреАрдХрддрд╛ рдкреВрд░реЗ рдЧрдгрдирд╛ рдореЗрдВ рддрдп рдХреА рдЬрд╛рддреА рд╣реИред (рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк 256-рдмрд┐рдЯ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП 300-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИред)

рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдЯреАрдХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреА рдХрдореА рд╣реИред

рд╣рд╛рдВред рд╣рдореЗ рд░реВрдЪрд┐ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо рдЗрддрдирд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдорд╛рд░реА рдкреНрд▓реЗрдЯреЛрдВ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдПрдХ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд▓реЗрдВ, рдФрд░ рд╣рдо рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдХрд┐рддрдиреА рджреВрд░ рдЬрд╛рддреЗ рд╣реИрдВред

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

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

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

рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдиреАрдЪреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред

рдЗрдзрд░ рднреА рдРрд╕рд╛ рд╣реА рд╣реИ! :)

#577 рдХрд╛ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ LAPACK рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдордЬрдмреВрдд (рдЕрдВрдбрд░- / рдУрд╡рд░рдлреНрд▓реЛ) рдЬрдЯрд┐рд▓ рд╡рд┐рднрд╛рдЬрди рдФрд░ ABS () рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЛрд░рдЯреНрд░рд╛рди рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╡реЗ рдЕрдиреНрдп / рдирдП рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд╕рд╛рде LAPACK рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ, рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рднрд╛рдЧреЛрдВ рдпрд╛ рд╕рднреА LAPACK рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?

рдЬрд╝рд░реВрд░! рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдлреЙрд░реНрдо рдХреЗ LAPACK/SRC/z*.f (COMPLEX*16 рдПрд▓реНрдЧреЛрд░рд┐рджрдо) рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рднреА рдбрд┐рд╡реАрдЬрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ (рд╢рд╛рдпрдж) рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛

 REAL / COMPLEX   or   COMPLEX / COMPLEX

рдореБрдЭреЗ рдХреБрд▓ 53 рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реАрдВред рд╕рдВрд▓рдЧреНрди рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВ: complexDivisionFound.code-search

  • рдЙрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдореЗрдВ REGEX рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

    \n .*/ ^0-9 (?!DBLE)(?!рдЕрд╕рд▓реА)(?!рдорд┐рди)(?!MAX)[^0-9]

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, gfortran рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ -mfpmath=sse -msse2 рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЧрдгрдирд╛рдУрдВ рдХреЛ 64-рдмрд┐рдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред

рд╣рд╛рдБ, рдпрд╣ GCC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдпрд╣ рдзреНрд╡рдЬ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ x86-64 рдкрд░ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЕрдВрд╢ GCC 11 рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдкреБрд░рд╛рдиреЗ GCC рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреАрдПрдирдпреВ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдВрдЧреНрд░рд╣ (рдЬреАрд╕реАрд╕реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: 3.19.59 x86 рд╡рд┐рдХрд▓реНрдк

sse

SSE рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдореЗрдВ рдореМрдЬреВрдж рдЕрджрд┐рд╢ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдкреЗрдВрдЯрд┐рдпрдо III рдФрд░ рдирдП рдЪрд┐рдкреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдФрд░ рдПрдПрдордбреА рд▓рд╛рдЗрди рдореЗрдВ рдПрдерд▓реЙрди -4, рдПрдерд▓реЙрди рдПрдХреНрд╕рдкреА рдФрд░ рдПрдерд▓реЙрди рдПрдордкреА рдЪрд┐рдкреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдПрд╕рдПрд╕рдИ рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХрд╛ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ рдПрдХрд▓-рд╕рдЯреАрдХ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдбрдмрд▓ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд-рд╕рдЯреАрдХ рдЕрдВрдХрдЧрдгрд┐рдд рдЕрднреА рднреА 387 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рдж рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг, рдХреЗрд╡рд▓ рдкреЗрдВрдЯрд┐рдпрдо 4 рдФрд░ рдПрдПрдордбреА x86-64 рдЪрд┐рдкреНрд╕ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдбрдмрд▓-рд╕рдЯреАрдХ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдмрд╣реБрддред

x86-32 рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ SSE рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкреНрд░рднрд╛рд╡реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП -march=cpu-type , -msse рдпрд╛ -msse2 рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред x86-64 рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП, рдпреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВред

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

рдпрд╣ x86-64 рдХрдВрдкрд╛рдЗрд▓рд░, рдбрд╛рд░реНрд╡рд┐рди x86-32 рд▓рдХреНрд╖реНрдп, рдФрд░ -ffast-math рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ SSE2 рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде x86-32 рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдЙрджрд╛рд╣рд░рдг:
XEIGTSTZ < zec.in - ZLAHQR рдореЗрдВ рдХрдо рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо: ZGET37 -> knt == 31, ZHSEQR -> ZLAHQR -> рджреВрд╕рд░реЗ рдХреНрдпреВрдЖрд░ рдЪрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ (ITS == 2) рдирд┐рдореНрди рдХреЛрдб рдЕрдВрдбрд░рдлреНрд▓реЛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ (рдХреБрдЫ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░, рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)

TEMP = H( I, I-1 )
    IF( DIMAG( TEMP ).NE.RZERO ) THEN
        RTEMP = ABS( TEMP)    ! <-- underflow on TEMP = (~1e-0173, ~1e-0173)
        IF (RTEMP .EQ. RZERO) RTEMP = CABS1(TEMP)
        H( I, I-1 ) = RTEMP
        TEMP = TEMP / RTEMP
        IF( I2.GT.I )

рд╣рдорд╛рд░рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ .NET CLR рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЬреЗрдЖрдИрдЯреА рдПрдмреАрдПрд╕ (рдЯреАрдИрдПрдордкреА) рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдИ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдорд╛рдг рдХреА рдордзреНрдпрд╡рд░реНрддреА рдЧрдгрдирд╛ рдореЗрдВ рдЕрдВрдбрд░рдлреНрд▓реЛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрдлреЛрд░реНрдЯ (рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ) рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдВрдбрд░рдлреНрд▓реЛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕рдХреА рдмрдбрд╝реА рд▓рдВрдмрд╛рдИ рдХреЗ рдХрд╛рд░рдг: 80 рдмрд┐рдЯреНрд╕)ред рдореИрдВ LAPACK рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рдХреА рдПрдХ рд╕реНрдкрд╖реНрдЯ (рдПрд░) рддрд╕реНрд╡реАрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░/рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реЗ рд╕рдЯреАрдХ/рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреБрд╣рд░рд╛рдирд╛:

  • рдЖрдкрдиреЗ рдлреЛрд░рдЯреНрд░рд╛рди 77 рдХреА рдЖрдзрд╛ рдорд┐рд▓рд┐рдпрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реА # рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред
  • .NET рдЬрд╕реНрдЯ-рдЗрди-рдЯрд╛рдЗрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкрд╛рд░рджрд░реНрд╢реА рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рдЗрдВрдЯреЗрд▓ рдлреЛрд░рдЯреНрд░рд╛рди рдХрдВрдкрд╛рдЗрд▓рд░ (рдЖрдИрдлреЛрд░реНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡реЗрдирд┐рд▓рд╛ рд▓реИрдкреИрдХ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред
  • рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмреАрдЪ рджреЗрдЦрд╛ рдЧрдпрд╛ рдЕрдВрддрд░ рдЖрдИрдлреЛрд░реНрдЯ рджреНрд╡рд╛рд░рд╛ 80-рдмрд┐рдЯ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ рдЬреЛ рдПрдХ рдЕрдВрдбрд░рдлреНрд▓реЛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд╣реА?

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЬреАрд╕реАрд╕реА x86-64 рдкрд░ 64-рдмрд┐рдЯ рдлреНрд▓реЛрдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореЗрд░реА рдорд╢реАрдиреЛрдВ рдкрд░ рдЖрдорддреМрд░ рдкрд░ рд╕рднреА LAPACK рдкрд░реАрдХреНрд╖рдг рдПрдХ рдпрд╛ рджреЛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ https://github.com/Reference-LAPACK/lapack/pull/577#issuecomment -859496175

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, gfortran рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЭрдВрдбреЗ -mfpmath=sse -msse2 рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЧрдгрдирд╛рдУрдВ рдХреЛ 64-рдмрд┐рдЯ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдореИрдХреЛрдЬрд╝ рдФрд░ рд▓рд┐рдирдХреНрд╕ рджреЛрдиреЛрдВ рдкрд░ рдЬреАрд╕реАрд╕реА 11 рдХреЗ рд╕рд╛рде -mfpmath=sse -msse2 рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: https://github.com/weslleyspereira/lapack/actions/runs/966071530ред рдЙрди рдЭрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдереА: https://github.com/Reference-LAPACK/lapack/actions/runs/945060330ред рджреЗрдЦреЗрдВ #591

@hokb , рдХреНрдпрд╛ рдЖрдк https://github.com/Reference-LAPACK/lapack/issues/575#issuecomment -855880000 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдореБрджреНрджреЛрдВ рдХреЛ SSE рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ GCC рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдореЗрд░реА рдорджрдж рдХреА рдЬрд╛рдПрдЧреА?

@weslleyspereira рдореИрдВрдиреЗ рдЬреАрд╕реАрд╕реА рдХреА рдХреЛрд╢рд┐рд╢ рднреА рдирд╣реАрдВ рдХреА рд╣реИред рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдЖрдИрдлреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓/рдПрдХ рд░рдирд┐рдВрдЧ рд╕реЗрдЯрдЕрдк рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдореБрдЭреЗ рдЬреАрд╕реАрд╕реА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд╛рдЗрдмрд░рд╡рд┐рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рджрд┐рди рд▓рдЧреЗрдВрдЧреЗ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди рд╣реЙрд▓рд┐рдбреЗ рд╣реЛрдЯрд▓ рдХреЗ рдХрдорд░реЗ рд╕реЗ ...:|) рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╣ рдЪреБрдиреМрддреА рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐!
рдХрдо рд╕реЗ рдХрдо рдФрд░ https://godbolt.org/z/YYv5oPxe9 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ gfortran рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрд╕реНрдЯ рд░рди рд╣реА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрддрд╛рдПрдЧрд╛ ...

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

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

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

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

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

h-vetinari picture h-vetinari  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

epsilon-0 picture epsilon-0  ┬╖  41рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ