Skip to content

SIMD: replace raw AVX512 of floor/trunc/rint with universal intrinsics#20397

Merged
mattip merged 1 commit into
numpy:mainfrom
seiko2plus:replace_rest_unary
Jan 19, 2022
Merged

SIMD: replace raw AVX512 of floor/trunc/rint with universal intrinsics#20397
mattip merged 1 commit into
numpy:mainfrom
seiko2plus:replace_rest_unary

Conversation

@seiko2plus

@seiko2plus seiko2plus commented Nov 17, 2021

Copy link
Copy Markdown
Member

merge after:

Benchmark

X86

CPU
Architecture:                    x86_64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
Address sizes:                   46 bits physical, 48 bits virtual
CPU(s):                          4
On-line CPU(s) list:             0-3
Thread(s) per core:              2
Core(s) per socket:              2
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       GenuineIntel
CPU family:                      6
Model:                           85
Model name:                      Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
Stepping:                        4
CPU MHz:                         3410.808
BogoMIPS:                        5999.99
Hypervisor vendor:               KVM
Virtualization type:             full
L1d cache:                       64 KiB
L1i cache:                       64 KiB
L2 cache:                        2 MiB
L3 cache:                        24.8 MiB
NUMA node0 CPU(s):               0-3
Vulnerability Itlb multihit:     KVM: Mitigation: VMX unsupported
Vulnerability L1tf:              Mitigation; PTE Inversion
Vulnerability Mds:               Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Vulnerability Meltdown:          Mitigation; PTI
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1:        Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2:        Mitigation; Full generic retpoline, STIBP disabled, RSB filling
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Vulnerable: Clear CPU buffers attempted, no microcode; SMT Host state unknown
Flags:                           fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant
                                 _tsc rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt
                                 tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep b
                                 mi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat
                                 pku ospke
OS
Linux ip-172-31-32-40 5.11.0-1020-aws #21~20.04.2-Ubuntu SMP Fri Oct 1 13:03:59 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
Python 3.8.10
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

Benchmark

Before(AVX512f) vs After(SSE41)
unset NPY_DISABLE_CPU_FEATURES
python runtests.py -n --bench-compare parent/main "rint|floor|trunc" -- --sort ratio
       before           after         ratio
     [8e1c0c8f]       [ca6f7772]
                      <replace_rest_unary>
-         165±1μs        151±0.3μs     0.92  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 2, 'd')
-       513±0.7μs        451±0.4μs     0.88  bench_ufunc.UFunc.time_ufunc_types('rint')
-         131±4μs          115±3μs     0.88  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 2, 'd')
-       131±0.1μs        115±0.5μs     0.88  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 4, 'f')
-       255±0.4μs        222±0.4μs     0.87  bench_ufunc.UFunc.time_ufunc_types('floor')
-       252±0.4μs        217±0.3μs     0.86  bench_ufunc.UFunc.time_ufunc_types('trunc')
-         135±2μs        114±0.3μs     0.84  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 2, 'f')
-         193±8μs          152±4μs     0.78  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 4, 'f')
-         149±5μs          115±2μs     0.77  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 2, 'd')
-         196±1μs        151±0.5μs     0.77  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 2, 'd')
-       149±0.4μs        114±0.6μs     0.76  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 4, 'f')
-         132±3μs         99.1±2μs     0.75  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 4, 'f')
-       151±0.9μs        113±0.7μs     0.75  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 4, 2, 'f')
-         154±4μs         97.9±2μs     0.64  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 4, 'f')
-         124±2μs         75.6±1μs     0.61  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 2, 'f')
-         192±5μs          115±3μs     0.60  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 2, 'd')
-       191±0.2μs        114±0.5μs     0.60  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 4, 'f')
-       192±0.8μs        114±0.5μs     0.59  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 2, 'f')
-         146±2μs         76.9±2μs     0.53  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 2, 'f')
-         200±6μs         98.1±2μs     0.49  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 4, 'f')
-       123±0.1μs       49.2±0.4μs     0.40  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 2, 'f')
-         191±3μs         75.6±1μs     0.40  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 2, 'f')
-       145±0.3μs       49.4±0.4μs     0.34  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 2, 'f')
-       189±0.3μs       49.1±0.3μs     0.26  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 2, 'f')
SSE41
export NPY_DISABLE_CPU_FEATURES="AVX512F AVX512_SKX"
python runtests.py -n --bench-compare parent/main "rint|floor|trunc" -- --sort ratio
       before           after         ratio
     [8e1c0c8f]       [ca6f7772]
                      <replace_rest_unary>
-       225±0.9μs        214±0.5μs     0.95  bench_ufunc.UFunc.time_ufunc_types('trunc')
-         242±5μs        218±0.6μs     0.90  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 2, 'd')
-         131±4μs          110±2μs     0.84  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 2, 'd')
-         130±1μs        109±0.2μs     0.84  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 4, 'f')
-         133±3μs        109±0.1μs     0.82  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 2, 'f')
-       185±0.7μs        145±0.3μs     0.78  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 2, 'd')
-         193±7μs          145±4μs     0.75  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 4, 'f')
-       147±0.5μs        109±0.6μs     0.74  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 4, 'f')
-         197±2μs        145±0.3μs     0.73  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 2, 'd')
-       148±0.9μs        108±0.4μs     0.73  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 4, 2, 'f')
-         131±4μs         92.0±2μs     0.70  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 4, 'f')
-      21.6±0.2μs       14.6±0.8μs     0.68  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 1, 'f')
-         154±5μs         93.7±2μs     0.61  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 4, 'f')
-         183±5μs          110±2μs     0.60  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 2, 'd')
-         124±2μs       73.4±0.5μs     0.59  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 2, 'f')
-         191±5μs          110±3μs     0.57  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 2, 'd')
-       191±0.2μs        109±0.2μs     0.57  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 4, 'f')
-       192±0.3μs        109±0.2μs     0.57  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 2, 'f')
-         146±2μs       71.6±0.6μs     0.49  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 2, 'f')
-         201±6μs         93.7±2μs     0.47  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 4, 'f')
-       123±0.3μs       47.7±0.6μs     0.39  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 2, 'f')
-         190±2μs         73.2±2μs     0.38  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 2, 'f')
-       144±0.1μs      47.5±0.09μs     0.33  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 2, 'f')
-       189±0.1μs       47.8±0.6μs     0.25  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 2, 'f')

Power little-endian

CPU
Architecture:                    ppc64le
Byte Order:                      Little Endian
CPU(s):                          8
On-line CPU(s) list:             0-7
Thread(s) per core:              1
Core(s) per socket:              1
Socket(s):                       8
NUMA node(s):                    1
Model:                           2.2 (pvr 004e 1202)
Model name:                      POWER9 (architected), altivec supported
L1d cache:                       256 KiB
L1i cache:                       256 KiB
NUMA node0 CPU(s):               0-7
Vulnerability L1tf:              Not affected
Vulnerability Meltdown:          Mitigation; RFI Flush
Vulnerability Spec store bypass: Mitigation; Kernel entry/exit barrier (eieio)
Vulnerability Spectre v1:        Mitigation; __user pointer sanitization
Vulnerability Spectre v2:        Vulnerable

processor   : 7
cpu     : POWER9 (architected), altivec supported
clock       : 2200.000000MHz
revision    : 2.2 (pvr 004e 1202)

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

OS
Linux e517009a912a 4.19.0-2-powerpc64le #1 SMP Debian 4.19.16-1 (2019-01-17) ppc64le ppc64le ppc64le GNU/Linux
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

Benchmark

baseline(VSX2)
python runtests.py -n --bench-compare parent/main "rint|floor|trunc" -- --sort ratio
       before           after         ratio
     [8e1c0c8f]       [ca6f7772]
                      <replace_rest_unary>
+         142±1μs          153±1μs     1.08  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 4, 'd')
-      125±0.09μs        118±0.4μs     0.94  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 2, 'd')
-       147±0.3μs          119±1μs     0.81  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 2, 'f')
-       147±0.3μs          119±1μs     0.81  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 4, 2, 'f')
-       147±0.6μs        119±0.6μs     0.81  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 4, 'f')
-       130±0.9μs          105±2μs     0.80  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 4, 1, 'd')
-         149±2μs        119±0.5μs     0.80  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 4, 4, 'f')
-         131±1μs          104±1μs     0.80  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 1, 'd')
-       145±0.9μs       116±0.07μs     0.80  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 4, 'f')
-     4.35±0.01ms      3.47±0.01ms     0.80  bench_ufunc.UFunc.time_ufunc_types('rint')
-       145±0.3μs        116±0.3μs     0.80  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 2, 'f')
-       145±0.3μs        116±0.4μs     0.80  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 2, 'f')
-       145±0.3μs        116±0.5μs     0.80  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 4, 'f')
-       125±0.3μs       93.8±0.7μs     0.75  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 2, 'd')
-       125±0.7μs         92.6±2μs     0.74  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 2, 'd')
-       126±0.4μs       77.6±0.3μs     0.62  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 1, 'd')
-       125±0.2μs       77.3±0.2μs     0.62  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 1, 'd')
-       147±0.7μs         78.6±1μs     0.53  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 4, 'f')
-       147±0.7μs       76.3±0.3μs     0.52  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 4, 'f')
-       145±0.7μs       71.4±0.4μs     0.49  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 2, 'f')
-       145±0.4μs       70.7±0.2μs     0.49  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 2, 'f')
-       123±0.2μs       58.6±0.3μs     0.47  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 1, 'd')
-       124±0.5μs       58.6±0.2μs     0.47  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 1, 'd')
-       146±0.3μs       67.1±0.3μs     0.46  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 4, 1, 'f')
-       147±0.3μs       66.8±0.2μs     0.46  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 1, 'f')
-       145±0.3μs       65.8±0.5μs     0.45  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 1, 'f')
-       146±0.6μs       65.8±0.4μs     0.45  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 1, 'f')
-      145±0.09μs       33.6±0.2μs     0.23  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 1, 'f')
-       146±0.4μs      33.7±0.04μs     0.23  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 1, 'f')
-     1.76±0.05ms          154±2μs     0.09  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 4, 'd')
-     1.78±0.04ms          147±4μs     0.08  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 4, 'd')
-     1.76±0.05ms          144±3μs     0.08  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 4, 'd')
-     1.77±0.04ms          130±3μs     0.07  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 2, 'd')
-     1.73±0.01ms        119±0.9μs     0.07  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 2, 'f')
-     1.74±0.01ms        119±0.5μs     0.07  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 4, 'f')
-     1.73±0.02ms        116±0.5μs     0.07  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 4, 'f')
-     1.74±0.01ms        116±0.4μs     0.07  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 2, 'f')
-     1.77±0.04ms        117±0.6μs     0.07  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 2, 'd')
-     1.75±0.04ms          104±1μs     0.06  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 1, 'd')
-     1.75±0.04ms         91.3±2μs     0.05  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 2, 'd')
-     1.74±0.02ms         77.5±1μs     0.04  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 4, 'f')
-     1.74±0.03ms       77.6±0.2μs     0.04  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 1, 'd')
-     1.73±0.02ms       70.7±0.4μs     0.04  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 2, 'f')
-     1.73±0.01ms       66.7±0.3μs     0.04  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 1, 'f')
-     1.72±0.02ms       65.8±0.2μs     0.04  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 1, 'f')
-     1.75±0.03ms       58.5±0.2μs     0.03  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 1, 'd')
-     1.72±0.02ms      33.7±0.03μs     0.02  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 1, 'f')

AArch64

CPU
Architecture:                    aarch64
CPU op-mode(s):                  32-bit, 64-bit
Byte Order:                      Little Endian
CPU(s):                          2
On-line CPU(s) list:             0,1
Thread(s) per core:              1
Core(s) per socket:              2
Socket(s):                       1
NUMA node(s):                    1
Vendor ID:                       ARM
Model:                           1
Model name:                      Neoverse-N1
Stepping:                        r3p1
BogoMIPS:                        243.75
L1d cache:                       128 KiB
L1i cache:                       128 KiB
L2 cache:                        2 MiB
L3 cache:                        32 MiB
NUMA node0 CPU(s):               0,1
Vulnerability Itlb multihit:     Not affected
Vulnerability L1tf:              Not affected
Vulnerability Mds:               Not affected
Vulnerability Meltdown:          Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:        Mitigation; __user pointer sanitization
Vulnerability Spectre v2:        Not affected
Vulnerability Srbds:             Not affected
Vulnerability Tsx async abort:   Not affected
Flags:                           fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
OS
Linux ip-172-31-44-172 5.11.0-1020-aws #21~20.04.2-Ubuntu SMP Fri Oct 1 13:01:34 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

Benchmark

baseline(ASIMD)
python runtests.py --bench-compare parent/main "rint|floor|trunc" -- --sort ratio
       before           after         ratio
     [8e1c0c8f]       [ca6f7772]
                      <replace_rest_unary>
+      97.6±0.5μs        108±0.7μs     1.11  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 4, 'f')
+      97.6±0.8μs        108±0.7μs     1.11  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 4, 'f')
+      97.6±0.6μs        107±0.9μs     1.10  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 4, 4, 'f')
-      89.5±0.4μs       83.7±0.2μs     0.93  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 1, 'f')
-      89.1±0.4μs       82.0±0.7μs     0.92  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 4, 'f')
-      89.1±0.4μs       81.9±0.5μs     0.92  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 4, 'f')
-      89.0±0.4μs       81.7±0.6μs     0.92  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 4, 'f')
-        88.8±1μs       80.3±0.7μs     0.90  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 2, 'd')
-        88.7±1μs       80.0±0.8μs     0.90  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 2, 'd')
-        88.7±1μs       79.9±0.8μs     0.90  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 2, 'd')
-      90.8±0.6μs       81.3±0.8μs     0.90  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 1, 'd')
-      91.2±0.5μs         81.4±1μs     0.89  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 1, 'd')
-      90.7±0.7μs       81.0±0.9μs     0.89  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 1, 'd')
-       161±0.7μs          142±2μs     0.88  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 4, 1, 'd')
-         253±5μs        219±0.1μs     0.87  bench_ufunc.UFunc.time_ufunc_types('floor')
-       162±0.6μs          140±2μs     0.87  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 4, 1, 'd')
-         163±1μs          141±3μs     0.86  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 4, 1, 'd')
-         243±7μs        209±0.4μs     0.86  bench_ufunc.UFunc.time_ufunc_types('trunc')
-        89.1±1μs         75.1±1μs     0.84  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 4, 'f')
-        89.2±1μs       75.0±0.8μs     0.84  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 4, 'f')
-        89.3±1μs         74.8±1μs     0.84  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 4, 'f')
-      83.5±0.5μs       68.8±0.2μs     0.82  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 2, 'f')
-      83.4±0.5μs       68.6±0.2μs     0.82  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 2, 'f')
-      83.8±0.3μs       68.5±0.2μs     0.82  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 2, 'f')
-      82.7±0.3μs       55.3±0.3μs     0.67  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 2, 'f')
-     82.7±0.09μs       55.2±0.2μs     0.67  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 2, 'f')
-      82.6±0.3μs       55.0±0.3μs     0.67  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 2, 'f')
-      85.1±0.7μs       40.4±0.7μs     0.47  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 1, 'd')
-      85.2±0.4μs       40.3±0.6μs     0.47  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 1, 'd')
-      85.2±0.4μs       40.0±0.5μs     0.47  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 2, 1, 'f')
-      85.0±0.4μs       39.8±0.6μs     0.47  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 2, 1, 'f')
-      85.3±0.3μs       39.6±0.3μs     0.46  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 2, 1, 'f')
-      85.4±0.7μs       39.4±0.6μs     0.46  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 1, 'd')
-      82.5±0.2μs       24.1±0.8μs     0.29  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'rint'>, 1, 1, 'f')
-      82.5±0.3μs       24.0±0.4μs     0.29  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'trunc'>, 1, 1, 'f')
-      82.4±0.3μs       23.9±0.4μs     0.29  bench_ufunc_strides.Unary.time_ufunc(<ufunc 'floor'>, 1, 1, 'f')

Binary size(striped)

LIB Before(KB) After(KB) Diff(KB)
_multiarray_umath.cpython-38-x86_64-linux-gnu.so 4428 4444 16

@rgommers rgommers added the component: SIMD Issues in SIMD (fast instruction sets) code or machinery label Dec 14, 2021
@seiko2plus seiko2plus force-pushed the replace_rest_unary branch 2 times, most recently from 3253810 to 81e8175 Compare January 19, 2022 16:59
@seiko2plus

Copy link
Copy Markdown
Member Author

ping @mattip

@mattip mattip merged commit 44ffb08 into numpy:main Jan 19, 2022
@mattip

mattip commented Jan 19, 2022

Copy link
Copy Markdown
Member

Thanks @seiko2plus

@seiko2plus seiko2plus deleted the replace_rest_unary branch January 20, 2022 00:01
@seiko2plus seiko2plus added the 56 - Needs Release Note. Needs an entry in doc/release/upcoming_changes label Feb 13, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

56 - Needs Release Note. Needs an entry in doc/release/upcoming_changes component: SIMD Issues in SIMD (fast instruction sets) code or machinery

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants