HPC Magazine - OpenACC 2.0 - The new data management features

Listing 1: Inefficient pair processing in OpenACC v1.0.


void doit( size_t n, struct Value * data[n] ) 
{
  for (size_t i=0;i<n;++i) 
  {       
    struct Value * data1 = data[i] ;
    #pragma acc data copy( data1[0:1] ) 
    { 
      for (size_t j=i+1;j<n;++j) 
      {
        struct Value * data2 = data[i] ;
        #pragma acc parallel copy( data2[0:1] ) 
        {
          work_on_a_pair( data1 , data2 ) ;  
        }
      } 
    }
  } 
}