From eaeaa08e3a8071be46f833f7b46aa642ec14e0f7 Mon Sep 17 00:00:00 2001 From: Tiwari-Avanish Date: Thu, 16 Oct 2025 06:13:56 +0000 Subject: [PATCH] [PowerPC] Disable MKLDNN TF32 on PowerPC to fix build failure (#163454) The commits f4d8bc46c7706f872abcb4ec41f0b32207d5d826 added TF32 support for x86 CPUs, which causes build failures on PowerPC systems with mkldnn. This patch disables TF32 paths on PowerPC while keeping x86 TF32 support intact, allowing PyTorch to build successfully on PowerPC. I have run the mkldnn test case on PowerPC, and it passed successfully. `pytest test/test_mkldnn.py 87 passed, 2 skipped in 1709.02s (0:28:29` Pull Request resolved: https://github.com/pytorch/pytorch/pull/163454 Approved by: https://github.com/jgong5, https://github.com/malfet --- aten/src/ATen/native/mkldnn/Conv.cpp | 8 ++++++-- aten/src/ATen/native/mkldnn/Linear.cpp | 6 +++++- aten/src/ATen/native/mkldnn/Matmul.cpp | 7 ++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/aten/src/ATen/native/mkldnn/Conv.cpp b/aten/src/ATen/native/mkldnn/Conv.cpp index 188ed2cf5831..605de45bed72 100644 --- a/aten/src/ATen/native/mkldnn/Conv.cpp +++ b/aten/src/ATen/native/mkldnn/Conv.cpp @@ -160,8 +160,12 @@ static bool mkldnn_conv_enabled_fpmath_mode_bf16(){ } static bool mkldnn_conv_enabled_fpmath_mode_tf32(){ - return at::globalContext().float32Precision(at::Float32Backend::MKLDNN, at::Float32Op::CONV) == at::Float32Precision::TF32 && - cpuinfo_has_x86_amx_fp16(); +#if defined(__x86_64__) || defined(_M_X64) + return at::globalContext().float32Precision(at::Float32Backend::MKLDNN, at::Float32Op::CONV) == at::Float32Precision::TF32 && + cpuinfo_has_x86_amx_fp16(); +#else + return false; //TF32 not supported on power system +#endif } static inline at::MemoryFormat mkldnn_convolution_memory_format(int64_t dims, bool is_channels_last) { diff --git a/aten/src/ATen/native/mkldnn/Linear.cpp b/aten/src/ATen/native/mkldnn/Linear.cpp index 84048ce2ec48..2f8448cf57d1 100644 --- a/aten/src/ATen/native/mkldnn/Linear.cpp +++ b/aten/src/ATen/native/mkldnn/Linear.cpp @@ -74,8 +74,12 @@ static bool use_mkldnn_bf32_linear() { } static bool use_mkldnn_tf32_linear() { - return at::globalContext().float32Precision(at::Float32Backend::MKLDNN, at::Float32Op::MATMUL) == at::Float32Precision::TF32 && +#if defined(__x86_64__) || defined(_M_X64) + return at::globalContext().float32Precision(at::Float32Backend::MKLDNN, at::Float32Op::MATMUL) == at::Float32Precision::TF32 && cpuinfo_has_x86_amx_fp16(); +#else + return false; // TF32 not supported on power system +#endif } Tensor mkldnn_linear( diff --git a/aten/src/ATen/native/mkldnn/Matmul.cpp b/aten/src/ATen/native/mkldnn/Matmul.cpp index a0b280dcd3a3..740c056a7f23 100644 --- a/aten/src/ATen/native/mkldnn/Matmul.cpp +++ b/aten/src/ATen/native/mkldnn/Matmul.cpp @@ -114,8 +114,13 @@ static bool use_mkldnn_bf32_matmul() { return use_mkldnn_bf16_matmul() && at::globalContext().float32Precision(at::Float32Backend::MKLDNN, at::Float32Op::MATMUL) == at::Float32Precision::BF16; } + static bool use_mkldnn_tf32_matmul() { - return cpuinfo_has_x86_amx_fp16() && at::globalContext().float32Precision(at::Float32Backend::MKLDNN, at::Float32Op::MATMUL) == at::Float32Precision::TF32; +#if defined(__x86_64__) || defined(_M_X64) + return cpuinfo_has_x86_amx_fp16() && at::globalContext().float32Precision(at::Float32Backend::MKLDNN, at::Float32Op::MATMUL) == at::Float32Precision::TF32; +#else + return false; // TF32 not supported on power system +#endif } // returns an ideep::tensor