From 76bdcde706105820f2195b1c2dc82a97a820212b Mon Sep 17 00:00:00 2001 From: Florian Ballenegger Date: Thu, 16 Jul 2020 15:47:56 +0200 Subject: [PATCH] disabled omp simd pragmas, rely on auto-vectorization (sligthly more efficient) --- src/spicelib/devices/bsim3v32/b3v32ldsimd.c | 39 +++++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/spicelib/devices/bsim3v32/b3v32ldsimd.c b/src/spicelib/devices/bsim3v32/b3v32ldsimd.c index 1256cdedd..4ccd70c59 100644 --- a/src/spicelib/devices/bsim3v32/b3v32ldsimd.c +++ b/src/spicelib/devices/bsim3v32/b3v32ldsimd.c @@ -70,7 +70,7 @@ static inline Vec4d vec4_blend(Vec4d fa, Vec4d tr, Vec4m mask) static inline Vec4d vec4_blend(Vec4d fa, Vec4d tr, Vec4m mask) { Vec4d r; - #pragma omp simd + //#pragma omp simd for(int i=0;i<4;i++) r[i] = (mask[i]==0 ? fa[i] : tr[i]); return r; @@ -80,7 +80,7 @@ static inline Vec4d vec4_blend(Vec4d fa, Vec4d tr, Vec4m mask) static inline Vec4d vec4_exp(Vec4d x) { Vec4d r; - #pragma omp simd + //#pragma omp simd for(int i=0;i<4;i++) r[i] = exp(x[i]); return r; @@ -89,7 +89,7 @@ static inline Vec4d vec4_exp(Vec4d x) static inline Vec4d vec4_log(Vec4d x) { Vec4d r; - #pragma omp simd + //#pragma omp simd for(int i=0;i<4;i++) r[i] = log(x[i]); return r; @@ -98,7 +98,7 @@ static inline Vec4d vec4_log(Vec4d x) static inline Vec4d vec4_max(Vec4d x, Vec4d y) { Vec4d r; - #pragma omp simd + //#pragma omp simd for(int i=0;i<4;i++) r[i] = MAX(x[i],y[i]); return r; @@ -107,7 +107,7 @@ static inline Vec4d vec4_max(Vec4d x, Vec4d y) static inline Vec4d vec4_sqrt(Vec4d x) { Vec4d r; - #pragma omp simd + //#pragma omp simd for(int i=0;i<4;i++) r[i] = sqrt(x[i]); return r; @@ -116,7 +116,7 @@ static inline Vec4d vec4_sqrt(Vec4d x) static inline Vec4d vec4_fabs(Vec4d x) { Vec4d r; - #pragma omp simd + //#pragma omp simd for(int i=0;i<4;i++) r[i] = fabs(x[i]); return r; @@ -135,10 +135,27 @@ static inline Vec4d vec4_pow(Vec4d x, double p) /* useful vectorized functions */ static inline Vec4d vec4_SIMDTOVECTOR(double val) { - return (Vec4d) {val,val,val,val}; + Vec4d r; + //#pragma omp simd + for(int i=0;i<4;i++) + r[i] = val; + return r; } static inline Vec4m vec4_SIMDTOVECTORMASK(int val) +{ + Vec4m r; + //#pragma omp simd + for(int i=0;i<4;i++) + r[i] = val; + return r; +} +static inline Vec4d uuvec4_SIMDTOVECTOR(double val) +{ + return (Vec4d) {val,val,val,val}; +} + +static inline Vec4m uuvec4_SIMDTOVECTORMASK(int val) { return (Vec4m) {val,val,val,val}; } @@ -151,7 +168,7 @@ static inline Vec4d SIMDLOADDATA(int idx, double data[7][4]) static inline Vec4d vec4_BSIM3v32_StateAccess(double* cktstate, Vec4m stateindexes) { Vec4d r; - #pragma omp simd + //#pragma omp simd for(int i=0;i<4;i++) r[i] = cktstate[stateindexes[i]]; return r; @@ -168,7 +185,7 @@ static inline Vec4d vec4_BSIM3v32_StateAccess(double* cktstate, Vec4m stateindex static inline void vec4_BSIM3v32_StateStore(double* cktstate, Vec4m stateindexes, Vec4d values) { /*if(0) vec4_CheckCollisions(stateindexes,"SateStore");*/ - #pragma omp simd + //#pragma omp simd for(int idx=0;idx<4;idx++) { cktstate[stateindexes[idx]] = values[idx]; @@ -178,7 +195,7 @@ static inline void vec4_BSIM3v32_StateStore(double* cktstate, Vec4m stateindexes static inline void vec4_BSIM3v32_StateAdd(double* cktstate, Vec4m stateindexes, Vec4d values) { /*if(0) vec4_CheckCollisions(stateindexes,"StateAdd");*/ - #pragma omp simd + //#pragma omp simd for(int idx=0;idx<4;idx++) { cktstate[stateindexes[idx]] += values[idx]; @@ -188,7 +205,7 @@ static inline void vec4_BSIM3v32_StateAdd(double* cktstate, Vec4m stateindexes, static inline void vec4_BSIM3v32_StateSub(double* cktstate, Vec4m stateindexes, Vec4d values) { /*if(0) vec4_CheckCollisions(stateindexes,"StateSub");*/ - #pragma omp simd + //#pragma omp simd for(int idx=0;idx<4;idx++) { cktstate[stateindexes[idx]] -= values[idx];