use libmvec only if AVX is available
This commit is contained in:
parent
34ebb23b9d
commit
eb76eebf17
|
|
@ -1226,10 +1226,11 @@ if test "x$enable_modsimd" = xyes; then
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
have_intrinsics=no
|
have_intrinsics=no
|
||||||
])
|
])
|
||||||
|
have_libmvec=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# test if we can use libmvec or equivalent
|
# test if we can use libmvec or equivalent
|
||||||
if test "x$enable_modsimd" = xyes; then
|
if test "x$have_intrinsics" = xyes; then
|
||||||
AC_MSG_CHECKING([vector math library])
|
AC_MSG_CHECKING([vector math library])
|
||||||
AC_TRY_COMPILE([
|
AC_TRY_COMPILE([
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
|
||||||
|
|
@ -329,7 +329,7 @@ static inline int vec4_SIMDCOUNT(Vec4m mask) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* some debug utils functions */
|
/* some debug utils functions */
|
||||||
void vec4_printd(const char* msg, const char* name, Vec4d vecd)
|
void vec4_printd(const char* msg, const char* name, Vec4d vecd)
|
||||||
{
|
{
|
||||||
|
|
@ -352,3 +352,4 @@ void vec4_CheckCollisions(Vec4m stateindexes, const char* msg)
|
||||||
raise(SIGINT);
|
raise(SIGINT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,18 @@
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
/* disable omp simd for GCC, as it slow down a bit */
|
||||||
|
#if !defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER)
|
||||||
|
#define USE_OMPSIMD
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static inline Vec8d vec8_blend(Vec8d fa, Vec8d tr, Vec8m mask)
|
static inline Vec8d vec8_blend(Vec8d fa, Vec8d tr, Vec8m mask)
|
||||||
{
|
{
|
||||||
Vec8d r;
|
Vec8d r;
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int i=0;i<8;i++)
|
for(int i=0;i<8;i++)
|
||||||
r[i] = (mask[i]==0 ? fa[i] : tr[i]);
|
r[i] = (mask[i]==0 ? fa[i] : tr[i]);
|
||||||
return r;
|
return r;
|
||||||
|
|
@ -40,7 +48,9 @@ static inline Vec8d vec8_blend(Vec8d fa, Vec8d tr, Vec8m mask)
|
||||||
static inline Vec8d vec8_exp(Vec8d x)
|
static inline Vec8d vec8_exp(Vec8d x)
|
||||||
{
|
{
|
||||||
Vec8d r;
|
Vec8d r;
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int i=0;i<8;i++)
|
for(int i=0;i<8;i++)
|
||||||
r[i] = exp(x[i]);
|
r[i] = exp(x[i]);
|
||||||
return r;
|
return r;
|
||||||
|
|
@ -49,7 +59,9 @@ static inline Vec8d vec8_exp(Vec8d x)
|
||||||
static inline Vec8d vec8_log(Vec8d x)
|
static inline Vec8d vec8_log(Vec8d x)
|
||||||
{
|
{
|
||||||
Vec8d r;
|
Vec8d r;
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int i=0;i<8;i++)
|
for(int i=0;i<8;i++)
|
||||||
r[i] = log(x[i]);
|
r[i] = log(x[i]);
|
||||||
return r;
|
return r;
|
||||||
|
|
@ -58,7 +70,9 @@ static inline Vec8d vec8_log(Vec8d x)
|
||||||
static inline Vec8d vec8_max(Vec8d x, Vec8d y)
|
static inline Vec8d vec8_max(Vec8d x, Vec8d y)
|
||||||
{
|
{
|
||||||
Vec8d r;
|
Vec8d r;
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int i=0;i<8;i++)
|
for(int i=0;i<8;i++)
|
||||||
r[i] = MAX(x[i],y[i]);
|
r[i] = MAX(x[i],y[i]);
|
||||||
return r;
|
return r;
|
||||||
|
|
@ -67,7 +81,9 @@ static inline Vec8d vec8_max(Vec8d x, Vec8d y)
|
||||||
static inline Vec8d vec8_sqrt(Vec8d x)
|
static inline Vec8d vec8_sqrt(Vec8d x)
|
||||||
{
|
{
|
||||||
Vec8d r;
|
Vec8d r;
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int i=0;i<8;i++)
|
for(int i=0;i<8;i++)
|
||||||
r[i] = sqrt(x[i]);
|
r[i] = sqrt(x[i]);
|
||||||
return r;
|
return r;
|
||||||
|
|
@ -76,7 +92,9 @@ static inline Vec8d vec8_sqrt(Vec8d x)
|
||||||
static inline Vec8d vec8_fabs(Vec8d x)
|
static inline Vec8d vec8_fabs(Vec8d x)
|
||||||
{
|
{
|
||||||
Vec8d r;
|
Vec8d r;
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int i=0;i<8;i++)
|
for(int i=0;i<8;i++)
|
||||||
r[i] = fabs(x[i]);
|
r[i] = fabs(x[i]);
|
||||||
return r;
|
return r;
|
||||||
|
|
@ -111,7 +129,9 @@ static inline Vec8d vec8_SIMDLOADDATA(int idx, double data[7][8])
|
||||||
static inline Vec8d vec8_BSIM3v32_StateAccess(double* cktstate, Vec8m stateindexes)
|
static inline Vec8d vec8_BSIM3v32_StateAccess(double* cktstate, Vec8m stateindexes)
|
||||||
{
|
{
|
||||||
Vec8d r;
|
Vec8d r;
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int i=0;i<8;i++)
|
for(int i=0;i<8;i++)
|
||||||
r[i] = cktstate[stateindexes[i]];
|
r[i] = cktstate[stateindexes[i]];
|
||||||
return r;
|
return r;
|
||||||
|
|
@ -120,7 +140,9 @@ static inline Vec8d vec8_BSIM3v32_StateAccess(double* cktstate, Vec8m stateindex
|
||||||
|
|
||||||
static inline void vec8_BSIM3v32_StateStore(double* cktstate, Vec8m stateindexes, Vec8d values)
|
static inline void vec8_BSIM3v32_StateStore(double* cktstate, Vec8m stateindexes, Vec8d values)
|
||||||
{
|
{
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int idx=0;idx<8;idx++)
|
for(int idx=0;idx<8;idx++)
|
||||||
{
|
{
|
||||||
cktstate[stateindexes[idx]] = values[idx];
|
cktstate[stateindexes[idx]] = values[idx];
|
||||||
|
|
@ -129,7 +151,9 @@ static inline void vec8_BSIM3v32_StateStore(double* cktstate, Vec8m stateindexes
|
||||||
|
|
||||||
static inline void vec8_BSIM3v32_StateAdd(double* cktstate, Vec8m stateindexes, Vec8d values)
|
static inline void vec8_BSIM3v32_StateAdd(double* cktstate, Vec8m stateindexes, Vec8d values)
|
||||||
{
|
{
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int idx=0;idx<8;idx++)
|
for(int idx=0;idx<8;idx++)
|
||||||
{
|
{
|
||||||
cktstate[stateindexes[idx]] += values[idx];
|
cktstate[stateindexes[idx]] += values[idx];
|
||||||
|
|
@ -138,7 +162,9 @@ static inline void vec8_BSIM3v32_StateAdd(double* cktstate, Vec8m stateindexes,
|
||||||
|
|
||||||
static inline void vec8_BSIM3v32_StateSub(double* cktstate, Vec8m stateindexes, Vec8d values)
|
static inline void vec8_BSIM3v32_StateSub(double* cktstate, Vec8m stateindexes, Vec8d values)
|
||||||
{
|
{
|
||||||
#pragma omp simd
|
#ifdef USE_OMPSIMD
|
||||||
|
#pragma omp simd simdlen(4)
|
||||||
|
#endif
|
||||||
for(int idx=0;idx<8;idx++)
|
for(int idx=0;idx<8;idx++)
|
||||||
{
|
{
|
||||||
cktstate[stateindexes[idx]] -= values[idx];
|
cktstate[stateindexes[idx]] -= values[idx];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue