1  #include <stdio.h>
       2  
       3  int
       4  on_nvptx (void)
       5  {
       6    return 1;
       7  }
       8  
       9  int
      10  on_gcn (void)
      11  {
      12    return 2;
      13  }
      14  
      15  #pragma omp declare variant (on_nvptx) match(construct={target},device={arch(nvptx)})
      16  #pragma omp declare variant (on_gcn) match(construct={target},device={arch(gcn)})
      17  int
      18  on (void)
      19  {
      20    return 0;
      21  }
      22  
      23  int
      24  main ()
      25  {
      26    int v;
      27    #pragma omp target map(from:v)
      28    v = on ();
      29    switch (v)
      30      {
      31      default:
      32        printf ("Host fallback or unknown offloading\n");
      33        break;
      34      case 1:
      35        printf ("Offloading to NVidia PTX\n");
      36        break;
      37      case 2:
      38        printf ("Offloading to AMD GCN\n");
      39        break;
      40      }
      41    return 0;
      42  }