From 04c8024fb8d131e68e9ac9ff3268ea91318d045a Mon Sep 17 00:00:00 2001 From: lonewolf1870 Date: Wed, 3 Mar 2021 00:55:47 +0100 Subject: [PATCH 1/3] OSX Accelerate integration --- .DS_Store | Bin 0 -> 10244 bytes acx_accelerate.m4 | 83 ++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 50 ++++++++++++++++++---------- src/astrsolve.c | 10 ++++++ src/match.c | 15 +++++++++ src/mosaic.c | 9 +++++ src/photsolve.c | 10 +++++- src/proper.c | 12 +++++++ 8 files changed, 170 insertions(+), 19 deletions(-) create mode 100644 .DS_Store create mode 100644 acx_accelerate.m4 diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..adeaea42045f09bf8525141b99696a77ba36a037 GIT binary patch literal 10244 zcmeHMU2GIp6h3FWEi==WP77>XbY-CeMGNjip#chPf7Dd|8e3=!NV`ANc4T*^?#%8& zOHI{8G2qV&8bN*V0VKQ_!3Se}5Pa|_Vxmn1H4!1k#0O%0;nj2J&TePB)c9hQI5(Ml zX3o!i=briI&fdEKfbHpc2p|9e0v$}s71Z6KF*`eon#a~Ol0=G!#7L+orYFaWJY9ub z0k;Bf1>6d_6>ux?U#S3nvsn|$xpaHC0&WG|3gj!m=7#_sOonYa#iccMP-iUxNP0XfH94hm$^F`-N>e#U&31v=<*}Bcr`SK?|MkAF$j3 z!(6((TLHHM#T8&{cQ34g5m3Q&uHQ>9-?-(pCH2nEXhM&YPI!6yc<{N~m)Z*L@xQc> zjn3>1lvTV+p-=`f&_RP?!X9yA1D*-bwmb1JmT%4B7u+MM&*U(dk24Q@4l081$n>_!9WS+p+l@71FXF|V{u}8Kh0y?an8{f zTMO{;J%;CjBs3SG!KLAx-icLGw=Gw1E5?a5+g6BU&Bi5!Q&d^0-x`-?abjI>&tutf zPPAfc0UiX|xJtl)6vU!gW6Wmk=h3l*YM8;`cjzhcmX^&E1fg806rSiA)w4Zj#7rCQ zk<@;6)g3WMqxN~Pt|#*6k?3Ak$qvd3J9N#AsG5?pg4MV}E(iKlEv{$V^|Tf@to!tE zgD8rEI4IXmOth?9+Y|_enkSnA6B{?IZwj;on}y_OV?2H$oRz3$*137`P0|S z{>niWzs~ok=*%8o!Go(kbk<=pG97&2o@a6cznUAkD3wc(JSuhdt1(^cQOA`*xyqn% zchO~cO3Ba|`(k<`oz#p$xjGg}#L|g~sk9{$%-QHSmBS`G+h^!0v%_*6l;yOcJg$(R zno&B*n?h^Yopz6zs;(J(m6SoUAsprd5zkjFTD+v8arN4k*0$-&`Bk!1BQ5O9sD>I% zD0{MM+#DT<7%@eQtJ=sus-$MB!>W=JtMRnht3{H^bY<0i+2^aP7X-PXKOI${N~`9P zX}M~CpOS zZ1f(Y$I3&cU`P<<_?|>0sw8aH`VFMo-k0ISvz41R3zTM4KW&62DQ|1PKS z_Kt{Q?jBP#8{X&hcM8G)v$VzIlx{Lkh26Lp2XP1^7{fzoVj44e1fRv@cmiL-SMY5-i|^t&ynq++WBdZY%lEB{qmUaMeStgczGaM67YjZL8qo5T6XIP1w3JQ^pXED~{+ zSnSEMgR|CGTUWnWy4Sylc%>Yk;W+1f?hTOVF$M|K%zKG{sb6N)5vJ>F>wJ<#TqQ!w zXjxbJSNLU*z+G4SAClw}BC=@N)=JHOxs*7|tu4|X*xizGSVdt#50W zBpKN2CC&mf?OT0M4J?9r@*_Dpm*UV<7^9xgKE%?GL{+-?2j?464 zCui>uFB~tlIsPTXHx^0;=K6SLUr z!~?j_@Z9EBz^#B=0k;BoX9Y@l+5xuz|M1-Z|KFX1bF+3U;8x&oRRF!6J)Q03np?!p zj$(W50Xl~0V2$}racPB6$6T1++K#6SwjFP+Vo7Ih%Gma>EvLA&!YR%QC&_p7|M5Qq R-1Wb^{=dVv)c. +dnl +dnl Last modified: 12/08/2020 +dnl +dnl %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +dnl +dnl @synopsis ACX_ACCEL([MKL_DIR, ILP64_FLAG, STATIC_FLAG, CONV_LIBS]) +dnl +dnl This macro sets the MKL_CFLAGS, MKL_LDFLAGS and MKL_LIBS variables to +dnl for compiling and linking with INTEL's MKL. A coma-separated list of +dnl convenience libraries may be included in the linked group for static linking. +dnl You may wish to use these variables in your default CFLAGS: +dnl +dnl CFLAGS="$CFLAGS $MKL_CFLAGS" +dnl +dnl You may wish to use these variables in your default LDFLAGS: +dnl +dnl LDFLAGS="$LDFLAGS $MKL_LDLAGS" +dnl +dnl You may wish to use these variables in your default LIBS: +dnl +dnl LIBS="$LIBS $MKL_LIBS" +dnl + +AC_DEFUN([ACX_ACCEL], [ +AC_REQUIRE([AC_CANONICAL_HOST]) + + +dnl -------------------------- +dnl Exit if host is not MacOSX +dnl -------------------------- +case $host_os in + darwin* ) ;; + *) + ACCEL_WARN="Accelerate only available on Mac OSX" + AC_SUBST(ACCEL_WARN) + exit +esac + +acx_accelerate_ok=no +AC_CHECK_HEADERS([Accelerate/Accelerate.h], [acx_accelerate_ok=yes]) +AC_SUBST(ACCEL_LIBS, "-framework Accelerate") +AC_SUBST(MKL_LDFLAGS, "") + +dnl -------------------- +dnl Set internal flags +dnl -------------------- + +AC_DEFINE(HAVE_ACCELERATE,1, [Define if you have the Accelerate libraries.]) +AC_DEFINE(HAVE_LAPACK,1, [Define if you have the LAPACK libraries.]) + +dnl -------------------- +dnl Set include files +dnl -------------------- + +AC_DEFINE(ACCELERATE_H, "Accelerate/Accelerate.h", [Accelerate header filename.]) +AC_DEFINE(LAPACK_H, "Accelerate/Accelerate.h", [LAPACK header filename.]) + +])dnl ACX_ACCEL + diff --git a/configure.ac b/configure.ac index f6b684f..edfb491 100644 --- a/configure.ac +++ b/configure.ac @@ -50,6 +50,7 @@ AC_SUBST(DATE3, "$date3") # Include macros sinclude(acx_atlas.m4) +sinclude(acx_accelerate.m4) sinclude(acx_openblas.m4) sinclude(acx_curl.m4) sinclude(acx_fftw.m4) @@ -101,6 +102,15 @@ AC_ARG_ENABLE(mkl, AC_MSG_RESULT([yes]), AC_MSG_RESULT([no])) +# Provide special options for Apple Accelerate +AC_MSG_CHECKING([whether we should use Appel's Accelerate]) +AC_ARG_ENABLE(accelerate, + [AS_HELP_STRING([--enable-accelerate], + [Use Apple's Accelerate for linear algebra (off by default)])], + CC="cc" + AC_MSG_RESULT([yes]), + AC_MSG_RESULT([no])) + # Checks for programs. AC_LANG(C) @@ -285,32 +295,36 @@ else ], AC_MSG_ERROR([$FFTW_ERROR Exiting.]) ) - if test "x$enable_openblas" = "xyes"; then ######## Handle the OpenBLAS library (linear algebra: BLAS + LAPACKe) ######## ACX_OPENBLAS($with_openblas_libdir, $with_openblas_incdir, $use_pthreads, no, - [ - AM_CFLAGS="$AM_CFLAGS $OPENBLAS_CFLAGS " - AM_LDFLAGS="$AM_LDFLAGS $OPENBLAS_LDFLAGS " - LIBS="$OPENBLAS_LIBS $LIBS" - if test "$OPENBLAS_WARN" != ""; then - AC_MSG_WARN([$OPENBLAS_WARN]) - fi - ], - AC_MSG_ERROR([$OPENBLAS_ERROR Exiting.]) + [ + AM_CFLAGS="$AM_CFLAGS $OPENBLAS_CFLAGS " + AM_LDFLAGS="$AM_LDFLAGS $OPENBLAS_LDFLAGS " + LIBS="$OPENBLAS_LIBS $LIBS" + if test "$OPENBLAS_WARN" != ""; then + AC_MSG_WARN([$OPENBLAS_WARN]) + fi + ], + AC_MSG_ERROR([$OPENBLAS_ERROR Exiting.]) ) - else +################ handle the Apple Accelerate framework (linear algebra) ###### + if test x$enable_accelerate = xyes; then + ACX_ACCEL() + LIBS="$ACCEL_LIBS $LIBS" + else ######### handle the ATLAS library (linear algebra: BLAS + cLAPACK) ########## - ACX_ATLAS($with_atlas_libdir, $with_atlas_incdir, $use_pthreads, - [ + ACX_ATLAS($with_atlas_libdir, $with_atlas_incdir, $use_pthreads, + [ [LIBS="$ATLAS_LIBS $LIBS"] if test "$ATLAS_WARN" != ""; then - AC_MSG_WARN([$ATLAS_WARN]) - fi - ], - AC_MSG_ERROR([$ATLAS_ERROR Exiting.]) - ) + AC_MSG_WARN([$ATLAS_WARN]) + fi + ], + AC_MSG_ERROR([$ATLAS_ERROR Exiting.]) + ) + fi fi fi diff --git a/src/astrsolve.c b/src/astrsolve.c index 27fa6cc..23a3862 100644 --- a/src/astrsolve.c +++ b/src/astrsolve.c @@ -46,6 +46,10 @@ #include ATLAS_LAPACK_H #endif +#ifdef HAVE_ACCELERATE +#include ACCELERATE_H +#endif + #ifdef HAVE_LAPACKE #include LAPACKE_H #define MATSTORAGE_PACKED 1 @@ -528,6 +532,12 @@ void astrsolve_fgroups(fgroupstruct **fgroups, int nfgroup) #endif free(lap_ipiv); +#elif defined(HAVE_ACCELERATE) + int info,n_beta=1; + char* upper_or_lower="U"; + if (dposv_(upper_or_lower, &ncoefftot, + &n_beta, alpha, &ncoefftot, beta, &ncoefftot, &info) != 0) + warning("Not a positive definite matrix", " in astrometry solver"); #else diff --git a/src/match.c b/src/match.c index c27f1d0..0e047e1 100644 --- a/src/match.c +++ b/src/match.c @@ -46,6 +46,10 @@ #include ATLAS_LAPACK_H #endif +#ifdef HAVE_ACCELERATE +#include ACCELERATE_H +#endif + #ifdef HAVE_LAPACKE #include LAPACKE_H #endif @@ -1315,6 +1319,17 @@ void match_refine(setstruct *set, setstruct *refset, double matchresol, { LAPACKE_dpotrs(LAPACK_COL_MAJOR, 'U', 3, 1, alpha, 3, blng, 3); LAPACKE_dpotrs(LAPACK_COL_MAJOR, 'U', 3, 1, alpha, 3, blat, 3); +#elif defined(HAVE_ACCELERATE) + int info; + int N=3; + int LDA=3; + int LDB=3; + int NRHS=1; + char* upper_or_lower="U"; + if (dpotrf_(upper_or_lower, &N, alpha, &LDA, &info) == 0) + { + dpotrs_(upper_or_lower, &N, &NRHS, alpha, &LDA, blng, &LDB, &info); + dpotrs_(upper_or_lower, &N, &NRHS, alpha, &LDA, blat, &LDB, &info); #else if (clapack_dpotrf(CblasRowMajor, CblasUpper, 3, alpha, 3) == 0) { diff --git a/src/mosaic.c b/src/mosaic.c index f4d6418..85e7d20 100644 --- a/src/mosaic.c +++ b/src/mosaic.c @@ -58,10 +58,15 @@ #include ATLAS_LAPACK_H #endif +#ifdef HAVE_ACCELERATE +#include ACCELERATE_H +#endif + #ifdef HAVE_LAPACKE #include LAPACKE_H #endif + /*------------------- global variables for multithreading -------------------*/ #ifdef USE_THREADS pthread_t *mosaic_thread; @@ -248,6 +253,10 @@ void adjust_set(fieldstruct **fields, int nfield, int s) /* Derive the CRPIXs */ #if defined(HAVE_LAPACKE) LAPACKE_dgesv(LAPACK_ROW_MAJOR, naxis, 1, cd, naxis, ipiv, x, 1); +#elif defined(HAVE_ACCELERATE) + int NRHS=1; + int info; + dgesv_(&naxis, &NRHS, cd, &naxis, ipiv, x, &naxis, &info); #else clapack_dgesv(CblasRowMajor, naxis, 1, cd, naxis, ipiv, x, naxis); #endif diff --git a/src/photsolve.c b/src/photsolve.c index a536ab0..80e6f19 100644 --- a/src/photsolve.c +++ b/src/photsolve.c @@ -50,6 +50,10 @@ #include ATLAS_LAPACK_H #endif +#ifdef HAVE_ACCELERATE +#include ACCELERATE_H +#endif + #ifdef HAVE_LAPACKE #include LAPACKE_H #endif @@ -378,7 +382,11 @@ void photsolve_fgroups(fgroupstruct **fgroups, int nfgroup) #if defined(HAVE_LAPACKE) LAPACKE_dposv(LAPACK_COL_MAJOR, 'L', ncoefftot, 1, alpha, ncoefftot, beta, ncoefftot); -#else +#elif defined(HAVE_ACCELERATE) + int info,n_beta=1; + char* upper_or_lower="U"; + dposv_(upper_or_lower, &ncoefftot, &n_beta, alpha, &ncoefftot, beta, &ncoefftot, &info); + #else clapack_dposv(CblasRowMajor, CblasUpper, ncoefftot, 1, alpha, ncoefftot, beta, ncoefftot); #endif diff --git a/src/proper.c b/src/proper.c index 5d40e01..96a767d 100644 --- a/src/proper.c +++ b/src/proper.c @@ -57,6 +57,10 @@ #include ATLAS_LAPACK_H #endif +#ifdef HAVE_ACCELERATE +#include ACCELERATE_H +#endif + #ifdef HAVE_LAPACKE #include LAPACKE_H #endif @@ -383,6 +387,10 @@ void astrprop_fgroup(fgroupstruct *fgroup) nfreemin = astrprop_solve(fgroup,samp,wcsec,alpha,beta,wis, &chi2min); #if defined(HAVE_LAPACKE) LAPACKE_dpotri(LAPACK_COL_MAJOR, 'L',ncoeff, alpha, ncoeff); +#elif defined(HAVE_ACCELERATE) + int info,n_beta=1; + char* upper_or_lower="U"; + dpotri_(upper_or_lower, &ncoeff, alpha, &ncoeff, &info); #else clapack_dpotri(CblasRowMajor, CblasUpper, ncoeff, alpha, ncoeff); #endif @@ -605,6 +613,10 @@ static int astrprop_solve(fgroupstruct *fgroup, samplestruct *samp, memcpy(a,alpha,ncoeff*ncoeff*sizeof(double)); #if defined(HAVE_LAPACKE) LAPACKE_dposv(LAPACK_COL_MAJOR, 'L', ncoeff, 1, alpha, ncoeff, beta, ncoeff); +#elif defined(HAVE_ACCELERATE) + int info,n_beta=1; + char* upper_or_lower="U"; + dposv_(upper_or_lower, &ncoeff, &n_beta, alpha, &ncoeff, beta, &ncoeff, &info); #else clapack_dposv(CblasRowMajor,CblasUpper,ncoeff,1, alpha,ncoeff,beta,ncoeff); #endif From ba7ff402e4c30d627f2c6c871c085fe5bd2bd0da Mon Sep 17 00:00:00 2001 From: lonewolf1870 <39089319+lonewolf1870@users.noreply.github.com> Date: Wed, 3 Mar 2021 01:03:08 +0100 Subject: [PATCH 2/3] Delete .DS_Store --- .DS_Store | Bin 10244 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index adeaea42045f09bf8525141b99696a77ba36a037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMU2GIp6h3FWEi==WP77>XbY-CeMGNjip#chPf7Dd|8e3=!NV`ANc4T*^?#%8& zOHI{8G2qV&8bN*V0VKQ_!3Se}5Pa|_Vxmn1H4!1k#0O%0;nj2J&TePB)c9hQI5(Ml zX3o!i=briI&fdEKfbHpc2p|9e0v$}s71Z6KF*`eon#a~Ol0=G!#7L+orYFaWJY9ub z0k;Bf1>6d_6>ux?U#S3nvsn|$xpaHC0&WG|3gj!m=7#_sOonYa#iccMP-iUxNP0XfH94hm$^F`-N>e#U&31v=<*}Bcr`SK?|MkAF$j3 z!(6((TLHHM#T8&{cQ34g5m3Q&uHQ>9-?-(pCH2nEXhM&YPI!6yc<{N~m)Z*L@xQc> zjn3>1lvTV+p-=`f&_RP?!X9yA1D*-bwmb1JmT%4B7u+MM&*U(dk24Q@4l081$n>_!9WS+p+l@71FXF|V{u}8Kh0y?an8{f zTMO{;J%;CjBs3SG!KLAx-icLGw=Gw1E5?a5+g6BU&Bi5!Q&d^0-x`-?abjI>&tutf zPPAfc0UiX|xJtl)6vU!gW6Wmk=h3l*YM8;`cjzhcmX^&E1fg806rSiA)w4Zj#7rCQ zk<@;6)g3WMqxN~Pt|#*6k?3Ak$qvd3J9N#AsG5?pg4MV}E(iKlEv{$V^|Tf@to!tE zgD8rEI4IXmOth?9+Y|_enkSnA6B{?IZwj;on}y_OV?2H$oRz3$*137`P0|S z{>niWzs~ok=*%8o!Go(kbk<=pG97&2o@a6cznUAkD3wc(JSuhdt1(^cQOA`*xyqn% zchO~cO3Ba|`(k<`oz#p$xjGg}#L|g~sk9{$%-QHSmBS`G+h^!0v%_*6l;yOcJg$(R zno&B*n?h^Yopz6zs;(J(m6SoUAsprd5zkjFTD+v8arN4k*0$-&`Bk!1BQ5O9sD>I% zD0{MM+#DT<7%@eQtJ=sus-$MB!>W=JtMRnht3{H^bY<0i+2^aP7X-PXKOI${N~`9P zX}M~CpOS zZ1f(Y$I3&cU`P<<_?|>0sw8aH`VFMo-k0ISvz41R3zTM4KW&62DQ|1PKS z_Kt{Q?jBP#8{X&hcM8G)v$VzIlx{Lkh26Lp2XP1^7{fzoVj44e1fRv@cmiL-SMY5-i|^t&ynq++WBdZY%lEB{qmUaMeStgczGaM67YjZL8qo5T6XIP1w3JQ^pXED~{+ zSnSEMgR|CGTUWnWy4Sylc%>Yk;W+1f?hTOVF$M|K%zKG{sb6N)5vJ>F>wJ<#TqQ!w zXjxbJSNLU*z+G4SAClw}BC=@N)=JHOxs*7|tu4|X*xizGSVdt#50W zBpKN2CC&mf?OT0M4J?9r@*_Dpm*UV<7^9xgKE%?GL{+-?2j?464 zCui>uFB~tlIsPTXHx^0;=K6SLUr z!~?j_@Z9EBz^#B=0k;BoX9Y@l+5xuz|M1-Z|KFX1bF+3U;8x&oRRF!6J)Q03np?!p zj$(W50Xl~0V2$}racPB6$6T1++K#6SwjFP+Vo7Ih%Gma>EvLA&!YR%QC&_p7|M5Qq R-1Wb^{=dVv)c Date: Wed, 3 Mar 2021 23:23:46 +0100 Subject: [PATCH 3/3] Rename acx_accelerate.m4 to m4/acx_accelerate.m4 --- acx_accelerate.m4 => m4/acx_accelerate.m4 | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename acx_accelerate.m4 => m4/acx_accelerate.m4 (100%) diff --git a/acx_accelerate.m4 b/m4/acx_accelerate.m4 similarity index 100% rename from acx_accelerate.m4 rename to m4/acx_accelerate.m4