From 8fade093aaa3748e5e879fcf0fed1833915d7aab Mon Sep 17 00:00:00 2001 From: Zhang Xianyi Date: Tue, 20 Oct 2015 14:37:22 -0500 Subject: [PATCH] Fixed cmake bug on Visual Studio. --- common.h | 3 +-- interface/CMakeLists.txt | 55 +++++++++++++++++++++++---------------- interface/zdot.c | 7 +++-- interface/zgemv.c | 3 +++ interface/zsyr.c | 3 +++ kernel/CMakeLists.txt | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 113 insertions(+), 26 deletions(-) diff --git a/common.h b/common.h index 0b0bdb8..d8eadb4 100644 --- a/common.h +++ b/common.h @@ -502,8 +502,7 @@ static void __inline blas_lock(volatile BLASULONG *address){ extension since version 3.0. If neither are available, use a compatible structure as fallback (see Clause 6.2.5.13 of the C99 standard). */ #if (defined(__STDC_IEC_559_COMPLEX__) || __STDC_VERSION__ >= 199901L || \ - (__GNUC__ >= 3 && !defined(__cplusplus)) || \ - _MSC_VER >= 1800) // Visual Studio 2013 supports complex + (__GNUC__ >= 3 && !defined(__cplusplus)) ) #define OPENBLAS_COMPLEX_C99 #ifndef __cplusplus #include diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 91565d2..9ff924e 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -69,8 +69,8 @@ foreach (CBLAS_FLAG ${CBLAS_FLAGS}) set(DISABLE_COMPLEX 0) set(MANGLE_COMPLEX 3) if (CBLAS_FLAG EQUAL 1) - set(DISABLE_COMPLEX 1) - set(MANGLE_COMPLEX 1) +# set(DISABLE_COMPLEX 1) +# set(MANGLE_COMPLEX 1) endif () GenerateNamedObjects("${BLAS1_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false ${DISABLE_COMPLEX}) GenerateNamedObjects("${BLAS1_REAL_ONLY_SOURCES}" "" "" ${CBLAS_FLAG} "" "" false 1) @@ -98,43 +98,54 @@ foreach (CBLAS_FLAG ${CBLAS_FLAGS}) GenerateNamedObjects("imax.c" "USE_ABS;USE_MIN" "i*amin" ${CBLAS_FLAG}) GenerateNamedObjects("imax.c" "USE_MIN" "i*min" ${CBLAS_FLAG}) -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("zger.c" "" "geru" ${CBLAS_FLAG} "" "" false ${float_type}) + GenerateNamedObjects("zger.c" "CONJ" "gerc" ${CBLAS_FLAG} "" "" false ${float_type}) + GenerateNamedObjects("zdot.c" "CONJ" "dotc" ${CBLAS_FLAG} "" "" false ${float_type}) + GenerateNamedObjects("zdot.c" "" "dotu" ${CBLAS_FLAG} "" "" 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}) + GenerateNamedObjects("symm.c" "HEMM" "hemm" ${CBLAS_FLAG} "" "" false ${float_type}) + GenerateNamedObjects("syrk.c" "HEMM" "herk" ${CBLAS_FLAG} "" "" false ${float_type}) + GenerateNamedObjects("syr2k.c" "HEMM" "her2k" ${CBLAS_FLAG} "" "" 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") + GenerateNamedObjects("zscal.c" "SSCAL" "sscal" ${CBLAS_FLAG} "" "" false "COMPLEX") + GenerateNamedObjects("nrm2.c" "" "scnrm2" ${CBLAS_FLAG} "" "" true "COMPLEX") + GenerateNamedObjects("zrot.c" "" "csrot" ${CBLAS_FLAG} "" "" true "COMPLEX") + GenerateNamedObjects("max.c" "USE_ABS;USE_MIN" "scamin" ${CBLAS_FLAG} "" "" true "COMPLEX") + GenerateNamedObjects("max.c" "USE_ABS" "scamax" ${CBLAS_FLAG} "" "" true "COMPLEX") + GenerateNamedObjects("asum.c" "" "scasum" ${CBLAS_FLAG} "" "" 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") + GenerateNamedObjects("zscal.c" "SSCAL" "dscal" ${CBLAS_FLAG} "" "" false "ZCOMPLEX") + GenerateNamedObjects("nrm2.c" "" "dznrm2" ${CBLAS_FLAG} "" "" true "ZCOMPLEX") + GenerateNamedObjects("zrot.c" "" "zdrot" ${CBLAS_FLAG} "" "" true "ZCOMPLEX") + GenerateNamedObjects("max.c" "USE_ABS;USE_MIN" "dzamin" ${CBLAS_FLAG} "" "" true "ZCOMPLEX") + GenerateNamedObjects("max.c" "USE_ABS" "dzamax" ${CBLAS_FLAG} "" "" true "ZCOMPLEX") + GenerateNamedObjects("asum.c" "" "dzasum" ${CBLAS_FLAG} "" "" true "ZCOMPLEX") endif () endforeach () +endforeach () + +#Special functions for CBLAS +if (NOT DEFINED NO_CBLAS) + foreach (float_type ${FLOAT_TYPES}) + if (${float_type} STREQUAL "COMPLEX" OR ${float_type} STREQUAL "ZCOMPLEX") + #cblas_dotc_sub cblas_dotu_sub + GenerateNamedObjects("zdot.c" "FORCE_USE_STACK" "dotu_sub" 1 "" "" false ${float_type}) + GenerateNamedObjects("zdot.c" "FORCE_USE_STACK;CONJ" "dotc_sub" 1 "" "" false ${float_type}) + endif() + endforeach () +endif() if (NOT DEFINED NO_LAPACK) set(LAPACK_SOURCES diff --git a/interface/zdot.c b/interface/zdot.c index 34dfb73..d4d0fab 100644 --- a/interface/zdot.c +++ b/interface/zdot.c @@ -153,16 +153,19 @@ void 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){ OPENBLAS_COMPLEX_FLOAT ret; + OPENBLAS_COMPLEX_FLOAT zero=OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0); #endif PRINT_DEBUG_CNAME; if (n <= 0) { #ifdef FORCE_USE_STACK - *result = OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0); + //*result = OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0); + CREAL(*result) = 0.0; + CIMAG(*result) = 0.0; return; #else - return OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0); + return zero; #endif } diff --git a/interface/zgemv.c b/interface/zgemv.c index 792f799..520136b 100644 --- a/interface/zgemv.c +++ b/interface/zgemv.c @@ -148,6 +148,9 @@ void CNAME(enum CBLAS_ORDER order, blasint info, t; #ifdef SMP int nthreads; + int nthreads_max; + int nthreads_avail; + double MNK; #endif int (*gemv[])(BLASLONG, BLASLONG, BLASLONG, FLOAT, FLOAT, FLOAT *, BLASLONG, diff --git a/interface/zsyr.c b/interface/zsyr.c index 5fe29ce..09b1de5 100644 --- a/interface/zsyr.c +++ b/interface/zsyr.c @@ -121,6 +121,9 @@ void CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, int n, FLOAT alpha, FLO FLOAT *buffer; int trans, uplo; blasint info; + FLOAT * ALPHA = α + FLOAT alpha_r = ALPHA[0]; + FLOAT alpha_i = ALPHA[1]; #ifdef SMP int nthreads; #endif diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 2d7b189..2156e39 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -347,6 +347,74 @@ foreach (float_type ${FLOAT_TYPES}) GenerateNamedObjects("${KERNELDIR}/${${float_char}OMATCOPY_RTC}" "CONJ;ROWM" "omatcopy_k_rtc" false "" "" false ${float_type}) endif() + #imatcopy + if (NOT DEFINED ${float_char}IMATCOPY_CN) + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + set(${float_char}IMATCOPY_CN ../generic/zimatcopy_cn.c) + else () + set(${float_char}IMATCOPY_CN ../generic/imatcopy_cn.c) + endif () + endif () + + if (NOT DEFINED ${float_char}IMATCOPY_RN) + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + set(${float_char}IMATCOPY_RN ../generic/zimatcopy_rn.c) + else () + set(${float_char}IMATCOPY_RN ../generic/imatcopy_rn.c) + endif () + endif () + + if (NOT DEFINED ${float_char}IMATCOPY_CT) + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + set(${float_char}IMATCOPY_CT ../generic/zimatcopy_ct.c) + else () + set(${float_char}IMATCOPY_CT ../generic/imatcopy_ct.c) + endif () + endif () + + if (NOT DEFINED ${float_char}IMATCOPY_RT) + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + set(${float_char}IMATCOPY_RT ../generic/zimatcopy_rt.c) + else () + set(${float_char}IMATCOPY_RT ../generic/imatcopy_rt.c) + endif () + endif () + + GenerateNamedObjects("${KERNELDIR}/${${float_char}IMATCOPY_CN}" "" "imatcopy_k_cn" false "" "" false ${float_type}) + GenerateNamedObjects("${KERNELDIR}/${${float_char}IMATCOPY_RN}" "ROWM" "imatcopy_k_rn" false "" "" false ${float_type}) + GenerateNamedObjects("${KERNELDIR}/${${float_char}IMATCOPY_CT}" "" "imatcopy_k_ct" false "" "" false ${float_type}) + GenerateNamedObjects("${KERNELDIR}/${${float_char}IMATCOPY_RT}" "ROWM" "imatcopy_k_rt" false "" "" false ${float_type}) + + + if (NOT DEFINED ${float_char}IMATCOPY_CNC) + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + set(${float_char}IMATCOPY_CNC ../generic/zimatcopy_cnc.c) + endif () + endif () + if (NOT DEFINED ${float_char}IMATCOPY_RNC) + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + set(${float_char}IMATCOPY_RNC ../generic/zimatcopy_rnc.c) + endif () + endif () + if (NOT DEFINED ${float_char}IMATCOPY_CTC) + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + set(${float_char}IMATCOPY_CTC ../generic/zimatcopy_ctc.c) + endif () + endif () + if (NOT DEFINED ${float_char}IMATCOPY_RTC) + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + set(${float_char}IMATCOPY_RTC ../generic/zimatcopy_rtc.c) + endif () + endif () + + if (${float_char} STREQUAL "Z" OR ${float_char} STREQUAL "C") + GenerateNamedObjects("${KERNELDIR}/${${float_char}IMATCOPY_CNC}" "CONJ" "imatcopy_k_cnc" false "" "" false ${float_type}) + GenerateNamedObjects("${KERNELDIR}/${${float_char}IMATCOPY_RNC}" "CONJ;ROWM" "imatcopy_k_rnc" false "" "" false ${float_type}) + GenerateNamedObjects("${KERNELDIR}/${${float_char}IMATCOPY_CTC}" "CONJ" "imatcopy_k_ctc" false "" "" false ${float_type}) + GenerateNamedObjects("${KERNELDIR}/${${float_char}IMATCOPY_RTC}" "CONJ;ROWM" "imatcopy_k_rtc" false "" "" false ${float_type}) + endif() + + #geadd GenerateNamedObjects("${KERNELDIR}/${${float_char}GEADD_KERNEL}" "" "geadd_k" false "" "" false ${float_type}) endforeach () -- 2.7.4