Que fait #pragma dérouler exactement? Cela affecte-t-il le nombre de threads?

Je suis nouveau sur CUDA, et je ne peut pas comprendre le déroulement de la boucle. J'ai écrit un bout de code pour comprendre la technique

__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;
}

Ci-dessus est ma fonction noyau. Dans main je l'appelle comme ci-dessous

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;
}

Signifie-t-il, j'ai size*size=10000 threads en cours d'exécution pour exécuter le programme? Sont 100 d'entre eux créés lorsque la boucle est déroulé?

source d'informationauteur Magzhan Abdibayev