mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			124 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
| #include <stdlib.h>
 | |
| #include <stdio.h>
 | |
| 
 | |
| #define M 8
 | |
| #define N 32
 | |
| 
 | |
| #pragma acc routine vector
 | |
| void
 | |
| vector (int *a)
 | |
| {
 | |
|   int i;
 | |
| 
 | |
| #pragma acc loop vector
 | |
|   for (i = 0; i < N; i++)
 | |
|     a[i] -= a[i]; 
 | |
| }
 | |
| 
 | |
| #pragma acc routine worker
 | |
| void
 | |
| worker (int *b)
 | |
| {
 | |
|   int i, j;
 | |
| 
 | |
| #pragma acc loop worker
 | |
|   for (i = 0; i < N; i++)
 | |
|     {
 | |
| #pragma acc loop vector
 | |
|       for (j = 0; j < M; j++)
 | |
|         b[i * M + j] += b[i  * M + j]; 
 | |
|     }
 | |
| }
 | |
| 
 | |
| #pragma acc routine gang
 | |
| void
 | |
| gang (int *a)
 | |
| {
 | |
|   int i;
 | |
| 
 | |
| #pragma acc loop gang worker vector
 | |
|   for (i = 0; i < N; i++)
 | |
|     a[i] -= i; 
 | |
| }
 | |
| 
 | |
| #pragma acc routine seq
 | |
| void
 | |
| seq (int *a)
 | |
| {
 | |
|   int i;
 | |
| 
 | |
|   for (i = 0; i < N; i++)
 | |
|     a[i] += 1;
 | |
| }
 | |
| 
 | |
| int
 | |
| main(int argc, char **argv)
 | |
| {
 | |
|   int i;
 | |
|   int a[N];
 | |
|   int b[M * N];
 | |
| 
 | |
|   i = 0;
 | |
| 
 | |
|   for (i = 0; i < N; i++)
 | |
|     a[i] = 0;
 | |
| 
 | |
| #pragma acc parallel copy (a[0:N])
 | |
|   {
 | |
| #pragma acc loop seq
 | |
|     for (i = 0; i < N; i++)
 | |
|       seq (&a[0]);
 | |
|   }
 | |
| 
 | |
|   for (i = 0; i < N; i++)
 | |
|     {
 | |
|       if (a[i] != N)
 | |
| 	abort ();
 | |
|     }
 | |
| 
 | |
| #pragma acc parallel copy (a[0:N])
 | |
|   {
 | |
| #pragma acc loop seq
 | |
|     for (i = 0; i < N; i++)
 | |
|       gang (&a[0]);
 | |
|   }
 | |
| 
 | |
|   for (i = 0; i < N; i++)
 | |
|     {
 | |
|       if (a[i] != N + (N * (-1 * i)))
 | |
| 	abort ();
 | |
|     }
 | |
| 
 | |
|   for (i = 0; i < N; i++)
 | |
|     a[i] = i;
 | |
| 
 | |
| #pragma acc parallel copy (b[0:M*N])
 | |
|   {
 | |
|     worker (&b[0]);
 | |
|   }
 | |
| 
 | |
|   for (i = 0; i < N; i++)
 | |
|     {
 | |
|       if (a[i] != i)
 | |
| 	abort ();
 | |
|     }
 | |
| 
 | |
|   for (i = 0; i < N; i++)
 | |
|     a[i] = i;
 | |
| 
 | |
| #pragma acc parallel copy (a[0:N])
 | |
|   {
 | |
| #pragma acc loop
 | |
|     for (i = 0; i < N; i++)
 | |
|       vector (&a[0]);
 | |
|   }
 | |
| 
 | |
|   for (i = 0; i < N; i++)
 | |
|     {
 | |
|       if (a[i] != 0)
 | |
| 	abort ();
 | |
|     }
 | |
| 
 | |
|   return 0;
 | |
| }
 |