@@ -72,71 +72,77 @@ if (GGML_SYCL_GRAPH)
72
72
target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_GRAPH )
73
73
endif ()
74
74
75
- find_package (oneMath QUIET )
76
- if (NOT oneMath_FOUND )
77
- message ("-- oneMath not found: oneMath will be automatically downloaded" )
78
- # Use FetchContent to automatically pull and build oneMath
79
- include (FetchContent )
80
- set (BUILD_FUNCTIONAL_TESTS False )
81
- set (BUILD_EXAMPLES False )
82
- set (TARGET_DOMAINS blas )
75
+ # Link against Intel oneMKL or oneMath
76
+ if (GGML_SYCL_TARGET STREQUAL "INTEL" )
77
+ # Intel devices use Intel oneMKL directly instead of oneMath to avoid the limitation of linking Intel oneMKL statically
78
+ # See https://github.com/uxlfoundation/oneMath/issues/654
79
+ find_package (MKL REQUIRED )
80
+ target_link_libraries (ggml-sycl PRIVATE MKL::MKL MKL::MKL_SYCL )
81
+ target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_USE_INTEL_ONEMKL )
82
+ else ()
83
+ find_package (oneMath QUIET )
84
+ if (NOT oneMath_FOUND )
85
+ message ("-- oneMath not found: oneMath will be automatically downloaded" )
86
+ # Use FetchContent to automatically pull and build oneMath
87
+ include (FetchContent )
88
+ set (BUILD_FUNCTIONAL_TESTS False )
89
+ set (BUILD_EXAMPLES False )
90
+ set (TARGET_DOMAINS blas )
91
+ if (GGML_SYCL_TARGET STREQUAL "NVIDIA" )
92
+ set (ENABLE_MKLCPU_BACKEND False )
93
+ set (ENABLE_MKLGPU_BACKEND False )
94
+ set (ENABLE_CUBLAS_BACKEND True )
95
+ elseif (GGML_SYCL_TARGET STREQUAL "AMD" )
96
+ set (ENABLE_MKLCPU_BACKEND False )
97
+ set (ENABLE_MKLGPU_BACKEND False )
98
+ set (ENABLE_ROCBLAS_BACKEND True )
99
+ # Ensure setting a string variable here is not overriden by oneMath CACHE variables
100
+ cmake_policy (SET CMP0126 NEW )
101
+ # Setting the device architecture is only needed and useful for AMD devices in oneMath
102
+ set (HIP_TARGETS ${GGML_SYCL_DEVICE_ARCH} CACHE STRING "oneMath HIP target" FORCE )
103
+ endif ()
104
+ FetchContent_Declare (
105
+ ONEMATH
106
+ GIT_REPOSITORY https://github.com/uxlfoundation/oneMath.git
107
+ GIT_TAG c255b1b4c41e2ee3059455c1f96a965d6a62568a
108
+ )
109
+ FetchContent_MakeAvailable (ONEMATH )
110
+ # Create alias to match with find_package targets name
111
+ function (onemath_alias target )
112
+ if (TARGET ${target} _obj )
113
+ # Silence verbose warnings from external libraries
114
+ target_compile_options (${target} _obj PRIVATE -w )
115
+ endif ()
116
+ if (TARGET ${target} )
117
+ add_library (ONEMATH::${target} ALIAS ${target} )
118
+ endif ()
119
+ endfunction ()
120
+ onemath_alias (onemath )
121
+ onemath_alias (onemath_blas_mklcpu )
122
+ onemath_alias (onemath_blas_mklgpu )
123
+ onemath_alias (onemath_blas_cublas )
124
+ onemath_alias (onemath_blas_rocblas )
125
+ endif ()
126
+
127
+ # Below oneMath compile-time dispatching is used for better performance
83
128
if (GGML_SYCL_TARGET STREQUAL "NVIDIA" )
84
- set (ENABLE_MKLCPU_BACKEND False )
85
- set (ENABLE_MKLGPU_BACKEND False )
86
- set (ENABLE_CUBLAS_BACKEND True )
129
+ target_link_libraries (ggml-sycl PRIVATE ONEMATH::onemath_blas_cublas )
130
+ target_compile_options (ggml-sycl PRIVATE "-fsycl-targets=nvptx64-nvidia-cuda" )
131
+ target_link_options (ggml-sycl PRIVATE "-fsycl-targets=nvptx64-nvidia-cuda" )
132
+ target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_NVIDIA )
87
133
elseif (GGML_SYCL_TARGET STREQUAL "AMD" )
88
- set (ENABLE_MKLCPU_BACKEND False )
89
- set (ENABLE_MKLGPU_BACKEND False )
90
- set (ENABLE_ROCBLAS_BACKEND True )
91
- # Ensure setting a string variable here is not overriden by oneMath CACHE variables
92
- cmake_policy (SET CMP0126 NEW )
93
- # Setting the device architecture is only needed and useful for AMD devices in oneMath
94
- set (HIP_TARGETS ${GGML_SYCL_DEVICE_ARCH} CACHE STRING "oneMath HIP target" FORCE )
95
- endif ()
96
- FetchContent_Declare (
97
- ONEMATH
98
- GIT_REPOSITORY https://github.com/uxlfoundation/oneMath.git
99
- GIT_TAG c255b1b4c41e2ee3059455c1f96a965d6a62568a
100
- )
101
- FetchContent_MakeAvailable (ONEMATH )
102
- # Create alias to match with find_package targets name
103
- function (onemath_alias target )
104
- if (TARGET ${target} _obj )
105
- # Silence verbose warnings from external libraries
106
- target_compile_options (${target} _obj PRIVATE -w )
134
+ if (NOT GGML_SYCL_DEVICE_ARCH )
135
+ message (ERROR "Can't enable SYCL hip backend, GGML_SYCL_DEVICE_ARCH has not been set." )
107
136
endif ()
108
- if (TARGET ${target} )
109
- add_library (ONEMATH::${target} ALIAS ${target} )
110
- endif ()
111
- endfunction ()
112
- onemath_alias (onemath )
113
- onemath_alias (onemath_blas_mklcpu )
114
- onemath_alias (onemath_blas_mklgpu )
115
- onemath_alias (onemath_blas_cublas )
116
- onemath_alias (onemath_blas_rocblas )
117
- endif ()
118
-
119
- # Below oneMath compile-time dispatching is used for better performance
120
- if (GGML_SYCL_TARGET STREQUAL "INTEL" )
121
- target_link_libraries (ggml-sycl PRIVATE ONEMATH::onemath_blas_mklgpu )
122
- target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_INTEL )
123
- elseif (GGML_SYCL_TARGET STREQUAL "NVIDIA" )
124
- target_link_libraries (ggml-sycl PRIVATE ONEMATH::onemath_blas_cublas )
125
- target_compile_options (ggml-sycl PRIVATE "-fsycl-targets=nvptx64-nvidia-cuda" )
126
- target_link_options (ggml-sycl PRIVATE "-fsycl-targets=nvptx64-nvidia-cuda" )
127
- target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_NVIDIA )
128
- elseif (GGML_SYCL_TARGET STREQUAL "AMD" )
129
- if (NOT GGML_SYCL_DEVICE_ARCH )
130
- message (ERROR "Can't enable SYCL hip backend, GGML_SYCL_DEVICE_ARCH has not been set." )
137
+ target_link_libraries (ggml-sycl PRIVATE ONEMATH::onemath_blas_rocblas )
138
+ target_compile_options (ggml-sycl PRIVATE "-fsycl-targets=amdgcn-amd-amdhsa" )
139
+ target_link_options (ggml-sycl PRIVATE "-fsycl-targets=amdgcn-amd-amdhsa" )
140
+ target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_AMD )
141
+ else ()
142
+ # Fallback to oneMath runtime dispatcher
143
+ target_link_libraries (ggml-sycl PRIVATE ONEMATH::onemath )
144
+ target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_GENERIC )
131
145
endif ()
132
- target_link_libraries (ggml-sycl PRIVATE ONEMATH::onemath_blas_rocblas )
133
- target_compile_options (ggml-sycl PRIVATE "-fsycl-targets=amdgcn-amd-amdhsa" )
134
- target_link_options (ggml-sycl PRIVATE "-fsycl-targets=amdgcn-amd-amdhsa" )
135
- target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_AMD )
136
- else ()
137
- # Fallback to oneMath runtime dispatcher
138
- target_link_libraries (ggml-sycl PRIVATE ONEMATH::onemath )
139
- target_compile_definitions (ggml-sycl PRIVATE GGML_SYCL_GENERIC )
140
146
endif ()
141
147
142
148
if (GGML_SYCL_DEVICE_ARCH )
0 commit comments