https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103384
Bug ID: 103384
Summary: [OpenMP] declare variant with device={kind(nohost)}
does not use GPU, kind(gpu) works
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Keywords: openmp, wrong-code
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
CC: jakub at gcc dot gnu.org
Target Milestone: ---
Created attachment 51861
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51861&action=edit
Testcase, fails as is (if omp_get_num_devices() > 0) and '{kind(nohost)}' -
works when later is changed to "match(device={kind(gpu)})"
Observed with
https://github.com/SOLLVE/sollve_vv/blob/master/tests/5.0/declare_target/test_declare_target_device_type_nohost.c
For that testcase with nvptx offloading, with
#pragma omp declare variant(target_function) match(device={kind(gpu)})
target_function() is called and the code is executed on the GPU
(value a[0] = 5 (host function 'update') + 1 (device function
'target_function') == 6).
However, using kind(nohost), i.e.
#pragma omp declare variant(target_function) match(device={kind(nohost)})
will *not* execute 'target_function' (thus: a[0] == 10 = 2*5 (host function
'update').
Expected: both {kind(nohost)} and {kind(gpu)} are executed on the GPU.