mirror of
https://github.com/TREX-CoE/Sherman-Morrison.git
synced 2024-08-25 14:41:45 +02:00
Made lapack/MKL inclusion in code dependent on preprocessor macro 'MKL'. Automatic build should now succeed.
This commit is contained in:
parent
6c9c68c93d
commit
c8df88b4ef
7
Makefile
7
Makefile
@ -22,12 +22,15 @@ else
|
|||||||
First run: $$ source smvars.sh {intel | llvm | gnu})
|
First run: $$ source smvars.sh {intel | llvm | gnu})
|
||||||
endif
|
endif
|
||||||
CXXFLAGS = $(OPT) $(ARCH) $(DEBUG) $(THRESHOLD) -fPIC
|
CXXFLAGS = $(OPT) $(ARCH) $(DEBUG) $(THRESHOLD) -fPIC
|
||||||
|
ifeq ($(MKL),-DMKL)
|
||||||
|
CXXFLAGS += $(MKL)
|
||||||
|
LFLAGS = -mkl=sequential
|
||||||
|
H5LFLAGS = -L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl
|
||||||
|
endif
|
||||||
FFLAGS = $(CXXFLAGS)
|
FFLAGS = $(CXXFLAGS)
|
||||||
H5CXX = h5c++
|
H5CXX = h5c++
|
||||||
H5CXXFLAGS = $(CXXFLAGS)
|
H5CXXFLAGS = $(CXXFLAGS)
|
||||||
FLIBS = -lstdc++
|
FLIBS = -lstdc++
|
||||||
LFLAGS = -mkl=sequential
|
|
||||||
H5LFLAGS = -L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl
|
|
||||||
|
|
||||||
## Includes and dependencies
|
## Includes and dependencies
|
||||||
INCLUDE = -I $(INC_DIR)/
|
INCLUDE = -I $(INC_DIR)/
|
||||||
|
@ -4,8 +4,9 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#ifdef MKL
|
||||||
#include <mkl_lapacke.h>
|
#include <mkl_lapacke.h>
|
||||||
|
#endif
|
||||||
// #define DEBUG
|
// #define DEBUG
|
||||||
|
|
||||||
#ifndef THRESHOLD
|
#ifndef THRESHOLD
|
||||||
@ -19,7 +20,9 @@ void selectLargestDenominator(unsigned int l, unsigned int N_updates,
|
|||||||
unsigned int *Updates_index, unsigned int *p,
|
unsigned int *Updates_index, unsigned int *p,
|
||||||
double ***ylk);
|
double ***ylk);
|
||||||
|
|
||||||
|
#ifdef MKL
|
||||||
lapack_int inverse(double *A, unsigned n);
|
lapack_int inverse(double *A, unsigned n);
|
||||||
|
#endif
|
||||||
|
|
||||||
template <typename T> void showScalar(T scalar, std::string name) {
|
template <typename T> void showScalar(T scalar, std::string name) {
|
||||||
std::cout << name << " = " << scalar << std::endl << std::endl;
|
std::cout << name << " = " << scalar << std::endl << std::endl;
|
||||||
|
40
smvars.sh
40
smvars.sh
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
unset THRESHOLD
|
unset THRESHOLD
|
||||||
|
unset MKL
|
||||||
ENV=$1
|
ENV=$1
|
||||||
THRESHOLD=$2
|
|
||||||
|
|
||||||
## Set Sherman-Morrison root dir
|
## Set Sherman-Morrison root dir
|
||||||
PWD=$(pwd)
|
PWD=$(pwd)
|
||||||
@ -22,22 +22,26 @@ export SMROOT
|
|||||||
## Set environment for hdf5-tools and Makefile
|
## Set environment for hdf5-tools and Makefile
|
||||||
case $ENV in
|
case $ENV in
|
||||||
intel)
|
intel)
|
||||||
|
echo "* SM build environment set to 'intel'"
|
||||||
export HDF5_CXX=icpc
|
export HDF5_CXX=icpc
|
||||||
export HDF5_CXXLINKER=icpc
|
export HDF5_CXXLINKER=icpc
|
||||||
export ENV=INTEL
|
export ENV=INTEL
|
||||||
;;
|
;;
|
||||||
llvm)
|
llvm)
|
||||||
|
echo "* SM build environment set to 'llvm'"
|
||||||
export HDF5_CXX=clang++
|
export HDF5_CXX=clang++
|
||||||
export HDF5_CXXLINKER=clang++
|
export HDF5_CXXLINKER=clang++
|
||||||
export ENV=LLVM
|
export ENV=LLVM
|
||||||
;;
|
;;
|
||||||
vfc)
|
vfc)
|
||||||
|
echo "* SM build environment set to 'vfc'"
|
||||||
export HDF5_CXX=clang++
|
export HDF5_CXX=clang++
|
||||||
export HDF5_CXXLINKER=clang++
|
export HDF5_CXXLINKER=clang++
|
||||||
export ENV=LLVM
|
export ENV=LLVM
|
||||||
export VFC_BACKENDS="libinterflop_ieee.so --count-op"
|
export VFC_BACKENDS="libinterflop_ieee.so --count-op"
|
||||||
;;
|
;;
|
||||||
gnu)
|
gnu)
|
||||||
|
echo "* SM build environment set to 'gnu'"
|
||||||
export HDF5_CXX=g++
|
export HDF5_CXX=g++
|
||||||
export HDF5_CXXLINKER=g++
|
export HDF5_CXXLINKER=g++
|
||||||
export ENV=GNU
|
export ENV=GNU
|
||||||
@ -45,7 +49,10 @@ case $ENV in
|
|||||||
*)
|
*)
|
||||||
echo "Unknown environment descriptor given."
|
echo "Unknown environment descriptor given."
|
||||||
echo "Usage: source smvars.sh {intel | llvm | vfc | gnu}"
|
echo "Usage: source smvars.sh {intel | llvm | vfc | gnu}"
|
||||||
|
echo "Usage: source smvars.sh {intel | llvm | vfc | gnu} [mkl]"
|
||||||
echo "Usage: source smvars.sh {intel | llvm | vfc | gnu} [threshold]"
|
echo "Usage: source smvars.sh {intel | llvm | vfc | gnu} [threshold]"
|
||||||
|
echo "Usage: source smvars.sh {intel | llvm | vfc | gnu} [mkl] [threshold]"
|
||||||
|
echo "Usage: source smvars.sh {intel | llvm | vfc | gnu} [threshold] [mkl]"
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@ -57,8 +64,33 @@ then
|
|||||||
export SMVARS=true
|
export SMVARS=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## If a threshold is provided, export compiler flag
|
## Argument parsing
|
||||||
if [[ $# -gt 1 ]]
|
if [[ $# -eq 1 ]]
|
||||||
then
|
then
|
||||||
export THRESHOLD="-DTHRESHOLD=$THRESHOLD"
|
echo "* Default threshold of '1e-3' will be used in next build."
|
||||||
fi
|
fi
|
||||||
|
if [[ $# -eq 2 ]]
|
||||||
|
then
|
||||||
|
if [[ $2 == mkl ]]
|
||||||
|
then
|
||||||
|
echo "* oneMKL-dependent parts of the code are enable in next build."
|
||||||
|
echo "* Default threshold of '1e-3' will be used in next build."
|
||||||
|
export MKL="-DMKL"
|
||||||
|
else
|
||||||
|
echo "* Threshold of '$2' will be used in next build."
|
||||||
|
export THRESHOLD="-DTHRESHOLD=$2"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ $# -eq 3 ]]
|
||||||
|
then
|
||||||
|
echo "* oneMKL-dependent parts of the code are enable in next build."
|
||||||
|
export MKL="-DMKL"
|
||||||
|
if [[ $2 == mkl ]]
|
||||||
|
then
|
||||||
|
echo "* Threshold of '$3' will be used in next build."
|
||||||
|
export THRESHOLD="-DTHRESHOLD=$3"
|
||||||
|
else
|
||||||
|
echo "* Threshold of '$2' will be used in next build."
|
||||||
|
export THRESHOLD="-DTHRESHOLD=$2"
|
||||||
|
fi
|
||||||
|
fi
|
@ -40,6 +40,7 @@ void selectLargestDenominator(unsigned int l, unsigned int N_updates,
|
|||||||
Switch(p, l, lbar);
|
Switch(p, l, lbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MKL
|
||||||
// Inplace inverse n x n matrix A.
|
// Inplace inverse n x n matrix A.
|
||||||
// returns:
|
// returns:
|
||||||
// ret = 0 on success
|
// ret = 0 on success
|
||||||
@ -57,3 +58,4 @@ lapack_int inverse(double *A, unsigned n) {
|
|||||||
ret = LAPACKE_dgetri(LAPACK_COL_MAJOR, n, A, n, ipiv);
|
ret = LAPACKE_dgetri(LAPACK_COL_MAJOR, n, A, n, ipiv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
@ -81,9 +81,11 @@ int test_cycle(H5File file, int cycle, std::string version, double tolerance) {
|
|||||||
SM3(slater_inverse, dim, nupdates, u, col_update_index);
|
SM3(slater_inverse, dim, nupdates, u, col_update_index);
|
||||||
} else if (version == "sm4") {
|
} else if (version == "sm4") {
|
||||||
SM4(slater_inverse, dim, nupdates, u, col_update_index);
|
SM4(slater_inverse, dim, nupdates, u, col_update_index);
|
||||||
|
#ifdef MKL
|
||||||
} else if (version == "lapack") {
|
} else if (version == "lapack") {
|
||||||
memcpy(slater_inverse, slater_matrix, dim * dim * sizeof(double));
|
memcpy(slater_inverse, slater_matrix, dim * dim * sizeof(double));
|
||||||
inverse(slater_inverse, dim);
|
inverse(slater_inverse, dim);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
std::cerr << "Unknown version " << version << std::endl;
|
std::cerr << "Unknown version " << version << std::endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user