HPC Magazine Février 2014 - Maîtriser OpenACC 2.0 (partie 2)

Listing 6 - Définition en C d’une routine OpenACC externe.


// ---- in file sum.c

#pragma acc routine worker 
void sum(int n , float *A)
{
	int i ;
	float s = 0.0f ; 
	#pragma acc worker reduction(+:s) 
	for (i=0;i<n;i++) 
	{
		s = s + A[i] ;
	}
	return s ;
}

//--- in file sum.h

#pragma acc routine worker 
void sum(int n , float *A) ;

//--- in file main.c

float X[100][200] , Y[100] ;
//...
#pragma acc gang 
for( j=0; j<100; j++ ) {
  Y[j] = sum( 200 , X[j] ) ;
}
//...