bonjour à tous,
j'ai pour projet de simuler un système dynamique en Cuda or, il arrive parfois qu'une variable doit être modifié en plusieurs threads simultanément ce qui cause des accès concurrent à la mémoire et des valeurs erroné .
voici un code illustrant mon problème où le tableau P_ contient des valeurs qui peuvent être redondante.
je me demande donc s'il est possible de contourner ce problème, et si oui comment?
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 void __global__ kernel(float x_[], float y_[], unsigned short P_[] ) { int tid; int a; short i; unsigned char o=0; tid = threadIdx.x+blockDim.x*blockIdx.x; while(o<ITER) { syncthreads(); a = P_[ tid ]; x_[ a ] += y[tid] ; } o++; } syncthreads(); }
merci beaucoup
à bientôt
Partager