From bbf43083519315ff9832e14b50dc2fa8c9224236 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Tue, 3 Jan 2023 22:18:15 +0700 Subject: [PATCH 1/8] Support PPC in Makefile --- Makefile | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 50b2fa0..e7afc62 100644 --- a/Makefile +++ b/Makefile @@ -83,7 +83,6 @@ CC = gcc ifeq ($(CPUVENDOR),GenuineIntel) CC = icc endif -CFLAGS += -march=native CFLAGS += -m64 CFLAGS += -march=native DEFINE += -D__x86_64__ @@ -91,6 +90,18 @@ ifeq ($(HAS_MKL), 1) DEFINE += -D__MKL__ endif endif +ifeq ($(ARCH),ppc) +CC = gcc +CFLAGS += -mtune=native +CFLAGS += -arch ppc +DEFINE += -Dppc +endif +ifeq ($(ARCH),ppc64) +CC = gcc +CFLAGS += -mtune=native +CFLAGS += -arch ppc64 +DEFINE += -Dppc64 +endif ifeq ($(CC), gcc) endif ifeq ($(CC), icc) From 99b9f051c06d193c7d7725c95fd9b32e3408e804 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Tue, 3 Jan 2023 23:11:36 +0700 Subject: [PATCH 2/8] Makefile: cleanup --- Makefile | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index e7afc62..a816e03 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ OPENMP = 1 ASM_COMPILE = 0 # MKL_INT 和 ALPHA_INT 是否使用64位, 1 使用64位,0 使用32位。 INT_64 = 0 -# 表示编不编译 +# 表示编不编译 HIP_ON = $(shell echo $${HIP_ON:-0}) # PLAIN 依赖 mkl PLAIN_ON = $(shell echo $${PLAIN_ON:-1}) @@ -19,7 +19,7 @@ PLAIN_ON = 0 ROOT = $(shell pwd) LIB_DIR = $(ROOT)/lib -INC_DIR = $(ROOT)/include +INC_DIR = $(ROOT)/include OBJ_DIR = $(ROOT)/obj BIN_DIR = $(ROOT)/bin ASM_DIR = $(ROOT)/asm @@ -34,7 +34,7 @@ ROCSP_DIR = /home/gcx/csparse endif LIBNAME = libalpha_spblas -INC += -I$(INC_DIR) +INC += -I$(INC_DIR) ifeq ($(HIP_ON),1) INC += -I$(ROCM_DIR)/hip/include @@ -47,15 +47,15 @@ MAKE = make CC = gcc HCC= hipcc AR = ar -LDFLAGS = -L$(LIB_DIR) +LDFLAGS = -L$(LIB_DIR) -CPPFLAGS += -std=c++11 -fPIC -Ofast -I$(INC_DIR) +CPPFLAGS += -std=c++11 -fPIC -Ofast -I$(INC_DIR) CFLAGS += -Ofast CFLAGS += -std=c11 CFLAGS += -g ifeq ($(OPENMP), 1) -CFLAGS += -fopenmp -CPPFLAGS += -fopenmp +CFLAGS += -fopenmp +CPPFLAGS += -fopenmp endif # CFLAGS += -mcmodel=large CFLAGS += -Wall @@ -112,9 +112,8 @@ DEFINE += -DMKL_ILP64 DEFINE += -DALPHA_INT=int64_t endif -CEXTRAFLAGS += -lstdc++ -L$(ROCM_DIR)/hip/lib -L$(ROCM_DIR)/rocsparse/lib -lamdhip64 -lrocsparse - ifeq ($(HIP_ON),1) +CEXTRAFLAGS += -lstdc++ -L$(ROCM_DIR)/hip/lib -L$(ROCM_DIR)/rocsparse/lib -lamdhip64 -lrocsparse LDFLAGS += $(CEXTRAFLAGS) DEFINE += -D__DCU__ endif @@ -125,20 +124,20 @@ endif export MAKE CC HCC AR CFLAGS CPPFLAGS CEXTRAFLAGS ARCH LDFLAGS -.PHONY : clean lib test tool +.PHONY : clean lib test tool all : lib test tool so -lib : +lib : $(MAKE) -C src $(@F) so : lib - $(CC) -shared -o $(LIB_DIR)/$(LIBNAME).so -Wl,--whole-archive $(LIB_DIR)/$(LIBNAME).a -Wl,--no-whole-archive + $(CC) -shared -o $(LIB_DIR)/$(LIBNAME).so -Wl,--whole-archive $(LIB_DIR)/$(LIBNAME).a -Wl,--no-whole-archive test : lib $(MAKE) -C test $(@F) -# tool : +# tool : # $(MAKE) -C tools $(@F) clean : From 4204773d9debe898d72f52216779191c88459a27 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Tue, 3 Jan 2023 23:56:12 +0700 Subject: [PATCH 3/8] Fix for missing COMPAR_FN_T --- include/alphasparse/opt.h | 5 +++++ tools/reversible_sparse_gen.c | 5 +++++ tools/sparse_gen.c | 5 +++++ tools/sparse_gen_symv.c | 5 +++++ 4 files changed, 20 insertions(+) diff --git a/include/alphasparse/opt.h b/include/alphasparse/opt.h index 68cc4e7..20693d7 100644 --- a/include/alphasparse/opt.h +++ b/include/alphasparse/opt.h @@ -5,3 +5,8 @@ */ #include "alphasparse/util/thread.h" + +#ifndef __COMPAR_FN_T +#define __COMPAR_FN_T + typedef int (*__compar_fn_t)(const void *, const void *); +#endif diff --git a/tools/reversible_sparse_gen.c b/tools/reversible_sparse_gen.c index ceedf8e..39bd20d 100644 --- a/tools/reversible_sparse_gen.c +++ b/tools/reversible_sparse_gen.c @@ -8,6 +8,11 @@ #include #include +#ifndef __COMPAR_FN_T +#define __COMPAR_FN_T + typedef int (*__compar_fn_t)(const void *, const void *); +#endif + inline static int random_int(int m) { return rand() % m; diff --git a/tools/sparse_gen.c b/tools/sparse_gen.c index 00ec853..c64b3d4 100644 --- a/tools/sparse_gen.c +++ b/tools/sparse_gen.c @@ -8,6 +8,11 @@ #include #include +#ifndef __COMPAR_FN_T +#define __COMPAR_FN_T + typedef int (*__compar_fn_t)(const void *, const void *); +#endif + inline static int random_int(int m) { return rand() % m; diff --git a/tools/sparse_gen_symv.c b/tools/sparse_gen_symv.c index 1d7891d..2ad4c35 100644 --- a/tools/sparse_gen_symv.c +++ b/tools/sparse_gen_symv.c @@ -8,6 +8,11 @@ #include #include +#ifndef __COMPAR_FN_T +#define __COMPAR_FN_T + typedef int (*__compar_fn_t)(const void *, const void *); +#endif + inline static int random_int(int m) { return rand() % m; From 6728ab4a04babae80dd818e10fbaadb665d07a80 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Wed, 4 Jan 2023 00:06:22 +0700 Subject: [PATCH 4/8] Use stdlib.h instead of malloc.h --- src/util/malloc.c | 2 +- src/util_cpp/malloc_dcu.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/util/malloc.c b/src/util/malloc.c index 824611f..75a9aa9 100644 --- a/src/util/malloc.c +++ b/src/util/malloc.c @@ -5,7 +5,7 @@ #include "alphasparse/util/malloc.h" -#include +#include #include #include diff --git a/src/util_cpp/malloc_dcu.cpp b/src/util_cpp/malloc_dcu.cpp index 28f248a..030062b 100644 --- a/src/util_cpp/malloc_dcu.cpp +++ b/src/util_cpp/malloc_dcu.cpp @@ -10,7 +10,7 @@ extern "C" { } #endif -#include +#include #include #include #ifdef __DCU__ From b77bf55ada0d97fc4f8ef8a075b6c5f9cac060e5 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Wed, 4 Jan 2023 01:12:05 +0700 Subject: [PATCH 5/8] Remove some unneeded spaces --- Makefile.tail | 28 ++++++++++++++-------------- test/Makefile | 2 +- test/dcu/Makefile | 2 +- test/x86_64/Makefile | 6 +++--- tools/Makefile | 2 +- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Makefile.tail b/Makefile.tail index edddeed..f703a34 100644 --- a/Makefile.tail +++ b/Makefile.tail @@ -51,15 +51,15 @@ SPBLASOBJS = $(XSSPBLASOBJS) $(XDSPBLASOBJS) $(XCSPBLASOBJS) $(XZSPBLASOBJS) \ $(XSSPBLASOBJSCPP) $(XDSPBLASOBJSCPP) $(XCSPBLASOBJSCPP) $(XZSPBLASOBJSCPP) \ $(FSSPBLASOBJSCPP) $(FDSPBLASOBJSCPP) $(CCSPBLASOBJSCPP) $(CZSPBLASOBJSCPP) -$(XSSPBLASOBJS) $(FSSPBLASOBJS): override CFLAGS += -UDOUBLE -UCOMPLEX -$(XDSPBLASOBJS) $(FDSPBLASOBJS): override CFLAGS += -DDOUBLE -UCOMPLEX -$(XCSPBLASOBJS) $(CCSPBLASOBJS): override CFLAGS += -UDOUBLE -DCOMPLEX -$(XZSPBLASOBJS) $(CZSPBLASOBJS): override CFLAGS += -DDOUBLE -DCOMPLEX +$(XSSPBLASOBJS) $(FSSPBLASOBJS): override CFLAGS += -UDOUBLE -UCOMPLEX +$(XDSPBLASOBJS) $(FDSPBLASOBJS): override CFLAGS += -DDOUBLE -UCOMPLEX +$(XCSPBLASOBJS) $(CCSPBLASOBJS): override CFLAGS += -UDOUBLE -DCOMPLEX +$(XZSPBLASOBJS) $(CZSPBLASOBJS): override CFLAGS += -DDOUBLE -DCOMPLEX -$(XSSPBLASOBJSCPP) $(FSSPBLASOBJSCPP): override CPPFLAGS += -UDOUBLE -UCOMPLEX -$(XDSPBLASOBJSCPP) $(FDSPBLASOBJSCPP): override CPPFLAGS += -DDOUBLE -UCOMPLEX -$(XCSPBLASOBJSCPP) $(CCSPBLASOBJSCPP): override CPPFLAGS += -UDOUBLE -DCOMPLEX -$(XZSPBLASOBJSCPP) $(CZSPBLASOBJSCPP): override CPPFLAGS += -DDOUBLE -DCOMPLEX +$(XSSPBLASOBJSCPP) $(FSSPBLASOBJSCPP): override CPPFLAGS += -UDOUBLE -UCOMPLEX +$(XDSPBLASOBJSCPP) $(FDSPBLASOBJSCPP): override CPPFLAGS += -DDOUBLE -UCOMPLEX +$(XCSPBLASOBJSCPP) $(CCSPBLASOBJSCPP): override CPPFLAGS += -UDOUBLE -DCOMPLEX +$(XZSPBLASOBJSCPP) $(CZSPBLASOBJSCPP): override CPPFLAGS += -DDOUBLE -DCOMPLEX .SECONDEXPANSION: @@ -121,19 +121,19 @@ $(CZSPBLASOBJSCPP) : $(OBJ_DIR)/%.o : $$(subst _z_,_c_,%.cpp) $(HCC) -c -o $@ $^ $(CPPFLAGS) -UONAME -DONAME=$(*F) $(COMMONOBJS) : $(OBJ_DIR)/%.o : %.c - $(CC) -c -o $@ $^ $(CFLAGS) -UONAME + $(CC) -c -o $@ $^ $(CFLAGS) -UONAME -$(COMMONOBJSCPP) : $(OBJ_DIR)/%.o : %.cpp - $(HCC) -c -o $@ $^ $(CPPFLAGS) -UONAME +$(COMMONOBJSCPP) : $(OBJ_DIR)/%.o : %.cpp + $(HCC) -c -o $@ $^ $(CPPFLAGS) -UONAME $(ASMOBJS) : $(OBJ_DIR)/%.o : %.S - $(CC) -c -o $@ $^ $(CFLAGS) -UONAME + $(CC) -c -o $@ $^ $(CFLAGS) -UONAME $(OBJ) : $(OBJ_DIR)/%.o : %.c - $(CC) -c -o $@ $^ $(CFLAGS) -UONAME + $(CC) -c -o $@ $^ $(CFLAGS) -UONAME $(OBJCPP) : $(OBJ_DIR)/%.o : %.cpp - $(HCC) -c -o $@ $^ $(CPPFLAGS) -UONAME + $(HCC) -c -o $@ $^ $(CPPFLAGS) -UONAME $(BIN_DIR)/% : $(OBJ_DIR)/%.o $(LIB_DIR)/libalpha_spblas.a $(TEST_COMMON_OBJS) $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) diff --git a/test/Makefile b/test/Makefile index ea41074..4cbfb50 100644 --- a/test/Makefile +++ b/test/Makefile @@ -27,4 +27,4 @@ test : # CFLAGS += $(INC) -I$(ROOT)/test/include $(DEFINE) # CPPFLAGS += $(INC) -I$(ROOT)/test/include $(DEFINE) # $(TEST_COMMON_OBJS) : $(OBJ_DIR)/%.o : %.c -# $(CC) -c -o $@ $^ $(CFLAGS) +# $(CC) -c -o $@ $^ $(CFLAGS) diff --git a/test/dcu/Makefile b/test/dcu/Makefile index 99c7041..2d541b4 100644 --- a/test/dcu/Makefile +++ b/test/dcu/Makefile @@ -10,6 +10,6 @@ TEST_BIN = $(patsubst %.cpp, $(BIN_DIR)/%, $(notdir $(TEST_SRC)) ) CFLAGS += $(INC) $(LIB) $(DEFINE) -l:libalpha_spblas.a -lm -I$(ROOT)/test CPPFLAGS += $(INC) $(DEFINE) -I$(ROOT)/test -LDFLAGS += -l:libalpha_spblas.a -lm -lstdc++ +LDFLAGS += -l:libalpha_spblas.a -lm -lstdc++ CFLAGS += $(INC) $(DEFINE) -I$(ROOT)/test include $(ROOT)/Makefile.tail diff --git a/test/x86_64/Makefile b/test/x86_64/Makefile index f6bce0e..578f791 100644 --- a/test/x86_64/Makefile +++ b/test/x86_64/Makefile @@ -6,11 +6,11 @@ TEST_SRC = $(wildcard $(SRC_DIR)/*.c) OBJ = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(TEST_SRC) ) TEST_BIN = $(patsubst $(SRC_DIR)/%.c, $(BIN_DIR)/%, $(TEST_SRC) ) -CFLAGS += -lmkl_cdft_core -lmkl_intel_thread -lmkl_core -lpthread -lmkl_rt -ldl +CFLAGS += -lmkl_cdft_core -lmkl_intel_thread -lmkl_core -lpthread -lmkl_rt -ldl ifeq ($(INT_64),1) -CFLAGS += -lmkl_intel_ilp64 +CFLAGS += -lmkl_intel_ilp64 else -CFLAGS += -lmkl_intel_lp64 +CFLAGS += -lmkl_intel_lp64 endif ifeq ($(OPENMP),1) CFLAGS += -liomp5 diff --git a/tools/Makefile b/tools/Makefile index 939a3b8..4bc6f26 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -8,4 +8,4 @@ TOOL_BIN = $(patsubst %.c, $(BIN_DIR)/%, $(TOOL_SRC) ) CFLAGS = -w -g -O2 -std=c11 -lm -include $(ROOT)/Makefile.tail \ No newline at end of file +include $(ROOT)/Makefile.tail From 7c73f29844a151bdcc769486506a76b6f96d4d18 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Wed, 4 Jan 2023 01:16:24 +0700 Subject: [PATCH 6/8] Makefile for x86 test: fix lib name to libalpha_spblas --- test/x86_64/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/x86_64/Makefile b/test/x86_64/Makefile index 578f791..de7cea6 100644 --- a/test/x86_64/Makefile +++ b/test/x86_64/Makefile @@ -16,6 +16,6 @@ ifeq ($(OPENMP),1) CFLAGS += -liomp5 endif -CFLAGS += $(INC) $(LIB) $(DEFINE) -l:libalphasparse.a -lm +CFLAGS += $(INC) $(LIB) $(DEFINE) -l:libalpha_spblas.a -lm include $(ROOT)/Makefile.tail From 2bdaafc2c80fbed7ffef54f1a85f4d5eea5f881a Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Wed, 4 Jan 2023 07:52:40 +0700 Subject: [PATCH 7/8] src/Makefile: there is no tuning dir --- src/Makefile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Makefile b/src/Makefile index 3503b91..81cc0cc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,24 +1,24 @@ CFLAGS += $(INC) $(DEFINE) CPPFLAGS += $(INC) $(DEFINE) -SUBDIRS = core kernel util tuning +SUBDIRS = core kernel util -ifeq ($(HIP_ON),1) -SUBDIRS += util_cpp -SUBDIRS += tuning -endif ifeq ($(PLAIN_ON),1) SUBDIRS += plain endif +ifeq ($(HIP_ON),1) +SUBDIRS += util_cpp +# SUBDIRS += tuning +endif ifeq ($(ARM_ON),1) -SUBDIRS += tuning +# SUBDIRS += tuning endif .PHONY : lib -lib : +lib : @for d in $(SUBDIRS) ; \ do if test -d $$d; then \ $(MAKE) -C $$d $(@F) || exit 1 ; \ fi; \ - done \ No newline at end of file + done From a426c81a8f33717731d100e9fe84fc43b1a98dd7 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Wed, 4 Jan 2023 09:07:17 +0700 Subject: [PATCH 8/8] Makefile: add comments --- Makefile | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index a816e03..c0824ae 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ -# 是否开启openmp 1 开启 0 不开启 单线程版本 +# 是否开启openmp,1 开启,0 不开启 单线程版本。 OPENMP = 1 -# 是否生成汇编代码,生成的汇编代码在 asm 目录下。1 生成,0 不生成。 +# 是否生成汇编代码,生成的汇编代码在 asm 目录下。1 生成,0 不生成。 ASM_COMPILE = 0 -# MKL_INT 和 ALPHA_INT 是否使用64位, 1 使用64位,0 使用32位。 +# MKL_INT 和 ALPHA_INT 是否使用64位,1 使用64位,0 使用32位。 INT_64 = 0 # 表示编不编译 HIP_ON = $(shell echo $${HIP_ON:-0}) @@ -17,6 +17,7 @@ HYGON_ON = 0 HAS_MKL = 0 PLAIN_ON = 0 ROOT = $(shell pwd) +OS := $(shell uname -s) LIB_DIR = $(ROOT)/lib INC_DIR = $(ROOT)/include @@ -24,25 +25,30 @@ OBJ_DIR = $(ROOT)/obj BIN_DIR = $(ROOT)/bin ASM_DIR = $(ROOT)/asm -ifeq ($(DEBUG_ON),1) +ifeq ($(DEBUG_ON), 1) CPPFLAGS += -ggdb endif -ifeq ($(HIP_ON),1) +ifeq ($(HIP_ON), 1) ROCM_DIR = /public/software/compiler/rocm/rocm-3.9.1 ROCSP_DIR = /home/gcx/csparse endif + LIBNAME = libalpha_spblas INC += -I$(INC_DIR) -ifeq ($(HIP_ON),1) +ifeq ($(HIP_ON), 1) INC += -I$(ROCM_DIR)/hip/include endif export ROOT LIB_DIR INC_DIR OBJ_DIR BIN_DIR ASM_DIR INC DEFINE LIBNAME OPENMP ASM_COMPILE INT_64 HIP_ON PLAIN_ON HAS_MKL ARM_ON HYGON_ON GCC_VERSION_GE9_3_1 := $(shell expr `gcc --version | awk -F" " '/^gcc/{print $$3}' | tr -d '.' ` \>= 931) + +ifneq ($(OS), Darwin) CPUVENDOR := $(shell lscpu | awk -F"[ ;]" '/^Vendor/ {print $$NF}' ) +endif + MAKE = make CC = gcc HCC= hipcc @@ -70,19 +76,21 @@ CFLAGS += -fPIC # CFLAGS += -Wl,-z,relro -Wl,-z,noexecstack -Wl,-z,now ARCH = $(shell uname -m) -ifeq ($(ARCH),aarch64) +ifeq ($(ARCH), aarch64) CC = gcc DEFINE += -D__aarch64__ -ifeq ($(GCC_VERSION_GE9_3_1),1) +ifeq ($(GCC_VERSION_GE9_3_1), 1) CFLAGS += -march=armv8.3-a DEFINE += -DCMLA endif endif -ifeq ($(ARCH),x86_64) +ifeq ($(ARCH), x86_64) CC = gcc -ifeq ($(CPUVENDOR),GenuineIntel) +ifneq ($(OS), Darwin) +ifeq ($(CPUVENDOR), GenuineIntel) CC = icc endif +endif CFLAGS += -m64 CFLAGS += -march=native DEFINE += -D__x86_64__ @@ -90,13 +98,13 @@ ifeq ($(HAS_MKL), 1) DEFINE += -D__MKL__ endif endif -ifeq ($(ARCH),ppc) +ifeq ($(ARCH), ppc) CC = gcc CFLAGS += -mtune=native CFLAGS += -arch ppc DEFINE += -Dppc endif -ifeq ($(ARCH),ppc64) +ifeq ($(ARCH), ppc64) CC = gcc CFLAGS += -mtune=native CFLAGS += -arch ppc64 @@ -112,31 +120,34 @@ DEFINE += -DMKL_ILP64 DEFINE += -DALPHA_INT=int64_t endif -ifeq ($(HIP_ON),1) +ifeq ($(HIP_ON), 1) CEXTRAFLAGS += -lstdc++ -L$(ROCM_DIR)/hip/lib -L$(ROCM_DIR)/rocsparse/lib -lamdhip64 -lrocsparse LDFLAGS += $(CEXTRAFLAGS) DEFINE += -D__DCU__ endif -ifeq ($(PLAIN_ON),1) +ifeq ($(PLAIN_ON), 1) DEFINE += -D__PLAIN__ endif export MAKE CC HCC AR CFLAGS CPPFLAGS CEXTRAFLAGS ARCH LDFLAGS -.PHONY : clean lib test tool +.PHONY : clean lib so test -all : lib test tool so +all : lib so test lib : $(MAKE) -C src $(@F) -so : lib +# FIXME: this will not work on macOS: +so : lib $(CC) -shared -o $(LIB_DIR)/$(LIBNAME).so -Wl,--whole-archive $(LIB_DIR)/$(LIBNAME).a -Wl,--no-whole-archive +# TODO: implement tests for PPC. test : lib $(MAKE) -C test $(@F) +# TODO: implement tool target (needs fixes to makefiles). # tool : # $(MAKE) -C tools $(@F)