NVIDIA CUDA рдореЗрдВ рд╕рд╛рдЭрд╛ рдмреИрдВрдХ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЛ рд╕рдордЭрдирд╛

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



рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рд╕рдВрдШрд░реНрд╖ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ?





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



рдкреНрд░рд╕рд╛рд░рдг рддрдВрддреНрд░




рд╕рдВрд╕реНрдХрд░рдг 1.x рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рдПрдХ рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдХрдИ рдзрд╛рдЧреЗ рдПрдХ рд╣реА рдмреИрдВрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рд╣реА рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдпрд╣ рдЕрдиреБрд░реЛрдз рдПрдХрд▓ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рд╕рд╛рд░рдг рдПрдХреНрд╕реЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рд╕рдВрд╕реНрдХрд░рдг 2.x рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рдРрд╕реЗ рдХрдИ рдЕрдиреБрд░реЛрдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рд╢рдмреНрдж рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ)ред



рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 2.0 рдкрд░ рдкрд╣реБрдВрдЪ рд╕реБрд╡рд┐рдзрд╛рдПрдБ




64 рдмрд┐рдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде, рдПрдХ рдмреИрдВрдХ рд╕рдВрдШрд░реНрд╖ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдХрд┐рд╕реА рднреА рддрд╛рдирд╛ рдХреЗ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╕реЗ 2 рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдзрд╛рд░рд╛рдПрдБ рдПрдХ рд╣реА рдмреИрдВрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрддреЗ рддрдХ рдкрд╣реБрдБрдЪрддреА рд╣реИрдВред



128-рдмрд┐рдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде, рдЖрдорддреМрд░ рдкрд░ рджреВрд╕рд░реА рдбрд┐рдЧреНрд░реА рдХреЗ рдмреИрдВрдХреЛрдВ рдХрд╛ рдЯрдХрд░рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред



32 рд╕реЗ рдЕрдзрд┐рдХ рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╡реЗрд╢ 32, 64 рдФрд░ 128 рдмрд┐рдЯреНрд╕ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред



рдмреИрдВрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ




рдореЗрдореЛрд░реА рдХреЛ рдмреИрдВрдХреЛрдВ рдХреЗ рдмреАрдЪ рдЗрд╕ рддрд░рд╣ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ 32 рдмрд┐рдЯ рд╢рдмреНрдж рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдХрд░рдг рд╕рдВрд╕реНрдХрд░рдг 2.0 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 32 рдмреИрдВрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг 1.3 рдФрд░ рдирд┐рдореНрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 16 рдмреИрдВрдХреЛрдВ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдмреИрдВрдХ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрди рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:



рдмреИрдВрдХ рдирдВрдмрд░ = (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдкрддрд╛ / 4)% 32 - рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг 2.0 рдХреЗ рд▓рд┐рдП

рдмреИрдВрдХ рдирдВрдмрд░ = (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдкрддрд╛ / 4)% 16 - рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг 1.x рдХреЗ рд▓рд┐рдП



рд╕рдВрдШрд░реНрд╖ рдПрдХреНрд╕реЗрд╕ рдЙрджрд╛рд╣рд░рдг





рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг 1.x



1.8 рдФрд░ 16 рдмрд┐рдЯ рдПрдХреНрд╕реЗрд╕



__shared__ char shmem8[32];

char data = shmem8[threadIdx.x];









рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдПрдХ рд╣реА рдмреИрдВрдХ рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдПрдХреНрд╕реЗрд╕ рдкрд░ рд╡рд┐рд░реЛрдз рдХрд░реЗрдВрдЧреЗ



рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ (рдкреИрдбрд┐рдВрдЧ) рдЬреЛрдбрд╝рдХрд░ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдпреЛрдЬрдирд╛ рдХреЛ рдмрджрд▓рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



__shared__ char shmem8[32*4];

char data = shmem8[threadIdx.x*4];









16-рдмрд┐рдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП:



__shared__ short shmem16[32];

short data = shmem16[threadIdx.x];









рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд╣рд▓реЗ 2 рд╢реЙрд░реНрдЯреНрд╕ рдПрдХ рд╣реА рдмреИрдВрдХ рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ 2 рдкреНрд░рд╡рд╛рд╣ рдПрдХреНрд╕реЗрд╕ рдкрд░ рд╕рдВрдШрд░реНрд╖ рдХрд░реЗрдВрдЧреЗ



рд╕рдорд╕реНрдпрд╛ рдХреЛ 8-рдмрд┐рдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рдорд╛рди рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



__shared__ short shmem16[32*2];

short data = shmem16[threadIdx.x*2];









2. 32-рдмрд┐рдЯ рдПрдХреНрд╕реЗрд╕



рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП, рдмреИрдВрдХ рд╕рдВрдШрд░реНрд╖ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХреНрд╕реЗрд╕ рд╕реНрдХреАрдо рд╣реЛ рд╕рдХрддреА рд╣реИ:



__shared__ int shmem32[64];

int data1 = shmem32[threadIdx.x*2];

int data2 = shmem32[threadIdx.x*2+1];









рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 0 рдФрд░ 8 рд╡реАрдВ рдзрд╛рд░рд╛ рдХреНрд░рдорд╢рдГ 0 рдФрд░ 1 рдмреИрдВрдХреЛрдВ рд╕реЗ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ 2 рдбрд┐рдЧреНрд░реА рдХрд╛ рд╕рдВрдШрд░реНрд╖ рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



__shared__ int shmem32_1[32];

__shared__ int shmem32_2[32];

int data1 = shmem32_1[threadIdx.x];

int data2 = shmem32_2[threadIdx.x];









рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг 2.0



рдкреНрд░рд╕рд╛рд░рдг рдПрдХреНрд╕реЗрд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ 8 рдФрд░ 16 рдмрд┐рдЯ рдПрдХреНрд╕реЗрд╕ рдпреЛрдЬрдирд╛рдПрдВ рдмреИрдВрдХ рдЯрдХрд░рд╛рд╡ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддреА рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдШрд░реНрд╖ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:



__shared__ int shared[64];

int data = shared[threadIdx.x*s];







рдпрджрд┐ рд╡рд┐рд░реЛрдз рд╕рдорд╛рдкреНтАНрдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рднреАред рдпрджрд┐ рдПрд╕ рд╡рд┐рд╖рдо рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред



рдмреИрдВрдХ рд╕рдВрдШрд░реНрд╖ рдЯреНрд░реИрдХрд┐рдВрдЧ





NVIDIA рдмреИрдирдХ рдкрд░реАрдХреНрд╖рдХ




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



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:



__shared__ int shared[64];

int data = CUT_BANK_CHECKER(shared, threadIdx.x*s);









CUDA рдкреНрд░реЛрдлрд╛рдЗрд▓рд░




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



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





рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдмреИрдВрдХ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рддрдХрдиреАрдХ рдПрдХреНрд╕реЗрд╕ рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЙрдирдХреА рдШрдЯрдирд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг (рдЬреЛ рдХрднреА рднреА рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)ред



All Articles