1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /* { dg-do run } */
- /* { dg-additional-options "-msse2" { target sse2_runtime } } */
- /* { dg-additional-options "-mavx" { target avx_runtime } } */
- #include <stdlib.h>
- #include <math.h>
- #define EPS 0.005
- int P[1000];
- float A[1000];
- float do_work(float *arr)
- {
- float pri;
- #pragma omp simd lastprivate(pri)
- for (int i = 0; i < 999; ++i)
- {
- int j = P[i];
- pri = 0.5f;
- if (j % 2 == 0)
- {
- pri = A[j+1] + arr[i];
- }
- A[j] = pri * 1.5f;
- pri = pri + A[j];
- }
- return pri;
- }
- int main(void)
- {
- float pri, arr[1000], diff;
- for (int i = 0; i < 1000; ++i)
- {
- P[i] = i;
- A[i] = i * 1.5f;
- arr[i] = i * 1.8f;
- }
- pri = do_work(&arr[0]);
- diff = pri - 8237.25;
- if (diff > EPS || -diff > EPS)
- abort ();
- return 0;
- }
|