
ATI рд╕реНрдЯреНрд░реАрдо SDK рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ AMD рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг (APP) SDK рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ OpenCL рдиреЗ рдмреНрд░реВрдХ + рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ GPGPU рдХрд╛ рд╕реНрдерд╛рди рд▓реЗ рд▓рд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдЯреАрдЖрдИ рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдПрдХ рдЕрдиреНрдп рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ: рдПрдПрдордбреА рдХрдВрдкреНрдпреВрдЯ рдПрдмреНрд╕реНрдЯреНрд░реЗрдХреНрд╢рди рд▓реЗрдпрд░ (рд╕реАрдПрдПрд▓) / рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд▓реИрдВрдЧреНрд╡реЗрдЬ (рдЖрдИрдПрд▓)ред
CAL рддрдХрдиреАрдХ рдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ GPU рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ CPU рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЬрдмрдХрд┐
IL рддрдХрдиреАрдХ рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреЛ рд╕реАрдзреЗ GPU рдкрд░ рдЪрд▓реЗрдЧрд╛ред
рдпрд╣ рд▓реЗрдЦ OpenCL рдкрд░
IL рддрдХрдиреАрдХ, рдЗрд╕рдХреЗ рджрд╛рдпрд░реЗ, рд╕реАрдорд╛рдУрдВ рдФрд░ рд▓рд╛рднреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдЪрдп
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ Nvidia CUDA SDK рд╕реЗ рдХреБрдЫ рддреБрд▓рдирд╛ рдХреА рдЧрдИ рд╣реИ:
- рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛:
- рдПрдирд╡реАрдбрд┐рдпрд╛: рдХреНрдпреВрдбрд╛ рд╕реА ++ рдПрдХреНрд╕рдЯреЗрдВрд╢рди
- рдПрдПрдордбреА: рдУрдкрдирд╕реАрдПрд▓ 1.1 рдпрд╛ рдХрдВрдкреНрдпреВрдЯ рдПрдмреНрд╕реНрдЯреНрд░рдХреНрд╢рди рд▓реЗрдпрд░ (CAL)
- рдирд┐рдореНрди рд╕реНрддрд░ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ (рдЫрджреНрдо рдХреЛрдбрдХ *):
- рдПрдирд╡реАрдбрд┐рдпрд╛: рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рдЧрд╛ рдирд┐рд╖реНрдкрд╛рджрди (PTX)
- AMD: рдордзреНрдпрд╡рд░реНрддреА рднрд╛рд╖рд╛ (IL)
- "рддреЛрддреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб" (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЫрд╛рдВрдЯреЗ рдЧрдП рд╣реИрд╢ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХрд╛ рдЕрдиреБрдкрд╛рдд "рдЕрдиреБрдкрд╛рдд рдореВрд▓реНрдп:"
- рдПрдирд╡реАрдбрд┐рдпрд╛: рдПрдХреНрд╕
- рдПрдПрдордбреА: рд╕реАрдПрдПрд▓ / рдЖрдИрдПрд▓ рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп ~ 2x
* рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ рднрд╛рд╖рд╛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдпрд╣ рдЕрднреА рднреА рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди GPU рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдЖрдк рдРрд╕рд╛ рдкреНрд░рджрд░реНрд╢рди рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
AMD GPU рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдлреАрдЪрд░реНрд╕
рдпрджрд┐ рдЖрдк рдПрдирд╡реАрдбрд┐рдпрд╛
рдкреАрдЯреАрдПрдХреНрд╕ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдПрдПрдордбреА
рдЖрдИрдПрд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдирд╡реАрдбрд┐рдпрд╛
рдкреАрдЯреАрдПрдХреНрд╕ рдореЗрдВ
рдСрдкрд░реЗрдВрдбрд░реНрд╕ рдПрдХрд▓-рдШрдЯрдХ рд╡реИрдХреНрдЯрд░ (рдпрд╛рдиреА, рд╕рд░рд▓ рдПрди-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░) рд╣реИрдВ, рдЬрдмрдХрд┐ рдПрдПрдордбреА
рдЖрдИрдПрд▓ рдмреИрдВрдбреНрд╕ рдПрди-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ 4-рдШрдЯрдХ рд╡реИрдХреНрдЯрд░ рд╣реИрдВред ред рдпрджрд┐ рд╣рдо рджреЛрдиреЛрдВ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЧреБрдгрд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рддреЛ рдпрд╣ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛:
# Nvidia PTX mul.u32 %r0, %r1, %r2 # AMD IL umul r0.xyzw, r1.xyzw, r2.xyzw
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ (рд▓рдЧрднрдЧ рдПрдХ рдореЗрдВ) рдСрдкрд░реЗрд╢рди рдореЗрдВ, рдПрдПрдордбреА рдЬреАрдкреАрдпреВ 4 рдПрди-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдирд╡реАрдбрд┐рдпрд╛ рдЬреАрдкреАрдпреВ рдХреЗрд╡рд▓ рдПрдХ рдПрди-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ (рдПрдХ рдЬреАрдкреАрдпреВ рд╕реНрдЯреНрд░реАрдо рдХреЗ рднреАрддрд░ рдЕрд░реНрде) рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди OpenCL рдЖрдкрдХреЛ рдорд▓реНрдЯреАрдХреЛрдореНрдкреЛрдиреЗрдВрдЯ рд╡реИрдХреНрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ! рдлрд┐рд░ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ рдФрд░ рдпрд╣
рдЖрдИрдПрд▓ рдЖрдЦрд┐рд░ рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИ?
OpenCL рдХреЗ рд╡рд┐рдкрд░реАрдд
рдФрд░ рд╕рднреА рдЕрдВрддрд░ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдХрд┐ AMD APP SDK рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдпрд╛ рддреЛ рдХрдард┐рди рдереЗ рдпрд╛ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрд╕рдВрднрд╡ рдереЗ рдЬреЛ рдХрд┐ OpenCL рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб рдХреЛ AMD
IL рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реЛред рдЗрд╕рд▓рд┐рдП OpenCL рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкрд░
рд╕реАрдорд╛рдПрдВ :
- OpenCL 1.0 рд▓рдЧрднрдЧ Radeon HD 4000 рд╕реАрд░реАрдЬ (рдмреАрдЯрд╛ рд▓реЗрд╡рд▓ рд╕рдкреЛрд░реНрдЯ) рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╣реИ (рдЫрд╡рд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдмрдирд╛рд╡рдЯ рдореЗрдореЛрд░реА)
- OpenCL 1.1 рдХреЛ Radeon HD 5000 рд╕реАрд░реАрдЬ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- OpenCL 1.2 рдХреЛ Radeon HD 7000 рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ SDK рдЕрднреА рддрдХ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ AMD
IL рдЖрдкрдХреЛ GPGPU рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП Radeon HD 3000 рд╢реНрд░реГрдВрдЦрд▓рд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Radeon HD 2000 рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдХреБрдЫ рдХрд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ! (рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпреЗ R600, RV610, RV630 рдФрд░ RV670 рдЪрд┐рдкреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд GPU рд╣реИрдВ)
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА GPU рдХреЛ Radeg HD HD 5000 рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде Evergreen GPUs рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ (рдпрд╣ рдПрдХ Radeon HD 5700 рдЪрд┐рдк рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдЗрди рдХрд╛рд░реНрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрдЪрд╛рд▓рди рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
рдПрдПрдордбреА
рдЖрдИрдПрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛
рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдПрдПрдордбреА рдЬреАрдкреА 4 рдШрдЯрдХ рд╡реИрдХреНрдЯрд░ рдПрди-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдПрди = 32 (64-рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЖрдЧреЗ)ред рдпрд╣ рдореЗрдореЛрд░реА рдкрд░ рдПрдХ рдкреНрд░рдореБрдЦ рд╕реАрдорд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ: рдореЗрдореЛрд░реА рдХреЛ рдХреЗрд╡рд▓ 16 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдХрдИ рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореЗрдореЛрд░реА рд╕реЗ рдЦрд░рдмреВрдЬреЗ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдпреЗ 16 рдмрд╛рдЗрдЯреНрд╕ рдлрд┐рд░ рд╕реЗ рдиреНрдпреВрдирддрдо рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреНрд╖рдорддрд╛ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреА рдореЗрдореЛрд░реА рдореЗрдВ 1 рдмрд╛рдЗрдЯ рдХреЗ 4 рдШрдЯрдХ рд╡реИрдХреНрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (char4), 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ 4 рдШрдЯрдХ рд╡реИрдХреНрдЯрд░ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ (int4), рдкрд░рд┐рдгрд╛рдо рдПрдХ рд╣реЛрдЧрд╛ - рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдСрдкрд░реЗрд╢рди рд▓реЛрдб рд╣реЛрдЧрд╛ 16 рдмрд╛рдЗрдЯреНрд╕ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдирд╡реАрдбрд┐рдпрд╛ рдЬреАрдкреАрдпреВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдПрдордбреА рдЬреАрдкреАрдпреВ рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдореЗрдореЛрд░реА рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдмрд╣реБрдд рдзреАрдореА рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рджрд░), рдЗрд╕рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдореЗрдореЛрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВред рд░рдЬрд┐рд╕реНрдЯрд░ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдФрд░ рдЕрдВрдд рдореЗрдВ: рдлрд┐рд░ рд╕реЗ, рдПрдирд╡реАрдбрд┐рдпрд╛ рдЬреАрдкреАрдпреВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЗрд╡рд▓ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдореЗрдореЛрд░реА рд╣реИ рдЬреЛ рд░реАрдб-рд░рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ "рдЬреА []" рд╣реЛрдЧрд╛), рдФрд░ рдмрдирд╛рд╡рдЯ рдореЗрдореЛрд░реА рдХреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрд░реЛрдд рд╣реИрдВ (рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ "0 "," i1 "рд╣реЛрдЧрд╛) ", рдЖрджрд┐) рдФрд░ рдирд┐рд░рдВрддрд░ рдореЗрдореЛрд░реА (рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣" cb0 "," cb1 ", рдЖрджрд┐) рд╣реЛрдЧрд╛, рдЬреЛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред
рдирд┐рд░рдВрддрд░ рдореЗрдореЛрд░реА рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреИрд╢рд┐рдВрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрдм рд╕рднреА рдЬреАрдкреАрдпреВ рдереНрд░реЗрдбреНрд╕ рдПрдХ рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ (рдпрд╣ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред
рдмрдирд╛рд╡рдЯ рдореЗрдореЛрд░реА рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреИрд╢рд┐рдВрдЧ (8 рдХреЗрдмреА рд╕реЗ, рдпрджрд┐ рдореЗрд░реА рдореЗрдореЛрд░реА рдореБрдЭреЗ рдкреНрд░рддрд┐ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдорд┐рд▓рддреА рд╣реИ) рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЬрдм рдЖрдк рдмрдирд╛рд╡рдЯ рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╛ рддреЛ рд╕реАрдорд╛ рддрддреНрд╡ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд▓реВрдк рдХреЛ рдкрд╣рд▓реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рдордиреНрд╡рдп рдХреЛ рдореЙрдбреБрд▓реЛ рдХреЛ рдмрдирд╛рд╡рдЯ рдХреА рдЪреМрдбрд╝рд╛рдИ / рд▓рдВрдмрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдФрд░ рдЕрдм рдордЬрд╝реЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП:
AMD IL рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕рдВрд░рдЪрдирд╛
рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рдирд┐рдордп рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреА рдПрдХ рдЫреЛрдЯреА рд╡реНрдпрд╛рдЦреНрдпрд╛ред
рд╡реЗрдХреНрдЯрд░ рдШрдЯрдХ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдШрдЯрдХ рдХрд╛ рдирд╛рдо рдпрд╛ рдЪрд┐рд╣реНрди "_" рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЪрд╛рд░ рдШрдЯрдХреЛрдВ рдХрд╛
рдХреЛрдИ рднреА рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ "0" рдпрд╛ "1"ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдЗрдирдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдШрдЯрдХ рдпрд╛ рдПрдХ рдирд┐рд░рдВрддрд░ рдЖрдЙрдЯрдкреБрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╕рдВрдЧрдд рдШрдЯрдХ рдкрд░ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдБ рдХрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛:
# r0.x = r1.z # r0.y = r1.w # r0.w = r1.y mov r0.xy_w, r1.zwyy # r0.y = 1 # r0.z = 0 mov r0._yz_, r1.x100
shaders
AMD GPU рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╢реЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрдкреНрдпреВрдЯрд░ shader (Compute Shader, CS) рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ shader (Pixel Shader, PS) рджреЛрдиреЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, CS рдХреЛ рдХреЗрд╡рд▓ Radeon HD 4000 Series рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдирдХреА рдЧрддрд┐ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИред
рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ GPU рдкрд░ рдПрдХ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реЙрдиреНрдЪ рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ: рдмреНрд▓реЙрдХ рдХреА рд╕рдВрдЦреНрдпрд╛, рдкреНрд░рддрд┐ рдмреНрд▓реЙрдХ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред GPU рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд░ (8 рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ) рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХ рд▓реЗрддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдкреНрд░рддрд┐ рдмреНрд▓реЙрдХ рдзрд╛рдЧреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ (рддрд╛рдирд╛, 32 рдХрд╛ рдЧреБрдгрдХ) рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рдирд╛ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╕рд╛рде рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ:
<multiprocessors_count> * <stream_processors_per_multiprocessor_count> * <warp_size>
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рддреЗрдЬ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐, рдПрдХ рддрд╛рдирд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдзрд╛рдЧреЗ рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рд╢рд╛рдЦрд╛ рдХреЗред рдлрд┐рд░ рдпрд╣ рдСрдкрд░реЗрд╢рди рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡реИрдХреНрдпреВрдо рдореЗрдВ рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ рдШреЛрдбрд╝реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдмреНрд▓реЙрдХ (32 рдмрд┐рдЯреНрд╕), рд╡реИрд╢реНрд╡рд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (32 рдмрд┐рдЯреНрд╕) рдХреЗ рднреАрддрд░ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдирд┐рд░реНрджреЗрд╢ рдореЗрдореЛрд░реА рдФрд░ рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рд╕реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ (64 рдмрд┐рдЯреНрд╕) рдкрдврд╝рддрд╛ рд╣реИ, рдкрдврд╝рддрд╛ рд╣реИред рдмрдирд╛рд╡рдЯ (128 рдмрд┐рдЯ) рд╕реЗ рдПрдХ рддрддреНрд╡ред рд╡рд╣ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдореЛрд░реА рдореЗрдВ рдпрд╣ рд╕рдм рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЛ 256 рдмрд┐рдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдиреЛрдЯ: рдмрдирд╛рд╡рдЯ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред
рдкрд┐рдХреНрд╕реЗрд▓ shader
il_ps_2_0 ; (cb0): ; cb0[0].x - ; cb0[0].y - ; cb0[0].zw - dcl_cb cb0[1] ; (i0) ; - ( ), ( float 0 1) ; ( uint) dcl_resource_id(0)_type(2d,unnorm)_fmtx(uint)_fmty(uint)_fmtz(uint)_fmtw(uint) ; dcl_input_position_interp(linear_noperspective) vWinCoord0.xy__ ; (g[]) ; , dcl_literal l0, 0xFFFFFFFF, 0xABCDEF01, 0x3F000000, 2 ; ; r0.x - x i0 (float) ( ) ; r0.y - y i0 (float) ( ) ftoi r0.xyzw, vWinCoord0.xyxy ; r0.z - (uint) umad r0.__z_, r0.wwww, cb0[0].yyyy, r0.zzzz ; ftoi r1.x___, vWinCoord0.xxxx mov r1._y__, r0.zzzz mov r1.__z_, cb[0].xxxx mov r1.___w, l0.yyyy ; g[] umul r0.__z_, r0.zzzz, l0.wwww ; mov g[r0.z+0].xyzw, r1.xyzw ; i0 ; float 0.5 itof r0.xy__, r0.xyyy add r0.xy__, r0.xyyy, l0.zzzz sample_resource(0)_sampler(0)_aoffimmi(0,0,0) r1, r0 ; sample_resource(0) - i0 ; _sampler(0) - sampler'a #0 ; _aoffimmi(0,0,0) - x, y, z ; , _aoffimmi(1,0,0); - _aoffimmi(0,1,0) ; mov g[r0.z+1].xyzw, r1.xyzw ; endmain ; end
рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╢реЗрдбрд░
рд╕рднреА рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдкреНрд░рд╡рд╛рд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рд╣реЛрдВрдЧреЗ, рдмрд╛рдХреА рд╕рднреА рд╕рдорд╛рди рд╣реИрдВред
il_cs_2_0 dcl_num_thread_per_group 64 ; (cb0): ; cb0[0].x - ; cb0[0].yzw - dcl_cb cb0[1] ; (i0) ; - ( ), ( float 0 1) ; ( uint) dcl_resource_id(0)_type(2d,unnorm)_fmtx(uint)_fmty(uint)_fmtz(uint)_fmtw(uint) ; (g[]) ; , dcl_literal l0, 0xFFFFFFFF, 0xABCDEF01, 0x3F000000, 2 ; mov r0._y__, vThreadGrpIDFlat.xxxx ; mov r0.x___, vTidInGrpFlat.xxxx ; mov r0.__z_, vAbsTidFlat.xxxx ; mov r1.x___, vTidInGrpFlat.xxxx mov r1._y__, vAbsTidFlat.xxxx mov r1.__z_, cb[0].xxxx mov r1.___w, l0.yyyy ; g[] umul r0.__z_, r0.zzzz, l0.wwww ; mov g[r0.z+0].xyzw, r1.xyzw ; i0 ; float 0.5 itof r0.xy__, r0.xyyy add r0.xy__, r0.xyyy, l0.zzzz sample_resource(0)_sampler(0)_aoffimmi(0,0,0) r1, r0 ; sample_resource(0) - i0 ; _sampler(0) - sampler'a #0 ; _aoffimmi(0,0,0) - x, y, z ; , _aoffimmi(1,0,0); - _aoffimmi(0,1,0) ; mov g[r0.z+1].xyzw, r1.xyzw ; endmain ; end
рдЫрд╛рдпрд╛ рдХрд╛ рдЕрдВрддрд░
рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдбреЛрдВ рдкрд░ рд╕рдорд░реНрдерди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдкреНрд░рддрд┐ рдмреНрд▓реЙрдХ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рд╣реИред PS рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рди рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, CS рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рди рдХреЛ рдХреЛрдб рдореЗрдВ рдЫрд┐рджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реАрдПрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд╛рд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ GPU рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП AMD
IL рдкрд░ рд╕рд░рд▓ рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВред рдЕрдВрдд рдореЗрдВ, рдХрд╛рдо рдХреА рдЧрддрд┐ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж:
- рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХ рдЕрдЬреАрдмреЛрдЧрд░реАрдм рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВ (рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕реНрд╡рддрдВрддреНрд░рдХрд░рдг, рд╕реНрд╡рддрдВрддреНрд░ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЕрдиреБрдорддрд┐)ред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЫрджреНрдо рдХреЛрдбрд╛рдВрддрд░рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдЧрд╛ред рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рд╕реЛрдЪреЗрдВред
- рдХрд╛рд░реНрдб рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдбрд╛рдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рднреА 4 рдШрдЯрдХреЛрдВ рдХреЗ рд╕рднреА 32 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред
- рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реИрд╢ рдЧрдгрдирд╛) рдкрд░ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдХрднреА-рдХрднреА r0.x ___ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХрднреА-рдХрднреА r0.xy ___, рдФрд░ рдХрднреА-рдХрднреА r0.xyzwред
- рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдПрдордбреА рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд┐рд╕реА рднреА <warp_size> рдХреЗ рдХрдИ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ GPU рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рдХреГрддрд┐ рдореЗрдВ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ <warp_size> = 32 рдпрд╛ 64 рджреЗрдЦрд╛, рдФрд░ рдореЗрд░реЗ GPU рдиреЗ рдХреЗрд╡рд▓ <warp_size> рдХреЗ рдмрд░рд╛рдмрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Radeon HD 4650, рдЬрдм рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ 32 рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ (рдФрд░ рддрдХрдиреАрдХреА рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕ рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП <warp_size> = 32), рдореЗрд░реЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдЧрд▓рдд рдбреЗрдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ 64 рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред рдирд┐рд╖реНрдХрд░реНрд╖: рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдХреЗрд╡рд▓ 64 рдереНрд░реЗрдбреНрд╕ рдкреНрд░рддрд┐ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдПрдВ (рдФрд░ рдмреНрд▓реЙрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд╡рд┐рдз рд╣реЛ рд╕рдХрддреА рд╣реИ)ред
- рд╕рджрд╛рдмрд╣рд╛рд░ GPU рдХрдИ рд╢рд╛рдВрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ: рдЪрдХреНрд░реАрдп рдкрд╛рд░реА, рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдЭрдВрдбреЗ рдХрд╛ рд╕рдорд░реНрдерди, 64-рдмрд┐рдЯ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди (2 рдШрдЯрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВ)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрд╡рд░рдЧреНрд░реАрди рд╕реЗ рдЫреЛрдЯреЗ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдЬреАрдкреАрдпреВ рдЗрди рд╕рднреА рдмрдиреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭрд╕реЗ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЙрди рдкрд░ 64-рдмрд┐рдЯ рдСрдкрд░реЗрд╢рди рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ, рддреЛ рдореИрдВ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рдбреЗрдЯрд╛ рдХреЛ рдХрд╛рд░реНрдб рдореЗрдВ рдХреИрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЙрд╕рд╕реЗ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдПрдПрдордбреА рдХрдВрдкреНрдпреВрдЯ рдПрдмреНрд╕реНрдЯреНрд░реЗрдХреНрд╢рди рд▓реЗрдпрд░ (CAL) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ