J'utilise Cuda c voila mon problem :
pour le tableau arr :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
arr[N][N] = {
    { 0, 1, 12, 13 },
    { 0, 1,  2,  3 },
    { 0, 1, 22, 33 },
    { 0, 1, 12, 13 }
};
chaque thread doit modifier 2 elements du tableau
par exemple

thread 0: { 0, 1, 12, 13 }, { 0, 1, 2, 3 }
thread 1: { 0, 1, 22, 33 }, { 0, 1, 12, 13 }

voila mon kernel

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
 
__global__ void kernel(int *A)
{
    int tab[N*N];
    int tid = threadIdx.x + blockIdx.x * blockDim.x;
 
    for(k = (tid * N), j = 0; j < N, k < (tid + 1) * N * 2; j++, k++) 
        tab[j] = A[k];
}
Voila l'appel

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
int main()
{
 
    int *arr_device;
    int arr[N][N] = {
                     { 0, 1, 12, 13 },
                     { 0, 1,  2,  3 },
                     { 0, 1, 22, 33 },
                     { 0, 1, 12, 13 }
    };
 
    const size_t arr_size = sizeof(int) *N*N;
 
    cudaMalloc((void **)&arr_device, arr_size); 
 
    cudaMemcpy(arr_device, arr, arr_size, cudaMemcpyHostToDevice); 
 
    crossover<<<1,2>>>(arr_device);
 
    cudaFree(arr_device);
 
    return 0;
}
Le code s’exécute mais thread 0 affiche les elements :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 tab[] = { 0, 1, 12, 13, 0, 1, 2, 3 };
et thread1 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
tab[8] = { 0, 1, 22, 33, 0, 1, 12, 13 };
J'ai besoin de savoir comment le thread0 utilise 2 element du tableau :
thread 0 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
tab[][] = {
    { 0, 1, 12, 13 },
    { 0, 1,  2,  3 }
}