HPC Magazine Février 2014 - Maîtriser OpenACC 2.0 (partie 2)
Listing 3 - Implémentation non correcte d’une fonction de compactage de vecteur creux avec OpenACC.
#define NB 1000000 int pack( const float X[NB] , float Y[1000] ) { int i ; n = 0 ; #pragma acc kernels copy(n) copyin(X[0:NB]) copyout(Y[0:1000]) { #pragma acc loop independent for (i=0;i<NB;++) { if ( X[i] != 0.0f ) { if ( n < 1000 ) { Y[n] = X[i] ; } /* bug: The n values above may actually be different * than the ones below. */ #pragma acc atomic update n = n + 1 ; } } } return n ; }