рд╣рд╛рд▓рд╛рдВрдХрд┐ OpenCL рддрдХрдиреАрдХ 2008 рдореЗрдВ рд╡рд╛рдкрд╕ рджрд┐рдЦрд╛рдИ рджреА, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрдм рддрдХ рдЕрдзрд┐рдХ рд╡рд┐рддрд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рд▓рд╛рдн рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд╣реИрдВ: рдЧрдгрдирд╛ рдХрд╛ рддреНрд╡рд░рдг, рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо, GPU рдФрд░ CPU рдХреЗ рддрд╣рдд рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдорд╛рдирдХ рдХрдИ рдХрдВрдкрдирд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ: Apple, AMD, Intel, nVidia рдФрд░ рдХреБрдЫ рдЕрдиреНрдпред рдХрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╣реИрдВ: CUDA рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ nVidia рдкрд░ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо, рдЙрдкрдпреЛрдЧ рдХреА рдЬрдЯрд┐рд▓рддрд╛ред рдордВрддреНрд░рд┐рдпреЛрдВ рдХрд╛ рдкрд╣рд▓рд╛ рдЧрдВрднреАрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рд╣реА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЧрддрд┐ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рджреВрд╕рд░рд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдХрд╛рд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рдзрд╛ рд╣реИред рд╣реЗрдбрд░, рдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рдорд╛рдирдХреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдПрдХ рдЫреЛрдЯрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдУрдкрди # рдХреЛ рд╕реА # рдХреЗ рддрд╣рдд рдХреИрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗрдЯрдЕрдк
рд╕рдмрд╕реЗ рд▓рдВрдмрд╛ рдФрд░ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ OpenCL рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдПрдПрдордбреА рдХрд╛рд░реНрдб рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдПрдордбреАред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдПрдордбреА рдХреЛ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрджреНрднреБрдд рдПрд╕рдбреАрдХреЗ рд╣реИ, рдФрд░ рд╕рдорд░реНрдерди рдлреЛрд░рдо рд▓рд╛рдЗрд╡ рдФрд░ рдСрдкрд░реЗрд╢рдирд▓ рд╣реИрдВред
AMD рдЙрддреНрдкреНрд░реЗрд░рдХ рдХреЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ
, OpenCL рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдПрд╕рдбреАрдХреЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рд╕реНрдерд╛рдкрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдУрдкрдирд╕реАрдПрд▓
рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ред рдПрдПрдордбреА рдХреЗ рд▓рд┐рдП, рдЖрдВрд╢рд┐рдХ рд╕рдорд░реНрдерди 4300 рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ 5400 рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╕рдорд░реНрдердиред
NVIDIA рдХреЗред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдирд╡реАрдбрд┐рдпрд╛ рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдХрдо рд╣реЛрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рд╡реЗ рдЙрдарддреЗ рднреА рд╣реИрдВред OpenCL рдХрд╛ рд╕рдорд░реНрдерди рд▓рдЧрднрдЧ 8600 рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдЖрдкрдХреЛ
рдпрд╣рд╛рдВ рдбреНрд░рд╛рдЗрд╡рд░ рдорд┐рд▓ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдЗрдВрдЯреЗрд▓ред
рдПрдПрдордбреА рдФрд░ рдПрдирд╡реАрдбрд┐рдпрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореБрдЭреЗ рдЗрдВрдЯреЗрд▓ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИред рдЖрдк рдЙрдиреНрд╣реЗрдВ
рдпрд╣рд╛рдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред AMD рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ (рд╕рдорд╕реНрдпрд╛рдПрдБ рддрдм рдЙрддреНрдкрдиреНрди рд╣реБрдИрдВ рдЬрдм 2 рдореЗрдВ рд╕реЗ 3 рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдкрд░), nVidia рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрдбрд╝рд╛ рд╣реИ (3 рдореЗрдВ рд╕реЗ 1)ред рдЗрд╕рд▓рд┐рдП, рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдпрд╣ рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рдУрдкрдирд╕реАрдПрд▓ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ
GpuCapsViewer , opencl-z рдФрд░ GPU-Z рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛
рд╣реВрдВ ред
рдпрджрд┐ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реБрдИрдВ ... рд╕рднреА рдкреБрд░рд╛рдиреЗ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ, рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВред рдПрдПрдордбреА рдХреЗ рд▓рд┐рдП - рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рд▓реИрдкрдЯреЙрдк рдбреНрд░рд╛рдЗрд╡рд░ рдЕрдХреНрд╕рд░ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реБрдИ рд╣реИрдВ, рддреЛ рд╡рд┐рдВрдбреЛрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЖрдкрдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред
рд░реИрдкрд░
рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп C # рдХреЗ рддрд╣рдд OpenCL рдкрд░ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╣реИ, рд╣рдо рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рд╕реЗ рдирд╣реАрдВ рдирд┐рдкрдЯреЗрдВрдЧреЗ рдФрд░ OpenCL рд╣реЗрдбрд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкреВрд░реНрдг рдФрд░ рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╕рдВрд╕реНрдХрд░рдг, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдЬ
cloo.dll рд╣реИ , рдЬреЛ
OpenTK рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдХрдИ рдСрдкрд░реЗрд╢рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ,
OpenCLTemplate , рдЬреЛ
рдХреНрд▓реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдб-рдСрди рд╣реИред рдмрд╛рдж рдХреЗ minuses рдореЗрдВ рд╕реЗ, рдХреБрдЫ рдЧреНрд▓рд┐рдЪ рдЬрдм рдПрдПрдордбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ (11.6) рдХреЗ рд╕рд╛рде, рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред OpenSource рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рдж рд╕реЗ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд╛рд╕ рдореМрдЬреВрдж glitches рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдФрд░ рдареАрдХ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХрдм рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗред рдХреБрдЫ рдХрдо рдЬреНрдЮрд╛рдд рд░реИрдкрд░ рднреА рд╣реИрдВ рдЬреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо
рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо OpenCL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛ рд╡реИрдХреНрдЯрд░, v1 рдФрд░ v2 рдХреЗ рдпреЛрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред Cloo.dll рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо:
рдХреНрд▓реЛ рдХрд╛рд░реНрдпрдХреНрд░рдо
private void button4_Click( object sender, EventArgs e)
{
// , . Platforms[1]
//
ComputeContextPropertyList Properties = new ComputeContextPropertyList(ComputePlatform.Platforms[1]);
ComputeContext Context = new ComputeContext(ComputeDeviceTypes.All, Properties, null , IntPtr .Zero);
// , (GPU CPU).
// . , C99 OpenCL.
string vecSum = @"
__kernel void
floatVectorSum(__global float * v1,
__global float * v2)
{
int i = get_global_id(0);
v1[i] = v1[i] + v2[i];
}
" ;
// , vecSum
List <ComputeDevice> Devs = new List <ComputeDevice>();
Devs.Add(ComputePlatform.Platforms[1].Devices[0]);
Devs.Add(ComputePlatform.Platforms[1].Devices[1]);
Devs.Add(ComputePlatform.Platforms[1].Devices[2]);
// vecSum
ComputeProgram prog = null ;
try
{
prog = new ComputeProgram(Context, vecSum); prog.Build(Devs, "" , null , IntPtr .Zero);
}
catch
{ }
//
ComputeKernel kernelVecSum = prog.CreateKernel( "floatVectorSum" );
// , .
float [] v1 = new float [100], v2 = new float [100];
for ( int i = 0; i < v1.Length; i++)
{
v1[i] = i;
v2[i] = 2 * i;
}
// .
ComputeBuffer< float > bufV1 = new ComputeBuffer< float >(Context, ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.UseHostPointer, v1);
ComputeBuffer< float > bufV2 = new ComputeBuffer< float >(Context, ComputeMemoryFlags.ReadWrite | ComputeMemoryFlags.UseHostPointer, v2);
// vecSum
kernelVecSum.SetMemoryArgument(0, bufV1);
kernelVecSum.SetMemoryArgument(1, bufV2);
// . , !
ComputeCommandQueue Queue = new ComputeCommandQueue(Context, Cloo.ComputePlatform.Platforms[1].Devices[0], Cloo.ComputeCommandQueueFlags.None);
//. Execute - vecSum (v1.Length)
Queue.Execute(kernelVecSum, null , new long [] { v1.Length }, null , null );
// .
float [] arrC = new float [100];
GCHandle arrCHandle = GCHandle.Alloc(arrC, GCHandleType.Pinned);
Queue.Read< float >(bufV1, true , 0, 100, arrCHandle.AddrOfPinnedObject(), null );
}
* This source code was highlighted with Source Code Highlighter .
рдФрд░ рдиреАрдЪреЗ OpenCLTemplate.DLL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
private void btnOpenCL_Click( object sender, EventArgs e)
{
// , (GPU CPU).
// . , C99 OpenCL.
string vecSum = @"
__kernel void
floatVectorSum(__global float * v1,
__global float * v2)
{
int i = get_global_id(0);
v1[i] = v1[i] * v2[i];
}" ;
// . . GPU.
//OpenCLTemplate.CLCalc.InitCL(Cloo.ComputeDeviceTypes.All)
//GPU CPU.
OpenCLTemplate.CLCalc.InitCL();
// .
List <Cloo.ComputeDevice> L = OpenCLTemplate.CLCalc.CLDevices;
//
OpenCLTemplate.CLCalc.Program.DefaultCQ = 0;
// vecSum
OpenCLTemplate.CLCalc.Program.Compile( new string [] { vecSum });
// , .
OpenCLTemplate.CLCalc.Program.Kernel VectorSum = new OpenCLTemplate.CLCalc.Program.Kernel( "floatVectorSum" );
int n = 100;
float [] v1 = new float [n], v2 = new float [n], v3 = new float [n];
// , .
for ( int i = 0; i < n; i++)
{
v1[i] = i;
v2[i] = i*2;
}
//
OpenCLTemplate.CLCalc.Program.Variable varV1 = new OpenCLTemplate.CLCalc.Program.Variable(v1);
OpenCLTemplate.CLCalc.Program.Variable varV2 = new OpenCLTemplate.CLCalc.Program.Variable(v2);
// ,
OpenCLTemplate.CLCalc.Program.Variable[] args = new OpenCLTemplate.CLCalc.Program.Variable[] { varV1, varV2 };
//
int [] workers = new int [1] { n };
// VectorSum args workers
VectorSum.Execute(args, workers);
//
varV1.ReadFromDeviceTo(v3);
}
* This source code was highlighted with Source Code Highlighter .
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реИред
рдЕрдВрддрд┐рдо рд▓рд┐рдВрдХ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рд╛рдЗрдЯ OpenCL рдкрд░ C # -
www.cmsoft.com.br рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдЕрдХреНрд╕рд░ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рдЗрдЯ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ OpenCLTemplate рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИред
рдПрдХ рдЙрдкрдпреЛрдЧреА рдЬрдЧрд╣
www.opentk.com рд╕рд╛рдЗрдЯ рд╣реИ рдЬрд╣рд╛рдБ рд╡реЗ рдмрд╣реБрдд рдЬрд▓реНрджреА cloo.dll рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВ
рдЖрдк
sourceforge.net/projects/cloo рдкрд░ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
C99- рдЖрдзрд╛рд░рд┐рдд OpenCl рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдорд╛рдирдХ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╣реИ -
www.khronos.org/openclрд▓реЗрдЦ "
рдУрдкрдирдХреНрд▓ рдХрд╛ рдкрд░рд┐рдЪрдп " рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд░рддреЗ рд╣реИрдВред