mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-30 20:18:08 +00:00
[AIX] Python binding enablement and gcc support (#21934)
### Description
Enabling python binding and gcc support for AIX.
### Motivation and Context
Code changes in this PR contains:
1. python binding enablement
2. gcc building support
Below are list of files and the description.
1. cmake/CMakeLists.txt
[gcc building support] -no-unused-function compiler flag addition for
IBMClang
2. cmake/external/eigen.cmake
[gcc building support] AIX check for applying the AIX patch
3. cmake/onnxruntime_python.cmake
[python binding ] putting NOT AIX check for -Xlinker
4. cmake/onnxruntime_unittests.cmake
[gcc building support] Fix for gtest behavior. Check the comment .
[python binding ] using -Wl,-brtl for linking
onnxruntime_providers_shared in test_execution_provider
5. cmake/patches/eigen/eigen-aix.patch
[gcc building support] In AIX gcc, we are hitting
__builtin_cpu_supports("mma") which is not supported yet. So patching
code for this method . Patched code will check for P10 Processor at
run-time and based on that routine will be set.
6. onnxruntime/python/onnxruntime_validation.py
[python binding ] Adding AIX check in check_distro_info()
7. onnxruntime/test/providers/cpu/generator/random_test.cc
[gcc building support] updating previous check for AIX , along with
clang. So in case of gcc, else block will hit.
8. onnxruntime/test/python/onnxruntime_test_python.py
[python binding ] powerpc check on platform.processor()
9. setup.py
[python binding ] Adding AIX check for list of libs.
This commit is contained in:
parent
1f879c3282
commit
02e3a430af
9 changed files with 304 additions and 13 deletions
|
|
@ -1041,6 +1041,9 @@ function(onnxruntime_set_compile_flags target_name)
|
|||
#external/protobuf/src/google/protobuf/arena.h:445:18: error: unused parameter 'p'
|
||||
target_compile_options(${target_name} PRIVATE "-Wno-unused-parameter")
|
||||
endif()
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "IBMClang")
|
||||
target_compile_options(${target_name} PRIVATE "-Wno-unused-function")
|
||||
endif()
|
||||
target_compile_definitions(${target_name} PUBLIC -DNSYNC_ATOMIC_CPP11)
|
||||
onnxruntime_add_include_to_target(${target_name} nsync::nsync_cpp)
|
||||
endif()
|
||||
|
|
|
|||
19
cmake/external/eigen.cmake
vendored
19
cmake/external/eigen.cmake
vendored
|
|
@ -3,11 +3,20 @@ if (onnxruntime_USE_PREINSTALLED_EIGEN)
|
|||
file(TO_CMAKE_PATH ${eigen_SOURCE_PATH} eigen_INCLUDE_DIRS)
|
||||
target_include_directories(eigen INTERFACE ${eigen_INCLUDE_DIRS})
|
||||
else ()
|
||||
FetchContent_Declare(
|
||||
eigen
|
||||
URL ${DEP_URL_eigen}
|
||||
URL_HASH SHA1=${DEP_SHA1_eigen}
|
||||
)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "AIX")
|
||||
FetchContent_Declare(
|
||||
eigen
|
||||
URL ${DEP_URL_eigen}
|
||||
URL_HASH SHA1=${DEP_SHA1_eigen}
|
||||
PATCH_COMMAND ${Patch_EXECUTABLE} --binary --ignore-whitespace -p1 < ${PROJECT_SOURCE_DIR}/patches/eigen/eigen-aix.patch
|
||||
)
|
||||
else()
|
||||
FetchContent_Declare(
|
||||
eigen
|
||||
URL ${DEP_URL_eigen}
|
||||
URL_HASH SHA1=${DEP_SHA1_eigen}
|
||||
)
|
||||
endif()
|
||||
|
||||
FetchContent_Populate(eigen)
|
||||
set(eigen_INCLUDE_DIRS "${eigen_SOURCE_DIR}")
|
||||
|
|
|
|||
|
|
@ -117,7 +117,9 @@ elseif(UNIX)
|
|||
if (onnxruntime_ENABLE_EXTERNAL_CUSTOM_OP_SCHEMAS)
|
||||
set(ONNXRUNTIME_SO_LINK_FLAG "-Xlinker --version-script=${ONNXRUNTIME_ROOT}/python/version_script_expose_onnx_protobuf.lds -Xlinker --gc-sections")
|
||||
else()
|
||||
set(ONNXRUNTIME_SO_LINK_FLAG "-Xlinker --version-script=${ONNXRUNTIME_ROOT}/python/version_script.lds -Xlinker --gc-sections")
|
||||
if (NOT CMAKE_SYSTEM_NAME MATCHES "AIX")
|
||||
set(ONNXRUNTIME_SO_LINK_FLAG "-Xlinker --version-script=${ONNXRUNTIME_ROOT}/python/version_script.lds -Xlinker --gc-sections")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
set(ONNXRUNTIME_SO_LINK_FLAG "-DEF:${ONNXRUNTIME_ROOT}/python/pybind.def")
|
||||
|
|
@ -224,7 +226,9 @@ elseif (APPLE)
|
|||
BUILD_WITH_INSTALL_RPATH TRUE
|
||||
INSTALL_RPATH_USE_LINK_PATH FALSE)
|
||||
else()
|
||||
set_property(TARGET onnxruntime_pybind11_state APPEND_STRING PROPERTY LINK_FLAGS " -Xlinker -rpath=\\$ORIGIN")
|
||||
if (NOT CMAKE_SYSTEM_NAME MATCHES "AIX")
|
||||
set_property(TARGET onnxruntime_pybind11_state APPEND_STRING PROPERTY LINK_FLAGS " -Xlinker -rpath=\\$ORIGIN")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (onnxruntime_ENABLE_EXTERNAL_CUSTOM_OP_SCHEMAS)
|
||||
|
|
|
|||
|
|
@ -915,6 +915,15 @@ if (MSVC AND onnxruntime_ENABLE_STATIC_ANALYSIS)
|
|||
target_compile_options(onnxruntime_test_all PRIVATE "/analyze:stacksize 131072")
|
||||
endif()
|
||||
|
||||
#In AIX + gcc compiler ,crash is observed with the usage of googletest EXPECT_THROW,
|
||||
#because some needed symbol is garbaged out by linker.
|
||||
#So, fix is to exports the symbols from executable.
|
||||
#Another way is to use -Wl,-bkeepfile for each object file where EXPECT_THROW is used like below
|
||||
#target_link_options(onnxruntime_test_all PRIVATE "-Wl,-bkeepfile:CMakeFiles/onnxruntime_test_all.dir${TEST_SRC_DIR}/framework/tensor_test.cc.o")
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set_target_properties(onnxruntime_test_all PROPERTIES ENABLE_EXPORTS 1)
|
||||
endif()
|
||||
|
||||
# the default logger tests conflict with the need to have an overall default logger
|
||||
# so skip in this type of
|
||||
target_compile_definitions(onnxruntime_test_all PUBLIC -DSKIP_DEFAULT_LOGGER_TESTS)
|
||||
|
|
@ -1766,7 +1775,12 @@ if (NOT onnxruntime_MINIMAL_BUILD AND NOT onnxruntime_EXTENDED_MINIMAL_BUILD
|
|||
|
||||
onnxruntime_add_shared_library_module(test_execution_provider ${test_execution_provider_srcs})
|
||||
add_dependencies(test_execution_provider onnxruntime_providers_shared onnx ${ABSEIL_LIBS})
|
||||
target_link_libraries(test_execution_provider PRIVATE onnxruntime_providers_shared ${ABSEIL_LIBS} Boost::mp11)
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "AIX")
|
||||
target_link_options(test_execution_provider PRIVATE -Wl,-brtl -lonnxruntime_providers_shared)
|
||||
target_link_libraries(test_execution_provider PRIVATE ${ABSEIL_LIBS} Boost::mp11)
|
||||
else()
|
||||
target_link_libraries(test_execution_provider PRIVATE onnxruntime_providers_shared ${ABSEIL_LIBS} Boost::mp11)
|
||||
endif()
|
||||
target_include_directories(test_execution_provider PRIVATE $<TARGET_PROPERTY:onnx,INTERFACE_INCLUDE_DIRECTORIES>)
|
||||
target_include_directories(test_execution_provider PRIVATE $<TARGET_PROPERTY:onnxruntime_common,INTERFACE_INCLUDE_DIRECTORIES>)
|
||||
target_include_directories(test_execution_provider PRIVATE ${ONNXRUNTIME_ROOT} ${CMAKE_CURRENT_BINARY_DIR} ${ORTTRAINING_ROOT})
|
||||
|
|
|
|||
250
cmake/patches/eigen/eigen-aix.patch
Normal file
250
cmake/patches/eigen/eigen-aix.patch
Normal file
|
|
@ -0,0 +1,250 @@
|
|||
diff --git a/Eigen/src/Core/arch/AltiVec/MatrixProduct.h b/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
|
||||
index 8feb88ea7..01b50b7c4 100644
|
||||
--- a/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
|
||||
+++ b/Eigen/src/Core/arch/AltiVec/MatrixProduct.h
|
||||
@@ -15,6 +15,21 @@
|
||||
#define EIGEN_ALTIVEC_USE_CUSTOM_PACK 1
|
||||
#endif
|
||||
|
||||
+#ifdef _AIX
|
||||
+#define POWER_10 0x40000
|
||||
+#define POWER_10_ANDUP (POWER_10)
|
||||
+#include <sys/systemcfg.h>
|
||||
+#define __power_10_andup() (_system_configuration.implementation & POWER_10_ANDUP)
|
||||
+
|
||||
+static bool check_mma_support()
|
||||
+{
|
||||
+ if(__power_10_andup() && __power_mma_version() == MMA_V31)
|
||||
+ return true;
|
||||
+ else
|
||||
+ return false;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
#include "MatrixProductCommon.h"
|
||||
|
||||
// Since LLVM doesn't support dynamic dispatching, force either always MMA or VSX
|
||||
@@ -2481,12 +2496,21 @@ void gebp_kernel<float, float, Index, DataMapper, mr, nr, ConjugateLhs, Conjugat
|
||||
//generate with MMA only
|
||||
gemm_function = &Eigen::internal::gemmMMA<float, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
#elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA)
|
||||
- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
- gemm_function = &Eigen::internal::gemmMMA<float, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
- }
|
||||
- else{
|
||||
- gemm_function = &Eigen::internal::gemm<float, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
- }
|
||||
+ #if defined(_AIX)
|
||||
+ if(check_mma_support()){
|
||||
+ gemm_function = &Eigen::internal::gemmMMA<float, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm<float, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
+ }
|
||||
+ #else
|
||||
+ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
+ gemm_function = &Eigen::internal::gemmMMA<float, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm<float, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
+ }
|
||||
+ #endif
|
||||
#else
|
||||
gemm_function = &Eigen::internal::gemm<float, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
#endif
|
||||
@@ -2520,12 +2544,21 @@ void gebp_kernel<std::complex<float>, std::complex<float>, Index, DataMapper, mr
|
||||
//generate with MMA only
|
||||
gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<float>, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
#elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA)
|
||||
- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
- gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<float>, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
- }
|
||||
- else{
|
||||
- gemm_function = &Eigen::internal::gemm_complex<std::complex<float>, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
- }
|
||||
+ #if defined(_AIX)
|
||||
+ if (check_mma_support()){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<float>, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<std::complex<float>, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
+ }
|
||||
+ #else
|
||||
+ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<float>, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<std::complex<float>, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
+ }
|
||||
+ #endif
|
||||
#else
|
||||
gemm_function = &Eigen::internal::gemm_complex<std::complex<float>, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
#endif
|
||||
@@ -2558,12 +2591,21 @@ void gebp_kernel<float, std::complex<float>, Index, DataMapper, mr, nr, Conjugat
|
||||
//generate with MMA only
|
||||
gemm_function = &Eigen::internal::gemm_complexMMA<float, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
#elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA)
|
||||
- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
- gemm_function = &Eigen::internal::gemm_complexMMA<float, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
- }
|
||||
- else{
|
||||
- gemm_function = &Eigen::internal::gemm_complex<float, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
- }
|
||||
+ #if defined(_AIX)
|
||||
+ if (check_mma_support()){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<float, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<float, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
+ }
|
||||
+ #else
|
||||
+ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<float, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<float, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
+ }
|
||||
+ #endif
|
||||
#else
|
||||
gemm_function = &Eigen::internal::gemm_complex<float, std::complex<float>, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
#endif
|
||||
@@ -2596,12 +2638,21 @@ void gebp_kernel<std::complex<float>, float, Index, DataMapper, mr, nr, Conjugat
|
||||
//generate with MMA only
|
||||
gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<float>, float, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
#elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA)
|
||||
- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
- gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<float>, float, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
- }
|
||||
- else{
|
||||
- gemm_function = &Eigen::internal::gemm_complex<std::complex<float>, float, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
- }
|
||||
+ #if defined(_AIX)
|
||||
+ if (check_mma_support()){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<float>, float, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<std::complex<float>, float, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
+ }
|
||||
+ #else
|
||||
+ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<float>, float, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<std::complex<float>, float, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
+ }
|
||||
+ #endif
|
||||
#else
|
||||
gemm_function = &Eigen::internal::gemm_complex<std::complex<float>, float, std::complex<float>, float, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
#endif
|
||||
@@ -2633,12 +2684,21 @@ void gebp_kernel<double, double, Index, DataMapper, mr, nr, ConjugateLhs, Conjug
|
||||
//generate with MMA only
|
||||
gemm_function = &Eigen::internal::gemmMMA<double, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
#elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA)
|
||||
- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
- gemm_function = &Eigen::internal::gemmMMA<double, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
- }
|
||||
- else{
|
||||
- gemm_function = &Eigen::internal::gemm<double, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
- }
|
||||
+ #if defined(_AIX)
|
||||
+ if (check_mma_support()){
|
||||
+ gemm_function = &Eigen::internal::gemmMMA<double, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm<double, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
+ }
|
||||
+ #else
|
||||
+ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
+ gemm_function = &Eigen::internal::gemmMMA<double, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm<double, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
+ }
|
||||
+ #endif
|
||||
#else
|
||||
gemm_function = &Eigen::internal::gemm<double, Index, Packet, RhsPacket, DataMapper, accRows, accCols>;
|
||||
#endif
|
||||
@@ -2671,12 +2731,21 @@ void gebp_kernel<std::complex<double>, std::complex<double>, Index, DataMapper,
|
||||
//generate with MMA only
|
||||
gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<double>, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
#elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA)
|
||||
- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
- gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<double>, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
- }
|
||||
- else{
|
||||
- gemm_function = &Eigen::internal::gemm_complex<std::complex<double>, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
- }
|
||||
+ #if defined(_AIX)
|
||||
+ if (check_mma_support()){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<double>, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<std::complex<double>, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
+ }
|
||||
+ #else
|
||||
+ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<double>, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<std::complex<double>, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
+ }
|
||||
+ #endif
|
||||
#else
|
||||
gemm_function = &Eigen::internal::gemm_complex<std::complex<double>, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, false>;
|
||||
#endif
|
||||
@@ -2709,12 +2778,21 @@ void gebp_kernel<std::complex<double>, double, Index, DataMapper, mr, nr, Conjug
|
||||
//generate with MMA only
|
||||
gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<double>, double, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
#elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA)
|
||||
- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
- gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<double>, double, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
- }
|
||||
- else{
|
||||
- gemm_function = &Eigen::internal::gemm_complex<std::complex<double>, double, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
- }
|
||||
+ #if defined(_AIX)
|
||||
+ if (check_mma_support()){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<double>, double, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<std::complex<double>, double, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
+ }
|
||||
+ #else
|
||||
+ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<std::complex<double>, double, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<std::complex<double>, double, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
+ }
|
||||
+ #endif
|
||||
#else
|
||||
gemm_function = &Eigen::internal::gemm_complex<std::complex<double>, double, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, false, true>;
|
||||
#endif
|
||||
@@ -2747,12 +2825,21 @@ void gebp_kernel<double, std::complex<double>, Index, DataMapper, mr, nr, Conjug
|
||||
//generate with MMA only
|
||||
gemm_function = &Eigen::internal::gemm_complexMMA<double, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
#elif defined(ALTIVEC_MMA_SUPPORT) && !defined(EIGEN_ALTIVEC_DISABLE_MMA)
|
||||
- if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
- gemm_function = &Eigen::internal::gemm_complexMMA<double, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
- }
|
||||
- else{
|
||||
- gemm_function = &Eigen::internal::gemm_complex<double, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
- }
|
||||
+ #if defined(_AIX)
|
||||
+ if (check_mma_support()){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<double, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<double, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
+ }
|
||||
+ #else
|
||||
+ if (__builtin_cpu_supports ("arch_3_1") && __builtin_cpu_supports ("mma")){
|
||||
+ gemm_function = &Eigen::internal::gemm_complexMMA<double, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
+ }
|
||||
+ else{
|
||||
+ gemm_function = &Eigen::internal::gemm_complex<double, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
+ }
|
||||
+ #endif
|
||||
#else
|
||||
gemm_function = &Eigen::internal::gemm_complex<double, std::complex<double>, std::complex<double>, double, Index, Packet, Packetc, RhsPacket, DataMapper, accRows, accCols, ConjugateLhs, ConjugateRhs, true, false>;
|
||||
#endif
|
||||
|
|
@ -55,9 +55,15 @@ def check_distro_info():
|
|||
warnings.warn(
|
||||
f"Unsupported macOS version ({__my_distro_ver__}). ONNX Runtime supports macOS 11.0 or later."
|
||||
)
|
||||
elif __my_system__ == "aix":
|
||||
import subprocess
|
||||
|
||||
returned_output = subprocess.check_output("oslevel")
|
||||
__my_distro_ver__str = returned_output.decode("utf-8")
|
||||
__my_distro_ver = __my_distro_ver__str[:3]
|
||||
else:
|
||||
warnings.warn(
|
||||
f"Unsupported platform ({__my_system__}). ONNX Runtime supports Linux, macOS and Windows platforms, only."
|
||||
f"Unsupported platform ({__my_system__}). ONNX Runtime supports Linux, macOS, AIX and Windows platforms, only."
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ TEST(Random, MultinomialGoodCase) {
|
|||
const std::vector<int64_t> output_dims{batch_size, num_samples};
|
||||
#ifdef _WIN32
|
||||
const std::vector<int64_t> expected_output{2, 0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 0};
|
||||
#elif defined(__MACH__) || defined(__ANDROID__) || defined(__FreeBSD__) || defined(__wasm__) || defined(_AIX)
|
||||
#elif defined(__MACH__) || defined(__ANDROID__) || defined(__FreeBSD__) || defined(__wasm__) || (defined(_AIX) && defined(__clang__))
|
||||
const std::vector<int64_t> expected_output{1, 1, 2, 2, 0, 2, 2, 2, 0, 2, 1, 1, 2, 0, 2, 2, 0, 2, 1, 1};
|
||||
#else
|
||||
const std::vector<int64_t> expected_output{2, 0, 0, 1, 0, 1, 2, 0, 1, 0, 0, 1, 1, 0, 1, 0, 2, 0, 2, 0};
|
||||
|
|
@ -294,7 +294,7 @@ TEST(Random, MultinomialDefaultDType) {
|
|||
#ifdef _WIN32
|
||||
const std::vector<int32_t> expected_output_1{2, 0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 0};
|
||||
const std::vector<int32_t> expected_output_2{0, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 0, 2, 0, 2, 2, 1, 2, 1};
|
||||
#elif defined(__MACH__) || defined(__ANDROID__) || defined(__FreeBSD__) || defined(__wasm__) || defined(_AIX)
|
||||
#elif defined(__MACH__) || defined(__ANDROID__) || defined(__FreeBSD__) || defined(__wasm__) || (defined(_AIX) && defined(__clang__))
|
||||
const std::vector<int32_t> expected_output_1{1, 1, 2, 2, 0, 2, 2, 2, 0, 2, 1, 1, 2, 0, 2, 2, 0, 2, 1, 1};
|
||||
const std::vector<int32_t> expected_output_2{1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 2, 0, 1, 1, 0, 2, 2, 2, 1};
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -1600,7 +1600,12 @@ class TestInferenceSession(unittest.TestCase):
|
|||
)
|
||||
|
||||
def test_memory_arena_shrinkage(self):
|
||||
if platform.architecture()[0] == "32bit" or "ppc" in platform.machine() or "powerpc" in platform.machine():
|
||||
if (
|
||||
platform.architecture()[0] == "32bit"
|
||||
or "ppc" in platform.machine()
|
||||
or "powerpc" in platform.machine()
|
||||
or "powerpc" in platform.processor()
|
||||
):
|
||||
# on x86 or ppc builds, the CPU allocator does not use an arena
|
||||
print("Skipping testMemoryArenaShrinkage in 32bit or powerpc platform.")
|
||||
else:
|
||||
|
|
|
|||
2
setup.py
2
setup.py
|
|
@ -325,7 +325,7 @@ elif platform.system() == "Windows":
|
|||
dl_libs = []
|
||||
libs = []
|
||||
|
||||
if platform.system() == "Linux":
|
||||
if platform.system() == "Linux" or platform.system() == "AIX":
|
||||
libs = [
|
||||
"onnxruntime_pybind11_state.so",
|
||||
"libdnnl.so.2",
|
||||
|
|
|
|||
Loading…
Reference in a new issue