рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЛ рддреЗрдЬ рдХрд░рдирд╛: рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╕реАрдпреВрдбреАрдП

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдиреЛрдб рдХреЗ рдХрд╛рдо рдХреЛ рдХреИрд╕реЗ рддреЗрдЬ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЗрдПрд╕ (рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХрд╛рдлреА рддреЗрдЬ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╣рдо C ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреЗ рдЧрдП рдореВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ


рддреЛ, рдЖрдкрдХреЗ рдкрд╛рд╕ Node.JS рдкрд░ рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп рдорд┐рд▓рд╛ рд╣реИред рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, C ++ рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдм рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ - рдПрдХ рджреЗрд╢реА рд╡рд┐рд╕реНрддрд╛рд░ред

Node.JS рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬреЗрдПрд╕ рд░реИрдкрд░ рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдЬреЗрдПрд╕ рдХреЛрдб рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ рдорд╛рдирдХ Node.JS рдореЙрдбреНрдпреВрд▓ C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рд╕реНрд╡рдпрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗред рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдЦ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ, рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рдореВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рдПрдВ рдФрд░ рдХрдИ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рдПрдВред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рдВрд╕рд╛рдзрди-рдЦрдкрдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЬреЗрдПрд╕ рдФрд░ рд╕реА ++ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛрд╣рд░реЗ рдЕрднрд┐рдиреНрди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ?


рдлрд╝рдВрдХреНрд╢рди рд▓реЗрдВ:

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрди рд╕рддрд╣ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:

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

var func = function(x,y){ return Math.sin(x*y)/(1+Math.sqrt(x*x+y*y))+2; } function integrateJS(x0,xN,y0,yN,iterations){ var result=0; var time = new Date().getTime(); for (var i = 0; i < iterations; i++){ for (var j = 0; j < iterations; j++){ //    var x = x0 + (xN - x0) / iterations * i; var y = y0 + (yN - y0) / iterations * j; var value = func(x, y); //   //        result+=value*(xN-x0)*(yN-y0)/(iterations*iterations); } } console.log("JS result = "+result); console.log("JS time = "+(new Date().getTime() - time)); } 

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реИ


рдЕрдм рд╣рдо C ++ рдореЗрдВ рд╕рднреА рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ Microsoft Visual Studio 2010 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ Node.JS рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд░реЛрдд рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ vcbuild.bat рд╣реИ, рдЬреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рдкрд╛рдпрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдСрдл рд╕рд╛рдЗрдЯ рд╕реЗ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдЪрд░ рдореЗрдВ рдЕрдЬрдЧрд░ рдХреЛ рдкрде рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдЕрдЬрдЧрд░ 2.7 рдХреЗ рд▓рд┐рдП рдпрд╣ C: \ththon27 рд╣реЛрдЧрд╛; C: \ Python27 \ Scripts)ред рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБ, рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЕрдЧрд▓рд╛, рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ .cpp рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдЕрдЧрд▓рд╛, json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦреЗрдВ:

  { "targets": [ { "target_name": "funcIntegrate", "sources": [ "funcIntegrate.cpp" ] } ] } 

рд╣рдо рдЗрд╕реЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рдЬрд┐рдк рдФрд░ рдЙрд╕ рдкрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реНрдЯреВрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ vcxproj рдпрд╛ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдореЗрдХрдлрд╛рдЗрд▓ рдмрдирд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдХреЙрдорд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ рдереА, рдЬрд┐рд╕рд╕реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдмрдирд╛рдирд╛ рднреА рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдЗрд╕реЗ рдЙрдирд╕реЗ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╣реЗрд▓реЛрд╡рд░реНрд▓реНрдб рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдмреИрдЪ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБ - рд╕рдорд╛рдкреНрдд .node рдореЙрдбреНрдпреВрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдбреНрд░рд╛рдЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд▓рд┐рдмрд╛рд╕ рдФрд░ рд╣реЗрдбрд░ рдиреЛрдб рдХреЗ рд░рд╛рд╕реНрддреЗред js, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЛ .dll, рдЯрд╛рд░рдЧреЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди - .node рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

рдореВрд▓ рд╡рд┐рд╕реНрддрд╛рд░


рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

.Cpp рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдореЗрдВ ObjectWrap рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕реНрдерд┐рд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЖрд░рдВрднреАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╣рдо NODE_MODULE рдореИрдХреНрд░реЛ рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВред NODE_SET_PROTOTYPE_METHOD рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрд░рдВрднреАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ Node.JS рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреАред рд╣рдо рдкреНрд░реЗрд╖рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг, рдЖрдк рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ

рдХреЛрдб
 #include <node.h> //  #include <v8.h> #include <math.h> using namespace node; using namespace v8; //,       js float func(float x, float y){ return sin(x*y)/(1+sqrt(x*x+y*y))+2; } char* funcCPU(float x0, float xn, float y0, float yn, int iterations){ double x,y,value,result; result=0; for (int i = 0; i < iterations; i++){ for (int j = 0; j < iterations; j++){ x = x0 + (xn - x0) / iterations * i; y = y0 + (yn - y0) / iterations * j; value = func(x, y); result+=value*(xn-x0)*(yn-y0)/(iterations*iterations); } } char *c = new char[20]; sprintf(c,"%f",result); return c; } //  ,    ObjectWrap class funcIntegrate: ObjectWrap{ public: //.        static static void Init(Handle<Object> target){ HandleScope scope; Local<FunctionTemplate> t = FunctionTemplate::New(New); Persistent<FunctionTemplate> s_ct = Persistent<FunctionTemplate>::New(t); s_ct->InstanceTemplate()->SetInternalFieldCount(1); //    javascript s_ct->SetClassName(String::NewSymbol("NativeIntegrator")); //,   javasript NODE_SET_PROTOTYPE_METHOD(s_ct, "integrateNative", integrateNative); target->Set(String::NewSymbol("NativeIntegrator"),s_ct->GetFunction()); } funcIntegrate(){ } ~funcIntegrate(){ } //    Node.JS      new static Handle<Value> New(const Arguments& args){ HandleScope scope; funcIntegrate* hw = new funcIntegrate(); hw->Wrap(args.This()); return args.This(); } // ,   javasript static Handle<Value> integrateNative(const Arguments& args){ HandleScope scope; funcIntegrate* hw = ObjectWrap::Unwrap<funcIntegrate>(args.This()); //   args,    double   funcCPU. //     Local<String> result = String::New(funcCPU(args[0]->NumberValue(),args[1]->NumberValue(),args[2]->NumberValue(),args[3]->NumberValue(),args[4]->NumberValue())); return scope.Close(result); } }; extern "C" { static void init (Handle<Object> target){ funcIntegrate::Init(target); } NODE_MODULE(funcIntegrate, init); }; 


рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ .node рдлрд╝рд╛рдЗрд▓ (рдПрдХ рдЕрд▓рдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдорд┐рдд DLL) рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реА Node.JS рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ NativeIntegrator js рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдПрдХреАрдХреГрдд рд╡рд┐рдзрд┐ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

 var funcIntegrateNative = require("./build/funcIntegrate.node"); nativeIntegrator = new funcIntegrateNative.NativeIntegrator(); function integrateNative(x0,xN,y0,yN,iterations){ var time = new Date().getTime(); result=nativeIntegrator.integrateNative(x0,xN,y0,yN,iterations); console.log("Native result = "+result); console.log("Native time = "+(new Date().getTime() - time)); } 

рдЗрд╕ рдХреЛрдб рдХреЛ Node.JS рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдкреВрд░реА рдХреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рддреБрд▓рдирд╛ рдХрд░реЗрдВ:

 function main(){ integrateJS(-4,4,-4,4,1024); integrateNative(-4,4,-4,4,1024); } main(); 

рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:
рдЬреЗрдПрд╕ рдкрд░рд┐рдгрд╛рдо = 127.99999736028109
рдЬреЗрдПрд╕ рд╕рдордп = 127
рдореВрд▓ рдкрд░рд┐рдгрд╛рдо = 127.999997
рдореВрд▓ рд╕рдордп = резрежрей

рдЕрдВрддрд░ рдиреНрдпреВрдирддрдо рд╣реИред рдЖрдЗрдП рдЕрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 8 рдЧреБрдирд╛ рдмрдврд╝рд╛рдПрдВред рд╣рдореЗрдВ рдирд┐рдореНрди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ:

рдЬреЗрдПрд╕ рдкрд░рд┐рдгрд╛рдо = 127.99999995875444
рдЬреЗрдПрд╕ рд╕рдордп = 6952
рдореВрд▓ рдкрд░рд┐рдгрд╛рдо = 128.000000
рджреЗрд╢реА рд╕рдордп = 6658

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


рдкрд░рд┐рдгрд╛рдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред рд╣рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рдорд┐рд▓рд╛ред Node.JS рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рд╢реБрджреНрдз C ++ рдХреА рддрд░рд╣ рд╣реА рд╣реЛрддрд╛ рд╣реИред рд╣рдордиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдХрд┐ V8 рдПрдХ рддреЗрдЬ рдЗрдВрдЬрди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рд╣реА ... рд╣рд╛рдВ, рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рднреА рд╢реБрджреНрдз js рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рд╕реЗ рдереЛрдбрд╝рд╛ рдЦреЛ рджреЗрдВрдЧреЗ, рдЕрдЧрд░ рд╣рдо рдХреБрдЫ рдЦреЛ рджреЗрдВрдЧреЗред рдореВрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╡рд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рд╣реЛрдЧрд╛ред рдПрдХ рджреЗрд╢реА рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣рдореЗрд╢рд╛ рдХреИрд╢реНрдб рдпрд╛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рд▓рд╛рдЧрддреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдХрд░реЗрдВ? рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рд╕рдордЬ рдореЗрдВ рдЖрддреА рд╣реИ рд╡реЛ рд╣реИ рд╕рдорд╕реНтАНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдкрдирдореИрдк рдпрд╛ рджреЗрд╢реА рдзрд╛рдЧреЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдп рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдордп рдХреА рдкреНрд░рддрд┐ рдпреВрдирд┐рдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЕрддрдГ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рд╕рд░реНрд╡рд░ рд▓реЛрдб рдореЗрдВ рдХрдореА рдирд╣реАрдВ рд╣реЛрдЧреАред рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╢рд╛рдпрдж рд╣рдореЗрдВ рднреА рд▓рд╛рдн рд╣реЛрдЧрд╛ - рдиреЛрдб.рдЬреЗрдПрд╕ рдореЗрдВ рдЕрднреА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдУрд╡рд░рд╣реЗрдб рд╣реЛрдЧрд╛ рдФрд░ рдХреБрд▓ рд╡реНрдпрд╛рдкреНрдд рдореЗрдореЛрд░реА рдЕрдзрд┐рдХ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рд╕реНрдореГрддрд┐ рдЕрдм рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕ рдЕрдзреНрдпрдпрди рд╕реЗ рд╣рдо рдХреНрдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ?


рд╣рдореЗрдВ рдФрд░ рдЧрд╣рд░реЗ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ


рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ? рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рд▓реЗрдХрд░ рдХреБрдЫ рднреА, рдпрд╛рдиреА рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рд╣рдо CUDA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ!

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ CUDA SDK рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ Nvidia рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдпрд╣рд╛рдВ рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рдореИрдиреБрдЕрд▓ рд╣реИрдВред рдПрд╕рдбреАрдХреЗ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╕реНрд░реЛрдд рдХреЛ .cpp рд╕реЗ .cu рдореЗрдВ рдмрджрд▓ рджреЗрдВред рд╣рдо рдирд┐рд░реНрдорд╛рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ CUDA рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред CUDA рд╕рдВрдХрд▓рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝реЗрдВред рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдкрд░рд┐рд╡рд░реНрдзрди рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣рд╛рдВ рдирдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛрдб рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдХреЛрдб
 #include <node.h> #include <v8.h> #include <math.h> #include <cuda_runtime.h> //  CUDA using namespace node; using namespace v8; //  __device__ __host__ //      CPU,    GPU. __device__ __host__ float func(float x, float y){ return sin(x*y)/(1+sqrt(x*x+y*y))+2; } //__global__ -   CPU,   GPU __global__ void funcGPU(float x0, float xn, float y0, float yn, float *result){ float x = x0 + (xn - x0) / gridDim.x * blockIdx.x; float y = y0 + (yn - y0) / blockDim.x * threadIdx.x ; float value = func(x, y); result[gridDim.x * threadIdx.x + blockIdx.x] = value*(xn-x0)*(yn-y0)/(gridDim.x*blockDim.x); } char* funcCPU(float x0, float xn, float y0, float yn, int iterations){ double x,y,value,result; result=0; for (int i = 0; i < iterations; i++){ for (int j = 0; j < iterations; j++){ x = x0 + (xn - x0) / iterations * i; y = y0 + (yn - y0) / iterations * j; value = func(x, y); result+=value*(xn-x0)*(yn-y0)/(iterations*iterations); } } char *c = new char[20]; sprintf(c,"%f",result); return c; } class funcIntegrate: ObjectWrap{ private: static dim3 gridDim; //    static dim3 blockDim; static float *result; static float *resultDev; public: static void Init(Handle<Object> target){ HandleScope scope; Local<FunctionTemplate> t = FunctionTemplate::New(New); Persistent<FunctionTemplate> s_ct = Persistent<FunctionTemplate>::New(t); s_ct->InstanceTemplate()->SetInternalFieldCount(1); s_ct->SetClassName(String::NewSymbol("NativeIntegrator")); NODE_SET_PROTOTYPE_METHOD(s_ct, "integrateNative", integrate); //     GPU,  Node.JS NODE_SET_PROTOTYPE_METHOD(s_ct, "integrateCuda", integrateCuda); target->Set(String::NewSymbol("NativeIntegrator"),s_ct->GetFunction()); //   CUDA gridDim.x = 256; blockDim.x = 256; result = new float[gridDim.x * blockDim.x]; cudaMalloc((void**) &resultDev, gridDim.x * blockDim.x * sizeof(float)); } funcIntegrate(){ } ~funcIntegrate(){ cudaFree(resultDev); } //    static char* cudaIntegrate(float x0, float xn, float y0, float yn, int iterations){ cudaEvent_t start, stop; cudaEventCreate(&start); cudaEventCreate(&stop); //    CPU  GPU //           GPU - //      bCount,   //  GPU   int bCount = iterations/gridDim.x; float bSizeX=(xn-x0)/bCount; float bSizeY=(yn-y0)/bCount; double res=0; for (int i = 0; i < bCount; i++){ for (int j = 0; j < bCount; j++){ cudaEventRecord(start, 0); //  //   GPU funcGPU<<<gridDim, blockDim>>>(x0+bSizeX*i, x0+bSizeX*(i+1), y0+bSizeY*j, y0+bSizeY*(j+1), resultDev); cudaEventRecord(stop, 0); cudaEventSynchronize(stop); //  //    GPU    cudaMemcpy(result, resultDev, gridDim.x * blockDim.x * sizeof(float), cudaMemcpyDeviceToHost); //   for (int k=0; k<gridDim.x * blockDim.x; k++) res+=result[k]; } } cudaEventDestroy(start); cudaEventDestroy(stop); char *c = new char[200]; sprintf(c,"%f", res); return c; } static Handle<Value> New(const Arguments& args){ HandleScope scope; funcIntegrate* hw = new funcIntegrate(); hw->Wrap(args.This()); return args.This(); } static Handle<Value> integrate(const Arguments& args){ HandleScope scope; funcIntegrate* hw = ObjectWrap::Unwrap<funcIntegrate>(args.This()); Local<String> result = String::New(funcCPU(args[0]->NumberValue(),args[1]->NumberValue(),args[2]->NumberValue(),args[3]->NumberValue(),args[4]->NumberValue())); return scope.Close(result); } //     CUDA static Handle<Value> integrateCuda(const Arguments& args){ HandleScope scope; funcIntegrate* hw = ObjectWrap::Unwrap<funcIntegrate>(args.This()); Local<String> result = String::New(cudaIntegrate(args[0]->NumberValue() ,args[1]->NumberValue(),args[2]->NumberValue(),args[3]->NumberValue(),args[4]->NumberValue())); return scope.Close(result); } }; extern "C" { static void init (Handle<Object> target){ funcIntegrate::Init(target); } NODE_MODULE(funcIntegrate, init); }; dim3 funcIntegrate::blockDim; dim3 funcIntegrate::gridDim; float* funcIntegrate::result; float* funcIntegrate::resultDev; 


рдЖрдЗрдП js рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦреЗрдВ:

 function integrateCuda(x0,xN,y0,yN,iterations){ var time = new Date().getTime(); result=nativeIntegrator.integrateCuda(x0,xN,y0,yN,iterations); console.log("CUDA result = "+result); console.log("CUDA time = "+(new Date().getTime() - time)); } 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ:

 function main(){ integrateJS(-4,4,-4,4,1024); integrateNative(-4,4,-4,4,1024); integrateCuda(-4,4,-4,4,1024); } 

рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

рдЬреЗрдПрд╕ рдкрд░рд┐рдгрд╛рдо = 127.99999736028109
рдЬреЗрдПрд╕ рд╕рдордп = резрез реп
рдореВрд▓ рдкрд░рд┐рдгрд╛рдо = 127.999997
рдореВрд▓ рд╕рдордп = резреиреи
CUDA рдкрд░рд┐рдгрд╛рдо = 127.999997
CUDA рд╕рдордп = 17

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

  integrateJS(-4,4,-4,4,1024*16); integrateNative(-4,4,-4,4,1024*16); integrateCuda(-4,4,-4,4,1024*16); 

рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:
рдЬреЗрдПрд╕ рдкрд░рд┐рдгрд╛рдо = 127.99999998968899
рдЬреЗрдПрд╕ рд╕рдордп = 25401
рдореВрд▓ рдкрд░рд┐рдгрд╛рдо = 128.000000
рджреЗрд╢реА рд╕рдордп = 28405
CUDA рдкрд░рд┐рдгрд╛рдо = 128.000000
рдХреВрдбрд╛ рд╕рдордп = 3568

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдЕрдВрддрд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред CUDA рдкрд░ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣рдореЗрдВ рдкрд░рд┐рдорд╛рдг рдХреЗ рдПрдХ рдЖрджреЗрд╢ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рджреЗрдЧрд╛ред (рдФрд░ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдкрд░ C ++ рдХреЛрдб рднреА рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ Node.JS рд╕реЗ рдкрд┐рдЫрдбрд╝ рдЧрдпрд╛)ред

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


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

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


All Articles