рдПрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдЯреВрд▓ рдЪреБрдирдирд╛ - рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реБрдЭрд╛рд╡

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

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

рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреИрд╕реЗ рдЪреБрдиреЗрдВ? рдЖрдк рдПрдХ рд╕рдордЭреМрддреЗ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдХреБрдЫ рдЙрдкрдХрд░рдг рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рджреВрд╕рд░реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ (рдХрд╣рддреЗ рд╣реИрдВ, рд╡реЗ рдУрдУрдкреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ), рджреВрд╕рд░реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдореЗрдВ рдПрдХ рдлрд╛рдпрджрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рдПрд╕рдПрд╕рдИ-рд╡реЗрдХреНрдЯрд░рдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд╕реА ++), рдЪреМрдереЗ рд╡рд╛рд▓реЗ рдЙрдЪреНрдЪ рд╡рд┐рдХрд╛рд╕ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рд╡рд┐рдЬреБрдЕрд▓ рдмреЗрд╕рд┐рдХ)ред рджреЛрдиреЛрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЯреВрд▓реНрд╕ - рдХрдВрдкрд╛рдЗрд▓рд░, рдХрдВрдкреНрдпреВрдЯрд░ рдЧрдгрд┐рдд рд╕рд┐рд╕реНрдЯрдо, рдСрдлрд┐рд╕ рд╕реВрдЯ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА (x86-x64, рд╕реЗрд▓, GPGPU) рдФрд░ рдЙрдирдХреЗ рд╕рдВрдпреБрдХреНрдд рдХрд╛рд░реНрдп (рдиреЗрдЯрд╡рд░реНрдХ, рдХреНрд▓рд╕реНрдЯрд░, рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ) рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд░рд╛рд╢рд┐ рдЖрдЬ рдмрд╛рдЬрд╛рд░ рдореЗрдВ рдкреЗрд╢ рдХреА рдЬрд╛рддреА рд╣реИред

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

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

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

рд╕рдорд╕реНрдпрд╛ рдХрдерди:


рдХрд╛рд░реНрдп рдмреЗрдВрдЪ: рджреЛрд╣рд░реА рдПрдХреНрд╕реЛрди E5 2670 @ 2.6 рдШрд┐рд░реЗ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рд╕реАрдкреАрдпреВ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╢рд╛рдорд┐рд▓ рдКрд░реНрдЬрд╛-рдмрдЪрдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рд╕рд╛рде Ghz, рд╣рд╛рдЗрдкрд░рдЯреНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде 2x8 рднреМрддрд┐рдХ рдХреЛрд░, рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ 2008-092 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ 128 рдЬреАрдмреА рдбреАрдбреАрдЖрд░ 3-1600 рдореЗрдореЛрд░реАред



рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рд╕рдЯреАрдХ (рдбрдмрд▓, рдпрд╛рдиреА, рдорд╛рдирдХ x86 рдХреЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ) рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдХрд░реЗрдЧрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдХрд▓рдХ, рдФрд░ рдлрд┐рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рд╕рд╛рдЗрди рдХреА рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХреЗ рдХрд╛рд░реНрдп рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред рджреМрдбрд╝ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ: рдореЗрдкрд▓ 12, рдореЗрдкрд▓ 17, рдореИрдЯрд▓реИрдм R2013a, рд╡рд┐рдЬреБрдЕрд▓ рдмреЗрд╕рд┐рдХ 6.0, рд╡рд┐рдЬреБрдЕрд▓ рдмреЗрд╕рд┐рдХ.рдиреЗрдЯ рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ C ++ 2012 (рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреЛ рд╣рд╛рде рдореЗрдВ рдереЗ)ред рд╕рднреА рд╕рдордп рдорд╛рдкрди рдПрдХ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рдмрд╛рдж рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рдФрд╕рдд рд╕рдордп рдХреЗ рдЕрдиреБрд░реВрдк рдерд╛ред

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

рдЖрдЗрдП рдореЗрдкрд▓ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:


st := time():evalhf(sum(sin(i),i=1..200000000));time() - st; 

рдореЗрдкрд▓ 12 рдкрд░рд┐рдгрд╛рдо:
1.25023042417602160 54.304 рд╕реЗрдХрдВрдб рдореЗрдВред

рдореЗрдкрд▓ 17 рдкрд░рд┐рдгрд╛рдо:
1.25023042417610020 19.656 рд╕реЗрдХреЗрдВрдб рдореЗрдВред

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдореЗрдкрд▓рд╕реЙрдлреНрдЯ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХрд╛ рдорд╣рд╛рди рдХрд╛рдоред рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ 75% рд╕реБрдзрд╛рд░ рд╣реБрдЖред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ 17 рд╡рд╛рдВ рд╕рдВрд╕реНрдХрд░рдг рднреА рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рднреЛрд▓реЗ-рднрд╛рд▓реЗ рдмреБрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ

 cp:=Compiler:-Compile(proc(j::integer)::float;local i::integer: evalhf(sum(sin(i),i=1..j)) end proc:): 

рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╢реВрдиреНрдп рдкреИрджрд╛ рдХрд░рддреА рд╣реИред рд╣рдо рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ - рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЪрдХреНрд░ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

 p2 := proc(j::integer)::float;local i::integer,res::float;res:=0; for i from 1 to j do: res:=res+evalhf(sin(i)):end do; res end proc: 

рдпрджрд┐ рдЖрдк рд╕рдВрдХрд▓рди рдХреЗ рдмрд┐рдирд╛ P2 рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛! рдХрдо рд╕реЗ рдХрдо рдореИрдВрдиреЗ 10 рдорд┐рдирдЯ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рд╣рд╛рд░ рдорд╛рди рд▓реАред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдореЗрдкрд▓ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП, рд▓реВрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдлреА рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред рдпрджреНрдпрдкрд┐

 cp2:=Compiler:-Compile(p2): st := time():cp2(200000000);time() - st; 

рдореЗрдкрд▓ 17 рдореЗрдВ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:
9.360 рд╕реЗрдХреЗрдВрдб рдореЗрдВ 1.25023042417610020!

рдкреНрд░рдгрд╛рд▓реА рдХреА "рдЪрд╛рд▓" рдХреЗ рдмрд╛рд╡рдЬреВрдж, рджреГрдврд╝рддрд╛ рдФрд░ рд╕рд░рд▓рддрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ :-)

Microsoft Visual Studio 2012 рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ


рдореБрдЭреЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕рдордп рдкрд░ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреА рднрдпрд╛рдирдХ рд╕реБрд╕реНрддреА рдХреЗ рд╕рд╛рде рдиреЗрдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЧрд╣рд░реА рдирд┐рд░рд╛рд╢рд╛ рд╣реБрдИ рдереАред рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ (рд╕рдВрдХрд▓рд┐рдд!) VB.Net 2003 рдореЗрдВ VB6 рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 8 рдЧреБрдирд╛ рдзреАрдорд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ VB.Net 2012 рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп рдХреЛрдИ рднреНрд░рдо рдирд╣реАрдВ рдерд╛ред

 Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim i As Long, res As Double, tm As DateTime tm = Now For i = 1 To 200000000 res = res + Math.Sin(i) Next TextBox1.Text = res & vbNewLine & Now.Subtract(tm).TotalSeconds.ToString("0.000") End Sub End Class 

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╡реНрдпрд░реНрде рдореЗрдВ!

VB.Net 2012 рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
11.980 рд╕реЗрдХрдВрдб рдореЗрдВ 1.25023042417527ред рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ!

рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЖрд╢рд╛рдПрдБ рд╕реМрдВрдкреА рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА рдиреЗрдЯ рд╕реНрд▓реИрдЧ рдХреЗ рдмрд┐рдирд╛, рдЕрдкрдиреЗ рдореВрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реИ:

 #include <iostream> #include <windows.h> using namespace std; int main() { double res=0.0; int dw = GetTickCount(); for (int i = 1; i <= 200000000; i++) res+=sin(i); cout.precision(20); cout << "Result: " << res << " after " << (GetTickCount()-dw); } 

рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЪрд╛рдмрд┐рдпрд╛рдВ / O2 рдФрд░ / Ot рд╣реИрдВ:


VC ++ рдХрд╛ рдкрд░рд┐рдгрд╛рдоред рдиреЗрдЯ 2012:
рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ: 11.404 рд╕реЗрдХрдВрдб рдореЗрдВ 1.2502304241761002ред

рдкреБрд░рд╛рдиреЗ рд╕реНрдХреВрд▓ VB6 рдХреА рдмрд╛рд░реА


рдХреЛрдб рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ:

  res = 0: for i = 1 To 200000000: res = res + Sin(i) : Next i 

рд╣рдо рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:



рдФрд░ рд╣рдореЗрдВ VB6 рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдореЗрдВ рдЪреИрдВрдкрд┐рдпрди рдорд┐рд▓рд╛:
рдкрд░рд┐рдгрд╛рдо: 1.25023042417543, рд╕рдордп рдмрд┐рддрд╛рдпрд╛: 0:00:09 (9.092153)

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



рдпрд╣ рд╕рдЪ рд╣реИ, рдореИрдВ SSE2 рдкрд░ рдЗрд╕ рд╕рд╛рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рдЬреБрдЕрд▓ рдмреЗрд╕рд┐рдХ 6 рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП FPU рд╕реНрдЯреИрдХ рд╕рд┐рдВрдЧрд▓-рдСрдкрд░реЗрдВрдб рдХрдорд╛рдВрдб рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ? рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд░рд╣рд╕реНрдп рдмрддрд╛рддрд╛ рд╣реВрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдкреНрд░рд┐рдп рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрдВрдЯреЗрд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ XE 2013 рдХрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ QxSSE4.2 рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде Intel C ++ 13 рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛, рдФрд░ рдлрд┐рд░ QxAVX - рдкрд░рд┐рдгрд╛рдо 13-15 рд╕реЗрдХрдВрдб рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдФрд░ рднреА рдмрджрддрд░ рд╣реЛ рдЧрдПред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рдж, рдПрдХ рдЬрдВрдЧрд▓реА рд╡рд┐рдЪрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ - рд╢рд╛рдпрдж рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рд╣реИ? рдореИрдВрдиреЗ рдПрдХ рдФрд░ рдорд╢реАрди рдкрд░ VB6 рдФрд░ VC ++ 2012 рдХреА рддреБрд▓рдирд╛ рд╢реБрд░реВ рдХреА, рджреЛ рдХреЛрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд░рд╛рдирд╛ рдХреЛрд░ рдбреБрдУ 6600ред SSE рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдВрддрд░рд╛рд▓ рдФрд░ рднреА рдмрдбрд╝рд╛ рд╣реИред рдХреЗрд╡рд▓ рддрд╛рд░реНрдХрд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдЗрдВрдЯреЗрд▓ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдиреЗ рдПрд╕рдПрд╕рдИ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдлрдкреАрдпреВ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдФрд░ рдЗрдВрдЯреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕ рддрдереНрдп рдХреЛ рдЦреЛ рджрд┐рдпрд╛ред

рдКрдкрд░ рдХреА рддрд╕реНрд╡реАрд░ рдореЗрдВ, рдЖрдк, рд╡реИрд╕реЗ, рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣реЙрдЯ рд╕реНрдкреЙрдЯ рдореЛрдб рдореЗрдВ Vtune рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ SSE рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЙрд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдСрдкрд░реЗрд╢рди рд▓реВрдк рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдирд╛ рд╣реИ! рд╢реИрдХреНрд╖рдгрд┐рдХ рд░реБрдЪрд┐ рд╕реЗ рдмрд╛рд╣рд░, рдЪреВрдВрдХрд┐ рдЗрдВрдЯреЗрд▓ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдПрдбрд╡рд╛рдЗрдЬрд░ XE 2013 рдЙрддреНрдкрд╛рдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдЪрд▓рд╛рдпрд╛, рдЬрд┐рд╕реЗ рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЫреЛрдЯреЗ рдЪрдХреНрд░ рдореЗрдВ, рд╕рд╛рдЭрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХреЛ рдРрд╕реЗ рд╕реНрдерд╛рди рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЦреИрд░, рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рднрд░реЛрд╕рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ? рддреЗрдЬреА рд╕реЗ, рдПрдХ рднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ (рдФрд░ рди рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдпрджрд┐ рдЖрдк рдХреЙрд░реНрди рдШреЛрд╖рдгрд╛рдУрдВ рдФрд░ рд▓рд╛рд░рдмреА рдФрд░ рдирд╛рдЗрдЯреНрд╕ рдХреЙрд░реНрдирд░ рдХреА рдкреБрди: рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ)ред рдЦреИрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдорддрд▓реВрдм рд╣реИред

рдорддрд▓рд╛рдм рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ


рдЯрд╛рдЗрдкрд┐рдВрдЧ
 tic;sum(sin(1:200000000));toc; 

рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╣рдо рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВ:

1.250230424175050, рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп 3.621641 рд╕реЗрдХрдВрдб рд╣реИред

рдЕрдЪреНрдЫрд╛, рдЕрдЪреНрдЫрд╛! рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЪрддреБрд░ рдорд╛рдЯрд▓рдм рдиреЗ рддреБрд░рдВрдд рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдореЗрд░реА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рднреМрддрд┐рдХ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдЙрдирдХрд╛ рдкреВрд░рд╛ рднрд╛рд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рдЧрдпрд╛ред рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛, рд╣реИ рди? рдЖрдЦрд┐рд░рдХрд╛рд░, рдореИрдВрдиреЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ 100% рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ (рд╡реИрд╕реЗ, рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рд╕реНрддрд╛ рдирд╣реАрдВ) рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред MathWorks рдЗрдВрдЬреАрдирд┐рдпрд░реНрд╕ рдХрд╛ рд╕рдореНрдорд╛рди!

рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдо-рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдФрд░ рдлрд┐рд░ рдПрдХ рдФрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрд╕рдореНрдмрджреНрдз рдЯрд┐рдХ; рдлрд╛рд╕реНрдЯрд╕рдо (200000000); рдЯреЛ; рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 5.607512 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдмреАрддрд╛ рд╕рдордп рджреЗрддрд╛ рд╣реИред рдХрд┐рд╕рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдмрд╛рдд рд╣реИ? рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд░рд╣рд╕реНрдп рд╣реИред рд╣рдо рддреИрдирд╛рддреА рдХрдорд╛рдВрдб рдХреА рдорджрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдорд╛рдЯрд▓реИрдм рдЖрдзреЗ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреА рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдХреЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рд╣реИ - рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рд╡реАрд╕реА ++ рдХрд╛ рдЖрдХрд╛рд░ 46Kb рд╣реИ, VB.Net 30Kb рд╣реИ, Vb6 36Kb рд╣реИред рд▓реЗрдХрд┐рди рдорддрд▓реВрдм рд╕рдВрдХрд▓рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЧрд╛?

1.2502, рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп 10.716620 рд╕реЗрдХрдВрдб рд╣реИред
рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорд╛рдирд╛рдВрддрд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░рд╛ рджрд┐рд▓ рдореБрдЭрд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкрдиреА рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ рдЯреВрд▓рдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд╕рд╛ рдЪрд╛рд╣рддреА рд╣реИ :-)

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



рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рд╕рдВрдЦреНрдпрд╛ 1 рд╕реЗ 32 рддрдХ рдмрдврд╝рдиреЗ рдкрд░ рд╣рдорд╛рд░рд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рдЬрдм рддрдХ рдпрд╣ рднреМрддрд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЫрдд рд╕реЗ рдирд╣реАрдВ рдЯрдХрд░рд╛рдПрдЧрд╛, рдкреНрд░рджрд░реНрд╢рди рдмрдврд╝реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ HT рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдХрд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдЕрд╕реНрдерд╛рдпреА рдмрд┐рдВрджреБ рдЕрдЧрд░ FPU рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ?




рдлрд┐рд░ рднреА, 14 рддрд╛рд░реНрдХрд┐рдХ рдХреЛрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ 20% рддрдХ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛: рдЯреА (16) = 0.803 рд╕реЗрдХрдВрдб рд╕реЗред to t (30) = 0.645 рд╢рд╛рдпрдж рдкрд░рд┐рдгрд╛рдо рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реЛрдЧрд╛ рдпрджрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╢реБрд░реВ рдореЗрдВ рдкрд╛рд╡рд░ рд╕реЗрд╡рд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдирд╣реАрдВ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ 0.6 рд╕реЗрдХрдВрдб рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдШрдбрд╝реА рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдЕрдзрд┐рдХрддрдо рддрдХ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред

GPGPU


рдЦреИрд░, рд╣рдордиреЗ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЦреНрдпрдзрд╛рд░рд╛ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ред рд▓реЗрдХрд┐рди рдЪрд▓реЛ GPGPU (рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╡рд╛рд▓реЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛, рдЬреЛ рдЗрди рджрд┐рдиреЛрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рд▓реИрд╕ рд╣реИрдВ, рдФрд░ рд╕рднреА рд╣реЛрдо рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдирдП рд▓реИрдкрдЯреЙрдк рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реБрд╕рдЬреНрдЬрд┐рдд рд╣реИрдВред рдореЗрд░рд╛ рд╕реНрдЯреИрдВрдб рд╕рд░реНрд╡рд░ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдерд╛ - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕-рдлреНрд▓реИрдЧрд╢рд┐рдк рдПрдирд╡реАрдбрд┐рдпрд╛, рдлрд░реНрдореА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рджреЛрд╣рд░реЗ рдЪрд┐рдк GTX 590 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб, CUDA рддрдХрдиреАрдХ рдХреЛ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВ рдПрдирд╡реАрдбрд┐рдпрд╛ рдХрд╛ рдмрд╣реБрдд рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдПрдХрдорд╛рддреНрд░ рдХрдВрдкрдиреА рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдо рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ (рд╕рдореНрдореЗрд▓рдиреЛрдВ, рд╕реЗрдорд┐рдирд╛рд░реЛрдВ, рдШрдЯрдирд╛рдУрдВ, рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕реБрдзрд╛рд░) рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдХреА рдмрд┐рдХреНрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реА " рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ тАЭрдФрд░ рдирдП рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдиреЗрддреГрддреНрд╡ рд▓реЗред рд╣рд╛рдВ, рдПрдПрдордбреА (рдПрдЯреАрдЖрдИ) рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИрдВ, рдПрдПрдордбреА рдХрд╛рд░реНрдб рдореЗрдВ рдЕрдзрд┐рдХ рдЧреАрдЧрд╛рдлреНрд▓реЙрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╛рдпрд░рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ - рдЖрдкрдХреЛ рдПрдПрдордбреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдХрд┐рд╕реА рднреА рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдпрд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рдПрдХ рдмреБрджреНрдзрд┐рдорд╛рди рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдПрдПрдордбреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ / рдорд╛рд░реНрдХреЗрдЯрд░реНрд╕ / рдПрдЧреНрдЬрд┐рдХреНрдпреВрдЯрд┐рд╡реНрд╕ рдиреЗ рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рдПрдЯреАрдЖрдИ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рдХрд╛рдо рдХреЛ рджрдлрди рдХрд░ рджрд┐рдпрд╛ред рддреЛ рдЕрдм рддрдХ рд╣рдорд╛рд░реА рдкрд╕рдВрдж CUDA рд╣реИ! рд╡реИрд╕реЗ, рдЕрдЧрд░ рдЖрдкрдХреЛ CUDA 5 рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ, рд╣рдорд╛рд░реЗ рдЪрдорддреНрдХрд╛рд░ рдЙрдкрдХрд░рдг рдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВ?



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо рджреЛ рдЬреАрдкреАрдпреВ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ 16 * 1536 * 2 = 49152 рдереНрд░реЗрдб рдореЗрдВ рдЧрдгрдирд╛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд░рд╕реАрд▓рд╛ рдирд╣реАрдВ рд╣реИ - рдлрд░реНрдореА рдореЗрдВ рд╕рд╛рдЗрди рдХреЛ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ 4 рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ (рдПрд╕рдПрдо) рдкрд░ рд╣реИрдВред рдХреБрд▓ рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 16 * 4 * 2 = 128 рдорд╛рди (рдлрд┐рд░ рд╕реЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ) рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рддреБрд░рдВрдд CUDA рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ CUDA рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдореЗрдВ - рдпрд╣ рд╡рд┐рдЬреНрдЮрд╛рди рдФрд░ рдХрд▓рд╛ рджреЛрдиреЛрдВ рдореЗрдВ рдФрд░ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдЗрдП рдереНрд░рд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рддреНрд╡рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХреНрдпреВрдПрдбреАрдП рдореЙрдбрд▓ рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдХрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рд╕реАрдпреВрдбреАрдП рд╕реА рдХреЗ рдЕрд▓рд╛рд╡рд╛ред

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

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

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

 #include <thrust/transform_reduce.h> #include <thrust/device_vector.h> #include <thrust/host_vector.h> #include <thrust/functional.h> #include <thrust/sequence.h> #include <windows.h> using namespace std; template <typename T> struct sin_op { __host__ __device__ T operator()(const T& x) const { return sin(x); } }; int main(void) { int dw = GetTickCount(); int n=10; double res=0.0; sin_op<double> tr_op; thrust::plus<double> red_op; thrust::device_vector<int> i(200000000/n); for (int j=1;j<=n;j++) { thrust::sequence(i.begin(), i.end(),200000000/n*(j-1)+1); res = thrust::transform_reduce(i.begin(), i.end(), tr_op, res, red_op); } cout.precision(20); cout << res << endl<< "Total Time: " << (GetTickCount()-dw) << endl; } 


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

1.704 рд╕реЗрдХрдВрдб рдореЗрдВ 1.2502304241755013ред

рдирд┐рд░рд╛рд╢рд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рдХрд╛рдХрдмреЗ рдкрд░рд┐рдгрд╛рдо рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рддреНрд╡рд░рдХ рдХреЛ рд╣рдорд╛рд░реА рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рд╡рд┐рд╕реНрддреГрдд рд╕рдордп рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╣рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдореА рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдореЗрдВ рд╢реВрдиреНрдп рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕рд░рдгреА рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рд╕рдордп рдХрд╛ 35% рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ), рдлрд┐рд░ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛ 1,2,3 ... (40%) рдХреЗ рд╕рд╛рде рдЗрди рд╢реВрдиреНрдп рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ рд╕рдордп), рдареАрдХ рд╣реИ, рд╢реЗрд╖ 25% рд╕рдордп рд╕рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рд╕реАрдзреЗ рдЬреЛрдбрд╝рдиреЗ (рдкреНрд▓рд╕ рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХрдореА, рдФрд░ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдореБрдЦреНрдп рдореЗрдореЛрд░реА рдореЗрдВ) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред

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

 #include <thrust/iterator/counting_iterator.h> #include <thrust/transform_reduce.h> #include <thrust/device_vector.h> #include <thrust/host_vector.h> #include <thrust/functional.h> #include <thrust/sequence.h> #include <windows.h> using namespace std; template <typename T> struct sin_op { __host__ __device__ T operator()(const T& x) const { return sin(x); } }; int main(void) { int dw = GetTickCount(); double res=0.0; sin_op<double> tr_op; thrust::plus<double> red_op; thrust::counting_iterator<int> first(1); thrust::counting_iterator<int> last = first + 200000000; res = thrust::transform_reduce(first, last, tr_op, res, red_op); cout.precision(20); cout << res << endl<< "Total Time: " << (GetTickCount()-dw)<< endl; } 

рдиреЗрддреГрддреНрд╡ рд╕рдордп рдХреНрдпрд╛ рд╣реИ? рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЦреНрдп рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдо рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдХрд░ рдЗрд╕реЗ рд▓рдЧрднрдЧ рдЖрдзрд╛ рдХрд░ рджрд┐рдпрд╛:

0.780 рд╕реЗрдХрдВрдб рдореЗрдВ 1.2502304241761253ред

рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдХреЙрд▓ рднреА рдХреБрдЫ рд▓реЗрддрд╛ рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рд╕рдордп рдФрд╕рддрди 26 рд╕реЗрдХрдВрдб рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 0.52 рд╕реЗрдХрдВрдб рднреА рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдк рдХрдИ рд╕рдорд╛рдирд╛рдВрддрд░ рд░реЗрдЦрд╛рдУрдВ рдХреЗ рдЪрд░рдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рд╣рдо CUDA C рдореЗрдВ рдЦреБрдж рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ ... рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкрдиреА рдЧрдгрдирд╛ рдХреЛ рд╕рдорд╛рди рд▓рдВрдмрд╛рдИ рдХреЗ рдмреНрд▓реЙрдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рддреЗрдЬреА рд╕реЗ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдореЗрдореЛрд░реА рдореЗрдВ рдЕрдкрдиреЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдореА рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛, рдФрд░ рдмреНрд▓реЙрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдмрд░рд╛рдмрд░ рдСрдлрд╕реЗрдЯ рдкрд░ рддреНрд╡рд░рдХ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдПрдЧрд╛:

 __global__ void SumOfSinuses(double *partial_res, int n) { // extern-     extern __shared__ double sdata[]; //    int i =blockIdx.x*blockDim.x+threadIdx.x; sdata[threadIdx.x] = (i <= n) ? sin((double)i) : 0; __syncthreads(); //      for (int s=blockDim.x/2; s>0; s>>=1) { if (threadIdx.x < s) { sdata[threadIdx.x] += sdata[threadIdx.x + s]; } __syncthreads(); } //       ,    if (threadIdx.x == 0) partial_res[blockIdx.x] = sdata[0]; } 

рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рдмреНрд▓реЙрдХ рдЕрдзрд┐рдХрддрдо 1024 рд╢рдмреНрдж рддрдХ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред SumOfSinuses рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рд▓рдЧрднрдЧ 200 рд╣рдЬрд╛рд░ рдордзреНрдпрд╡рд░реНрддреА рд╢рдмреНрдж рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :: рдХрдо рдХрд░рдирд╛:

 int main(void) { int dw = GetTickCount(); int N=200000000+1; cudaDeviceProp deviceProp; cudaGetDeviceProperties(&deviceProp, 0); double *partial_res; int rest=N;int i=0;double res=0; int threads_per_block=1024;//deviceProp.maxThreadsPerBlock; int max_ind=deviceProp.maxGridSize[0] * threads_per_block; checkCudaErrors(cudaMalloc(&partial_res, max_ind/threads_per_block*sizeof(double))); thrust::device_ptr<double> arr_ptr(partial_res); do { int num_blocks=min((min(rest,max_ind) % threads_per_block==0) ? min(rest,max_ind)/threads_per_block : min(rest,max_ind)/threads_per_block+1,deviceProp.maxGridSize[0]); SumOfSinuses<<<num_blocks,threads_per_block,threads_per_block*sizeof(double)>>>(partial_res,i*max_ind,N); checkCudaErrors(cudaDeviceSynchronize()); //  thrust-         ,        res = thrust::reduce(arr_ptr, arr_ptr+num_blocks,res); rest -=num_blocks*threads_per_block; i++; } while (rest>0); cudaFree(partial_res); cout.precision(20); cout << res << endl<< "Total Time: " << (GetTickCount()-dw)<< endl; } 

0.749 рд╕реЗрдХреЗрдВрдб рдореЗрдВ 1.2502304241758133ред

рдореБрдЭреЗ рдбреВ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреНрдпреВрдбрд╛ рдмреНрд▓реЙрдХ рдХрд╛ рдЬрд╛рд▓ рдЖрдХрд╛рд░ рд╕реАрдорд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрд░ рдХреЛ рд▓реВрдк рд╕реЗ рддреАрди рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рд░ рдмрд╛рд░ рд▓рдЧрднрдЧ 70 рдорд┐рд▓рд┐рдпрди рд╢рдмреНрджреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдлрд┐рд░ рднреА рджреЛрд╣рд░реЗ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдХреЗ рд╕рд╛рде рдкрд╛рд░рд▓реМрдХрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдЯрд┐рдХреА рд╣реБрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдереНрд░рд╕реНрдЯ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рджреЛрд╖реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореИрдВ рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдХреЛрдб рд╣реЛрдЧрд╛ред рд╡реИрд╕реЗ, рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрднреА рддрдХ CUDA- рд╕рдВрдЧрдд рдЙрдкрдХрд░рдгреЛрдВ (рдЬрд┐рдирдореЗрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдХреНрд▓рд╕реНрдЯрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рджреЛ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╕рдВрдкреВрд░реНрдг рд╕рд╣рд╛рдпрдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (cudaSetDevice, cudaStreamCreate / cudaStreamDestroy) рдХреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╕рд░рд▓ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 0.5 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧ рдЧрдпрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдХрд░реНрдиреЗрд▓ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рддреЗ рд╣реИрдВ рддреЛ рдХрдИ CUDA рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рдЕрджреГрд╢реНрдп рд╣реЛред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рдмрд╛рд╣рд░ рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ (рд╢рд╛рдпрдж рдореБрдЭреЗ рдореЗрдЬрдмрд╛рди рдкрдХреНрд╖ рдкрд░ рдХрдИ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ)ред

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

 tic; res=0.0;n=10;stride=200000000/n; for j=1:n X=stride*(j-1)+1:stride*j; A=gpuArray(X); res=res+sum(sin(A)); end toc; gather(res) 


1.250230424175708, рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп 2.872859 рд╕реЗрдХрдВрдб рд╣реИред

рдореБрдЭреЗ рддреБрд░рдВрдд рдЕрдкрдиреЗ рджреЛрд╣рд░реЗ рдЪрд┐рдк рддреНрд╡рд░рдХ рдХреЗ рджреЛрдиреЛрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Spmd рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдорд┐рд╢реНрд░рд┐рдд рд╕рд░рдгреА, рдЬрд┐рд╕реЗ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА matlab рдореЗрдВ рдХрдИ GPU рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ ;-) рд╡реИрд╕реЗ рднреА, Matlab рд╕рдВрд╕реНрдХрд░рдг рдереНрд░рд╕реНрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рддреЗрдЬ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

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

рдЦреИрд░, рдпрд╛ рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ рдбреНрд░рд╛рдЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдгрд┐рддрдЬреНрдЮ рдпрд╛ рдореЗрдкрд▓ рдореЗрдВ рд╕реВрддреНрд░ред 50 рд╕рдЯреАрдХ рджрд╢рдорд▓рд╡ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЛрдЬрд╛ рдЧрдпрд╛ рдирдВрдмрд░:

 1.2502304241756868163500362795713040947699040278200 

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

рдирд┐рд╖реНрдард╛ рд╕реЗ,
рдЕрдирд╛рддреЛрд▓реА рдЕрд▓реЗрдХреНрд╕реЗрд╡
2013/05/24

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


All Articles