merge with kernels from MH's master thesis
[LbmBenchmarkKernelsPublic.git] / src / Makefile
index a9889a5c4494fccbda0e9c6f0c986a93c848a58c..8eb58d44150461f9866dcb806b2a6d52a00b4396 100644 (file)
@@ -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
@@ -29,7 +33,9 @@
 # CONFIG ?= linux-gcc
 CONFIG ?= linux-intel
 
-BUILD ?= debug
+BUILD ?= release
+
+BENCHMARK ?= on
 
 # If we compile for BENCHMARK all verifcation and statistics are disabled,
 # if not specified otherwise.
@@ -37,13 +43,12 @@ ifeq (on,$(BENCHMARK))
   VERIFICATION ?= off
   VTK_OUTPUT   ?= off
   STATISTICS   ?= off
+else
+  VERIFICATION ?= on
+  STATISTICS   ?= on
+  VTK_OUTPUT   ?= on
 endif
 
-VERIFICATION ?= on
-
-STATISTICS ?= on
-
-VTK_OUTPUT ?= on
 
 COLOR ?= on
 
@@ -57,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
 
@@ -90,12 +98,12 @@ 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 \
-            Vtk.c Pinning.c
+            Vtk.c Pinning.c Padding.c Lattice.c
 
 # ------------------------------------------------------------------------
 # NO CHANGE BELOW SHOULD BE NEEDED
@@ -127,7 +135,24 @@ OBJ_C = $(foreach SOURCE,$(SOURCES_C),$(OBJECT_DIR)/$(SOURCE:%.c=%.o)) \
                $(OBJECT_DIR)/BenchKernelD3Q19ListAaPv_PushSoA.o \
                $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvCommon_PushSoA.o \
                $(OBJECT_DIR)/BenchKernelD3Q19ListPullSplitNt_PullSoA.o \
-               $(OBJECT_DIR)/BenchKernelD3Q19ListPullSplitNtCommon_PullSoA.o
+               $(OBJECT_DIR)/BenchKernelD3Q19ListPullSplitNtCommon_PullSoA.o \
+               $(OBJECT_DIR)/BenchKernelD3Q19Aa_AaAoS.o \
+               $(OBJECT_DIR)/BenchKernelD3Q19AaCommon_AaAoS.o \
+               $(OBJECT_DIR)/BenchKernelD3Q19Aa_AaSoA.o \
+               $(OBJECT_DIR)/BenchKernelD3Q19AaCommon_AaSoA.o \
+               $(OBJECT_DIR)/BenchKernelD3Q19AaVec_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)
 
@@ -188,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
@@ -203,10 +233,74 @@ 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.
+
+ifdef TARCH
+  ARCH_W_COMMA := $(TARCH)
+
+  COMMA_ := ,
+  override TARCH := $(subst $(COMMA_), ,$(TARCH))
+
+  $(info $(shell echo -e "\n$(COLOR_GREEN)INFO: Automatically expanding comma in TARCH variable:  TARCH=$(TARCH).$(COLOR_NO)\n"))
+
+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)   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))
@@ -214,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)
 
 
 # ------------------------------------------------------------------------
@@ -235,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)"
@@ -253,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 $@
@@ -265,6 +366,13 @@ $(OBJECT_DIR)/%_AoS.o: %.c $(REBUILD_DEPS)
        @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO)    $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO)"
        $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS -c $< -o $@
 
+$(OBJECT_DIR)/%_AaAoS.o: %.c $(REBUILD_DEPS)
+       @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO)    $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_AA$(COLOR_NO)"
+       $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS $(D)PROP_MODEL_AA -c $< -o $@
+
+$(OBJECT_DIR)/%_AaSoA.o: %.c $(REBUILD_DEPS)
+       @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO)    $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_AA$(COLOR_NO)"
+       $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA $(D)PROP_MODEL_AA -c $< -o $@
 
 $(OBJECT_DIR)/%.o: %.c $(REBUILD_DEPS)
        @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO)"
@@ -272,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:
@@ -281,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.
This page took 0.055246 seconds and 5 git commands to generate.