From fd90ecb6435c0668b4e2849bf75975a207e25545 Mon Sep 17 00:00:00 2001 From: sfilippone Date: Sun, 9 Mar 2025 18:37:12 +0100 Subject: [PATCH] Move data from CDEFINES to psb_config.h --- Makefile | 3 +- base/modules/psb_config.h.in | 48 +++++++++++---- configure | 115 +++++++++++++++++++---------------- configure.ac | 99 ++++++++++++++++-------------- 4 files changed, 153 insertions(+), 112 deletions(-) diff --git a/Makefile b/Makefile index 43209420..dc0685be 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,8 @@ cleanlib: (cd modules; /bin/rm -f *.a *$(.mod) *$(.fh) *.h) distclean: clean - /bin/rm -f Make.inc util/psb_metis_int.h base/modules/psb_config.h + /bin/rm -f Make.inc util/psb_metis_int.h base/modules/psb_config.h \ + base/modules/psb_cxxconfig.h check: all make check -C test/serial diff --git a/base/modules/psb_config.h.in b/base/modules/psb_config.h.in index c4d1eeb4..928d333a 100644 --- a/base/modules/psb_config.h.in +++ b/base/modules/psb_config.h.in @@ -1,40 +1,64 @@ #ifndef PSB_CONFIG_H #define PSB_CONFIG_H + #include + +#ifdef __cplusplus +#include +#else #include #include +#endif + +#define PSB_ERR_ERROR -1 +#define PSB_ERR_SUCCESS 0 @CSERIALMPI@ @IPKDEF@ @LPKDEF@ +@CHAVEOPENMP@ + @CHAVEMETIS@ @CINTMETIS@ @CREALMETIS@ @CHAVEAMD@ +@CHAVECUDA@ +@CSHORTVCUDA@ +@CVERSIONCUDA@ + + @CHAVELIBRSB@ -typedef int32_t psb_m_t; + + + typedef int32_t psb_m_t; #if defined(IPK4) && defined(LPK4) -typedef int32_t psb_i_t; -typedef int32_t psb_l_t; + typedef int32_t psb_i_t; + typedef int32_t psb_l_t; #elif defined(IPK4) && defined(LPK8) -typedef int32_t psb_i_t; -typedef int64_t psb_l_t; + typedef int32_t psb_i_t; + typedef int64_t psb_l_t; #elif defined(IPK8) && defined(LPK8) -typedef int64_t psb_i_t; -typedef int64_t psb_l_t; + typedef int64_t psb_i_t; + typedef int64_t psb_l_t; #else #endif -typedef int64_t psb_e_t; + typedef int64_t psb_e_t; -typedef float psb_s_t; -typedef double psb_d_t; -typedef float complex psb_c_t; -typedef double complex psb_z_t; + typedef float psb_s_t; + typedef double psb_d_t; + +#ifdef __cplusplus + typedef std::complex psb_c_t; + typedef std::complex psb_z_t; +#else + typedef float complex psb_c_t; + typedef float complex psb_z_t; +#endif #endif diff --git a/configure b/configure index 80096281..41753caf 100755 --- a/configure +++ b/configure @@ -688,10 +688,14 @@ CHAVELIBRSB RSB_LIBS LIBDIR PSBLASRULES +CVERSIONCUDA +CSHORTVCUDA +CHAVECUDA CHAVEAMD CREALMETIS CINTMETIS CHAVEMETIS +CHAVEOPENMP CSERIALMPI LPKDEF IPKDEF @@ -4640,7 +4644,7 @@ fi #Note : we miss the name of the Intel C compiler if test x"$pac_cv_serial_mpi" == x"yes" ; then - FAKEMPI="fakempi.o"; + FAKEMPI="psb_fakempi.o"; MPIFC="$FC"; MPICC="$CC"; MPICXX="$CXX"; @@ -7283,8 +7287,7 @@ fi # Custom test : do we have a module or include for MPI Fortran interface? if test x"$pac_cv_serial_mpi" == x"yes" ; then FDEFINES="$psblas_cv_define_prepend-DSERIAL_MPI $psblas_cv_define_prepend-DMPI_MOD $FDEFINES"; - CDEFINES="-DSERIAL_MPI $CDEFINES" -else + else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking MPI Fortran 2008 interface" >&5 printf %s "checking MPI Fortran 2008 interface... " >&6; } ac_ext=${ac_fc_srcext-f} @@ -7430,7 +7433,6 @@ printf "%s\n" "$as_me: Forcing equal values" >&6;} fi FDEFINES="$psblas_cv_define_prepend-DIPK${pac_cv_ipk_size} $FDEFINES"; FDEFINES="$psblas_cv_define_prepend-DLPK${pac_cv_lpk_size} $FDEFINES"; -CDEFINES="-DIPK${pac_cv_ipk_size} -DLPK${pac_cv_lpk_size} $CDEFINES" FLINK="$MPIFC" if test -e penmp || test -e mp; then @@ -7720,6 +7722,7 @@ fi if test x"$pac_cv_openmp" == x"yes" ; then FDEFINES="$psblas_cv_define_prepend-DOPENMP $FDEFINES"; CDEFINES="-DOPENMP $CDEFINES"; + CHAVEOPENMP="#define OPENMP" FCOPT="$FCOPT $pac_cv_openmp_fcopt"; CCOPT="$CCOPT $pac_cv_openmp_ccopt"; CXXOPT="$CXXOPT $pac_cv_openmp_cxxopt"; @@ -10152,7 +10155,7 @@ printf "%s\n" "$as_me: Unknown METIS REAL bitsize." >&6;} fi if test "x$psblas_cv_have_metis" == "xyes" ; then FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $psblas_cv_define_prepend-DMETIS_$pac_cv_metis_idx $psblas_cv_define_prepend-DMETIS_REAL_$pac_cv_metis_real $FDEFINES" - CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES -DMETIS_$pac_cv_metis_idx -DMETIS_REAL_$pac_cv_metis_real" + # CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES -DMETIS_$pac_cv_metis_idx -DMETIS_REAL_$pac_cv_metis_real" METISINCFILE=$psblas_cv_metisincfile CHAVEMETIS="#define HAVE_METIS_" CINTMETIS="#define METIS_$pac_cv_metis_idx" @@ -10366,7 +10369,7 @@ CPPFLAGS="$SAVE_CPPFLAGS"; if test "x$psblas_cv_have_amd" == "xyes" ; then FDEFINES="$psblas_cv_define_prepend-DHAVE_AMD $FDEFINES" - CDEFINES="-DHAVE_AMD_ $psblas_cv_amd_includes $CDEFINES" + # CDEFINES="-DHAVE_AMD_ $psblas_cv_amd_includes $CDEFINES" CHAVEAMD="#define HAVE_AMD_" fi @@ -10385,6 +10388,23 @@ fi if test "x$pac_cv_cuda" == "xyes"; then +if test "x$pac_cv_ipk_size" != "x4"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: For CUDA I need psb_ipk_ to be 4 bytes but it is $pac_cv_ipk_size, disabling CUDA/SPGPU" >&5 +printf "%s\n" "$as_me: For CUDA I need psb_ipk_ to be 4 bytes but it is $pac_cv_ipk_size, disabling CUDA/SPGPU" >&6;} + pac_cv_cuda="no"; + HAVE_CUDA="no"; + CUDA_CC=""; + SPGPU_LIBS=""; + CUDAD=""; + CUDALD=""; + CUDEFINES=""; + CUDA_DEFINES=""; + CUDA_INCLUDES=""; + CUDA_LIBS=""; + FCUDEFINES=""; + CCUDEFINES=""; + CXXCUDEFINES=""; +else # Check whether --with-cudadir was given. @@ -10464,9 +10484,9 @@ LIBS="$SAVE_LIBS" CPPFLAGS="$SAVE_CPPFLAGS" -if test "x$pac_cv_have_cuda" == "xyes"; then + if test "x$pac_cv_have_cuda" == "xyes"; then - ac_ext=c + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' @@ -10597,16 +10617,19 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu LIBS="$SAVE_LIBS" CPPFLAGS="$SAVE_CPPFLAGS" - HAVE_CUDA="yes"; - CUDA_VERSION="$pac_cv_cuda_version"; - CUDA_SHORT_VERSION=$(expr $pac_cv_cuda_version / 1000); - CUDA_DEFINES="-DHAVE_CUDA -DCUDA_SHORT_VERSION=${CUDA_SHORT_VERSION} -DCUDA_VERSION=${CUDA_VERSION}"; - SPGPU_LIBS="-lspgpu"; - CUDAD=cudad; - CUDALD=cudald; - LCUDA="-lpsb_cuda"; - EXTRALDLIBS="-lstdc++"; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: At this point GPUTARGET is $CUDAD $CUDALD" >&5 + HAVE_CUDA="yes"; + CUDA_VERSION="$pac_cv_cuda_version"; + CUDA_SHORT_VERSION=$(expr $pac_cv_cuda_version / 1000); + CUDA_DEFINES="-DHAVE_CUDA -DCUDA_SHORT_VERSION=${CUDA_SHORT_VERSION} -DCUDA_VERSION=${CUDA_VERSION}"; + CHAVECUDA="#define HAVE_CUDA" + CSHORTVCUDA="#define CUDA_SHORT_VERSION ${CUDA_SHORT_VERSION}" + CVERSIONCUDA="#define CUDA_VERSION ${CUDA_VERSION}" + SPGPU_LIBS="-lspgpu"; + CUDAD=cudad; + CUDALD=cudald; + LCUDA="-lpsb_cuda"; + EXTRALDLIBS="-lstdc++"; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: At this point GPUTARGET is $CUDAD $CUDALD" >&5 printf "%s\n" "$as_me: At this point GPUTARGET is $CUDAD $CUDALD" >&6;} @@ -10620,42 +10643,22 @@ else $as_nop fi - if test "x$pac_cv_cudacc" == "x"; then - pac_cv_cudacc="50,60,70,75,80,86"; - CUDA_CC="$pac_cv_cudacc"; - fi - if (( $pac_cv_cuda_version >= 11070 )) - then - CUDEFINES="--dopt=on"; - fi - for cc in `echo $pac_cv_cudacc|sed 's/,/ /gi'` - do - CUDEFINES="$CUDEFINES -gencode arch=compute_$cc,code=sm_$cc"; - done - if test "x$pac_cv_cuda_version" != "xunknown"; then - CUDEFINES="$CUDEFINES ${CUDA_DEFINES}" - FCUDEFINES=" ${CUDA_DEFINES}" - CCUDEFINES=" ${CUDA_DEFINES}" - CXXCUDEFINES=" ${CUDA_DEFINES}" - fi -fi - -if test "x$pac_cv_ipk_size" != "x4"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: For CUDA I need psb_ipk_ to be 4 bytes but it is $pac_cv_ipk_size, disabling CUDA/SPGPU" >&5 -printf "%s\n" "$as_me: For CUDA I need psb_ipk_ to be 4 bytes but it is $pac_cv_ipk_size, disabling CUDA/SPGPU" >&6;} - pac_cv_cuda="no"; - HAVE_CUDA="no"; - CUDA_CC=""; - SPGPU_LIBS=""; - CUDAD=""; - CUDALD=""; - CUDEFINES=""; - CUDA_DEFINES=""; - CUDA_INCLUDES=""; - CUDA_LIBS=""; - FCUDEFINES=""; - CCUDEFINES=""; - CXXCUDEFINES=""; + if test "x$pac_cv_cudacc" == "x"; then + pac_cv_cudacc="50,60,70,75,80,86"; + CUDA_CC="$pac_cv_cudacc"; + fi + if (( $pac_cv_cuda_version >= 11070 )) + then + CUDEFINES="--dopt=on"; + fi + for cc in `echo $pac_cv_cudacc|sed 's/,/ /gi'` + do + CUDEFINES="$CUDEFINES -gencode arch=compute_$cc,code=sm_$cc"; + done + if test "x$pac_cv_cuda_version" != "xunknown"; then + FCUDEFINES=" ${CUDA_DEFINES}" + fi + fi fi fi @@ -11180,6 +11183,10 @@ FDEFINES=$(PSBFDEFINES) + + + + diff --git a/configure.ac b/configure.ac index 891f2705..d760053e 100755 --- a/configure.ac +++ b/configure.ac @@ -136,7 +136,7 @@ PAC_ARG_SERIAL_MPI #Note : we miss the name of the Intel C compiler if test x"$pac_cv_serial_mpi" == x"yes" ; then - FAKEMPI="fakempi.o"; + FAKEMPI="psb_fakempi.o"; MPIFC="$FC"; MPICC="$CC"; MPICXX="$CXX"; @@ -541,7 +541,7 @@ fi # Custom test : do we have a module or include for MPI Fortran interface? if test x"$pac_cv_serial_mpi" == x"yes" ; then FDEFINES="$psblas_cv_define_prepend-DSERIAL_MPI $psblas_cv_define_prepend-DMPI_MOD $FDEFINES"; - CDEFINES="-DSERIAL_MPI $CDEFINES" + dnl CDEFINES="-DSERIAL_MPI $CDEFINES" else PAC_FORTRAN_CHECK_HAVE_MPI_MOD_F08() if test x"$pac_cv_mpi_f08" == x"yes" ; then @@ -573,13 +573,14 @@ if (( $pac_cv_lpk_size < $pac_cv_ipk_size )); then fi FDEFINES="$psblas_cv_define_prepend-DIPK${pac_cv_ipk_size} $FDEFINES"; FDEFINES="$psblas_cv_define_prepend-DLPK${pac_cv_lpk_size} $FDEFINES"; -CDEFINES="-DIPK${pac_cv_ipk_size} -DLPK${pac_cv_lpk_size} $CDEFINES" +dnl CDEFINES="-DIPK${pac_cv_ipk_size} -DLPK${pac_cv_lpk_size} $CDEFINES" FLINK="$MPIFC" PAC_ARG_OPENMP() if test x"$pac_cv_openmp" == x"yes" ; then FDEFINES="$psblas_cv_define_prepend-DOPENMP $FDEFINES"; - CDEFINES="-DOPENMP $CDEFINES"; + CDEFINES="-DOPENMP $CDEFINES"; + CHAVEOPENMP="#define OPENMP" FCOPT="$FCOPT $pac_cv_openmp_fcopt"; CCOPT="$CCOPT $pac_cv_openmp_ccopt"; CXXOPT="$CXXOPT $pac_cv_openmp_cxxopt"; @@ -809,7 +810,7 @@ if test "x$pac_cv_metis_real" == "xunknown" ; then fi if test "x$psblas_cv_have_metis" == "xyes" ; then FDEFINES="$psblas_cv_define_prepend-DHAVE_METIS $psblas_cv_define_prepend-DMETIS_$pac_cv_metis_idx $psblas_cv_define_prepend-DMETIS_REAL_$pac_cv_metis_real $FDEFINES" - CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES -DMETIS_$pac_cv_metis_idx -DMETIS_REAL_$pac_cv_metis_real" + # CDEFINES="-DHAVE_METIS_ $psblas_cv_metis_includes $CDEFINES -DMETIS_$pac_cv_metis_idx -DMETIS_REAL_$pac_cv_metis_real" METISINCFILE=$psblas_cv_metisincfile CHAVEMETIS="#define HAVE_METIS_" CINTMETIS="#define METIS_$pac_cv_metis_idx" @@ -819,52 +820,13 @@ fi PAC_CHECK_AMD if test "x$psblas_cv_have_amd" == "xyes" ; then FDEFINES="$psblas_cv_define_prepend-DHAVE_AMD $FDEFINES" - CDEFINES="-DHAVE_AMD_ $psblas_cv_amd_includes $CDEFINES" + # CDEFINES="-DHAVE_AMD_ $psblas_cv_amd_includes $CDEFINES" CHAVEAMD="#define HAVE_AMD_" fi PAC_ARG_CUDA() if test "x$pac_cv_cuda" == "xyes"; then - -PAC_CHECK_CUDA() - -if test "x$pac_cv_have_cuda" == "xyes"; then - - PAC_CHECK_CUDA_VERSION() - dnl PAC_CHECK_SPGPU() - HAVE_CUDA="yes"; - CUDA_VERSION="$pac_cv_cuda_version"; - CUDA_SHORT_VERSION=$(expr $pac_cv_cuda_version / 1000); - CUDA_DEFINES="-DHAVE_CUDA -DCUDA_SHORT_VERSION=${CUDA_SHORT_VERSION} -DCUDA_VERSION=${CUDA_VERSION}"; - SPGPU_LIBS="-lspgpu"; - CUDAD=cudad; - CUDALD=cudald; - LCUDA="-lpsb_cuda"; - EXTRALDLIBS="-lstdc++"; - AC_MSG_NOTICE([At this point GPUTARGET is $CUDAD $CUDALD]) - - PAC_ARG_WITH_CUDACC() - if test "x$pac_cv_cudacc" == "x"; then - pac_cv_cudacc="50,60,70,75,80,86"; - CUDA_CC="$pac_cv_cudacc"; - fi - if (( $pac_cv_cuda_version >= 11070 )) - then - CUDEFINES="--dopt=on"; - fi - for cc in `echo $pac_cv_cudacc|sed 's/,/ /gi'` - do - CUDEFINES="$CUDEFINES -gencode arch=compute_$cc,code=sm_$cc"; - done - if test "x$pac_cv_cuda_version" != "xunknown"; then - CUDEFINES="$CUDEFINES ${CUDA_DEFINES}" - FCUDEFINES=" ${CUDA_DEFINES}" - CCUDEFINES=" ${CUDA_DEFINES}" - CXXCUDEFINES=" ${CUDA_DEFINES}" - fi -fi - if test "x$pac_cv_ipk_size" != "x4"; then AC_MSG_NOTICE([For CUDA I need psb_ipk_ to be 4 bytes but it is $pac_cv_ipk_size, disabling CUDA/SPGPU]) pac_cv_cuda="no"; @@ -880,6 +842,48 @@ if test "x$pac_cv_ipk_size" != "x4"; then FCUDEFINES=""; CCUDEFINES=""; CXXCUDEFINES=""; +else + + PAC_CHECK_CUDA() + + if test "x$pac_cv_have_cuda" == "xyes"; then + + PAC_CHECK_CUDA_VERSION() + dnl PAC_CHECK_SPGPU() + HAVE_CUDA="yes"; + CUDA_VERSION="$pac_cv_cuda_version"; + CUDA_SHORT_VERSION=$(expr $pac_cv_cuda_version / 1000); + CUDA_DEFINES="-DHAVE_CUDA -DCUDA_SHORT_VERSION=${CUDA_SHORT_VERSION} -DCUDA_VERSION=${CUDA_VERSION}"; + CHAVECUDA="#define HAVE_CUDA" + CSHORTVCUDA="#define CUDA_SHORT_VERSION ${CUDA_SHORT_VERSION}" + CVERSIONCUDA="#define CUDA_VERSION ${CUDA_VERSION}" + SPGPU_LIBS="-lspgpu"; + CUDAD=cudad; + CUDALD=cudald; + LCUDA="-lpsb_cuda"; + EXTRALDLIBS="-lstdc++"; + AC_MSG_NOTICE([At this point GPUTARGET is $CUDAD $CUDALD]) + + PAC_ARG_WITH_CUDACC() + if test "x$pac_cv_cudacc" == "x"; then + pac_cv_cudacc="50,60,70,75,80,86"; + CUDA_CC="$pac_cv_cudacc"; + fi + if (( $pac_cv_cuda_version >= 11070 )) + then + CUDEFINES="--dopt=on"; + fi + for cc in `echo $pac_cv_cudacc|sed 's/,/ /gi'` + do + CUDEFINES="$CUDEFINES -gencode arch=compute_$cc,code=sm_$cc"; + done + if test "x$pac_cv_cuda_version" != "xunknown"; then + dnl CUDEFINES="$CUDEFINES ${CUDA_DEFINES}" + FCUDEFINES=" ${CUDA_DEFINES}" + dnl CCUDEFINES=" ${CUDA_DEFINES}" + dnl CXXCUDEFINES=" ${CUDA_DEFINES}" + fi + fi fi fi @@ -1027,10 +1031,14 @@ FDEFINES=$(PSBFDEFINES) AC_SUBST(IPKDEF) AC_SUBST(LPKDEF) AC_SUBST(CSERIALMPI) +AC_SUBST(CHAVEOPENMP) AC_SUBST(CHAVEMETIS) AC_SUBST(CINTMETIS) AC_SUBST(CREALMETIS) AC_SUBST(CHAVEAMD) +AC_SUBST(CHAVECUDA) +AC_SUBST(CSHORTVCUDA) +AC_SUBST(CVERSIONCUDA) AC_SUBST(PSBLASRULES) AC_SUBST(LIBDIR) AC_SUBST(RSB_LIBS) @@ -1078,6 +1086,7 @@ AC_SUBST(LRSB) AC_CONFIG_FILES([Make.inc]) AC_CONFIG_FILES([base/modules/psb_config.h]) +dnl AC_CONFIG_FILES([base/modules/psb_cxxconfig.h]) AC_CONFIG_FILES([util/psb_metis_int.h]) AC_OUTPUT() #AC_OUTPUT(Make.inc Makefile)