Skip to content

BUG: VSX feature detection test fails on POWER10 #30529

@nickodell

Description

@nickodell

Describe the issue:

There is a POWER-specific test that checks if feature detection is working correctly. This test reports:

E           AssertionError: Failure Detection
E            NAME: 'VSX'
E            ACTUAL: True
E            DESIRED: False
E           

(Full error log below.)

The output of np.show_config() reports the platform does have VSX.

>>> import numpy as np
>>> np.show_config()
[...]
  "SIMD Extensions": {
    "found": [
      "VSX",
      "VSX2",
      "VSX3",
      "VSX4"
    ]
  }
}

Here is the output of lscpu:

(venv) debian@scipy:~/numpy$ lscpu
Architecture:                ppc64
  CPU op-mode(s):            32-bit, 64-bit
  Byte Order:                Big Endian
CPU(s):                      8
  On-line CPU(s) list:       0-7
Model name:                  POWER10 (architected), altivec supported
  Model:                     2.0 (pvr 0080 0200)
  Thread(s) per core:        1
  Core(s) per socket:        1
  Socket(s):                 8
Virtualization features:     
  Hypervisor vendor:         KVM
  Virtualization type:       para
Caches (sum of all):         
  L1d:                       256 KiB (8 instances)
  L1i:                       384 KiB (8 instances)
NUMA:                        
  NUMA node(s):              1
  NUMA node0 CPU(s):         0-7
Vulnerabilities:             
  Gather data sampling:      Not affected
  Ghostwrite:                Not affected
  Indirect target selection: Not affected
  Itlb multihit:             Not affected
  L1tf:                      Mitigation; RFI Flush, L1D private per thread
  Mds:                       Not affected
  Meltdown:                  Mitigation; RFI Flush, L1D private per thread
  Mmio stale data:           Not affected
  Old microcode:             Not affected
  Reg file data sampling:    Not affected
  Retbleed:                  Not affected
  Spec rstack overflow:      Not affected
  Spec store bypass:         Mitigation; Kernel entry/exit barrier (eieio)
  Spectre v1:                Mitigation; __user pointer sanitization, ori31 speculation barrier enabled
  Spectre v2:                Mitigation; Software count cache flush (hardware accelerated), Software link stack flush
  Srbds:                     Not affected
  Tsa:                       Not affected
  Tsx async abort:           Not affected
  Vmscape:                   Not affected

Here is the output of cat /proc/cpuinfo:

(venv) debian@scipy:~/numpy$ cat /proc/cpuinfo
processor	: 0
cpu		: POWER10 (architected), altivec supported
clock		: 2750.000000MHz
revision	: 2.0 (pvr 0080 0200)

processor	: 1
cpu		: POWER10 (architected), altivec supported
clock		: 2750.000000MHz
revision	: 2.0 (pvr 0080 0200)

processor	: 2
cpu		: POWER10 (architected), altivec supported
clock		: 2750.000000MHz
revision	: 2.0 (pvr 0080 0200)

processor	: 3
cpu		: POWER10 (architected), altivec supported
clock		: 2750.000000MHz
revision	: 2.0 (pvr 0080 0200)

processor	: 4
cpu		: POWER10 (architected), altivec supported
clock		: 2750.000000MHz
revision	: 2.0 (pvr 0080 0200)

processor	: 5
cpu		: POWER10 (architected), altivec supported
clock		: 2750.000000MHz
revision	: 2.0 (pvr 0080 0200)

processor	: 6
cpu		: POWER10 (architected), altivec supported
clock		: 2750.000000MHz
revision	: 2.0 (pvr 0080 0200)

processor	: 7
cpu		: POWER10 (architected), altivec supported
clock		: 2750.000000MHz
revision	: 2.0 (pvr 0080 0200)

timebase	: 512000000
platform	: pSeries
model		: IBM pSeries (emulated by qemu)
machine		: CHRP IBM pSeries (emulated by qemu)
MMU		: Radix

Note that this is running inside of a VM, and is a big-endian ppc64.

Reproduce the code example:

# Run this in Bash:
spin test -- -k 'Test_POWER_Features and test_features'

Error message:

(venv) debian@scipy:~/numpy$ spin test -- -k 'Test_POWER_Features and test_features'
Invoking `build` prior to running tests:
$ /home/debian/numpy/venv/bin/python vendored-meson/meson/meson.py compile -C build
INFO: autodetecting backend as ninja
INFO: calculating backend command to run: /home/debian/numpy/venv/bin/ninja -C /home/debian/numpy/build
ninja: Entering directory `/home/debian/numpy/build'
[1/1] Generating numpy/generate-version with a custom command
Saving version to numpy/version.py
$ /home/debian/numpy/venv/bin/python vendored-meson/meson/meson.py install --only-changed -C build --destdir ../build-install
$ export PYTHONPATH="/home/debian/numpy/build-install/usr/lib/python3/dist-packages"
$ /home/debian/numpy/venv/bin/python -P -c 'import numpy'
$ cd /home/debian/numpy/build-install/usr/lib/python3/dist-packages
$ /home/debian/numpy/venv/bin/python -P -m pytest -m 'not slow' -k 'Test_POWER_Features and test_features'
========================================================== test session starts ==========================================================
platform linux -- Python 3.13.11, pytest-7.4.0, pluggy-1.6.0
rootdir: /home/debian/numpy
configfile: pytest.ini
plugins: cov-4.1.0, hypothesis-6.142.2, xdist-3.8.0, timeout-2.4.0
collected 52462 items / 52461 deselected / 1 selected                                                                                   

numpy/_core/tests/test_cpu_features.py F                                                                                          [100%]

=============================================================== FAILURES ================================================================
___________________________________________________ Test_POWER_Features.test_features ___________________________________________________

self = <test_cpu_features.Test_POWER_Features object at 0x3fffac976fd0>

    def test_features(self):
        self.load_flags()
        for gname, features in self.features_groups.items():
            test_features = [self.cpu_have(f) for f in features]
            assert_features_equal(__cpu_features__.get(gname), all(test_features), gname)
    
        for feature_name in self.features:
            cpu_have = self.cpu_have(feature_name)
            npy_have = __cpu_features__.get(feature_name)
>           assert_features_equal(npy_have, cpu_have, feature_name)
E           AssertionError: Failure Detection
E            NAME: 'VSX'
E            ACTUAL: True
E            DESIRED: False
E           
###########################################
### Extra debugging information
###########################################
-------------------------------------------
--- NumPy Detections
-------------------------------------------
{MMX: False, SSE: False, SSE2: False, SSE3: False, SSSE3: False, SSE41: False, POPCNT: False, SSE42: False, X86_V2: False, AVX: False, F16C: False, XOP: False, FMA4: False, FMA3: False, AVX2: False, LAHF: False, CX16: False, MOVBE: False, BMI: False, BMI2: False, LZCNT: False, GFNI: False, VPCLMULQDQ: False, VAES: False, X86_V3: False, AVX512F: False, AVX512CD: False, AVX512ER: False, AVX512PF: False, AVX5124FMAPS: False, AVX5124VNNIW: False, AVX512VPOPCNTDQ: False, AVX512VL: False, AVX512BW: False, AVX512DQ: False, AVX512VNNI: False, AVX512IFMA: False, AVX512VBMI: False, AVX512VBMI2: False, AVX512BITALG: False, AVX512FP16: False, AVX512BF16: False, AVX512_KNL: False, AVX512_KNM: False, AVX512_SKX: False, X86_V4: False, AVX512_CLX: False, AVX512_CNL: False, AVX512_ICL: False, AVX512_SPR: False, VSX: True, VSX2: True, VSX3: True, VSX4: True, VX: False, VXE: False, VXE2: False, NEON: False, NEON_FP16: False, NEON_VFPV4: False, ASIMD: False, FPHP: False, ASIMDHP: False, ASIMDDP: False, ASIMDFHM: False, SVE: False, RVV: False, LSX: False}
-------------------------------------------
--- SYS / CPUINFO
-------------------------------------------
processor       : 0
cpu             : POWER10 (architected), altivec supported
clock           : 2750.000000MHz
revision        : 2.0 (pvr 0080 0200)
E           
processor       : 1
cpu             : POWER10 (architected), altivec supported
clock           : 2750.000000MHz
revision        : 2.0 (pvr 0080 0200)
E           
processor       : 2
cpu             : POWER10 (architected), altivec supported
clock           : 2750.000000MHz
revision        : 2.0 (pvr 0080 0200)
E           
processor       : 3
cpu             : POWER10 (architected), altivec supported
clock           : 2750.000000MHz
revision        : 2.0 (pvr 0080 0200)
E           
processor       : 4
cpu             : POWER10 (architected), altivec supported
clock           : 2750.000000MHz
revision        : 2.0 (pvr 0080 0200)
E           
processor       : 5
cpu             : POWER10 (architected), altivec supported
clock           : 2750.000000MHz
revision        : 2.0 (pvr 0080 0200)
E           
processor       : 6
cpu             : POWER10 (architected), altivec supported
clock           : 2750.000000MHz
revision        : 2.0 (pvr 0080 0200)
E           
processor       : 7
cpu             : POWER10 (architected), altivec supported
clock           : 2750.000000MHz
revision        : 2.0 (pvr 0080 0200)
E           
timebase        : 512000000
platform        : pSeries
model           : IBM pSeries (emulated by qemu)
machine         : CHRP IBM pSeries (emulated by qemu)
MMU             : Radix
....        
-------------------------------------------
--- SYS / AUXV
-------------------------------------------
AT_DCACHEBSIZE:       0x80
AT_ICACHEBSIZE:       0x80
AT_UCACHEBSIZE:       0x0
AT_SYSINFO_EHDR:      0x3fffae974000
AT_L1I_CACHESIZE:     49152
AT_L1I_CACHEGEOMETRY: 0x80
AT_L1D_CACHESIZE:     32768
AT_L1D_CACHEGEOMETRY: 0x80
AT_L2_CACHESIZE:      0
AT_L2_CACHEGEOMETRY:  0x0
AT_L3_CACHESIZE:      0
AT_L3_CACHEGEOMETRY:  0x0
AT_MINSIGSTKSZ:       2528
AT_HWCAP:             0xdc0065c2
AT_PAGESZ:            4096
AT_CLKTCK:            100
AT_PHDR:              0x13db40040
AT_PHENT:             56
AT_PHNUM:             9
AT_BASE:              0x3fffae983000
AT_FLAGS:             0x0
AT_ENTRY:             0x13db5f150
AT_UID:               1001
AT_EUID:              1001
AT_GID:               1001
AT_EGID:              1001
AT_SECURE:            0
AT_RANDOM:            0x3fffc2193d70
AT_HWCAP2:            0xbef60000
AT_EXECFN:            /bin/true
AT_PLATFORM:          power10
AT_BASE_PLATFORM:     power10
AT_RSEQ_FEATURE_SIZE: 28
AT_RSEQ_ALIGN:        32

cpu_have   = False
feature_name = 'VSX'
npy_have   = True
self       = <test_cpu_features.Test_POWER_Features object at 0x3fffac976fd0>

numpy/_core/tests/test_cpu_features.py:87: AssertionError
======================================================== short test summary info ========================================================
FAILED numpy/_core/tests/test_cpu_features.py::Test_POWER_Features::test_features - AssertionError: Failure Detection
================================================= 1 failed, 52461 deselected in 16.85s ==================================================

Python and NumPy Versions:

2.5.0.dev0+git20251227.4b3b270
3.13.11 (main, Dec 8 2025, 11:58:53) [GCC 15.2.0]

Runtime Environment:

[{'numpy_version': '2.5.0.dev0+git20251227.4b3b270',
'python': '3.13.11 (main, Dec 8 2025, 11:58:53) [GCC 15.2.0]',
'uname': uname_result(system='Linux', node='scipy', release='6.17.10+deb14-powerpc64', version='#1 SMP PREEMPT Debian 6.17.10-1 (2025-12-02)', machine='ppc64')},
{'simd_extensions': {'baseline': [],
'found': ['VSX', 'VSX2', 'VSX3', 'VSX4'],
'not_found': []}},
{'ignore_floating_point_errors_in_matmul': False},
{'architecture': 'POWER4',
'filepath': '/usr/lib/powerpc64-linux-gnu/openblas-pthread/libopenblas_power4p-r0.3.29.so',
'internal_api': 'openblas',
'num_threads': 8,
'prefix': 'libopenblas',
'threading_layer': 'pthreads',
'user_api': 'blas',
'version': '0.3.29'}]

How does this issue affect you or how did you find it:

I was tracking down a number of ppc64 test failures in SciPy, and trying to figure out if any of them originate from downstream dependencies such as Cython or NumPy. For this reason I am running NumPy's test suite.

I saw three test failures, and this one seemed most serious:

FAILED numpy/_core/tests/test_cpu_features.py::Test_POWER_Features::test_features - AssertionError: Failure Detection
FAILED numpy/_core/tests/test_dtype.py::TestMonsterType::test_dict_recursion
FAILED numpy/linalg/tests/test_linalg.py::TestDet::test_sq_cases - AssertionError: In test case: <LinalgCase: csingle>

The other test failures appear to already have been reported at #29918 and #29114.

Metadata

Metadata

Assignees

No one assigned

    Labels

    00 - Bugcomponent: SIMDIssues in SIMD (fast instruction sets) code or machinery

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions