(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
async-data-1-1.c
       1  /* Verify back to back 'async' operations, one data mapping.
       2  
       3     Due to one data mapping, this isn't using the libgomp 'cbuf' buffering.
       4  */
       5  
       6  
       7  #include <stdlib.h>
       8  
       9  
      10  #define N 128
      11  
      12  
      13  static void
      14  t1 (void)
      15  {
      16    unsigned int *a;
      17    int i;
      18    int nbytes;
      19  
      20    nbytes = N * sizeof (unsigned int);
      21  
      22    a = (unsigned int *) malloc (nbytes);
      23  
      24    for (i = 0; i < N; i++)
      25      a[i] = 3;
      26  
      27  #pragma acc parallel async copy (a[0:N])
      28    for (int ii = 0; ii < N; ii++)
      29      a[ii] += 1;
      30  
      31  #pragma acc parallel async copy (a[0:N])
      32    for (int ii = 0; ii < N; ii++)
      33      a[ii] += 1;
      34  
      35  #pragma acc wait
      36  
      37    for (i = 0; i < N; i++)
      38      if (a[i] != 5)
      39        abort ();
      40  }
      41  
      42  
      43  static void
      44  t2 (void)
      45  {
      46    unsigned int *a;
      47    int i;
      48    int nbytes;
      49  
      50    nbytes = N * sizeof (unsigned int);
      51  
      52    a = (unsigned int *) malloc (nbytes);
      53  
      54  #pragma acc data copyin (a[0:N])
      55    {
      56      for (i = 0; i < N; i++)
      57        a[i] = 3;
      58  
      59  #pragma acc update async device (a[0:N])
      60  #pragma acc parallel async present (a[0:N])
      61    for (int ii = 0; ii < N; ii++)
      62      a[ii] += 1;
      63  #pragma acc update async host (a[0:N])
      64  
      65  #pragma acc update async device (a[0:N])
      66  #pragma acc parallel async present (a[0:N])
      67    for (int ii = 0; ii < N; ii++)
      68      a[ii] += 1;
      69  #pragma acc update async host (a[0:N])
      70  
      71  #pragma acc wait
      72    }
      73  
      74    for (i = 0; i < N; i++)
      75      if (a[i] != 5)
      76        abort ();
      77  }
      78  
      79  
      80  int
      81  main (void)
      82  {
      83    t1 ();
      84  
      85    t2 ();
      86  
      87    return 0;
      88  }