Skip to content

Commit be57c59

Browse files
authored
Merge pull request #4203 from martin-frbg/issue4201
Add support for building arm64 SVE kernels with the NVIDIA HPC compiler
2 parents d69f57c + 7a6203f commit be57c59

File tree

4 files changed

+43
-10
lines changed

4 files changed

+43
-10
lines changed

c_check

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ if [ "$architecture" = "arm64" ]; then
283283
no_sve=0
284284
{
285285
$compiler_name $flags $args >/dev/null 2>&1
286+
} || {
287+
args=" -Msve_intrinsics -c -o $tmpf.o $tmpf"
288+
$compiler_name $flags $args >/dev/null 2>&1
286289
} || {
287290
no_sve=1
288291
}

cmake/cc.cmake

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -180,22 +180,30 @@ endif ()
180180

181181
if (${CORE} STREQUAL NEOVERSEN2)
182182
if (NOT DYNAMIC_ARCH)
183-
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
184-
if (${GCC_VERSION} VERSION_GREATER 10.4 OR ${GCC_VERSION} VERSION_EQUAL 10.4)
185-
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.5-a+sve+sve2+bf16 -mtune=neoverse-n2")
183+
if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI" AND NOT NO_SVE)
184+
set (CCOMMON_OPT "${CCOMMON_OPT} -Msve_intrinsics -march=armv8.5-a+sve+sve2+bf16 -mtune=neoverse-n2")
186185
else ()
187-
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.2-a+sve")
188-
endif()
186+
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
187+
if (${GCC_VERSION} VERSION_GREATER 10.4 OR ${GCC_VERSION} VERSION_EQUAL 10.4)
188+
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.5-a+sve+sve2+bf16 -mtune=neoverse-n2")
189+
else ()
190+
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.2-a+sve")
191+
endif()
192+
endif ()
189193
endif ()
190194
endif ()
191195

192196
if (${CORE} STREQUAL NEOVERSEV1)
193197
if (NOT DYNAMIC_ARCH)
194-
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
195-
if (${GCC_VERSION} VERSION_GREATER 10.4 OR ${GCC_VERSION} VERSION_EQUAL 10.4)
196-
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.4-a+sve -mtune=neoverse-v1")
198+
if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI" AND NOT NO_SVE)
199+
set (CCOMMON_OPT "${CCOMMON_OPT} -Msve_intrinsics -march=armv8.4-a+sve -mtune=neoverse-v1")
197200
else ()
198-
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.2-a+sve")
201+
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
202+
if (${GCC_VERSION} VERSION_GREATER 10.4 OR ${GCC_VERSION} VERSION_EQUAL 10.4)
203+
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.4-a+sve -mtune=neoverse-v1")
204+
else ()
205+
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8.2-a+sve")
206+
endif()
199207
endif()
200208
endif ()
201209
endif ()
@@ -213,7 +221,11 @@ endif ()
213221

214222
if (${CORE} STREQUAL ARMV8SVE)
215223
if (NOT DYNAMIC_ARCH)
216-
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8-a+sve")
224+
if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI" AND NOT NO_SVE)
225+
set (CCOMMON_OPT "${CCOMMON_OPT} -Msve_intrinsics -march=armv8-a+sve")
226+
else ()
227+
set (CCOMMON_OPT "${CCOMMON_OPT} -march=armv8-a+sve")
228+
endif ()
217229
endif ()
218230
endif ()
219231

cmake/system.cmake

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,23 +282,35 @@ if (DEFINED TARGET)
282282
endif()
283283

284284
if (${TARGET} STREQUAL NEOVERSEV1)
285+
if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI" AND NOT NO_SVE)
286+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -Msve_intrinsics -march=armv8.4-a+sve -mtune=neoverse-v1")
287+
else ()
285288
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
286289
if (${GCC_VERSION} VERSION_GREATER 10.4 OR ${GCC_VERSION} VERSION_EQUAL 10.4)
287290
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=armv8.4-a+sve -mtune=neoverse-v1")
288291
else ()
289292
message(FATAL_ERROR "Compiler ${CMAKE_C_COMPILER} ${GCC_VERSION} does not support Neoverse V1.")
290293
endif()
294+
endif()
291295
endif()
292296
if (${TARGET} STREQUAL NEOVERSEN2)
297+
if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI" AND NOT NO_SVE)
298+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -Msve-intrinsics -march=armv8.5-a+sve+sve2+bf16 -mtune=neoverse-n2")
299+
else ()
293300
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
294301
if (${GCC_VERSION} VERSION_GREATER 10.4 OR ${GCC_VERSION} VERSION_EQUAL 10.4)
295302
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=armv8.5-a+sve+sve2+bf16 -mtune=neoverse-n2")
296303
else ()
297304
message(FATAL_ERROR "Compiler $${CMAKE_C_COMPILER} {GCC_VERSION} does not support Neoverse N2.")
298305
endif()
306+
endif()
299307
endif()
300308
if (${TARGET} STREQUAL ARMV8SVE)
309+
if (${CMAKE_C_COMPILER_ID} STREQUAL "PGI" AND NOT NO_SVE)
310+
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -Msve-intrinsics -march=armv8.2-a+sve")
311+
else ()
301312
set (KERNEL_DEFINITIONS "${KERNEL_DEFINITIONS} -march=armv8.2-a+sve")
313+
endif()
302314
endif()
303315

304316
endif()

kernel/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ else ifeq ($(TARGET_CORE), ZEN)
7777
override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(AVX2OPT)
7878
else ifeq ($(TARGET_CORE), LOONGSON3R4)
7979
override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(MSA_FLAGS)
80+
else ifneq ($(filter NEOVERSEN2 NEOVERSEV1, $(TARGET_CORE)),)
81+
ifeq ($(C_COMPILER), PGI)
82+
override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) -Msve_intrinsics
83+
else
84+
override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
85+
endif
8086
else
8187
override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
8288
endif

0 commit comments

Comments
 (0)