#include int on_nvptx (void) { return 1; } int on_gcn (void) { return 2; } #pragma omp declare variant (on_nvptx) match(construct={target},device={arch(nvptx)}) #pragma omp declare variant (on_gcn) match(construct={target},device={arch(gcn)}) int on (void) { return 0; } int main () { int v; #pragma omp target map(from:v) v = on (); switch (v) { default: printf ("Host fallback or unknown offloading\n"); break; case 1: printf ("Offloading to NVidia PTX\n"); break; case 2: printf ("Offloading to AMD GCN\n"); break; } return 0; }