From 8e8651f0a5b2fa74245893f445d1ec803f2d523b Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Thu, 2 Feb 2023 18:13:29 +0100 Subject: [PATCH 1/3] Supply necessary gcc option for AVX512-capable Ryzens --- Makefile.x86_64 | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Makefile.x86_64 b/Makefile.x86_64 index d5e9cbfc7..7ab331b1f 100644 --- a/Makefile.x86_64 +++ b/Makefile.x86_64 @@ -130,6 +130,28 @@ endif endif endif +ifeq ($(CORE), ZEN) +ifdef HAVE_AVX512VL +ifndef NO_AVX512 +CCOMMON_OPT += -march=skylake-avx512 +ifneq ($(F_COMPILER), NAG) +FCOMMON_OPT += -march=skylake-avx512 +endif +ifeq ($(OSNAME), CYGWIN_NT) +CCOMMON_OPT += -fno-asynchronous-unwind-tables +FCOMMON_OPT += -fno-asynchronous-unwind-tables +endif +ifeq ($(OSNAME), WINNT) +ifeq ($(C_COMPILER), GCC) +CCOMMON_OPT += -fno-asynchronous-unwind-tables +FCOMMON_OPT += -fno-asynchronous-unwind-tables +endif +endif +endif +endif +endif + + ifdef HAVE_AVX2 ifndef NO_AVX2 ifeq ($(C_COMPILER), GCC) From e964ebd0d082fbec2e5778b5216af43a43ed4382 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Thu, 2 Feb 2023 19:04:05 +0100 Subject: [PATCH 2/3] Add compiler option for AVX512-capable Ryzen(4) --- cmake/cc.cmake | 14 ++++++++++++++ cmake/system.cmake | 22 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/cmake/cc.cmake b/cmake/cc.cmake index 62278c4a7..ed64d3d4d 100644 --- a/cmake/cc.cmake +++ b/cmake/cc.cmake @@ -144,6 +144,20 @@ if (${CORE} STREQUAL SAPPHIRERAPIDS) endif () endif () +if (${CORE} STREQUAL ZEN) + if (HAVE_AVX512VL) + if (NOT DYNAMIC_ARCH) + if (NOT NO_AVX512) + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) + if (${GCC_VERSION} VERSION_GREATER 13.0 OR ${GCC_VERSION} VERSION_EQUAL 13.0) + set (CCOMMON_OPT "${CCOMMON_OPT} -march=znver4") + else () + set (CCOMMON_OPT "${CCOMMON_OPT} -march=skylake-avx512") + endif () + endif () + endif () +endif () + if (${CORE} STREQUAL A64FX) if (NOT DYNAMIC_ARCH) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) diff --git a/cmake/system.cmake b/cmake/system.cmake index fd68f79d6..5788c2c5c 100644 --- a/cmake/system.cmake +++ b/cmake/system.cmake @@ -195,9 +195,27 @@ if (DEFINED TARGET) endif() endif() if (${TARGET} STREQUAL SKYLAKEX AND NOT NO_AVX512) - set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512") + set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512") endif() - if ((${TARGET} STREQUAL HASWELL OR ${TARGET} STREQUAL ZEN) AND NOT NO_AVX2) + + if (((${TARGET} STREQUAL ZEN) AND HAVE_AVX512VL) AND NOT NO_AVX512) + if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU") + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) + if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER 12.99) + set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=znver4") + else() + set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512") + endif() + elseif (${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_C_COMPILER_ID} STREQUAL "AppleClang") + if (${CMAKE_C_COMPILER_VERSION} VERSION_GREATER 15.99) + set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=znver4") + else() + set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=skylake-avx512") + endif() + endif() + endif() + + if ((${TARGET} STREQUAL HASWELL OR (${TARGET} STREQUAL ZEN AND NOT HAVE_AVX512VL)) AND NOT NO_AVX2) if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU") execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (${GCC_VERSION} VERSION_GREATER 4.7 OR ${GCC_VERSION} VERSION_EQUAL 4.7) From 19a696f8fea0b5134af534e8cdc93a94c153eef7 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Thu, 2 Feb 2023 19:59:49 +0100 Subject: [PATCH 3/3] fix nested conditionals --- cmake/cc.cmake | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cmake/cc.cmake b/cmake/cc.cmake index ed64d3d4d..83b8d15ab 100644 --- a/cmake/cc.cmake +++ b/cmake/cc.cmake @@ -148,11 +148,12 @@ if (${CORE} STREQUAL ZEN) if (HAVE_AVX512VL) if (NOT DYNAMIC_ARCH) if (NOT NO_AVX512) - execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) - if (${GCC_VERSION} VERSION_GREATER 13.0 OR ${GCC_VERSION} VERSION_EQUAL 13.0) - set (CCOMMON_OPT "${CCOMMON_OPT} -march=znver4") - else () - set (CCOMMON_OPT "${CCOMMON_OPT} -march=skylake-avx512") + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) + if (${GCC_VERSION} VERSION_GREATER 13.0 OR ${GCC_VERSION} VERSION_EQUAL 13.0) + set (CCOMMON_OPT "${CCOMMON_OPT} -march=znver4") + else () + set (CCOMMON_OPT "${CCOMMON_OPT} -march=skylake-avx512") + endif () endif () endif () endif ()