235 lines
5.6 KiB
Makefile
235 lines
5.6 KiB
Makefile
.DEFAULT_GOAL := openbench
|
|
|
|
.SUFFIXES:
|
|
|
|
ECHO = $(if $(filter 1,$(SKIP_DEPS)),@,)
|
|
|
|
CC := clang
|
|
EXE_BASE := bin/heimdall
|
|
EXE := $(EXE_BASE)$(if $(OS),.exe,)
|
|
EVALFILE := ../networks/files/laevateinn-v2-verbatim.bin
|
|
NET_NAME := $(notdir $(EVALFILE))
|
|
NET_ID := $(basename $(NET_NAME))
|
|
LD := lld
|
|
SRCDIR := src
|
|
|
|
ifeq ($(OS),Windows_NT)
|
|
SETENV = set GIT_LFS_SKIP_SMUDGE=1 &&
|
|
else
|
|
SETENV = GIT_LFS_SKIP_SMUDGE=1
|
|
endif
|
|
|
|
|
|
LFLAGS := -flto -fuse-ld=$(LD)
|
|
|
|
HINTSFLAG = $(if $(filter 1,$(SKIP_DEPS)),--hints:off,)
|
|
|
|
INPUT_BUCKETS := 16
|
|
OUTPUT_BUCKETS := 8
|
|
MERGED_KINGS := 0
|
|
EVAL_NORMALIZE_FACTOR := 337
|
|
HORIZONTAL_MIRRORING := 1
|
|
VERBATIM_NET := 1
|
|
PAIRWISE_NET := 0
|
|
HL_SIZE := 1536
|
|
FT_SIZE := 768
|
|
ENABLE_TUNING := 0
|
|
IS_RELEASE := 0
|
|
IS_BETA := 0
|
|
IS_DEBUG := 0
|
|
IS_TEST := 0
|
|
DBG_SYMBOLS := 0
|
|
MAJOR_VERSION := 1
|
|
MINOR_VERSION := 4
|
|
PATCH_VERSION := 2
|
|
THP_PAGE_ALIGNMENT := 2097152
|
|
|
|
|
|
CFLAGS := -flto -static
|
|
CUSTOM_FLAGS := -d:outputBuckets=$(OUTPUT_BUCKETS) \
|
|
-d:inputBuckets=$(INPUT_BUCKETS) \
|
|
-d:hlSize=$(HL_SIZE) \
|
|
-d:ftSize=$(FT_SIZE) \
|
|
-d:evalNormalizeFactor=$(EVAL_NORMALIZE_FACTOR) \
|
|
-d:majorVersion=$(MAJOR_VERSION) \
|
|
-d:minorVersion=$(MINOR_VERSION) \
|
|
-d:patchVersion=$(PATCH_VERSION) \
|
|
-d:evalFile=$(EVALFILE) \
|
|
-d:netID=$(NET_ID) \
|
|
-d:thpPageAlignment:$(THP_PAGE_ALIGNMENT) \
|
|
-d:esc_exit_editing
|
|
|
|
ifeq ($(MERGED_KINGS),1)
|
|
CUSTOM_FLAGS += -d:mergedKings=true
|
|
else
|
|
CUSTOM_FLAGS += -d:mergedKings=false
|
|
endif
|
|
|
|
ifeq ($(VERBATIM_NET),1)
|
|
CUSTOM_FLAGS += -d:verbatimNet=true
|
|
else
|
|
CUSTOM_FLAGS += -d:verbatimNet=false
|
|
endif
|
|
|
|
ifeq ($(PAIRWISE_NET),1)
|
|
CUSTOM_FLAGS += -d:pairwiseNet=true
|
|
else
|
|
CUSTOM_FLAGS += -d:pairwiseNet=false
|
|
endif
|
|
|
|
ifeq ($(HORIZONTAL_MIRRORING),1)
|
|
CUSTOM_FLAGS += -d:horizontalMirroring=true
|
|
else
|
|
CUSTOM_FLAGS += -d:horizontalMirroring=false
|
|
endif
|
|
|
|
ifeq ($(ENABLE_TUNING),1)
|
|
CUSTOM_FLAGS += -d:enableTuning
|
|
endif
|
|
|
|
ifeq ($(IS_RELEASE),1)
|
|
CUSTOM_FLAGS += -d:isRelease
|
|
endif
|
|
|
|
ifeq ($(IS_BETA),1)
|
|
CUSTOM_FLAGS += -d:isBeta
|
|
endif
|
|
|
|
ifeq ($(IS_DEBUG),1)
|
|
CUSTOM_FLAGS += -d:debug
|
|
else ifeq ($(IS_TEST),1)
|
|
CUSTOM_FLAGS += -d:release
|
|
else
|
|
CUSTOM_FLAGS += -d:danger
|
|
endif
|
|
|
|
ifeq ($(DBG_SYMBOLS),1)
|
|
CUSTOM_FLAGS += --debugger:native
|
|
CFLAGS += -fno-omit-frame-pointer -ggdb
|
|
endif
|
|
|
|
NFLAGS := --path:src --panics:on --mm:atomicArc -d:useMalloc -o:$(EXE) $(HINTSFLAG) $(CUSTOM_FLAGS) --deepcopy:on --cc:$(CC) --passL:"$(LFLAGS)"
|
|
|
|
|
|
CFLAGS_AVX512 := $(CFLAGS) -mtune=znver4 -march=x86-64-v4
|
|
NFLAGS_AVX512 := $(NFLAGS) --passC:"$(CFLAGS_AVX512)" -d:simd -d:avx512
|
|
|
|
CFLAGS_MODERN := $(CFLAGS) -mtune=haswell -march=haswell
|
|
NFLAGS_MODERN := $(NFLAGS) --passC:"$(CFLAGS_MODERN)" -d:simd -d:avx2
|
|
|
|
CFLAGS_ZEN2 := $(CFLAGS) -march=znver2 -mtune=znver2
|
|
NFLAGS_ZEN2 := $(NFLAGS) --passC:"$(CFLAGS_ZEN2)" -d:simd -d:avx2
|
|
|
|
CFLAGS_NATIVE := $(CFLAGS) -mtune=native -march=native
|
|
NFLAGS_NATIVE := $(NFLAGS) --passC:"$(CFLAGS_NATIVE)" -d:simd -d:avx2
|
|
|
|
CFLAGS_LEGACY := $(CFLAGS) -mtune=core2 -march=core2
|
|
NFLAGS_LEGACY := $(NFLAGS) --passC:"$(CFLAGS_LEGACY)" -u:simd -u:avx2
|
|
|
|
OS_TAG := $(if $(OS),windows,linux)
|
|
|
|
RELEASE_BASE := heimdall-$(MAJOR_VERSION).$(MINOR_VERSION).$(PATCH_VERSION)-$(OS_TAG)-amd64
|
|
|
|
|
|
ifeq ($(SKIP_DEPS),)
|
|
avx512: deps net
|
|
modern: deps net
|
|
zen2: deps net
|
|
legacy: deps net
|
|
native: deps net
|
|
endif
|
|
|
|
|
|
avx512:
|
|
@echo Building AVX512 binary
|
|
$(ECHO) nim c $(NFLAGS_AVX512) $(SRCDIR)/heimdall.nim
|
|
|
|
modern:
|
|
@echo Building Haswell binary
|
|
$(ECHO) nim c $(NFLAGS_MODERN) $(SRCDIR)/heimdall.nim
|
|
|
|
zen2:
|
|
@echo Building Zen 2 binary
|
|
$(ECHO) nim c $(NFLAGS_ZEN2) $(SRCDIR)/heimdall.nim
|
|
|
|
legacy:
|
|
@echo Building Core 2 binary
|
|
$(ECHO) nim c $(NFLAGS_LEGACY) $(SRCDIR)/heimdall.nim
|
|
|
|
deps:
|
|
@echo Verifying dependencies
|
|
$(ECHO) nimble install -d
|
|
|
|
net:
|
|
@echo Preparing neural network
|
|
$(ECHO) $(SETENV)git submodule update --init --recursive
|
|
$(ECHO) git -C networks lfs fetch --include="files/$(NET_NAME)" && git -C networks lfs checkout "files/$(NET_NAME)"
|
|
|
|
|
|
ARCH_DEFINES := $(shell echo | $(CXX) -march=native -E -dM -)
|
|
AVX512_SUPPORTED := 0
|
|
ifneq ($(findstring __AVX512F__, $(ARCH_DEFINES)),)
|
|
ifneq ($(findstring __AVX512BW__, $(ARCH_DEFINES)),)
|
|
AVX512_SUPPORTED := 1
|
|
endif
|
|
endif
|
|
|
|
|
|
ifeq ($(AVX512_SUPPORTED),1)
|
|
define NATIVE_BUILD_CMD
|
|
@echo "Building native target (AVX512)"
|
|
$(ECHO) nim c $(NFLAGS_AVX512) $(SRCDIR)/heimdall.nim
|
|
@echo Native target built
|
|
endef
|
|
else
|
|
define NATIVE_BUILD_CMD
|
|
@echo "Building native target (AVX2)"
|
|
$(ECHO) nim c $(NFLAGS_NATIVE) $(SRCDIR)/heimdall.nim
|
|
@echo Native target built
|
|
endef
|
|
endif
|
|
|
|
native:
|
|
$(NATIVE_BUILD_CMD)
|
|
|
|
dev:
|
|
$(MAKE) -s native SKIP_DEPS=1
|
|
|
|
test:
|
|
$(MAKE) -s native SKIP_DEPS=1 IS_TEST=1 EXE_BASE=bin/testdall
|
|
./bin/testdall bench 9
|
|
|
|
test-suite:
|
|
$(MAKE) -s native SKIP_DEPS=1 IS_TEST=1 EXE_BASE=bin/testdall
|
|
./bin/testdall bench 15
|
|
python tests/suite.py -d 6 -b -p -s -f tests/all.txt --heimdall bin/testdall
|
|
python tests/suite.py -d 7 -b -p -s -f tests/standard_heavy.txt --heimdall bin/testdall
|
|
|
|
bench: dev
|
|
$(EXE) bench
|
|
|
|
|
|
ifeq ($(AVX512_SUPPORTED),1)
|
|
define AVX512_RELEASES_CMD
|
|
@echo AVX512 support detected
|
|
$(MAKE) -s avx512 SKIP_DEPS=1 IS_RELEASE=1 EXE_BASE=bin/$(RELEASE_BASE)-avx512
|
|
@echo Finished AVX-512 build
|
|
endef
|
|
else
|
|
AVX512_RELEASES_CMD =
|
|
endif
|
|
|
|
releases: deps net
|
|
@echo Building platform targets
|
|
$(MAKE) -s legacy SKIP_DEPS=1 IS_RELEASE=1 EXE_BASE=bin/$(RELEASE_BASE)-core2
|
|
@echo Finished Core 2 build
|
|
$(MAKE) -s modern SKIP_DEPS=1 IS_RELEASE=1 EXE_BASE=bin/$(RELEASE_BASE)-haswell
|
|
@echo Finished Haswell build
|
|
$(MAKE) -s zen2 SKIP_DEPS=1 IS_RELEASE=1 EXE_BASE=bin/$(RELEASE_BASE)-zen2
|
|
@echo Finished Zen 2 build
|
|
$(AVX512_RELEASES_CMD)
|
|
@echo All platform targets built
|
|
|
|
openbench: deps
|
|
$(NATIVE_BUILD_CMD)
|