HPC Magazine - OpenACC 2.0 - The new data management features
Listing 2: Dynamic offloading in OpenACC v2.0.
void doit( size_t n, struct Value * data[n] ) { for (size_t i=0;i<n;++i) { struct Value * data = data[i] ; #pragma acc enter data copyin(data[0:1]) } for (size_t i=0;i<n;++i) { for (size_t j=i+1;j<n;++j) { struct Value * data1 = data[i] ; struct Value * data2 = data[j] ; #pragma acc parallel present( data1[0:1], data2[0:1] ) { work_on_a_pair( data1 , data2 ) ; } } } for (size_t i=0;i<n;++i) { Value * data = data[i] ; #pragma acc enter data copyout(data[0:1]) } }