(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c/
examples-4/
target-1.c
       1  /* { dg-do run } */
       2  
       3  #include <stdlib.h>
       4  
       5  #define N 100000
       6  
       7  void init (int *a1, int *a2)
       8  {
       9    int i, s = -1;
      10    for (i = 0; i < N; i++)
      11      {
      12        a1[i] = s;
      13        a2[i] = i;
      14        s = -s;
      15      }
      16  }
      17  
      18  void check (int *a, int *b)
      19  {
      20    int i;
      21    for (i = 0; i < N; i++)
      22      if (a[i] != b[i])
      23        abort ();
      24  }
      25  
      26  void vec_mult_ref (int *p)
      27  {
      28    int i;
      29    int v1[N], v2[N];
      30  
      31    init (v1, v2);
      32  
      33    for (i = 0; i < N; i++)
      34      p[i] = v1[i] * v2[i];
      35  }
      36  
      37  void vec_mult (int *p)
      38  {
      39    int i;
      40    int v1[N], v2[N];
      41  
      42    init (v1, v2);
      43  
      44    #pragma omp target map(p[0:N])
      45      #pragma omp parallel for
      46        for (i = 0; i < N; i++)
      47  	p[i] = v1[i] * v2[i];
      48  }
      49  
      50  int main ()
      51  {
      52    int p1[N], p2[N];
      53    int v1[N], v2[N];
      54  
      55    init (v1, v2);
      56  
      57    vec_mult_ref (p1);
      58    vec_mult (p2);
      59  
      60    check (p1, p2);
      61  
      62    return 0;
      63  }