mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-23 22:13:38 +00:00
### 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.
250 lines
18 KiB
Diff
250 lines
18 KiB
Diff
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
|