1  #ifdef __cplusplus
       2  extern "C" {
       3  #endif
       4  int omp_get_thread_num (void);
       5  #ifdef __cplusplus
       6  }
       7  #endif
       8  
       9  void
      10  f0 (int *a)
      11  {
      12    int i;
      13    #pragma omp loop bind(teams) order(concurrent)
      14    for (i = 0; i < 64; i++)
      15      a[i] = i;
      16  }
      17  
      18  void
      19  f1 (int *a)
      20  {
      21    int i;
      22    #pragma omp teams
      23    {
      24      #pragma omp loop
      25      for (i = 0; i < 64; i++)
      26        a[i] = i;
      27    }
      28    #pragma omp teams
      29    {
      30      #pragma omp loop bind(teams)
      31      for (i = 0; i < 64; i++)
      32        a[i] = i;
      33    }
      34    #pragma omp teams
      35    {
      36      #pragma omp loop bind(parallel)
      37      for (i = 0; i < 64; i++)
      38        a[i] = i;
      39    }
      40    #pragma omp teams
      41    {
      42      #pragma omp loop lastprivate (i) bind(thread)
      43      for (i = 0; i < 64; i++)
      44        a[i] = i;
      45    }
      46  }
      47  
      48  void
      49  f2 (int *a)
      50  {
      51    int i;
      52    #pragma omp loop bind(parallel) order(concurrent)
      53    for (i = 0; i < 64; i++)
      54      a[i] = i;
      55    #pragma omp parallel
      56    {
      57      #pragma omp loop private (i)
      58      for (i = 0; i < 64; i++)
      59        a[i] = i;
      60    }
      61    #pragma omp parallel
      62    {
      63      #pragma omp loop lastprivate (i) bind(parallel)
      64      for (i = 0; i < 64; i++)
      65        a[i] = i;
      66    }
      67    #pragma omp parallel
      68    {
      69      #pragma omp loop bind(thread)
      70      for (i = 0; i < 64; i++)
      71        a[i] = i;
      72    }
      73    #pragma omp taskgroup
      74    {
      75      #pragma omp loop bind(parallel)
      76      for (i = 0; i < 64; i++)
      77        a[i] = i;
      78    }
      79    #pragma omp teams
      80    {
      81      int j;
      82      #pragma omp distribute
      83      for (j = 0; j < 64; ++j)
      84        {
      85  	#pragma omp loop bind(parallel)
      86  	for (i = 0; i < 64; i++)
      87  	  a[64 * j + i] = i;
      88        }
      89    }
      90    #pragma omp target
      91    {
      92      #pragma omp loop bind(parallel)
      93      for (i = 0; i < 64; i++)
      94        a[i] = i;
      95    }
      96  }
      97  
      98  void
      99  f3 (int *a)
     100  {
     101    int i, j;
     102    #pragma omp loop order ( concurrent )bind(thread)
     103    for (i = 0; i < 64; i++)
     104      a[i] = i;
     105    #pragma omp parallel num_threads (4)
     106    {
     107      int j = omp_get_thread_num ();
     108      #pragma omp loop private (i) bind(thread)
     109      for (i = 0; i < 64; i++)
     110        a[j * 64 + i] = i;
     111    }
     112    #pragma omp critical
     113    {
     114      #pragma omp loop lastprivate (i)
     115      for (i = 0; i < 64; i++)
     116        a[i] = i;
     117    }
     118    #pragma omp critical
     119    {
     120      #pragma omp loop bind(thread)
     121      for (i = 0; i < 64; i++)
     122        a[i] = i;
     123    }
     124    #pragma omp master
     125    {
     126      #pragma omp loop private (i)
     127      for (i = 0; i < 64; i++)
     128        a[i] = i;
     129    }
     130    #pragma omp master
     131    {
     132      #pragma omp loop bind(thread)
     133      for (i = 0; i < 64; i++)
     134        a[i] = i;
     135    }
     136    #pragma omp sections
     137    {
     138      #pragma omp loop private (i)
     139      for (i = 0; i < 64; i++)
     140        a[i] = i;
     141    }
     142    #pragma omp sections
     143    {
     144      #pragma omp loop bind(thread) lastprivate(i)
     145      for (i = 0; i < 64; i++)
     146        a[i] = i;
     147    }
     148    #pragma omp single
     149    {
     150      #pragma omp loop private (i)
     151      for (i = 0; i < 64; i++)
     152        a[i] = i;
     153    }
     154    #pragma omp single
     155    {
     156      #pragma omp loop bind(thread)
     157      for (i = 0; i < 64; i++)
     158        a[i] = i;
     159    }
     160    #pragma omp task
     161    {
     162      #pragma omp loop private (i)
     163      for (i = 0; i < 64; i++)
     164        a[i] = i;
     165    }
     166    #pragma omp task
     167    {
     168      #pragma omp loop bind(thread)
     169      for (i = 0; i < 64; i++)
     170        a[i] = i;
     171    }
     172    #pragma omp taskgroup
     173    {
     174      #pragma omp loop private (i)
     175      for (i = 0; i < 64; i++)
     176        a[i] = i;
     177    }
     178    #pragma omp taskgroup
     179    {
     180      #pragma omp loop bind(thread)
     181      for (i = 0; i < 64; i++)
     182        a[i] = i;
     183    }
     184    #pragma omp teams
     185    {
     186      #pragma omp distribute
     187      for (j = 0; j < 64; ++j)
     188        {
     189  	#pragma omp loop
     190  	for (i = 0; i < 64; i++)
     191  	  a[64 * j + i] = i;
     192  	#pragma omp loop bind(thread)
     193  	for (i = 0; i < 64; i++)
     194  	  a[64 * j + i] = i;
     195        }
     196    }
     197    #pragma omp for
     198    for (j = 0; j < 64; ++j)
     199      {
     200        #pragma omp loop
     201        for (i = 0; i < 64; i++)
     202  	a[64 * j + i] = i;
     203        #pragma omp loop bind(thread)
     204        for (i = 0; i < 64; i++)
     205  	a[64 * j + i] = i;
     206      }
     207    #pragma omp parallel
     208    #pragma omp loop
     209    for (j = 0; j < 64; ++j)
     210      {
     211        #pragma omp loop
     212        for (i = 0; i < 64; i++)
     213  	a[64 * j + i] = i;
     214        #pragma omp loop bind(thread)
     215        for (i = 0; i < 64; i++)
     216  	a[64 * j + i] = i;
     217      }
     218    #pragma omp loop bind(thread)
     219    for (j = 0; j < 64; ++j)
     220      {
     221        #pragma omp loop
     222        for (i = 0; i < 64; i++)
     223  	a[64 * j + i] = i;
     224        #pragma omp loop bind(thread)
     225        for (i = 0; i < 64; i++)
     226  	a[64 * j + i] = i;
     227      }
     228    #pragma omp loop bind(parallel)
     229    for (j = 0; j < 64; ++j)
     230      {
     231        #pragma omp loop
     232        for (i = 0; i < 64; i++)
     233  	a[64 * j + i] = i;
     234        #pragma omp loop bind(thread)
     235        for (i = 0; i < 64; i++)
     236  	a[64 * j + i] = i;
     237      }
     238    #pragma omp for ordered
     239    for (j = 0; j < 64; ++j)
     240      {
     241        #pragma omp ordered
     242        #pragma omp loop
     243        for (i = 0; i < 64; i++)
     244  	a[64 * j + i] = i;
     245        #pragma omp ordered threads
     246        #pragma omp loop bind(thread)
     247        for (i = 0; i < 64; i++)
     248  	a[64 * j + i] = i;
     249      }
     250    #pragma omp simd
     251    for (j = 0; j < 64; ++j)
     252      {
     253        #pragma omp loop
     254        for (i = 0; i < 64; i++)
     255  	a[64 * j + i] = i;
     256        #pragma omp loop bind(thread)
     257        for (i = 0; i < 64; i++)
     258  	a[64 * j + i] = i;
     259      }
     260    #pragma omp taskloop
     261    for (j = 0; j < 64; ++j)
     262      {
     263        #pragma omp loop
     264        for (i = 0; i < 64; i++)
     265  	a[64 * j + i] = i;
     266        #pragma omp loop bind(thread)
     267        for (i = 0; i < 64; i++)
     268  	a[64 * j + i] = i;
     269      }
     270    #pragma omp target
     271    {
     272      #pragma omp loop
     273      for (i = 0; i < 64; i++)
     274        a[i] = i;
     275      #pragma omp loop bind(thread)
     276      for (i = 0; i < 64; i++)
     277        a[i] = i;
     278    }
     279  }
     280  
     281  void
     282  f4 (int *a)
     283  {
     284    int i;
     285    #pragma omp ordered
     286    {
     287      #pragma omp loop private (i)
     288      for (i = 0; i < 64; i++)
     289        a[i] = i;
     290      #pragma omp loop bind(thread)
     291      for (i = 0; i < 64; i++)
     292        a[i] = i;
     293    }
     294  }