рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореИрдВ рд╕реБрдВрдмрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╕реА рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╣рд╛рд╕реНрдХреЗрд▓ рд▓реЗрдЦ " рд╕реА ++ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝; PHP рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА "рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ред рдЗрд╕ рд▓реЗрдЦ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реБрдВрдмрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд┐ рдпрд╣ рдЕрдЬрдЧрд░ рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╕реБрдореНрдмрд╛ (рднрд╛рдЧ 1) рдкрд░ рдПрдХ рдЫреЛрдЯреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг ( рднрд╛рдЧ 2 )ред

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

рдЖрдЬ рддрдХ, рдЕрдВрддрд┐рдо рддреАрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдВрдЧ рдореЗрдВ рд╣реИрдВред Cython
(cpython рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛) - рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдЬрдЧрд░ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рднрд╛рд╖рд╛ рд╣реИ - рд╕реА рдФрд░ рдЕрдЬрдЧрд░ рдХрд╛ рдПрдХ рд╕рдВрдХрд░ред рдЬреИрд╕рд╛ рдХрд┐ pypy
(jit рд╕рдВрдХрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдЬрдЧрд░ рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдФрд░ numba
(llvm рдореЗрдВ рдХреЛрдб рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдХреЗ рд▓рд┐рдП, рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЧрдПред pypy
рдиреЗ рд╢реБрд░реВ рдореЗрдВ рд╕рднреА рдЕрдЬрдЧрд░ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдШреЛрд╖рдгрд╛ рдХреАред рд╕реБрдВрдмрд╛ рдореЗрдВ, рд╡реЗ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реЗ рдХрд┐ рдЗрд╕реЗ рдЕрдХреНрд╕рд░ рд╕реАрдкреАрдпреВ рдмрд╛рдЙрдВрдб - рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрд░рдорд╢рдГ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧрдгрдирд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝реА рднрд╛рд╖рд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреА рдкрд╣рдЪрд╛рди рдХреА рдФрд░ рдЗрд╕реЗ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдзреАрд░реЗ-рдзреАрд░реЗ "рдХрд╡рд░реЗрдЬ" рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрдм рддрдХ рдХреЛрдИ рд▓рд╛рдЗрди рд╕рдорд░реНрдерди рдирд╣реАрдВ рдерд╛ред , рдЕрдм рд╡рд╣ рдкреНрд░рдХрдЯ рд╣реБрдИ рд╣реИ)ред рддрджрдиреБрд╕рд╛рд░, рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ numba
рдореЗрдВ рдУрд╡рд░рдХреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ numba
, рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ , рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ рдЧрддрд┐ рдФрд░ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ numba
рд╣реИ рдЬреЛ numba
(рдЕрднреА рддрдХ) рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред Numpy рдХреЛ pypy
рдФрд░ numba
рджреЛрдиреЛрдВ рдореЗрдВ (рдорд╛рдореВрд▓реА рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде) рд╕рдорд░реНрдерд┐рдд рд╣реИред
рдЕрдЬрдЧрд░ рдореЗрдВ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдХреА рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХреЗ рд╕рд╛рде 2015 рдореЗрдВ рдореЗрд░рд╛ рдкрд░рд┐рдЪрдп рд╢реБрд░реВ рд╣реБрдЖ: рдЕрдЬрдЧрд░ рдореЗрдВ рдХреБрд╢рд▓ рдмрд╛рд╣рд░реА рдЙрддреНрдкрд╛рдж
рддрдм рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдХрдИ рдШрдЯрдирд╛рдПрдВ рдШрдЯрд┐рдд рд╣реБрдИ рд╣реИрдВ, рд▓реЗрдХрд┐рди numba
/ cython
/ pypy
рд╕рдВрдмрдВрдз рдореЗрдВ рддрд╕реНрд╡реАрд░ numba
рдирд╣реАрдВ рдмрджрд▓реА рд╣реИ: рджреЗрд╢реА рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ cython
рд╣реЛ рдЬрд╛рдирд╛ cython
( cython
рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдФрд░ pypy
- llvm bytecode рдХреЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдХрд╛рд░рдгред ред
рдирдВрдмрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдкрд░ рдЖрддрд╛ рд╣реИ (рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрдХреНрдЯреНрд░рд▓ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдЯреАрдЪрд┐рдВрдЧ рдореЗрдВ (рдиреНрдпреВрдореЗрд░рд┐рдХрд▓ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди, рдбрд┐рдлрд░реЗрдВрд╢рд┐рдпрд▓ рдЗрдХреНрд╡реЗрд╢рди рдХреЛ рд╣рд▓ рдХрд░рдирд╛)ред
рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ
рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдЕрдм рд╕рдм рдХреБрдЫ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рдерд╛: рдпрд╣ pip install numba
рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ conda install numba
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ conda install numba
ред llvm рдХреЛ рдХрдбрд╝рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЧрддрд┐ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдирдЬреАрдЯреА рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
from numba import njit @njit def f(n): s = 0. for i in range(n): s += sqrt(i) return s
40 рдмрд╛рд░ рдХрд╛ рддреНрд╡рд░рдгред
рдЬрдбрд╝ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╕реБрдВрдмрд╛ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдкреНрд░рдЧрддрд┐ (!) рдХреЗ рдпреЛрдЧ рдХреЛ рдкрд╣рдЪрд╛рди рд▓реЗрдЧреА рдФрд░ рдЗрд╕реЗ рдирд┐рд░рдВрддрд░ рд╕рдордп рдореЗрдВ рдЧрдгрдирд╛ рдХрд░реЗрдЧреАред
jit рдмрдирд╛рдо рдирдЬреАрдд
рдкрд╣рд▓реЗ, рд╕рд┐рд░реНрдл @jit
рдореЛрдб ( @njit
рдирд╣реАрдВ) рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдерд╛ред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдореЛрдб рдореЗрдВ рдЖрдк рд╕реБрдиреНрди рджреНрд╡рд╛рд░рд╛ рдЕрд╕рдорд░реНрдерд┐рдд рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрдЪреНрдЪ рдЧрддрд┐ рдкрд░ рд╕реБрдмреНрдмрд╛ рдкрд╣рд▓реЗ рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рддрдХ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдЕрдВрдд рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди рдЧрддрд┐ рдкрд░ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА "рдирд┐рд╖рд┐рджреНрдз" рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реЛ ( рддрдерд╛рдХрдерд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдореЛрдб), рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддрд░реНрдХрд╣реАрди рд╣реИред рдЕрдм @jit
рдзреАрд░реЗ-рдзреАрд░реЗ @jit
рдкрд░рд┐рддреНрдпрд╛рдЧ @jit
, рдпрд╣ рд╣рдореЗрд╢рд╛ @njit (рдпрд╛ рдкреВрд░реНрдг рд░реВрдк рдореЗрдВ @jit(nopython=True)
) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ: рдЗрд╕ рдореЛрдб рдореЗрдВ, рд╕реБрдВрдмрд╛ рдРрд╕реЗ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рд╢рдкрде рд▓реЗрддреА рд╣реИ - рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЧрддрд┐ рдХрдо рди рд╣реЛред
рдХреНрдпрд╛ рддреЗрдЬреА рд▓рд╛ рд╕рдХрддрд╛ рд╣реИ
рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдХреЗрд╡рд▓ рдЕрдЬрдЧрд░ рдФрд░ рд╕реБрдВрдмрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ, рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реБрдВрдмрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╡реЗ рдЬреЛ рд╕реБрдмреНрдмрд╛ "рд╕рдордЭрддреЗ рд╣реИрдВ" рдФрд░ рдЬреЛ рдЗрд╕реЗ "рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред"
рд╕реБрдВрдмрд╛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджреЛ рдРрд╕реА рд╕реВрдЪрд┐рдпрд╛рдБ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде):
- рдЕрдЬрдЧрд░ рдХреА рдПрдХ рд╕рдмрд╕реЗрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реБрдиреНрди рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд
- рд╕реБрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯред
рдЗрди рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ:
- рдПрдХ рд╕реБрдиреНрди "рд╕рдордЭрддрд╛ рд╣реИ" рдкрд╛рдпрдерди рдПрдХ рдЕрдВрдд рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд╡рд░рд┐рдд (рдкрд░рд┐рд╢реЛрдзрд┐рдд рдУ (1)) рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рдХрд┐ рдЦрд╕реНрддрд╛ "рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ" (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рд╕рдЬрд╛рддреАрдп), "
- numy рдХреЗ рдПрд░реЗ рдЬреЛ рдмреЗрд╕ рдкрд╛рдпрдерди рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдордЭ рдореЗрдВ рднреА рдЖрддрд╛ рд╣реИ
- tuples: рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрдЬрдЧрд░ рдХреА рддрд░рд╣, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВред
- рд╢рдмреНрджрдХреЛрд╢реЛрдВ: рд╕реБрдВрдмрд╛ рдХрд╛ рдПрдХ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╕рднреА рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдмрд┐рд▓реНрдХреБрд▓ рдорд╛рдиреЛрдВ рдХреА рддрд░рд╣ред рдПрдХ рдЕрдЬрдЧрд░ рдХреЛ рд╕реБрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕реНрддрдмреНрдз рд╕реБрдиреНрди рд╣реИред
numba.typed.Dict
рдореЗрдВ рдЕрдЬрдЧрд░ рдХреЛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реБрдмреНрдмрд╛ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрдмрдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рдпрд╣ рдЕрдЬрдЧрд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред - рд╣рд╛рд▓ рд╣реА рдореЗрдВ str рдФрд░ рдмрд╛рдЗрдЯреНрд╕, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрднреА рддрдХ?)ред
рд╡рд╣ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдбрд░рд╛рд╡рдирд╛ рдФрд░ рдкрд╛рдВрдбрд╛) рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╕рдордЭрддреА рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рднрд╛рд╖рд╛ рдХрд╛ рд╡рд╣ рд╕рдмрд╕реЗрдЯ рдЬреЛ рд╡рд╣ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЛ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рд╕реБрдВрдмрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред
рдорд╣рддреНрд╡рдкреВрд░реНрдг!
рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ, рдХреЗрд╡рд▓ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП, рдУрд╡рд░рдХреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП, рдлрд╝рдВрдХреНрд╢рди рдХрд╣реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
(рд╣рд╛рд▓рд╛рдВрдХрд┐ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдУрд╡рд░рдХреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рд╡реИрд╢реНрд╡рд┐рдХ
рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ: рдЙрдирдХрд╛ рдореВрд▓реНрдп рдЙрд╕ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдЙрджрд╛рд╣рд░рдг )ред => рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ (рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред
рд╣рд╕реНрддрд╛рдХреНрд╖рд░
рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ, рдПрдХ рдпрд╛ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рддрд░реНрдХ рдореИрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ред рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рдЗрдирд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рдирдП рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ (рдкреБрд░рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ "рдореЛрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рджреВрд╕рд░реЗ рд░рди рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рддреЛ рдпрд╛ рддреЛ
- "рдХреИрд╢ рд╡рд╛рд░реНрдо рдЕрдк" рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ, рдпрд╛
- рдмрд╛рдж рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдХреЗ рджреМрд░рд╛рди рдЕрдкрдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ
@jit(cache=True)
рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрдЬ рдпрд╣ рдкрд╣рд▓рд╛ рд▓реЙрдиреНрдЪ рдЕрднреА рднреА рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди cache=True
рдмрд┐рдирд╛ рддреЗрдЬреА рд╕реЗ cache=True
) ред
рдПрдХ рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
from numba import int16, int32 @njit(int32(int16, int16)) def f(x, y): return x + y >>> f.signatures [(int16, int16)]
рдЬрдм рдЖрдк рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓рд╛ рд░рди рддреЗрдЬрд╝ рд╣реЛрдЧрд╛: рд╕рдВрдХрд▓рди рдЙрд╕ рд╕рдордп рд╣реЛрдЧрд╛ рдЬрдм рдЕрдЬрдЧрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдЦрддрд╛ рд╣реИ, рдФрд░ рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд╣реАрдВред рдХрдИ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдХреНрд░рдо рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред
рдЪреЗрддрд╛рд╡рдиреА: рдпрд╣ рдЕрдВрддрд┐рдо рддрд░реАрдХрд╛ рднрд╡рд┐рд╖реНрдп рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рд╕реБрдВрдмрд╛ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдмрд┐рдирд╛ @jit
/ @njit
рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИред
f.signatures
рдХреЗрд╡рд▓ рддрднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджрд┐рдЦрд╛рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЕрдЬрдЧрд░ рдХреЛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рдпрд╛ рдпрджрд┐ рд╡реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред
f.signatures
рдЕрд▓рд╛рд╡рд╛ f.signatures
рд╣рд╕реНрддрд╛рдХреНрд╖рд░ f.inspect_types()
рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рднреА рджрд┐рдЦрд╛рдПрдЧрд╛ред
рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
from numba import int16, int32 @njit(int32(int16, int16), locals={'z': int32}) def f(x, y): z = y + 10 return x + z
рдкреВрд░реНрдгрд╛рдВрдХ
рд╕реБрдВрдмрд╛ рдореЗрдВ, рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ "рд╕рд╛рдзрд╛рд░рдг" рдЕрдЬрдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЗ рдЕрдВрдХрдЧрдгрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди int8
рд╕реЗ int64
(рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ ) рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдорд╛рдирдХ рдЪреМрдбрд╝рд╛рдИ рд╣реЛрддреА рд╣реИред рд╡рд╣рд╛рдБ рднреА рд╣реИрдВ int_
(рд╕рд╛рде рд╣реА float_
), рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЖрдк рд╕реБрдВрдмрд╛ рдХреЛ рдЗрд╖реНрдЯрддрдо (рдЙрд╕рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ) рдлрд╝реАрд▓реНрдб рдХреА рдЪреМрдбрд╝рд╛рдИ рдЪреБрдирдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реИрдВред
рдХрдХреНрд╖рд╛рдПрдВ
рдЖрдо рддреМрд░ рдкрд░ рдХрдХреНрд╖рд╛рдУрдВ (@jitclass) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рдлрд┐рд▓рд╣рд╛рд▓, рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдпрд╣ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ)ред
рдХрд╕реНрдЯрдо dtypes
Numba рд╕реБрдиреНрди - рд╕рдВрд░рдЪрд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрд╛, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрд╕реНрдЯрдо dtype рд╣реИред рд╡реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕реБрдиреНрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рдЧрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, a['y2']
a[3]
рддреБрд▓рдирд╛ a['y2']
рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐, рд╕реБрдВрдмрд╛ рдореЗрдВ, рд╕реБрдиреНрди рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ a['y2']
рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд a.y2
рдЕрдиреБрдорддрд┐ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реБрдмреНрдмрд╛ рдореЗрдВ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдСрдкрд░реЗрд╢рди, рдЬреЛ рд╕реБрдиреНрди рдореЗрдВ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд╕рд╛рде рд╕реБрдмреНрдмрд╛ рдореЗрдВ рдХрд╛рдлреА рдЧреИрд░-рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
GPU
рдпрд╣ GPU рдкрд░ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдФрд░ рдПрдХ рд╣реА рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pycuda рдпрд╛ pytorch, рди рдХреЗрд╡рд▓ рдПрдирд╡реАрдбрд┐рдпрд╛ рдкрд░, рдмрд▓реНрдХрд┐ amd рдХреЗ anhnyh рдХрд╛рд░реНрдб рдкрд░ рднреАред рдЗрд╕рдХреЗ рд╕рд╛рде, рдЕрдм рддрдХ рдмрд╣реБрдд рдХрдо рдбреАрд▓ рд╣реБрдИ рд╣реИред рдпрд╣рд╛рдВ 2016 рд╣рдм рдкрд░ рдПрдХ рд▓реЗрдЦ рд╣реИ рд╡рд╣рд╛рдБ, C рдХреЗ рд▓рд┐рдП рддреБрд▓рдиреАрдп рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ рдереАред
рдЖрдЧреЗ-рдЖрдЧреЗ рд╕рдВрдХрд▓рди
рд╕реБрдВрдмрд╛ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп (рдЕрд░реНрдерд╛рдд, рдЬреАрдЯ рдирд╣реАрдВ) рд╕рдВрдХрд▓рди ( рдкреНрд░рд▓реЗрдЦрди ) рдХреА рдПрдХ рд╡рд┐рдзрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд╛ рдореБрдЦреНрдп рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорддрд▓реАрдХрд░рдг
рдХреБрдЫ рдХрд╛рд░реНрдп (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдирд╛) рдХреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред @njit(parallel=True)
рдбреЗрдХреЛрд░реЗрдЯрд░ @njit(parallel=True)
рд╕реБрдВрдмрд╛ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ, рдРрд╕реЗ рдЦрдВрдбреЛрдВ рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реАрдкреАрдпреВ рдХреЛрд░ ( рдкреНрд░рд▓реЗрдЦрди ) рдкрд░ рдПрдХ рд╕рд╛рде рдЪрд▓рд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ, рдЖрдк рдХреЗрд╡рд▓ @vectorize
( рдкреНрд░рд▓реЗрдЦрди ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░ рд╕рдХрддреЗ рдереЗ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдЖрд╡рд╢реНрдпрдХ рдереЗред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: parallel=True
рдЬреЛрдбрд╝реЗрдВ parallel=True
, рдЧрддрд┐ рдХреЛ рдорд╛рдкреЗрдВ, рдЕрдЧрд░ рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ рдФрд░ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдирд┐рдХрд▓рд╛ - рд╣рдо рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рдзреАрдорд╛ - рд╣рдо рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред (** рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕ рдзреНрд╡рдЬ рдореЗрдВ рдХрдИ рдЦреБрд▓реЗ рдмрдЧ рд╣реИрдВ)
GIL рдЬрд╛рд░реА
@jit(nogil=True)
рд╕рд╛рде рд╕рдЬрд╛рдП рдЧрдП рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдереНрд░реЗрдб рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рд▓реЗрдЦрди
рдирдВрдмреЗ рдореЗрдВ рдЕрднреА рднреА рд╕рдордЭрджрд╛рд░ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред рд╡рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реИред
рдЕрдиреБрдХреВрд▓рди
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рддрддрд╛ рд╣реЛрддреА рд╣реИ: unpythonic рдХреЛрдб рдЕрдХреНрд╕рд░ рдкрд╛рдпрдереЛрдирд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред
рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ 2017 рдХреЗ рд╕рдореНрдореЗрд▓рди рд╕реЗ рдПрдХ рд╕реНрддрдмреНрдз рдорд╛рд╕реНрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рд╡реАрдбрд┐рдпреЛ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдЧреАрдереВрдм рдкрд░ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИрдВ)ред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдВрдмрд╛ рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ: рдЗрд╕рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрд╛рдпрдереЛрдирд┐рдХ / рдЕрдиреАрдлреЙрдереЛрдирд┐рдХ, рдЬреАрдЯ (рд╕рдорд╛рдирд╛рдВрддрд░ = рд╕рдЪ), рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрдВрдмрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред