eldronzhou/SDPR

Fix the error of Intel MKL when missing core libraries, or on AMD CPU

Closed this issue · 1 comments

Intel MKL FATAL ERROR: Cannot load libmkl_core.so.

It can be fixed by using OpenBLAS.

  1. Download openblas and compile it.
    wget https://github.com/xianyi/OpenBLAS/releases/download/v0.3.13/OpenBLAS-0.3.13.zip
    unzip OpenBLAS-0.3.13.zip; cd OpenBLAS-0.3.13
    make

  2. After successful compilation, you should have a file named libopenblas.a. This is the static library we will use to replace Intel MKL. An example Makefile for compilation is given below.

CC = g++

CFLAGS = -g3 -O3 -DHAVE_INLINE -march=native -Igsl/include -std=c++11 -Wall -Wextra -pedantic

all: SDPR

SDPR: SDPR_io.o LD.o parse_gen.o mcmc.o function_pool.o main.o
	${CC} ${CFLAGS} SDPR_io.o LD.o parse_gen.o mcmc.o function_pool.o main.o -Lgsl/lib/ -Wl,-rpath gsl/lib/ -lgsl -lpthread -lm your_path_to_openBLAS_dir/libopenblas.a -o SDPR

SDPR_io.o: SDPR_io.cpp SDPR_io.h
	${CC} ${CFLAGS} -c SDPR_io.cpp

LD.o: LD.cpp LD.h SDPR_io.h
	${CC} ${CFLAGS} -pthread -c LD.cpp

parse_gen.o: parse_gen.cpp parse_gen.h
	${CC} ${CFLAGS} -c parse_gen.cpp

function_pool.o: function_pool.cpp function_pool.h
	${CC} ${CFLAGS} -c function_pool.cpp

mcmc.o: mcmc.cpp mcmc.h parse_gen.h function_pool.h sse_mathfun.h
	${CC} ${CFLAGS} -pthread -c mcmc.cpp

main.o: main.cpp parse_gen.h mcmc.h
	${CC} ${CFLAGS} -c main.cpp

clean:
	rm -f *.o