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.

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();
}
je me demande donc s'il est possible de contourner ce problème, et si oui comment?

merci beaucoup
à bientôt