From 108ecdbd2d0ecf82d6b3da9c15c02ccfc96fde2d Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 19 Mar 2026 13:12:54 +0100 Subject: [PATCH 1/3] Add debug logging to failing set_fwd_strides call --- dpnp/backend/extensions/fft/common.hpp | 55 ++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/dpnp/backend/extensions/fft/common.hpp b/dpnp/backend/extensions/fft/common.hpp index 44f0b43f859..1dc7078258f 100644 --- a/dpnp/backend/extensions/fft/common.hpp +++ b/dpnp/backend/extensions/fft/common.hpp @@ -28,12 +28,28 @@ #pragma once +#include +#include #include +#include +#include #include #include #include +// Compile-time tracing: Show which API version is being used +#ifdef INTEL_MKL_VERSION +#pragma message("INTEL_MKL_VERSION is defined: " __DATE__) +#if INTEL_MKL_VERSION >= 20250000 +#pragma message("Using NEW MKL API (>= 2025.0): vector-based interface") +#else +#pragma message("Using OLD MKL API (< 2025.0): pointer-based interface") +#endif +#else +#pragma message("WARNING: INTEL_MKL_VERSION is not defined!") +#endif + namespace dpnp::extensions::fft { namespace mkl_dft = oneapi::mkl::dft; @@ -130,9 +146,28 @@ class DescriptorWrapper throw py::value_error( "Strides length does not match descriptor's dimension"); } + + // Runtime tracing: log type information + int status; + char *demangled = + abi::__cxa_demangle(typeid(valT).name(), nullptr, nullptr, &status); + std::cerr << "[TRACE] set_fwd_strides:" << std::endl; + std::cerr << " - INTEL_MKL_VERSION: " << INTEL_MKL_VERSION + << std::endl; + std::cerr << " - valT type: " + << (status == 0 ? demangled : typeid(valT).name()) + << std::endl; + std::cerr << " - valT::value_type == std::int64_t: " + << std::is_same_v << std::endl; + if (demangled) + free(demangled); + #if INTEL_MKL_VERSION >= 20250000 + std::cerr << " - API: NEW (passing vector object)" << std::endl; descr_.set_value(mkl_dft::config_param::FWD_STRIDES, strides); #else + std::cerr << " - API: OLD (passing data pointer)" << std::endl; descr_.set_value(mkl_dft::config_param::FWD_STRIDES, strides.data()); #endif // INTEL_MKL_VERSION } @@ -162,9 +197,29 @@ class DescriptorWrapper throw py::value_error( "Strides length does not match descriptor's dimension"); } + + // Runtime tracing: log type information + int status; + char *demangled = + abi::__cxa_demangle(typeid(valT).name(), nullptr, nullptr, &status); + std::cerr << "[TRACE] set_bwd_strides:" << std::endl; + std::cerr << " - INTEL_MKL_VERSION: " << INTEL_MKL_VERSION + << std::endl; + std::cerr << " - valT type: " + << (status == 0 ? demangled : typeid(valT).name()) + << std::endl; + std::cerr + << " - valT::value_type == std::int64_t: " + << std::is_same::value + << std::endl; + if (demangled) + free(demangled); + #if INTEL_MKL_VERSION >= 20250000 + std::cerr << " - API: NEW (passing vector object)" << std::endl; descr_.set_value(mkl_dft::config_param::BWD_STRIDES, strides); #else + std::cerr << " - API: OLD (passing data pointer)" << std::endl; descr_.set_value(mkl_dft::config_param::BWD_STRIDES, strides.data()); #endif // INTEL_MKL_VERSION } From 02a8417f6e1c5e4e438eb9c09de387379a329ffa Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 19 Mar 2026 13:48:32 +0100 Subject: [PATCH 2/3] Make debug working on Windows --- dpnp/backend/extensions/fft/common.hpp | 38 ++++++++++++++++++-------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/dpnp/backend/extensions/fft/common.hpp b/dpnp/backend/extensions/fft/common.hpp index 1dc7078258f..c21b0bd58c8 100644 --- a/dpnp/backend/extensions/fft/common.hpp +++ b/dpnp/backend/extensions/fft/common.hpp @@ -28,12 +28,16 @@ #pragma once -#include #include #include #include #include +// cxxabi.h is only available on GCC/Clang, not on MSVC +#ifdef __GNUC__ +#include +#endif + #include #include #include @@ -148,20 +152,26 @@ class DescriptorWrapper } // Runtime tracing: log type information - int status; - char *demangled = - abi::__cxa_demangle(typeid(valT).name(), nullptr, nullptr, &status); std::cerr << "[TRACE] set_fwd_strides:" << std::endl; std::cerr << " - INTEL_MKL_VERSION: " << INTEL_MKL_VERSION << std::endl; +#ifdef __GNUC__ + // Demangle type name on GCC/Clang + int status; + char *demangled = + abi::__cxa_demangle(typeid(valT).name(), nullptr, nullptr, &status); std::cerr << " - valT type: " << (status == 0 ? demangled : typeid(valT).name()) << std::endl; + if (demangled) + free(demangled); +#else + // On MSVC, just print mangled name + std::cerr << " - valT type: " << typeid(valT).name() << std::endl; +#endif std::cerr << " - valT::value_type == std::int64_t: " << std::is_same_v << std::endl; - if (demangled) - free(demangled); #if INTEL_MKL_VERSION >= 20250000 std::cerr << " - API: NEW (passing vector object)" << std::endl; @@ -199,21 +209,27 @@ class DescriptorWrapper } // Runtime tracing: log type information - int status; - char *demangled = - abi::__cxa_demangle(typeid(valT).name(), nullptr, nullptr, &status); std::cerr << "[TRACE] set_bwd_strides:" << std::endl; std::cerr << " - INTEL_MKL_VERSION: " << INTEL_MKL_VERSION << std::endl; +#ifdef __GNUC__ + // Demangle type name on GCC/Clang + int status; + char *demangled = + abi::__cxa_demangle(typeid(valT).name(), nullptr, nullptr, &status); std::cerr << " - valT type: " << (status == 0 ? demangled : typeid(valT).name()) << std::endl; + if (demangled) + free(demangled); +#else + // On MSVC, just print mangled name + std::cerr << " - valT type: " << typeid(valT).name() << std::endl; +#endif std::cerr << " - valT::value_type == std::int64_t: " << std::is_same::value << std::endl; - if (demangled) - free(demangled); #if INTEL_MKL_VERSION >= 20250000 std::cerr << " - API: NEW (passing vector object)" << std::endl; From 503184657095e7cd080d7518d7d938747c61c566 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 19 Mar 2026 14:54:08 +0100 Subject: [PATCH 3/3] Capture the debug logs with pytest --- conda-recipe/run_test.bat | 2 +- dpnp/backend/extensions/fft/common.hpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/conda-recipe/run_test.bat b/conda-recipe/run_test.bat index f6f6a061c5f..d64401dc0af 100644 --- a/conda-recipe/run_test.bat +++ b/conda-recipe/run_test.bat @@ -37,5 +37,5 @@ if %errorlevel% neq 0 exit 1 "%PYTHON%" -m dpctl -f if %errorlevel% neq 0 exit 1 -"%PYTHON%" -m pytest -ra --pyargs dpnp +"%PYTHON%" -m pytest -s -ra --pyargs dpnp if %errorlevel% neq 0 exit 1 diff --git a/dpnp/backend/extensions/fft/common.hpp b/dpnp/backend/extensions/fft/common.hpp index c21b0bd58c8..bdd87e4eb4f 100644 --- a/dpnp/backend/extensions/fft/common.hpp +++ b/dpnp/backend/extensions/fft/common.hpp @@ -175,9 +175,11 @@ class DescriptorWrapper #if INTEL_MKL_VERSION >= 20250000 std::cerr << " - API: NEW (passing vector object)" << std::endl; + std::cerr.flush(); // Force output to be visible in pytest descr_.set_value(mkl_dft::config_param::FWD_STRIDES, strides); #else std::cerr << " - API: OLD (passing data pointer)" << std::endl; + std::cerr.flush(); // Force output to be visible in pytest descr_.set_value(mkl_dft::config_param::FWD_STRIDES, strides.data()); #endif // INTEL_MKL_VERSION } @@ -233,9 +235,11 @@ class DescriptorWrapper #if INTEL_MKL_VERSION >= 20250000 std::cerr << " - API: NEW (passing vector object)" << std::endl; + std::cerr.flush(); // Force output to be visible in pytest descr_.set_value(mkl_dft::config_param::BWD_STRIDES, strides); #else std::cerr << " - API: OLD (passing data pointer)" << std::endl; + std::cerr.flush(); // Force output to be visible in pytest descr_.set_value(mkl_dft::config_param::BWD_STRIDES, strides.data()); #endif // INTEL_MKL_VERSION }