Równoległy tensor Kroneckera na procesorach graficznych wykorzystujących CUDA
Pracuję w parallelise [ten plik] [1] na GPU używając [plik PTX z matlab parallel.gpu.CUDAkernel] [2]. Mój problem z [kron tensor product] [3] jest następujący. Mój kod powinien pomnożyć dwa wektorykron(a,b)
mnożąc każdy element pierwszego wektoraa=<32x1>
przez wszystkie elementy drugiego wektorab=<1x32>
a wielkość wyjściowego wektora będziek<32x32>=a.*b
. Próbowałem napisać to w C ++ i zadziałało, ponieważ chodzi mi tylko o zsumowanie wszystkich elementów tablicy 2d. Myślałem, że mogę to ułatwić jako tablicę 1D, ponieważm=sum(sum(kron(a,b)))
to kod, nad którym pracuję
for(i=0;i<32;i++)
for(j=0;j<32;j++)
k[i*32+j]=a[i]*b[j]
To miało mieća[i]
element pomnożyć przez eachelement wb
i myślę, że pójdę32
bloki z każdym blokiem mają32
wątki i kod powinien być
__global__ void myKrom(int* c,int* a, int*b) {
int i=blockDim.x*blockIdx.x+threadIdx.x;
while(i<32) {
c[i]=a[blockIdx.x]+b[blockDim.x*blockIdx.x+threadIdx.x];
}
To powinno sprawić, że sztuczka stanie sięblockIdx.x
jest zewnętrzną pętlą, ale tak się nie stało. Czy ktokolwiek mógłby mi powiedzieć, gdzie, mogę poprosić o równoległy sposób, aby wykonać sumę równoległą.