mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-29 20:14:01 +00:00
Remove fp16 support from apple (#15270)
### Description Removing fp16 support from apple build ### Motivation and Context FP16 support on ARM64 only available after armv8.2a, thus the clang compiler needs a compilation flag `-march=armv8.2-a+fp16`. Unfortunately, our current universal build does not support hardware specific compilation flags on cpp source files, as it would cause trouble when compiling against more than one hardware target. Until we figure out how to remove this limitation, had to disable fp16 support for Apple systems.
This commit is contained in:
parent
4645726d74
commit
605c2f4b89
3 changed files with 22 additions and 14 deletions
|
|
@ -89,7 +89,6 @@ function(setup_mlas_source_for_windows)
|
|||
${MLAS_SRC_DIR}/qgemm_kernel_neon.cpp
|
||||
${MLAS_SRC_DIR}/qgemm_kernel_udot.cpp
|
||||
${MLAS_SRC_DIR}/qgemm_kernel_sdot.cpp
|
||||
${MLAS_SRC_DIR}/dwconv.cpp
|
||||
)
|
||||
|
||||
set(mlas_platform_preprocess_srcs
|
||||
|
|
@ -334,7 +333,6 @@ else()
|
|||
${MLAS_SRC_DIR}/aarch64/DepthwiseQConvSymS8KernelNeon.S
|
||||
${MLAS_SRC_DIR}/aarch64/DepthwiseQConvSymU8KernelNeon.S
|
||||
${MLAS_SRC_DIR}/aarch64/DepthwiseQConvKernelSize9Neon.S
|
||||
${MLAS_SRC_DIR}/aarch64/HalfGemmKernelNeon.S
|
||||
${MLAS_SRC_DIR}/aarch64/QgemmU8X8KernelNeon.S
|
||||
${MLAS_SRC_DIR}/aarch64/QgemmS8S8KernelNeon.S
|
||||
${MLAS_SRC_DIR}/aarch64/QgemmU8X8KernelUdot.S
|
||||
|
|
@ -344,18 +342,24 @@ else()
|
|||
${MLAS_SRC_DIR}/aarch64/SymQgemmS8KernelNeon.S
|
||||
${MLAS_SRC_DIR}/aarch64/SymQgemmS8KernelSdot.S
|
||||
${MLAS_SRC_DIR}/aarch64/SymQgemmS8KernelSdotLd64.S
|
||||
${MLAS_SRC_DIR}/activate_fp16.cpp
|
||||
${MLAS_SRC_DIR}/dwconv.cpp
|
||||
${MLAS_SRC_DIR}/halfgemm_kernel_neon.cpp
|
||||
${MLAS_SRC_DIR}/pooling_fp16.cpp
|
||||
${MLAS_SRC_DIR}/qgemm_kernel_neon.cpp
|
||||
${MLAS_SRC_DIR}/qgemm_kernel_udot.cpp
|
||||
${MLAS_SRC_DIR}/qgemm_kernel_sdot.cpp
|
||||
)
|
||||
set_source_files_properties(${MLAS_SRC_DIR}/aarch64/HalfGemmKernelNeon.S PROPERTIES COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
|
||||
set_source_files_properties(${MLAS_SRC_DIR}/activate_fp16.cpp PROPERTIES COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
|
||||
set_source_files_properties(${MLAS_SRC_DIR}/dwconv.cpp PROPERTIES COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
|
||||
set_source_files_properties(${MLAS_SRC_DIR}/pooling_fp16.cpp PROPERTIES COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
|
||||
if (NOT APPLE)
|
||||
set(mlas_platform_srcs
|
||||
${mlas_platform_srcs}
|
||||
${MLAS_SRC_DIR}/aarch64/HalfGemmKernelNeon.S
|
||||
${MLAS_SRC_DIR}/activate_fp16.cpp
|
||||
${MLAS_SRC_DIR}/dwconv.cpp
|
||||
${MLAS_SRC_DIR}/halfgemm_kernel_neon.cpp
|
||||
${MLAS_SRC_DIR}/pooling_fp16.cpp
|
||||
)
|
||||
set_source_files_properties(${MLAS_SRC_DIR}/aarch64/HalfGemmKernelNeon.S PROPERTIES COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
|
||||
set_source_files_properties(${MLAS_SRC_DIR}/activate_fp16.cpp PROPERTIES COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
|
||||
set_source_files_properties(${MLAS_SRC_DIR}/dwconv.cpp PROPERTIES COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
|
||||
set_source_files_properties(${MLAS_SRC_DIR}/pooling_fp16.cpp PROPERTIES COMPILE_FLAGS " -march=armv8.2-a+fp16 ")
|
||||
endif()
|
||||
|
||||
if(ONNXRUNTIME_MLAS_MULTI_ARCH)
|
||||
onnxruntime_add_static_library(onnxruntime_mlas_arm64 ${mlas_platform_srcs})
|
||||
|
|
|
|||
|
|
@ -78,12 +78,16 @@ Abstract:
|
|||
#endif
|
||||
|
||||
#if (!defined(_MSC_VER)) || (_MSC_VER >= 1930)
|
||||
// Visual Studio older than 2022 does not support fp16 intrinsic
|
||||
|
||||
#if defined(MLAS_TARGET_ARM64) || defined(MLAS_TARGET_ARM64EC)
|
||||
#if !defined(__APPLE__)
|
||||
// Had to temporary disable fp16 under APPLE ARM64, as compiling
|
||||
// the source files require a hardware specific compilation flag.
|
||||
// When building an universial binary for APPLE, this flag would
|
||||
// cause trouble for x64 target.
|
||||
|
||||
#define MLAS_F16VEC_INTRINSICS_SUPPORTED
|
||||
|
||||
#endif //
|
||||
#endif // ARM64
|
||||
#endif // Visual Studio 16 or earlier does not support fp16 intrinsic
|
||||
|
||||
|
|
|
|||
|
|
@ -499,7 +499,7 @@ struct MLAS_HALFGEMM_DISPATCH {
|
|||
|
||||
extern const MLAS_HALFGEMM_DISPATCH MlasHalfGemmDispatchDefault;
|
||||
|
||||
#if defined(MLAS_TARGET_ARM64)
|
||||
#if defined(MLAS_F16VEC_INTRINSICS_SUPPORTED) && defined(MLAS_TARGET_ARM64)
|
||||
extern const MLAS_HALFGEMM_DISPATCH MlasHalfGemmDispatchNeon;
|
||||
#endif
|
||||
|
||||
|
|
@ -507,7 +507,7 @@ MLAS_FORCEINLINE
|
|||
const MLAS_HALFGEMM_DISPATCH*
|
||||
MlasHalfGemmGetDispatch()
|
||||
{
|
||||
#if defined(MLAS_TARGET_ARM64)
|
||||
#if defined(MLAS_F16VEC_INTRINSICS_SUPPORTED) && defined(MLAS_TARGET_ARM64)
|
||||
return &MlasHalfGemmDispatchNeon;
|
||||
#else
|
||||
return &MlasHalfGemmDispatchDefault;
|
||||
|
|
|
|||
Loading…
Reference in a new issue