Я новичок в CUDA, и я не могу разобраться в разворачивании цикла. Я написал фрагмент кода, чтобы понять технику
__global__ void kernel(float *b, int size)
{
int tid = blockDim.x * blockIdx.x + threadIdx.x;
#pragma unroll
for(int i=0;i<size;i++)
b[i]=i;
}
Выше моя функция ядра. В main
я называю это ниже
int main()
{
float * a; //host array
float * b; //device array
int size=100;
a=(float*)malloc(size*sizeof(float));
cudaMalloc((float**)&b,size);
cudaMemcpy(b, a, size, cudaMemcpyHostToDevice);
kernel<<<1,size>>>(b,size); //size=100
cudaMemcpy(a, b, size, cudaMemcpyDeviceToHost);
for(int i=0;i<size;i++)
cout<<a[i]<<"\t";
_getch();
return 0;
}
Означает ли это, что у меня есть size
* size
= 10000 потоков, выполняющихся для выполнения программы? 100 из них созданы, когда цикл развернут?