Skip to content

Commit 49689fb

Browse files
authored
Add support for compiling SVE kernels with the NVIDIA HPC compiler
1 parent 8794544 commit 49689fb

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

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()

0 commit comments

Comments
 (0)