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 ) ; } } } } }