Skip to content

Commit 0cf379a

Browse files
committed
update makefile
1 parent 79fca24 commit 0cf379a

File tree

2 files changed

+40
-41
lines changed

2 files changed

+40
-41
lines changed

Makefile

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
######################### configure ################
22

3-
# for mkl
4-
# MKLROOT=$HOME/intel/oneapi/mkl/latest # for linux
5-
# MKLROOT=/opt/intel/oneapi/mkl/latest # for mac
3+
# MKLROOT=/opt/intel/oneapi/mkl/latest
4+
MKLROOT =
5+
# /opt/intel/oneapi/compiler/latest/lib/
6+
ONEAPI_COMPILER := ${MKLROOT}
7+
ONEAPI_OMP5 := $(ONEAPI_COMPILER)/lib/libiomp5.a
68
# make sure libiomp5 can be found on mac
79
# ln -s /opt/intel/oneapi/compiler/latest/mac/compiler/lib/libiomp5.dylib /opt/intel/oneapi/mkl/latest/lib/
8-
MKLROOT =
910

1011
# install openblas lapack on mac with brew install openblas lapack
1112
# OPENBLAS_ROOT = /usr/local/opt/openblas
@@ -20,11 +21,15 @@ ACCELERATE_ROOT =
2021
# by default dynamical linking
2122
STATIC = 0
2223
# only if static = 1, IOMP5 works
23-
IOMP5 = 0
24+
IOMP5 = 1
25+
26+
# static libz
27+
STATIC_LIBZ := /usr/lib64/libz.a # /usr/lib/x86_64-linux-gnu/libz.a
28+
2429

2530
########################### end ###########################
2631

27-
VERSION=0.4.9
32+
VERSION=0.5.0
2833
# detect OS architecture and add flags
2934
Platform := $(shell uname -s)
3035

@@ -68,12 +73,9 @@ ifeq ($(strip $(STATIC)),1)
6873
# CFLAGS += -Xpreprocessor -fopenmp
6974
endif
7075
else
71-
SLIBS += /usr/lib64/libz.a
72-
ifeq ($(strip $(IOMP5)), 1)
73-
CXXFLAGS += -static-libgcc -static-libstdc++
74-
else
75-
CXXFLAGS += -static
76-
endif
76+
SLIBS += ${STATIC_LIBZ}
77+
# CXXFLAGS += -static-libgcc -static-libstdc++
78+
CXXFLAGS += -static
7779
endif
7880
else
7981
DLIBS += -lz
@@ -86,15 +88,14 @@ ifeq ($(Platform),Linux)
8688
ifneq ($(strip $(MKLROOT)),)
8789
MYFLAGS += -DWITH_MKL -DEIGEN_USE_MKL_ALL
8890
INC += -I${MKLROOT}/include/
89-
LPATHS += -L${MKLROOT}/lib -L${MKLROOT}/lib/intel64
9091
ifeq ($(strip $(STATIC)),1)
9192
ifeq ($(strip $(IOMP5)), 1)
92-
SLIBS += -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -liomp5 -lpthread
93+
SLIBS += -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a ${ONEAPI_OMP5} -Wl,--end-group -L${ONEAPI_COMPILER}/lib -lpthread
9394
else
9495
SLIBS += -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_lp64.a ${MKLROOT}/lib/intel64/libmkl_gnu_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -lgomp -lpthread
9596
endif
9697
else
97-
DLIBS += -Wl,--no-as-needed -Wl,-rpath,${MKLROOT}/lib,-rpath,${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread
98+
DLIBS += -Wl,--no-as-needed -Wl,-rpath,${ONEAPI_COMPILER}/lib,-rpath,${MKLROOT}/lib/intel64 -L${ONEAPI_COMPILER}/lib -L${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread
9899
endif
99100

100101
else ifneq ($(strip $(OPENBLAS_ROOT)),)
@@ -152,14 +153,14 @@ OBJ = src/Arnoldi.o src/Halko.o src/Data.o src/Utils.o src/Cmd.o \
152153

153154
SLIBS += ./external/bgen/bgenlib.a ./external/zstd/lib/libzstd.a
154155

155-
LIBS += ${SLIBS} ${DLIBS} -lm -ldl
156+
LIBS += ${SLIBS} ${DLIBS} -ldl -lm
156157

157158
.PHONY: all clean ld_matrix ld_r2 ld_prune ld_clump ld_tests
158159

159160
all: ${program}
160161

161162
${program}: zstdlib bgenlib pcaonelib src/Main.o
162-
$(CXX) $(CXXFLAGS) -o $(program) src/Main.o ${PCALIB} ${LPATHS} ${LIBS} ${LDFLAGS}
163+
$(CXX) $(CXXFLAGS) -o $(program) src/Main.o ${PCALIB} ${LPATHS} ${LIBS}
163164

164165
%.o: %.cpp
165166
${CXX} ${CXXFLAGS} ${MYFLAGS} -o $@ -c $< ${INC}

src/Halko.cpp

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Mat2D RsvdOpData::computeU(const Mat2D& G, const Mat2D& H) {
3636
// B is size x ncol
3737
// R.T * B = H.T
3838
Mat2D B = R.transpose().fullPivHouseholderQr().solve(H.transpose());
39-
Eigen::BDCSVD<Mat2D> svd(B, Eigen::ComputeThinU | Eigen::ComputeThinV);
39+
Eigen::JacobiSVD<Mat2D> svd(B, Eigen::ComputeThinU | Eigen::ComputeThinV);
4040
// B is K x nsamples, thus we use matrixV() for PCs
4141
return svd.matrixV().leftCols(nk);
4242
}
@@ -64,7 +64,7 @@ void RsvdOpData::computeUSV(int p, double tol) {
6464
// B is size x ncol
6565
// R.T * B = H.T
6666
B.noalias() = R.transpose().fullPivHouseholderQr().solve(H.transpose());
67-
Eigen::BDCSVD<Mat2D> svd(B, Eigen::ComputeThinU | Eigen::ComputeThinV);
67+
Eigen::JacobiSVD<Mat2D> svd(B, Eigen::ComputeThinU | Eigen::ComputeThinV);
6868
U = svd.matrixV().leftCols(nk);
6969
if (pi > 0) {
7070
if (data->params.mev)
@@ -206,17 +206,16 @@ void FancyRsvdOpData::computeGandH(Mat2D& G, Mat2D& H, int pi) {
206206
if ((b + 1) < bandsize && !adjacent) continue;
207207

208208
// add up H and update Omg
209-
if ((i == bandsize) || (i == bandsize / 2) || adjacent) {
210-
H = H1 + H2;
211-
Eigen::HouseholderQR<Mat2D> qr(H);
212-
Omg.noalias() = qr.householderQ() * Mat2D::Identity(cols(), size);
213-
PCAone::flipOmg(Omg2, Omg);
214-
if (i == bandsize) {
215-
H1.setZero();
216-
i = 0;
217-
} else {
218-
H2.setZero();
219-
}
209+
if (!((i == bandsize) || (i == bandsize / 2) || adjacent)) continue;
210+
H = H1 + H2;
211+
Eigen::HouseholderQR<Mat2D> qr(H);
212+
Omg.noalias() = qr.householderQ() * Mat2D::Identity(cols(), size);
213+
PCAone::flipOmg(Omg2, Omg);
214+
if (i == bandsize) {
215+
H1.setZero();
216+
i = 0;
217+
} else {
218+
H2.setZero();
220219
}
221220
}
222221

@@ -253,17 +252,16 @@ void FancyRsvdOpData::computeGandH(Mat2D& G, Mat2D& H, int pi) {
253252

254253
// cao.print("i:", i, ",j:", j, ",bandsize:", bandsize, ",pi:", pi);
255254
// add up H and update Omg
256-
if ((i == bandsize) || (i == bandsize / 2) || adjacent) {
257-
H = H1 + H2;
258-
Eigen::HouseholderQR<Mat2D> qr(H);
259-
Omg.noalias() = qr.householderQ() * Mat2D::Identity(cols(), size);
260-
PCAone::flipOmg(Omg2, Omg);
261-
if (i == bandsize) {
262-
H1.setZero();
263-
i = 0;
264-
} else {
265-
H2.setZero();
266-
}
255+
if (!((i == bandsize) || (i == bandsize / 2) || adjacent)) continue;
256+
H = H1 + H2;
257+
Eigen::HouseholderQR<Mat2D> qr(H);
258+
Omg.noalias() = qr.householderQ() * Mat2D::Identity(cols(), size);
259+
PCAone::flipOmg(Omg2, Omg);
260+
if (i == bandsize) {
261+
H1.setZero();
262+
i = 0;
263+
} else {
264+
H2.setZero();
267265
}
268266
}
269267
}

0 commit comments

Comments
 (0)