[ was: Re: [gomp4] fix c++ reference mappings in openacc ]
On 01/21/2016 04:47 AM, Cesar Philippidis wrote:
diff --git a/libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C b/libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C new file mode 100644 index 0000000..180e86f --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C @@ -0,0 +1,109 @@ +// Ensure that a non-scalar dummy arguments which are implicitly used inside +// offloaded regions are properly mapped using present_or_copy. + +// { 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; +}
Some of these assert have assigns in them. Fixed in attached patch, committed. Thanks, - Tom
[openacc, libgomp, testsuite] Fix asserts in non-scalar-data.C 2018-04-18 Tom de Vries <t...@codesourcery.com> * testsuite/libgomp.oacc-c++/non-scalar-data.C (reference_data, main): Fix asserts. --- libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C b/libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C index f24e31e..8143533 100644 --- a/libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C +++ b/libgomp/testsuite/libgomp.oacc-c++/non-scalar-data.C @@ -69,15 +69,15 @@ reference_data (data &d, int &x) parallel_present (d, x); } - assert (d.v = x); + assert (d.v == x); x = 300; kernels_implicit (d, x); - assert (d.v = x); + assert (d.v == x); x = 400; parallel_implicit (d, x); - assert (d.v = x); + assert (d.v == x); } int @@ -99,15 +99,15 @@ main () parallel_present (d, x); } - assert (d.v = x); + assert (d.v == x); x = 300; kernels_implicit (d, x); - assert (d.v = x); + assert (d.v == x); x = 400; parallel_implicit (d, x); - assert (d.v = x); + assert (d.v == x); reference_data (d, x);