Mercurial > hg > CbC > CbC_gcc
view libgomp/testsuite/libgomp.c/examples-4/simd-2.c @ 143:76e1cf5455ef
add cbc_gc test
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 23 Dec 2018 19:24:05 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-do run { target vect_simd_clones } } */ /* { dg-additional-options "-msse2" { target sse2_runtime } } */ /* { dg-additional-options "-mavx" { target avx_runtime } } */ #define N 100 #define EPS 0.0000000000000001 #include <stdlib.h> void init(double *a, double *a_ref, double *b, int n) { int i; for ( i=0; i<N; i++ ) { a[i] = i; a_ref[i] = i; b[i] = N-i; } } #pragma omp declare simd uniform(fact) double add1(double a, double b, double fact) { double c; c = a + b + fact; return c; } #pragma omp declare simd uniform(a,b,fact) linear(i:1) double add2(double *a, double *b, int i, double fact) { double c; c = a[i] + b[i] + fact; return c; } #pragma omp declare simd uniform(fact) linear(a,b:1) double add3(double *a, double *b, double fact) { double c; c = *a + *b + fact; return c; } void work( double *a, double *b, int n ) { int i; double tmp; #pragma omp simd private(tmp) for ( i = 0; i < n; i++ ) { tmp = add1( a[i], b[i], 1.0); a[i] = add2( a, b, i, 1.0) + tmp; a[i] = add3(&a[i], &b[i], 1.0); } } void work_ref( double *a, double *b, int n ) { int i; double tmp; for ( i = 0; i < n; i++ ) { tmp = add1( a[i], b[i], 1.0); a[i] = add2( a, b, i, 1.0) + tmp; a[i] = add3(&a[i], &b[i], 1.0); } } void check (double *a, double *b) { int i; for (i = 0; i < N; i++) if (a[i] - b[i] > EPS || b[i] - a[i] > EPS) abort (); } int main () { int i; double a[N], a_ref[N], b[N]; init(a, a_ref, b, N); work(a, b, N ); work_ref(a_ref, b, N ); check(a, a_ref); return 0; }