1#include <omp.h> 2#include <stdlib.h> 3#include <string.h> 4 5int 6test1 () 7{ 8 short int buf[64], *p; 9 int i; 10 memset (buf, '\0', sizeof (buf)); 11#pragma omp parallel for 12 for (p = &buf[10]; p < &buf[54]; p++) 13 *p = 5; 14 for (i = 0; i < 64; i++) 15 if (buf[i] != 5 * (i >= 10 && i < 54)) 16 abort (); 17 memset (buf, '\0', sizeof (buf)); 18#pragma omp parallel for 19 for (p = &buf[3]; p <= &buf[63]; p += 2) 20 p[-2] = 6; 21 for (i = 0; i < 64; i++) 22 if (buf[i] != 6 * ((i & 1) && i <= 61)) 23 abort (); 24 memset (buf, '\0', sizeof (buf)); 25#pragma omp parallel for 26 for (p = &buf[16]; p < &buf[51]; p = 4 + p) 27 p[2] = 7; 28 for (i = 0; i < 64; i++) 29 if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53)) 30 abort (); 31 memset (buf, '\0', sizeof (buf)); 32#pragma omp parallel for 33 for (p = &buf[16]; p <= &buf[40]; p = p + 4ULL) 34 p[2] = -7; 35 for (i = 0; i < 64; i++) 36 if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42)) 37 abort (); 38 memset (buf, '\0', sizeof (buf)); 39#pragma omp parallel for 40 for (p = &buf[53]; p > &buf[9]; --p) 41 *p = 5; 42 for (i = 0; i < 64; i++) 43 if (buf[i] != 5 * (i >= 10 && i < 54)) 44 abort (); 45 memset (buf, '\0', sizeof (buf)); 46#pragma omp parallel for 47 for (p = &buf[63]; p >= &buf[3]; p -= 2) 48 p[-2] = 6; 49 for (i = 0; i < 64; i++) 50 if (buf[i] != 6 * ((i & 1) && i <= 61)) 51 abort (); 52 memset (buf, '\0', sizeof (buf)); 53#pragma omp parallel for 54 for (p = &buf[48]; p > &buf[15]; p = -4 + p) 55 p[2] = 7; 56 for (i = 0; i < 64; i++) 57 if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53)) 58 abort (); 59 memset (buf, '\0', sizeof (buf)); 60#pragma omp parallel for 61 for (p = &buf[40]; p >= &buf[16]; p = p - 4ULL) 62 p[2] = -7; 63 for (i = 0; i < 64; i++) 64 if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42)) 65 abort (); 66 return 0; 67} 68 69int 70test2 () 71{ 72 int buf[64], *p; 73 int i; 74 memset (buf, '\0', sizeof (buf)); 75#pragma omp parallel for schedule (static, 3) 76 for (p = &buf[10]; p < &buf[54]; p++) 77 *p = 5; 78 for (i = 0; i < 64; i++) 79 if (buf[i] != 5 * (i >= 10 && i < 54)) 80 abort (); 81 memset (buf, '\0', sizeof (buf)); 82#pragma omp parallel for schedule (static, 3) 83 for (p = &buf[3]; p <= &buf[63]; p += 2) 84 p[-2] = 6; 85 for (i = 0; i < 64; i++) 86 if (buf[i] != 6 * ((i & 1) && i <= 61)) 87 abort (); 88 memset (buf, '\0', sizeof (buf)); 89#pragma omp parallel for schedule (static, 3) 90 for (p = &buf[16]; p < &buf[51]; p = 4 + p) 91 p[2] = 7; 92 for (i = 0; i < 64; i++) 93 if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53)) 94 abort (); 95 memset (buf, '\0', sizeof (buf)); 96#pragma omp parallel for schedule (static, 3) 97 for (p = &buf[16]; p <= &buf[40]; p = p + 4ULL) 98 p[2] = -7; 99 for (i = 0; i < 64; i++) 100 if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42)) 101 abort (); 102 memset (buf, '\0', sizeof (buf)); 103#pragma omp parallel for schedule (static, 3) 104 for (p = &buf[53]; p > &buf[9]; --p) 105 *p = 5; 106 for (i = 0; i < 64; i++) 107 if (buf[i] != 5 * (i >= 10 && i < 54)) 108 abort (); 109 memset (buf, '\0', sizeof (buf)); 110#pragma omp parallel for schedule (static, 3) 111 for (p = &buf[63]; p >= &buf[3]; p -= 2) 112 p[-2] = 6; 113 for (i = 0; i < 64; i++) 114 if (buf[i] != 6 * ((i & 1) && i <= 61)) 115 abort (); 116 memset (buf, '\0', sizeof (buf)); 117#pragma omp parallel for schedule (static, 3) 118 for (p = &buf[48]; p > &buf[15]; p = -4 + p) 119 p[2] = 7; 120 for (i = 0; i < 64; i++) 121 if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53)) 122 abort (); 123 memset (buf, '\0', sizeof (buf)); 124#pragma omp parallel for schedule (static, 3) 125 for (p = &buf[40]; p >= &buf[16]; p = p - 4ULL) 126 p[2] = -7; 127 for (i = 0; i < 64; i++) 128 if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42)) 129 abort (); 130 return 0; 131} 132 133int 134test3 () 135{ 136 int buf[64], *p; 137 int i; 138 memset (buf, '\0', sizeof (buf)); 139#pragma omp parallel for schedule (dynamic, 3) 140 for (p = &buf[10]; p < &buf[54]; p++) 141 *p = 5; 142 for (i = 0; i < 64; i++) 143 if (buf[i] != 5 * (i >= 10 && i < 54)) 144 abort (); 145 memset (buf, '\0', sizeof (buf)); 146#pragma omp parallel for schedule (dynamic, 3) 147 for (p = &buf[3]; p <= &buf[63]; p += 2) 148 p[-2] = 6; 149 for (i = 0; i < 64; i++) 150 if (buf[i] != 6 * ((i & 1) && i <= 61)) 151 abort (); 152 memset (buf, '\0', sizeof (buf)); 153#pragma omp parallel for schedule (dynamic, 3) 154 for (p = &buf[16]; p < &buf[51]; p = 4 + p) 155 p[2] = 7; 156 for (i = 0; i < 64; i++) 157 if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53)) 158 abort (); 159 memset (buf, '\0', sizeof (buf)); 160#pragma omp parallel for schedule (dynamic, 3) 161 for (p = &buf[16]; p <= &buf[40]; p = p + 4ULL) 162 p[2] = -7; 163 for (i = 0; i < 64; i++) 164 if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42)) 165 abort (); 166 memset (buf, '\0', sizeof (buf)); 167#pragma omp parallel for schedule (dynamic, 3) 168 for (p = &buf[53]; p > &buf[9]; --p) 169 *p = 5; 170 for (i = 0; i < 64; i++) 171 if (buf[i] != 5 * (i >= 10 && i < 54)) 172 abort (); 173 memset (buf, '\0', sizeof (buf)); 174#pragma omp parallel for schedule (dynamic, 3) 175 for (p = &buf[63]; p >= &buf[3]; p -= 2) 176 p[-2] = 6; 177 for (i = 0; i < 64; i++) 178 if (buf[i] != 6 * ((i & 1) && i <= 61)) 179 abort (); 180 memset (buf, '\0', sizeof (buf)); 181#pragma omp parallel for schedule (dynamic, 3) 182 for (p = &buf[48]; p > &buf[15]; p = -4 + p) 183 p[2] = 7; 184 for (i = 0; i < 64; i++) 185 if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53)) 186 abort (); 187 memset (buf, '\0', sizeof (buf)); 188#pragma omp parallel for schedule (dynamic, 3) 189 for (p = &buf[40]; p >= &buf[16]; p = p - 4ULL) 190 p[2] = -7; 191 for (i = 0; i < 64; i++) 192 if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42)) 193 abort (); 194 return 0; 195} 196 197int 198test4 () 199{ 200 int buf[64], *p; 201 int i; 202 memset (buf, '\0', sizeof (buf)); 203#pragma omp parallel for schedule (runtime) 204 for (p = &buf[10]; p < &buf[54]; p++) 205 *p = 5; 206 for (i = 0; i < 64; i++) 207 if (buf[i] != 5 * (i >= 10 && i < 54)) 208 abort (); 209 memset (buf, '\0', sizeof (buf)); 210#pragma omp parallel for schedule (runtime) 211 for (p = &buf[3]; p <= &buf[63]; p += 2) 212 p[-2] = 6; 213 for (i = 0; i < 64; i++) 214 if (buf[i] != 6 * ((i & 1) && i <= 61)) 215 abort (); 216 memset (buf, '\0', sizeof (buf)); 217#pragma omp parallel for schedule (runtime) 218 for (p = &buf[16]; p < &buf[51]; p = 4 + p) 219 p[2] = 7; 220 for (i = 0; i < 64; i++) 221 if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53)) 222 abort (); 223 memset (buf, '\0', sizeof (buf)); 224#pragma omp parallel for schedule (runtime) 225 for (p = &buf[16]; p <= &buf[40]; p = p + 4ULL) 226 p[2] = -7; 227 for (i = 0; i < 64; i++) 228 if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42)) 229 abort (); 230 memset (buf, '\0', sizeof (buf)); 231#pragma omp parallel for schedule (runtime) 232 for (p = &buf[53]; p > &buf[9]; --p) 233 *p = 5; 234 for (i = 0; i < 64; i++) 235 if (buf[i] != 5 * (i >= 10 && i < 54)) 236 abort (); 237 memset (buf, '\0', sizeof (buf)); 238#pragma omp parallel for schedule (runtime) 239 for (p = &buf[63]; p >= &buf[3]; p -= 2) 240 p[-2] = 6; 241 for (i = 0; i < 64; i++) 242 if (buf[i] != 6 * ((i & 1) && i <= 61)) 243 abort (); 244 memset (buf, '\0', sizeof (buf)); 245#pragma omp parallel for schedule (runtime) 246 for (p = &buf[48]; p > &buf[15]; p = -4 + p) 247 p[2] = 7; 248 for (i = 0; i < 64; i++) 249 if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53)) 250 abort (); 251 memset (buf, '\0', sizeof (buf)); 252#pragma omp parallel for schedule (runtime) 253 for (p = &buf[40]; p >= &buf[16]; p = p - 4ULL) 254 p[2] = -7; 255 for (i = 0; i < 64; i++) 256 if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42)) 257 abort (); 258 return 0; 259} 260 261int 262main () 263{ 264 test1 (); 265 test2 (); 266 test3 (); 267 omp_set_schedule (omp_sched_static, 0); 268 test4 (); 269 omp_set_schedule (omp_sched_static, 3); 270 test4 (); 271 omp_set_schedule (omp_sched_dynamic, 5); 272 test4 (); 273 omp_set_schedule (omp_sched_guided, 2); 274 test4 (); 275 return 0; 276} 277