X-Git-Url: http://git.rrze.uni-erlangen.de/gitweb/?p=LbmBenchmarkKernelsPublic.git;a=blobdiff_plain;f=src%2FMakefile;h=8eb58d44150461f9866dcb806b2a6d52a00b4396;hp=99ca90283d74e95a55a68da41dffce443f422de2;hb=8cafd9ea08a6b1103eab29811227a7ae536dffa6;hpb=e3f82424829ebb623343ce0092238f83b4a1b8c2 diff --git a/src/Makefile b/src/Makefile index 99ca902..8eb58d4 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,6 +8,10 @@ # Viktor Haag, 2016 # LSS, University of Erlangen-Nuremberg, Germany # +# Michael Hussnaetter, 2017-2018 +# University of Erlangen-Nuremberg, Germany +# michael.hussnaetter -at- fau.de +# # This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). # # LbmBenchKernels is free software: you can redistribute it and/or modify @@ -58,6 +62,9 @@ ISA ?= avx LIKWID ?= off +# Which floating point precision to use: dp (double precision) or sp (single preicision) +PRECISION ?= dp + # Global settings for the Makefile SHELL = sh @@ -91,8 +98,8 @@ SED = sed # Where to store objects and dependency files. -OBJECT_DIR = obj/$(CONFIG)-$(BUILD)$(TAG) -DEP_DIR = obj/$(CONFIG)-$(BUILD)$(TAG)-dep +OBJECT_DIR = obj/$(CONFIG)-$(BUILD)$(PREC)$(TAG) +DEP_DIR = obj/$(CONFIG)-$(BUILD)$(PREC)$(TAG)-dep # Sources to consider. SOURCES_C = Main.c Memory.c Geometry.c Kernel.c \ @@ -134,7 +141,18 @@ OBJ_C = $(foreach SOURCE,$(SOURCES_C),$(OBJECT_DIR)/$(SOURCE:%.c=%.o)) \ $(OBJECT_DIR)/BenchKernelD3Q19Aa_AaSoA.o \ $(OBJECT_DIR)/BenchKernelD3Q19AaCommon_AaSoA.o \ $(OBJECT_DIR)/BenchKernelD3Q19AaVec_AaSoA.o \ - $(OBJECT_DIR)/BenchKernelD3Q19AaVecCommon_AaSoA.o + $(OBJECT_DIR)/BenchKernelD3Q19AaVecCommon_AaSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19AaVecSl_AaSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19AaVecSlCommon_AaSoA.o + +# Kernels which are using AVX-512 intrinsics. +OBJ_C_ISA_AVX_512 = \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvGatherAoSoA_PushAoSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvGatherAoSoACommon_PushAoSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvGather_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvGatherCommon_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvGatherHybrid_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvGatherHybridCommon_PushSoA.o OBJ = $(OBJ_C) @@ -195,9 +213,14 @@ ifeq (on,$(LID_DRIVEN_CAVITY)) PP_FLAGS += $(D)LID_DRIVEN_CAVITY endif +ifeq (avx512,$(ISA)) + PP_FLAGS += $(D)VECTOR_AVX512 +endif + ifeq (avx,$(ISA)) PP_FLAGS += $(D)VECTOR_AVX endif + ifeq (sse,$(ISA)) PP_FLAGS += $(D)VECTOR_SSE endif @@ -210,6 +233,53 @@ ifeq (on,$(LIKWID)) LD_LIBS += $(LIKWID_LIB) -llikwid endif +ifeq (HBM,$(ADJ_LIST_MEM_TYPE)) + #MEMKIND is required for this! + MEMKIND = on + C_FLAGS += -DALLOC_ADJ_LIST_IN_HBM=1 +else + C_FLAGS += -DALLOC_ADJ_LIST_IN_HBM=0 +endif + +ifeq (HBM,$(PDF_MEM_TYPE)) + #MEMKIND is required for this! + MEMKIND = on + C_FLAGS += -DALLOC_PDF_IN_HBM=1 +else + C_FLAGS += -DALLOC_PDF_IN_HBM=0 +endif + +ifeq (on, $(MEMKIND)) + C_FLAGS += -DHAVE_MEMKIND + LD_FLAGS += -lmemkind +endif + +# Prefetch settings +SOFTWARE_PREFETCH_LOOKAHEAD_L2 ?= 0 +SOFTWARE_PREFETCH_LOOKAHEAD_L1 ?= 0 +C_FLAGS += -DSOFTWARE_PREFETCH_LOOKAHEAD_L2=$(SOFTWARE_PREFETCH_LOOKAHEAD_L2) -DSOFTWARE_PREFETCH_LOOKAHEAD_L1=$(SOFTWARE_PREFETCH_LOOKAHEAD_L1) + + +ifeq (dp,$(PRECISION)) + PP_FLAGS += $(D)PRECISION_DP + PREC=-dp +else +ifeq (sp,$(PRECISION)) + PP_FLAGS += $(D)PRECISION_SP + PREC=-sp +else + $(error PRECISION is only be allowed to be sp (single precision) or dp (doble precision)) +endif +endif + +# Use AVX512 intrinsic kernels only when ISA=avx512 and we have double +# precision support. +ifeq (avx512,$(ISA)) + ifeq (dp,$(PRECISION)) + OBJ_C += $(OBJ_C_ISA_AVX_512) + endif +endif + # ARCH can only be assigned a string without a space. The space is escaped as # a comma which we have to replace here. @@ -225,8 +295,12 @@ endif .phony: all clean clean-all -$(info $(shell $(ECHO_E) "# Configuration: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO) OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO) TARCH=$(COLOR_CYAN)$(TARCH)$(COLOR_NO) building $(.DEFAULT_GOAL)...")) +#$(info $(shell $(ECHO_E) "# Configuration: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO) OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO) TARCH=$(COLOR_CYAN)$(TARCH)$(COLOR_NO) building $(.DEFAULT_GOAL)...")) +$(info $(shell $(ECHO_E) "# Configuration: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) PRECISION=$(COLOR_CYAN)$(PRECISION)$(COLOR_NO)")) +$(info $(shell $(ECHO_E) "# OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO)")) +$(info $(shell $(ECHO_E) "# VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO)")) +$(info $(shell $(ECHO_E) "# target=$(.DEFAULT_GOAL)")) $(info # Object dir: $(OBJECT_DIR)) $(info # Dependency dir: $(DEP_DIR)) @@ -234,7 +308,7 @@ $(info # Dependency dir: $(DEP_DIR)) BIN_DIR=../bin -all: $(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG) +all: $(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(PREC)$(TAG) # ------------------------------------------------------------------------ @@ -255,11 +329,14 @@ all: $(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG) $(BIN_DIR): [ -d "$@" ] || mkdir -p "$@" -$(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG): $(OBJ) $(REBUILD_DEPS) $(DEP_DIR)/.target | $(BIN_DIR) +$(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(PREC)$(TAG): $(OBJ) $(REBUILD_DEPS) $(DEP_DIR)/.target | $(BIN_DIR) @$(ECHO_E) "linking: $(COLOR_CYAN)$@$(COLOR_NO)" $(LD) $(LD_FLAGS) -o $@ $(filter-out $(REBUILD_DEPS),$^) $(LD_LIBS) @$(ECHO_E) "# Builded binary: $(COLOR_CYAN)$@$(COLOR_NO)" - @$(ECHO_E) "# Configuration was: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO) OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO) target=$(.DEFAULT_GOAL)" + @$(ECHO_E) "# Configuration was: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) PRECISION=$(COLOR_CYAN)$(PRECISION)$(COLOR_NO)" + @$(ECHO_E) "# OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO)" + @$(ECHO_E) "# VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO)" + @$(ECHO_E) "# target=$(.DEFAULT_GOAL)" $(OBJECT_DIR)/%_SoA.o: %.c $(REBUILD_DEPS) @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO)" @@ -273,6 +350,10 @@ $(OBJECT_DIR)/%_PushAoS.o: %.c $(REBUILD_DEPS) @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PUSH$(COLOR_NO)" $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS $(D)PROP_MODEL_PUSH -c $< -o $@ +$(OBJECT_DIR)/%_PushAoSoA.o: %.c $(REBUILD_DEPS) + @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOSOA$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PUSH$(COLOR_NO)" + $(Q)$(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOSOA $(D)PROP_MODEL_PUSH -c $< -o $@ + $(OBJECT_DIR)/%_PullSoA.o: %.c $(REBUILD_DEPS) @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PULL$(COLOR_NO)" $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA $(D)PROP_MODEL_PULL -c $< -o $@ @@ -299,7 +380,7 @@ $(OBJECT_DIR)/%.o: %.c $(REBUILD_DEPS) # ------------------------------------------------------------------------ -# Following targets in princibal make only sure, that the directories +# Following targets in principal make only sure, that the directories # are created if the do not exist already. $(DEP_DIR)/.target: @@ -308,7 +389,7 @@ $(DEP_DIR)/.target: # ------------------------------------------------------------------------ # Current configuration. -MAKE_CFG = SYSTEM=$(SYSTEM) // BUILD=$(BUILD) // MAKEOVERRIDES=\"$(strip $(MAKEOVERRIDES))\" // VERIFICATION=$(VERIFICATION) // STATISTICS=$(STATISTICS) // VTK_OUTPUT=$(VTK_OUTPUT) // VTK_OUTPUT_ASCII=$(VTK_OUTPUT_ASCII) // LID_DRIVEN_CAVITY=$(LID_DRIVEN_CAVITY) // ISA=$(ISA) // LIKWID=$(LIKWID) +MAKE_CFG = SYSTEM=$(SYSTEM) // BUILD=$(BUILD) // MAKEOVERRIDES=\"$(strip $(MAKEOVERRIDES))\" // VERIFICATION=$(VERIFICATION) // STATISTICS=$(STATISTICS) // VTK_OUTPUT=$(VTK_OUTPUT) // VTK_OUTPUT_ASCII=$(VTK_OUTPUT_ASCII) // LID_DRIVEN_CAVITY=$(LID_DRIVEN_CAVITY) // ISA=$(ISA) // LIKWID=$(LIKWID) // PRECISION=$(PRECISION) # Compare current configuration to the last one so we know when to # rebuild this system/target despite when sources have not changed.