On Thu, Jan 28, 2016 at 12:36:19 +0100, Thomas Schwinge wrote: > I made an attempt to capture the recent discussion (plus my own > ideas/understanding) in this new section: > <https://gcc.gnu.org/wiki/Offloading#Partial_Offloading>. Please > change/extend, as required.
Thanks for summarizing this. I'm not very happy how -foffload=disable works in GCC 6, here is a testcase: int main () { int x = 10; #pragma omp target data map (from: x) #pragma omp target map (alloc: x) x = 20; if (x != 10 && x != 20) __builtin_abort (); } On the system with non-shared accelerator it will abort, because "#pragma omp target data" behaves like offloading is enabled, but "#pragma omp target" runs on the host. As the result, at the end of the *target data* region, it tries to receive x from target and receives 0, or crashes. We can forbid -foffload=disable option, but I think it's very useful, e.g. for comparing performance of host vs. accelerator using the same compiler, etc. Or if the system contains 2 different accelerators, someone might want to compile only for the first, but libgomp will load 2 plugins, and the program will crash (instead of doing fallback) if it will try to use the second device. So, maybe we still need something like this patch? https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01033.html -- Ilya