Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
// Ensure that a non-scalar dummy arguments which are implicitly used inside // offloaded regions are properly mapped using present_or_copy semantics. // { dg-do run } #include <cassert> const int n = 100; struct data { int v; }; void kernels_present (data &d, int &x) { #pragma acc kernels present (d, x) default (none) { d.v = x; } } void parallel_present (data &d, int &x) { #pragma acc parallel present (d, x) default (none) { d.v = x; } } void kernels_implicit (data &d, int &x) { #pragma acc kernels { d.v = x; } } void parallel_implicit (data &d, int &x) { #pragma acc parallel { d.v = x; } } void reference_data (data &d, int &x) { #pragma acc data copy(d, x) { kernels_present (d, x); #pragma acc update host(d) assert (d.v == x); x = 200; #pragma acc update device(x) parallel_present (d, x); } assert (d.v == x); x = 300; kernels_implicit (d, x); assert (d.v == x); x = 400; parallel_implicit (d, x); assert (d.v == x); } int main () { data d; int x = 100; #pragma acc data copy(d, x) { kernels_present (d, x); #pragma acc update host(d) assert (d.v == x); x = 200; #pragma acc update device(x) parallel_present (d, x); } assert (d.v == x); x = 300; kernels_implicit (d, x); assert (d.v == x); x = 400; parallel_implicit (d, x); assert (d.v == x); reference_data (d, x); return 0; }