summaryrefslogtreecommitdiff
path: root/interface
diff options
context:
space:
mode:
authorZhang Xianyi <traits.zhang@gmail.com>2015-08-10 14:10:44 -0500
committerZhang Xianyi <traits.zhang@gmail.com>2015-08-10 14:10:44 -0500
commitf874465bb81d10e7cdb88a10cff7d62df3fe370c (patch)
treeac6dcb98992d3c667c9c2e28b72218f0ed042878 /interface
parentab0a0a75fc7758a0c18d9a16108ff971b3a255f4 (diff)
downloadopenblas-f874465bb81d10e7cdb88a10cff7d62df3fe370c.tar.gz
openblas-f874465bb81d10e7cdb88a10cff7d62df3fe370c.tar.bz2
openblas-f874465bb81d10e7cdb88a10cff7d62df3fe370c.zip
Use cmake to build OpenBLAS GENERIC Target on MSVC x86 64-bit.
Disable CBLAS and LAPACK.
Diffstat (limited to 'interface')
-rw-r--r--interface/CMakeLists.txt39
-rw-r--r--interface/rotg.c3
-rw-r--r--interface/zaxpby.c4
-rw-r--r--interface/zdot.c24
-rw-r--r--interface/zgemv.c17
-rw-r--r--interface/zrotg.c20
6 files changed, 77 insertions, 30 deletions
diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt
index ae949235b..91565d2f2 100644
--- a/interface/CMakeLists.txt
+++ b/interface/CMakeLists.txt
@@ -1,13 +1,16 @@
include_directories(${CMAKE_SOURCE_DIR})
+
set(BLAS1_SOURCES
copy.c
- asum.c nrm2.c
+ nrm2.c
)
set(BLAS1_REAL_ONLY_SOURCES
rotm.c rotmg.c # N.B. these do not have complex counterparts
+ rot.c
+ asum.c
)
# these will have 'z' prepended for the complex version
@@ -15,7 +18,7 @@ set(BLAS1_MANGLED_SOURCES
axpy.c swap.c
scal.c
dot.c
- rot.c rotg.c
+ rotg.c
axpby.c
)
@@ -31,6 +34,13 @@ set(BLAS2_SOURCES
tpsv.c tpmv.c
)
+set(BLAS2_COMPLEX_ONLY_MANGLED_SOURCES
+ hemv.c hbmv.c
+ her.c her2.c
+ hpmv.c hpr.c
+ hpr2.c
+)
+
# these do not have separate 'z' sources
set(BLAS3_SOURCES
gemm.c symm.c
@@ -39,6 +49,7 @@ set(BLAS3_SOURCES
set(BLAS3_MANGLED_SOURCES
omatcopy.c imatcopy.c
+ geadd.c
)
# generate the BLAS objs once with and once without cblas
@@ -65,9 +76,14 @@ foreach (CBLAS_FLAG ${CBLAS_FLAGS})
GenerateNamedObjects("${BLAS1_REAL_ONLY_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false 1)
GenerateNamedObjects("${BLAS1_MANGLED_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${MANGLE_COMPLEX})
GenerateNamedObjects("${BLAS2_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${MANGLE_COMPLEX})
+ GenerateNamedObjects("${BLAS2_COMPLEX_ONLY_MANGLED_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false 4)
GenerateNamedObjects("${BLAS3_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${DISABLE_COMPLEX})
GenerateNamedObjects("${BLAS3_MANGLED_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${MANGLE_COMPLEX})
+ #sdsdot, dsdot
+ GenerateNamedObjects("sdsdot.c" "" "sdsdot" ${CBLAS_FLAG} "" "" true "SINGLE")
+ GenerateNamedObjects("dsdot.c" "" "dsdot" ${CBLAS_FLAG} "" "" true "SINGLE")
+
# trmm is trsm with a compiler flag set
GenerateNamedObjects("trsm.c" "TRMM" "trmm" ${CBLAS_FLAG})
@@ -86,17 +102,36 @@ endforeach ()
# complex-specific sources
foreach (float_type ${FLOAT_TYPES})
+
if (${float_type} STREQUAL "COMPLEX" OR ${float_type} STREQUAL "ZCOMPLEX")
GenerateNamedObjects("zger.c" "" "geru" false "" "" false ${float_type})
GenerateNamedObjects("zger.c" "CONJ" "gerc" false "" "" false ${float_type})
+ GenerateNamedObjects("zdot.c" "CONJ" "dotc" false "" "" false ${float_type})
+ GenerateNamedObjects("zdot.c" "" "dotu" false "" "" false ${float_type})
+
+ GenerateNamedObjects("symm.c" "HEMM" "hemm" false "" "" false ${float_type})
+ GenerateNamedObjects("syrk.c" "HEMM" "herk" false "" "" false ${float_type})
+ GenerateNamedObjects("syr2k.c" "HEMM" "her2k" false "" "" false ${float_type})
+
+ if (USE_GEMM3M)
+ GenerateNamedObjects("gemm.c" "GEMM3M" "gemm3m" false "" "" false ${float_type})
+ endif()
endif ()
if (${float_type} STREQUAL "COMPLEX")
GenerateNamedObjects("zscal.c" "SSCAL" "sscal" false "" "" false "COMPLEX")
GenerateNamedObjects("nrm2.c" "" "scnrm2" false "" "" true "COMPLEX")
+ GenerateNamedObjects("zrot.c" "" "csrot" false "" "" true "COMPLEX")
+ GenerateNamedObjects("max.c" "USE_ABS;USE_MIN" "scamin" false "" "" true "COMPLEX")
+ GenerateNamedObjects("max.c" "USE_ABS" "scamax" false "" "" true "COMPLEX")
+ GenerateNamedObjects("asum.c" "" "scasum" false "" "" true "COMPLEX")
endif ()
if (${float_type} STREQUAL "ZCOMPLEX")
GenerateNamedObjects("zscal.c" "SSCAL" "dscal" false "" "" false "ZCOMPLEX")
GenerateNamedObjects("nrm2.c" "" "dznrm2" false "" "" true "ZCOMPLEX")
+ GenerateNamedObjects("zrot.c" "" "zdrot" false "" "" true "ZCOMPLEX")
+ GenerateNamedObjects("max.c" "USE_ABS;USE_MIN" "dzamin" false "" "" true "ZCOMPLEX")
+ GenerateNamedObjects("max.c" "USE_ABS" "dzamax" false "" "" true "ZCOMPLEX")
+ GenerateNamedObjects("asum.c" "" "dzasum" false "" "" true "ZCOMPLEX")
endif ()
endforeach ()
diff --git a/interface/rotg.c b/interface/rotg.c
index 49088ab02..a0e6efdab 100644
--- a/interface/rotg.c
+++ b/interface/rotg.c
@@ -14,8 +14,7 @@ void CNAME(FLOAT *DA, FLOAT *DB, FLOAT *C, FLOAT *S){
#endif
-
-#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__)
+#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__) || defined(_M_X64) || defined(_M_IX86)
long double da = *DA;
long double db = *DB;
diff --git a/interface/zaxpby.c b/interface/zaxpby.c
index 9e8324432..1abb24de9 100644
--- a/interface/zaxpby.c
+++ b/interface/zaxpby.c
@@ -53,13 +53,13 @@ void CNAME(blasint n, FLOAT *ALPHA, FLOAT *x, blasint incx, FLOAT *BETA, FLOAT *
#endif
- if (n <= 0) return;
-
FLOAT alpha_r = *(ALPHA + 0);
FLOAT alpha_i = *(ALPHA + 1);
FLOAT beta_r = *(BETA + 0);
FLOAT beta_i = *(BETA + 1);
+ if (n <= 0) return;
+
FUNCTION_PROFILE_START();
if (incx < 0) x -= (n - 1) * incx * 2;
diff --git a/interface/zdot.c b/interface/zdot.c
index 1380ce292..34dfb731a 100644
--- a/interface/zdot.c
+++ b/interface/zdot.c
@@ -57,21 +57,25 @@
#ifdef RETURN_BY_STRUCT
MYTYPE NAME( blasint *N, FLOAT *x, blasint *INCX, FLOAT *y, blasint *INCY) {
#elif defined RETURN_BY_STACK
-void NAME(FLOAT _Complex *result, blasint *N, FLOAT *x, blasint *INCX, FLOAT *y, blasint *INCY) {
+void NAME(OPENBLAS_COMPLEX_FLOAT *result, blasint *N, FLOAT *x, blasint *INCX, FLOAT *y, blasint *INCY) {
#else
-FLOAT _Complex NAME( blasint *N, FLOAT *x, blasint *INCX, FLOAT *y, blasint *INCY) {
+OPENBLAS_COMPLEX_FLOAT NAME( blasint *N, FLOAT *x, blasint *INCX, FLOAT *y, blasint *INCY) {
#endif
BLASLONG n = *N;
BLASLONG incx = *INCX;
BLASLONG incy = *INCY;
#ifndef RETURN_BY_STACK
- FLOAT _Complex ret;
+ OPENBLAS_COMPLEX_FLOAT ret;
#endif
#ifdef RETURN_BY_STRUCT
MYTYPE myret;
#endif
+#ifndef RETURN_BY_STRUCT
+ OPENBLAS_COMPLEX_FLOAT zero=OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0);
+#endif
+
PRINT_DEBUG_NAME;
if (n <= 0) {
@@ -80,10 +84,10 @@ FLOAT _Complex NAME( blasint *N, FLOAT *x, blasint *INCX,
myret.i = 0.;
return myret;
#elif defined RETURN_BY_STACK
- *result = ZERO;
+ *result = zero;
return;
#else
- return ZERO;
+ return zero;
#endif
}
@@ -144,21 +148,21 @@ FLOAT _Complex NAME( blasint *N, FLOAT *x, blasint *INCX,
#else
#ifdef FORCE_USE_STACK
-void CNAME(blasint n, FLOAT *x, blasint incx, FLOAT *y, blasint incy, FLOAT _Complex *result){
+void CNAME(blasint n, FLOAT *x, blasint incx, FLOAT *y, blasint incy, OPENBLAS_COMPLEX_FLOAT *result){
#else
-FLOAT _Complex CNAME(blasint n, FLOAT *x, blasint incx, FLOAT *y, blasint incy){
+OPENBLAS_COMPLEX_FLOAT CNAME(blasint n, FLOAT *x, blasint incx, FLOAT *y, blasint incy){
- FLOAT _Complex ret;
+ OPENBLAS_COMPLEX_FLOAT ret;
#endif
PRINT_DEBUG_CNAME;
if (n <= 0) {
#ifdef FORCE_USE_STACK
- *result = ZERO;
+ *result = OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0);
return;
#else
- return ZERO;
+ return OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0);
#endif
}
diff --git a/interface/zgemv.c b/interface/zgemv.c
index 704034aaf..792f799e5 100644
--- a/interface/zgemv.c
+++ b/interface/zgemv.c
@@ -79,6 +79,9 @@ void NAME(char *TRANS, blasint *M, blasint *N,
FLOAT *buffer;
#ifdef SMP
int nthreads;
+ int nthreads_max;
+ int nthreads_avail;
+ double MNK;
#endif
int (*gemv[])(BLASLONG, BLASLONG, BLASLONG, FLOAT, FLOAT, FLOAT *, BLASLONG,
@@ -91,14 +94,14 @@ void NAME(char *TRANS, blasint *M, blasint *N,
blasint lenx, leny;
blasint i;
- PRINT_DEBUG_NAME;
-
FLOAT alpha_r = *(ALPHA + 0);
FLOAT alpha_i = *(ALPHA + 1);
FLOAT beta_r = *(BETA + 0);
FLOAT beta_i = *(BETA + 1);
+ PRINT_DEBUG_NAME;
+
TOUPPER(trans);
info = 0;
@@ -153,14 +156,14 @@ void CNAME(enum CBLAS_ORDER order,
GEMV_O, GEMV_U, GEMV_S, GEMV_D,
};
- PRINT_DEBUG_CNAME;
-
FLOAT alpha_r = *(ALPHA + 0);
FLOAT alpha_i = *(ALPHA + 1);
FLOAT beta_r = *(BETA + 0);
FLOAT beta_i = *(BETA + 1);
+ PRINT_DEBUG_CNAME;
+
trans = -1;
info = 0;
@@ -234,10 +237,10 @@ void CNAME(enum CBLAS_ORDER order,
#ifdef SMP
- int nthreads_max = num_cpu_avail(2);
- int nthreads_avail = nthreads_max;
+ nthreads_max = num_cpu_avail(2);
+ nthreads_avail = nthreads_max;
- double MNK = (double) m * (double) n;
+ MNK = (double) m * (double) n;
if ( MNK <= ( 256.0 * (double) (GEMM_MULTITHREAD_THRESHOLD * GEMM_MULTITHREAD_THRESHOLD) ))
nthreads_max = 1;
diff --git a/interface/zrotg.c b/interface/zrotg.c
index e9e8a11df..187343d41 100644
--- a/interface/zrotg.c
+++ b/interface/zrotg.c
@@ -6,13 +6,7 @@
void NAME(FLOAT *DA, FLOAT *DB, FLOAT *C, FLOAT *S){
- PRINT_DEBUG_NAME;
-
- IDEBUG_START;
-
- FUNCTION_PROFILE_START();
-
-#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__)
+#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__) || defined(_M_X64) || defined(_M_IX86)
long double da_r = *(DA + 0);
long double da_i = *(DA + 1);
@@ -22,6 +16,12 @@ void NAME(FLOAT *DA, FLOAT *DB, FLOAT *C, FLOAT *S){
long double ada = fabs(da_r) + fabs(da_i);
+ PRINT_DEBUG_NAME;
+
+ IDEBUG_START;
+
+ FUNCTION_PROFILE_START();
+
if (ada == ZERO) {
*C = ZERO;
*(S + 0) = ONE;
@@ -54,6 +54,12 @@ void NAME(FLOAT *DA, FLOAT *DB, FLOAT *C, FLOAT *S){
FLOAT ada = fabs(da_r) + fabs(da_i);
FLOAT adb;
+ PRINT_DEBUG_NAME;
+
+ IDEBUG_START;
+
+ FUNCTION_PROFILE_START();
+
if (ada == ZERO) {
*C = ZERO;
*(S + 0) = ONE;