1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 #include <omp.h> 5 6 #define MAX 1000 7 8 void main1() 9 { 10 int i, N1, N2, step; 11 int a[MAX], b[MAX]; 12 13 N1 = rand () % 13; 14 N2 = rand () % (MAX - 51) + 50; 15 step = rand () % 7 + 1; 16 17 printf ("N1 = %d\nN2 = %d\nstep = %d\n", N1, N2, step); 18 19 for (i = N1; i <= N2; i += step) 20 a[i] = 42+ i; 21 22 /* COUNTING UP (<). Fill in array 'b' in parallel. */ 23 memset (b, 0, sizeof b); 24 #pragma omp parallel shared(a,b,N1,N2,step) private(i) 25 { 26 #pragma omp for 27 for (i = N1; i < N2; i += step) 28 b[i] = a[i]; 29 } 30 31 /* COUNTING UP (<). Check that all the cells were filled in properly. */ 32 for (i = N1; i < N2; i += step) 33 if (a[i] != b[i]) 34 abort (); 35 36 printf ("for (i = %d; i < %d; i += %d) [OK]\n", N1, N2, step); 37 38 /* COUNTING UP (<=). Fill in array 'b' in parallel. */ 39 memset (b, 0, sizeof b); 40 #pragma omp parallel shared(a,b,N1,N2,step) private(i) 41 { 42 #pragma omp for 43 for (i = N1; i <= N2; i += step) 44 b[i] = a[i]; 45 } 46 47 /* COUNTING UP (<=). Check that all the cells were filled in properly. */ 48 for (i = N1; i <= N2; i += step) 49 if (a[i] != b[i]) 50 abort (); 51 52 printf ("for (i = %d; i <= %d; i += %d) [OK]\n", N1, N2, step); 53 54 /* COUNTING DOWN (>). Fill in array 'b' in parallel. */ 55 memset (b, 0, sizeof b); 56 #pragma omp parallel shared(a,b,N1,N2,step) private(i) 57 { 58 #pragma omp for 59 for (i = N2; i > N1; i -= step) 60 b[i] = a[i]; 61 } 62 63 /* COUNTING DOWN (>). Check that all the cells were filled in properly. */ 64 for (i = N2; i > N1; i -= step) 65 if (a[i] != b[i]) 66 abort (); 67 68 printf ("for (i = %d; i > %d; i -= %d) [OK]\n", N2, N1, step); 69 70 /* COUNTING DOWN (>=). Fill in array 'b' in parallel. */ 71 memset (b, 0, sizeof b); 72 #pragma omp parallel shared(a,b,N1,N2,step) private(i) 73 { 74 #pragma omp for 75 for (i = N2; i >= N1; i -= step) 76 b[i] = a[i]; 77 } 78 79 /* COUNTING DOWN (>=). Check that all the cells were filled in properly. */ 80 for (i = N2; i >= N1; i -= step) 81 if (a[i] != b[i]) 82 abort (); 83 84 printf ("for (i = %d; i >= %d; i -= %d) [OK]\n", N2, N1, step); 85 } 86 87 int 88 main () 89 { 90 int i; 91 92 srand (0); 93 for (i = 0; i < 10; ++i) 94 main1(); 95 return 0; 96 } 97