NVIDIA рдЬреЗрдЯрд╕рди рдиреИрдиреЛ: рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкрд╣рд▓рд╛ рдЗрдВрдкреНрд░реЗрд╢рди

рд╣рд╛рдп, рд╣реИрдмреНрд░ред

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



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

рд╣рд╛рд░реНрдбрд╡реЗрдпрд░


рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, NVIDIA рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ:



рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдмрд┐рдВрджреБ рд╣реИрдВред

рдкрд╣рд▓реЗ 128 рдХреЛрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЬреАрдкреАрдпреВ рд╣реИ, рдХреНрд░рдорд╢рдГ, рдмреЛрд░реНрдб рдкрд░ рдЖрдк рдЬреАрдкреАрдпреВ-рдЙрдиреНрдореБрдЦ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реАрдпреВрдбреАрдП (рд╕рдорд░реНрдерд┐рдд рдФрд░ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕реНрдерд╛рдкрд┐рдд) рдпрд╛ рдЯреЗрдВрд╕рд░рдлреНрд▓реЛред рдореБрдЦреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ 4-рдХреЛрд░ рд╣реИ, рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред рд╕реАрдкреАрдпреВ рдФрд░ рдЬреАрдкреАрдпреВ рдХреЗ рдмреАрдЪ 4 рдЬреАрдмреА рдореЗрдореЛрд░реА рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рд╣реИред

рджреВрд╕рд░рд╛ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рд╣реИред рдмреЛрд░реНрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЗрдВрдЯрд░рдлреЗрд╕ (I2C, SPI, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдПрдХ 40-рдкрд┐рди рдХрдиреЗрдХреНрдЯрд░ рд╣реИ, рдПрдХ рдХреИрдорд░рд╛ рдХрдиреЗрдХреНрдЯрд░ рднреА рд╣реИ, рдЬреЛ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрдЧрдд рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕рд╛рдорд╛рди (рд╕реНрдХреНрд░реАрди, рдореЛрдЯрд░ рдХрдВрдЯреНрд░реЛрд▓ рдмреЛрд░реНрдб, рдЖрджрд┐) рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ (рдЖрдкрдХреЛ рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдЕрднреА рднреА рдЖрдХрд╛рд░ рдореЗрдВ рднрд┐рдиреНрди рд╣реИ)ред

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

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



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

рдХреАрдордд рдХреА рдмрд╛рдд рдХреА рдЬрд╛рдПред рд╕рдВрдпреБрдХреНрдд рд░рд╛рдЬреНрдп рдЕрдореЗрд░рд┐рдХрд╛ рдореЗрдВ рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдХреА рдореВрд▓ рдХреАрдордд $ 99 рд╣реИ, рдпреВрд░реЛрдк рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рджреБрдХрд╛рдиреЛрдВ рдореЗрдВ рдорд╛рд░реНрдХ-рдЕрдк рдХреЗ рд╕рд╛рде рдХреАрдордд рд▓рдЧрднрдЧ 130 рдпреВрд░реЛ рд╣реИ (рдпрджрд┐ рдЖрдкрдХреЛ рдЫреВрдЯ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рд╕рд╕реНрддрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рд░реВрд╕ рдореЗрдВ рдиреИрдиреЛ рдХреА рд▓рд╛рдЧрдд рдХрд┐рддрдиреА рд╣реИ рдЕрдЬреНрдЮрд╛рддред

рд╕реЙрдлреНрдЯрд╡реЗрдпрд░


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЫрд╡рд┐ рдХреЛ SD рдХрд╛рд░реНрдб рдкрд░ Etcher рдпрд╛ Win32DiskImager рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рд▓рддреЗ рд╣реИрдВред рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдпрд╣рд╛рдВ рд╣реИ , рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЖрдЗрдП рдЕрднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдЬрд╛рдПрдВ - рдиреИрдиреЛ рдХреЗ рддрд╣рдд рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреАрди рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ - рдореЗрд░рд╛ рдХрд╛рдо рд▓реИрдкрдЯреЙрдк (рдХреЛрд░ I7-6500U 2.5GHz), рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 3 рдмреА + рдФрд░ рдЬреЗрдЯрд╕рди рдиреИрдиреЛред

рд╕реАрдкреАрдпреВ рдкрд░реАрдХреНрд╖рдг

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, lscpu рдХрдорд╛рдВрдб рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯред

рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 3 рдмреА +:



рдЬреЗрдЯрд╕рди рдиреИрдиреЛ:



рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рдХреБрдЫ рд╕рд░рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЦреНрдпрд╛ рдкрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗред рдореИрдВрдиреЗ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдпрд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЗрд╖реНрдЯрддрдо рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ - рд╣рдо рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдордп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред

рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рд╕реНрд░реЛрдд рдХреЛрдб
import time # Source: https://stackoverflow.com/questions/9004789/1000-digits-of-pi-in-python def make_pi(): q, r, t, k, m, x = 1, 0, 1, 1, 3, 3 for j in range(10000): if 4 * q + r - t < m * t: yield m q, r, t, k, m, x = 10*q, 10*(rm*t), t, k, (10*(3*q+r))//t - 10*m, x else: q, r, t, k, m, x = q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2 t1 = time.time() pi_array = [] for i in make_pi(): pi_array.append(str(i)) pi_array = pi_array[:1] + ['.'] + pi_array[1:] pi_array_str = "".join(pi_array) print("PI:", pi_array_str) print("dT:", time.time() - t1) 


рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо: 0.8 рд╕реАред



рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 3 рдмреА + рдиреЗ рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╕рдордп рджрд┐рдЦрд╛рдпрд╛: 3.06 рд╕реАред "рдЕрдиреБрдХрд░рдгреАрдп" рд▓реИрдкрдЯреЙрдк рдиреЗ 0.27 рдореЗрдВ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд┐рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдиреИрдиреЛ рдореЗрдВ рдореБрдЦреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдЕрдкрдиреЗ рдлреЙрд░реНрдо рдлреИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред рдЬреЛ рд▓реЛрдЧ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 4 рдкрд░ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред

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

PyCUDA

рдЪрд▓реЛ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЧрдгрдирд╛рдУрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмреЗрд╢рдХ (рдмреЛрд░реНрдб NVIDIA рд╕реЗ рд╣реИ), рд╣рдо CUDA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред PyCUDA рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдЫрд╛рдпрд╛рд╡рд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рдореЗрдВ cuda.h рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ "sudo env" PATH = $ PATH "рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ pycuda" рдиреЗ рдорджрдж рдХреА, рд╢рд╛рдпрдж рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ ( devtalk.nvidia.com рдлреЛрд░рдо рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА )ред

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ PyCUDA рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо SimpleSpeedTest рд▓рд┐рдпрд╛, рдЬреЛ рдХреЗрд╡рд▓ рд▓реВрдк рдореЗрдВ рд╕рд╛рдЗрди рдХреЛ рдЧрд┐рдирддрд╛ рд╣реИ, рдпрд╣ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдб рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рд╕реНрд░реЛрдд рдХреЛрдб
 # SimpleSpeedTest.py # https://wiki.tiker.net/PyCuda/Examples/SimpleSpeedTest import pycuda.driver as drv import pycuda.autoinit from pycuda.compiler import SourceModule import numpy import time blocks = 64 block_size = 128 nbr_values = blocks * block_size n_iter = 100000 print("Calculating %d iterations" % (n_iter)) print() ##################### # SourceModule SECTION # create two timers so we can speed-test each approach start = drv.Event() end = drv.Event() mod = SourceModule("""__global__ void gpusin(float *dest, float *a, int n_iter) { const int i = blockDim.x*blockIdx.x + threadIdx.x; for(int n = 0; n < n_iter; n++) { a[i] = sin(a[i]); } dest[i] = a[i]; }""") gpusin = mod.get_function("gpusin") # create an array of 1s a = numpy.ones(nbr_values).astype(numpy.float32) # create a destination array that will receive the result dest = numpy.zeros_like(a) start.record() # start timing gpusin(drv.Out(dest), drv.In(a), numpy.int32(n_iter), grid=(blocks,1), block=(block_size,1,1) ) end.record() # end timing # calculate the run length end.synchronize() secs = start.time_till(end)*1e-3 print("PyCUDA time and first three results:") print("%fs, %s" % (secs, str(dest[:3]))) print() ############# # CPU SECTION # use numpy the calculate the result on the CPU for reference a = numpy.ones(nbr_values).astype(numpy.float32) t1 = time.time() for i in range(n_iter): a = numpy.sin(a) print("CPU time and first three results:") print("%fs, %s" % (time.time() - t1, str(a[:3]))) 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЧрдгрдирд╛ CUDA рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рд╕реАрдкреАрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦрд╕реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо:
рдЬреЗрдЯрд╕рди рдиреИрдиреЛ - 0.67c GPU, 13.3c CPUред
рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 3 рдмреА + - 41.85 рд╕реА рд╕реАрдкреАрдпреВ, рдЬреАрдкреАрдпреВ - рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ, рдЖрд░рдкреАрдЖрдИ рдкрд░ рд╕реАрдпреВрдбреАрдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдиреЛрдЯрдмреБрдХ - 0.05s GPU, 3.08c CPUред

рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред GPU рдкрд░ рдЧрдгрдирд╛ рд╕реАрдкреАрдпреВ (рдЕрднреА рднреА 128 рдХреЛрд░) рдкрд░ рдЧрдгрдирд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЦреИрд░, рдмреЗрд╢рдХ, рдЖрдк рднреЗрдбрд╝рд┐рдпреЗ рдХреЛ рдХрд┐рддрдирд╛ рднреА рдЦрд┐рд▓рд╛рдПрдВ, рд╣рд╛рдереА рдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЬреЗрдЯрд╕рди рдиреИрдиреЛ рдореЗрдВ рдХрд╛рд░реНрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдПрдХ рд▓реИрдкрдЯреЙрдк рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд╣реИ - рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛрд░ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


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

рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ, рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рд╣рд░ рдЪреАрдЬ рдлрд┐рдЯ рдирд╣реАрдВ рдереАред рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рдПрдЖрдИ рднрд╛рдЧ рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╣реЛрдВрдЧреЗ - рдХреЗрд░рд╛рд╕ / рдЯреЗрдиреНрд╕рд░рдлрд╝реНрд▓реЛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдФрд░ рдЫрд╡рд┐ рдорд╛рдиреНрдпрддрд╛ рдкрд░ рдХрд╛рд░реНрдпред

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


All Articles