Skip to content

Commit 9350441

Browse files
Fix: oneAPI runtime error when build with libtorch (#4613)
* Fix: oneAPI runtime error when build with libtorch * patch existed compiling error * sort linkings * use standard library linking command * Remove outdated badge * try using MKL standard interface * fix MKL FFT header linking * switch to official mkl module * link torch libs ahead * using MKL within libtorch * remove unnecessary stmt * patch for different situations * remove duplicate logic * fix typo --------- Co-authored-by: wqzhou <33364058+WHUweiqingzhou@users.noreply.github.com>
1 parent c402208 commit 9350441

File tree

4 files changed

+105
-112
lines changed

4 files changed

+105
-112
lines changed

CMakeLists.txt

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ if(USE_CUDA)
309309
# ${ABACUS_BIN_NAME} is added before CUDA is enabled
310310
set_property(TARGET ${ABACUS_BIN_NAME}
311311
PROPERTY CUDA_ARCHITECTURES ${CMAKE_CUDA_ARCHITECTURES})
312-
target_link_libraries(${ABACUS_BIN_NAME} -lcudart -lnvToolsExt)
312+
target_link_libraries(${ABACUS_BIN_NAME} cudart nvToolsExt)
313313
include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
314314
if(USE_CUDA)
315315
add_compile_definitions(__CUDA)
@@ -323,8 +323,8 @@ if(USE_CUDA)
323323
if (ENABLE_CUSOLVERMP)
324324
add_compile_definitions(__CUSOLVERMP)
325325
target_link_libraries(${ABACUS_BIN_NAME}
326-
-lcal
327-
-lcusolverMp
326+
cal
327+
cusolverMp
328328
)
329329
endif()
330330
endif()
@@ -394,16 +394,15 @@ if(DEFINED ENV{MKLROOT} AND NOT DEFINED MKLROOT)
394394
set(MKLROOT "$ENV{MKLROOT}")
395395
endif()
396396
if(MKLROOT)
397-
find_package(IntelMKL REQUIRED)
397+
set(MKL_INTERFACE lp64)
398+
find_package(MKL REQUIRED)
398399
add_definitions(-D__MKL)
399-
include_directories(${MKL_INCLUDE_DIRS} ${MKL_INCLUDE_DIRS}/fftw)
400-
list(APPEND math_libs IntelMKL::MKL)
401-
400+
include_directories(${MKL_INCLUDE} ${MKL_INCLUDE}/fftw)
401+
list(APPEND math_libs MKL::MKL MKL::MKL_SCALAPACK)
402402
if(CMAKE_CXX_COMPILER_ID MATCHES Intel)
403-
list(APPEND math_libs -lifcore)
403+
list(APPEND math_libs ifcore)
404404
endif()
405405
else()
406-
407406
find_package(FFTW3 REQUIRED)
408407
find_package(Lapack REQUIRED)
409408
include_directories(${FFTW3_INCLUDE_DIRS})
@@ -421,11 +420,11 @@ else()
421420
list(APPEND math_libs FFTW3::FFTW3_FLOAT)
422421
endif()
423422
if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
424-
list(APPEND math_libs -lgfortran)
423+
list(APPEND math_libs gfortran)
425424
elseif(CMAKE_CXX_COMPILER_ID MATCHES Intel)
426-
list(APPEND math_libs -lifcore)
425+
list(APPEND math_libs ifcore)
427426
elseif(CMAKE_CXX_COMPILER_ID MATCHES Clang)
428-
list(APPEND math_libs -lgfortran)
427+
list(APPEND math_libs gfortran)
429428
else()
430429
message(WARNING "Cannot find the correct library for Fortran.")
431430
endif()
@@ -436,7 +435,7 @@ if(ENABLE_FLOAT_FFTW)
436435
endif()
437436

438437
if(ENABLE_DEEPKS)
439-
# Torch uses outdated components to detech CUDA arch, causing failure on
438+
# Torch uses outdated components to detect CUDA arch, causing failure on
440439
# latest CUDA kits. Set CMake variable TORCH_CUDA_ARCH_LIST in the form of
441440
# "major.minor" if required.
442441
find_package(Torch REQUIRED)
@@ -446,10 +445,13 @@ if(ENABLE_DEEPKS)
446445
set_if_higher(CMAKE_CXX_STANDARD 14)
447446
endif()
448447
include_directories(${TORCH_INCLUDE_DIRS})
449-
target_link_libraries(${ABACUS_BIN_NAME} deepks)
450-
list(APPEND math_libs ${TORCH_LIBRARIES})
451-
448+
if(MKL_FOUND)
449+
list(PREPEND math_libs ${TORCH_LIBRARIES})
450+
else()
451+
list(APPEND math_libs ${TORCH_LIBRARIES})
452+
endif()
452453
add_compile_options(${TORCH_CXX_FLAGS})
454+
target_link_libraries(${ABACUS_BIN_NAME} deepks)
453455

454456
find_path(libnpy_SOURCE_DIR npy.hpp HINTS ${libnpy_INCLUDE_DIR})
455457
if(NOT libnpy_SOURCE_DIR)
@@ -524,6 +526,7 @@ if(ENABLE_LIBRI)
524526
else()
525527
message(FATAL_ERROR "Must provide LIBRI_DIR for RI related features.")
526528
endif()
529+
target_link_libraries(${ABACUS_BIN_NAME} ri)
527530
add_compile_definitions(__EXX EXX_DM=3 EXX_H_COMM=2 TEST_EXX_LCAO=0
528531
TEST_EXX_RADIAL=1)
529532
endif()
@@ -551,6 +554,7 @@ if(ENABLE_PAW)
551554
else()
552555
message(FATAL_ERROR "Must provide LIBPAW_DIR for PAW related features.")
553556
endif()
557+
target_link_libraries(${ABACUS_BIN_NAME} paw)
554558
add_compile_definitions(USE_PAW)
555559
endif()
556560

@@ -663,7 +667,6 @@ if(BUILD_TESTING)
663667
COMMAND ${UT_TARGET}
664668
WORKING_DIRECTORY $<TARGET_FILE_DIR:${UT_TARGET}>)
665669
endfunction(AddTest)
666-
667670
endif()
668671

669672
add_subdirectory(source)
@@ -696,11 +699,6 @@ target_link_libraries(
696699
parameter
697700
device
698701
container)
699-
700-
if(ENABLE_PAW)
701-
target_link_libraries(${ABACUS_BIN_NAME} paw)
702-
endif()
703-
704702
if(ENABLE_LCAO)
705703
target_link_libraries(
706704
${ABACUS_BIN_NAME}
@@ -719,9 +717,8 @@ if(ENABLE_LCAO)
719717
target_link_libraries(diag_cusolver)
720718
endif()
721719
endif()
722-
723-
if(ENABLE_LIBRI)
724-
target_link_libraries(${ABACUS_BIN_NAME} ri)
720+
if(ENABLE_RAPIDJSON)
721+
target_link_libraries(${ABACUS_BIN_NAME} json_output)
725722
endif()
726723

727724
install(PROGRAMS ${ABACUS_BIN_PATH}
@@ -732,7 +729,3 @@ install(PROGRAMS ${ABACUS_BIN_PATH}
732729
if(ENABLE_COVERAGE)
733730
coverage_evaluate()
734731
endif()
735-
736-
if(ENABLE_RAPIDJSON)
737-
target_link_libraries(${ABACUS_BIN_NAME} json_output)
738-
endif()

README.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
</p>
44

55
<p align="center">
6-
<a href="https://github.com/deepmodeling/abacus-develop/actions/workflows/image.yml">
7-
<img src="https://github.com/deepmodeling/abacus-develop/actions/workflows/image.yml/badge.svg">
8-
</a>
96
<a href="https://github.com/deepmodeling/abacus-develop/actions/workflows/test.yml">
107
<img src="https://github.com/deepmodeling/abacus-develop/actions/workflows/test.yml/badge.svg">
118
</a>

cmake/FindIntelMKL.cmake

Lines changed: 0 additions & 80 deletions
This file was deleted.

cmake/FindMKL.cmake

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# - Find mkl
2+
# Find the native MKL headers and libraries.
3+
#
4+
# MKL_INCLUDE - where to find mkl.h, etc.
5+
# MKL_FOUND - True if mkl found.
6+
7+
find_package(MKL NO_MODULE) # try using official module first
8+
if(NOT TARGET MKL::MKL)
9+
10+
find_path(MKL_INCLUDE mkl_service.h HINTS ${MKLROOT}/include)
11+
12+
find_library(MKL_INTEL NAMES mkl_intel_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
13+
find_library(MKL_INTEL_THREAD NAMES mkl_intel_thread HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
14+
find_library(MKL_CORE NAMES mkl_core HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
15+
if(ENABLE_MPI)
16+
find_library(MKL_SCALAPACK NAMES mkl_scalapack_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
17+
find_library(MKL_BLACS_INTELMPI NAMES mkl_blacs_intelmpi_lp64 HINTS ${MKLROOT}/lib ${MKLROOT}/lib/intel64)
18+
endif()
19+
20+
include(FindPackageHandleStandardArgs)
21+
# handle the QUIETLY and REQUIRED arguments and set MKL_FOUND to TRUE
22+
# if all listed variables are TRUE
23+
24+
if(ENABLE_MPI)
25+
find_package_handle_standard_args(MKL DEFAULT_MSG MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS_INTELMPI MKL_INCLUDE)
26+
else()
27+
find_package_handle_standard_args(MKL MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_INCLUDE)
28+
endif()
29+
30+
if(MKL_FOUND)
31+
if(NOT TARGET MKL::INTEL)
32+
add_library(MKL::INTEL UNKNOWN IMPORTED)
33+
set_target_properties(MKL::INTEL PROPERTIES
34+
IMPORTED_LOCATION "${MKL_INTEL}"
35+
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
36+
endif()
37+
if(NOT TARGET MKL::INTEL_THREAD)
38+
add_library(MKL::INTEL_THREAD UNKNOWN IMPORTED)
39+
set_target_properties(MKL::INTEL_THREAD PROPERTIES
40+
IMPORTED_LOCATION "${MKL_INTEL_THREAD}"
41+
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
42+
endif()
43+
if(NOT TARGET MKL::CORE)
44+
add_library(MKL::CORE UNKNOWN IMPORTED)
45+
set_target_properties(MKL::CORE PROPERTIES
46+
IMPORTED_LOCATION "${MKL_CORE}"
47+
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
48+
endif()
49+
if(NOT TARGET MKL::MKL_SCALAPACK)
50+
add_library(MKL::MKL_SCALAPACK UNKNOWN IMPORTED)
51+
set_target_properties(MKL::MKL_SCALAPACK PROPERTIES
52+
IMPORTED_LOCATION "${MKL_SCALAPACK}"
53+
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
54+
endif()
55+
if(NOT TARGET MKL::BLACS_INTELMPI)
56+
add_library(MKL::BLACS_INTELMPI UNKNOWN IMPORTED)
57+
set_target_properties(MKL::BLACS_INTELMPI PROPERTIES
58+
IMPORTED_LOCATION "${MKL_BLACS_INTELMPI}"
59+
INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE}")
60+
endif()
61+
add_library(MKL::MKL INTERFACE IMPORTED)
62+
if (ENABLE_MPI)
63+
set_property(TARGET MKL::MKL PROPERTY
64+
INTERFACE_LINK_LIBRARIES
65+
"-Wl,--start-group"
66+
MKL::INTEL MKL::INTEL_THREAD MKL::CORE MKL::MKL_SCALAPACK MKL::BLACS_INTELMPI
67+
"-Wl,--end-group"
68+
)
69+
else()
70+
set_property(TARGET MKL::MKL PROPERTY
71+
INTERFACE_LINK_LIBRARIES
72+
"-Wl,--start-group"
73+
MKL::INTEL MKL::INTEL_THREAD MKL::CORE)
74+
endif()
75+
endif()
76+
77+
if(ENABLE_MPI)
78+
mark_as_advanced(MKL_INCLUDE MKL_INTEL MKL_INTEL_THREAD MKL_CORE MKL_SCALAPACK MKL_BLACS_INTELMPI)
79+
else()
80+
mark_as_advanced(MKL_INCLUDE MKL_INTEL MKL_INTEL_THREAD MKL_CORE)
81+
endif()
82+
83+
endif() # MKL::MKL

0 commit comments

Comments
 (0)