1/* complex reductions. */ 2 3#define vl 32 4 5int 6main(void) 7{ 8 const int n = 1000; 9 int i; 10 __complex__ double result, array[n]; 11 int lresult; 12 13 /* '+' reductions. */ 14#pragma acc parallel vector_length (vl) 15#pragma acc loop reduction (+:result) 16 for (i = 0; i < n; i++) 17 result += array[i]; 18 19 /* Needs support for complex multiplication. */ 20 21// /* '*' reductions. */ 22// #pragma acc parallel vector_length (vl) 23// #pragma acc loop reduction (*:result) 24// for (i = 0; i < n; i++) 25// result *= array[i]; 26// 27// /* 'max' reductions. */ 28// #pragma acc parallel vector_length (vl) 29// #pragma acc loop reduction (+:result) 30// for (i = 0; i < n; i++) 31// result = result > array[i] ? result : array[i]; 32// 33// /* 'min' reductions. */ 34// #pragma acc parallel vector_length (vl) 35// #pragma acc loop reduction (+:result) 36// for (i = 0; i < n; i++) 37// result = result < array[i] ? result : array[i]; 38 39 /* '&&' reductions. */ 40#pragma acc parallel vector_length (vl) 41#pragma acc loop reduction (&&:lresult) 42 for (i = 0; i < n; i++) 43 lresult = lresult && (__real__(result) > __real__(array[i])); 44 45 /* '||' reductions. */ 46#pragma acc parallel vector_length (vl) 47#pragma acc loop reduction (||:lresult) 48 for (i = 0; i < n; i++) 49 lresult = lresult || (__real__(result) > __real__(array[i])); 50 51 return 0; 52} 53