J'utilise Cuda c voila mon problem :
pour le tableau arr :
chaque thread doit modifier 2 elements du tableau
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 } };
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
Voila l'appel
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]; }
Le code s’exécute mais thread 0 affiche les elements :
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; }
et thread1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part tab[] = { 0, 1, 12, 13, 0, 1, 2, 3 };
J'ai besoin de savoir comment le thread0 utilise 2 element du tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tab[8] = { 0, 1, 22, 33, 0, 1, 12, 13 };
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 } }
Partager