diff --git a/cmake/libs/libfaiss.cmake b/cmake/libs/libfaiss.cmake index 6f44c0899..c3a3a4b0f 100644 --- a/cmake/libs/libfaiss.cmake +++ b/cmake/libs/libfaiss.cmake @@ -44,6 +44,13 @@ if(__AARCH64) target_link_libraries(knowhere_utils PUBLIC glog::glog) endif() +# ToDo: Add distances_vsx.cc for powerpc64 SIMD acceleration +if(__PPC64) + set(UTILS_SRC src/simd/hook.cc src/simd/distances_ref.cc) + add_library(knowhere_utils STATIC ${UTILS_SRC}) + target_link_libraries(knowhere_utils PUBLIC glog::glog) +endif() + if(LINUX) set(BLA_VENDOR OpenBLAS) endif() @@ -125,3 +132,27 @@ if(__AARCH64) ${LAPACK_LIBRARIES} knowhere_utils) target_compile_definitions(faiss PRIVATE FINTEGER=int) endif() + +if(__PPC64) + knowhere_file_glob(GLOB FAISS_AVX_SRCS thirdparty/faiss/faiss/impl/*avx.cpp) + + list(REMOVE_ITEM FAISS_SRCS ${FAISS_AVX_SRCS}) + add_library(faiss STATIC ${FAISS_SRCS}) + + target_compile_options( + faiss + PRIVATE $<$: + -mcpu=native + -mvsx + -Wno-sign-compare + -Wno-unused-variable + -Wno-reorder + -Wno-unused-local-typedefs + -Wno-unused-function + -Wno-strict-aliasing>) + + add_dependencies(faiss knowhere_utils) + target_link_libraries(faiss PUBLIC OpenMP::OpenMP_CXX ${BLAS_LIBRARIES} + ${LAPACK_LIBRARIES} knowhere_utils) + target_compile_definitions(faiss PRIVATE FINTEGER=int) +endif() diff --git a/cmake/utils/platform_check.cmake b/cmake/utils/platform_check.cmake index d713a2d44..0345b92fc 100644 --- a/cmake/utils/platform_check.cmake +++ b/cmake/utils/platform_check.cmake @@ -3,9 +3,10 @@ include(CheckSymbolExists) macro(detect_target_arch) check_symbol_exists(__aarch64__ "" __AARCH64) check_symbol_exists(__x86_64__ "" __X86_64) + check_symbol_exists(__powerpc64__ "" __PPC64) - if(NOT __AARCH64 AND NOT __X86_64) - message(FATAL "knowhere only support amd64 and arm64.") + if(NOT __AARCH64 AND NOT __X86_64 AND NOT __PPC64) + message(FATAL "knowhere only support amd64, ppc64 and arm64 architecture.") endif() endmacro()