← CPU results

cpu/permutation

profile: zen5-cpuhardware: AMD Ryzen AI 9 HX 470 w/ Radeon 890Mdate: 2026-10-28 01:14:23Ztenferro: 8fec1ca70852unit: msthreads: [1, 4, 8]

Legacy report: ingestion provenance is unrecorded; no raw artifact is inferred.

Compute-bound cases (30)

Absolute medians on a log time axis. Bars are shorter for faster calls; the dashed line is the best reference for each case.

casegroupvs PyTorchvs JAXnot measuredflags
cyclic_15d_3Threads: 1 / 15D 3^15 cyclic [1,2,...,0]----
cyclic_15d_3Threads: 4 / 15D 3^15 cyclic [1,2,...,0]----
cyclic_15d_3Threads: 8 / 15D 3^15 cyclic [1,2,...,0]----
memcpy_24d_contiguousThreads: 1 / memcpy baseline (24D 2^24)----
memcpy_24d_contiguousThreads: 4 / memcpy baseline (24D 2^24)----
memcpy_24d_contiguousThreads: 8 / memcpy baseline (24D 2^24)----
reverse_15d_3Threads: 1 / 15D 3^15 reverse----
reverse_15d_3Threads: 4 / 15D 3^15 reverse----
reverse_15d_3Threads: 8 / 15D 3^15 reverse----
reverse_23d_2Threads: 1 / 23D 2^23 reverse----
reverse_23d_2Threads: 4 / 23D 2^23 reverse----
reverse_23d_2Threads: 8 / 23D 2^23 reverse----
rotation_6d_32_32_32_32_16_16Threads: 1 / 6D 32^4x16x16 rotation [5,0,4,1,3,2]----
rotation_6d_32_32_32_32_16_16Threads: 4 / 6D 32^4x16x16 rotation [5,0,4,1,3,2]----
rotation_6d_32_32_32_32_16_16Threads: 8 / 6D 32^4x16x16 rotation [5,0,4,1,3,2]----
tn_light_415_24d_contiguous_same_permThreads: 1 / 24D contiguous source, TN light 415 late-step permutation----
tn_light_415_24d_contiguous_same_permThreads: 4 / 24D contiguous source, TN light 415 late-step permutation----
tn_light_415_24d_contiguous_same_permThreads: 8 / 24D contiguous source, TN light 415 late-step permutation----
tn_light_415_24d_scattered_to_colmajorThreads: 1 / 24D scattered -> col-major----
tn_light_415_24d_scattered_to_colmajorThreads: 4 / 24D scattered -> col-major----
tn_light_415_24d_scattered_to_colmajorThreads: 8 / 24D scattered -> col-major----
transpose_2d_2048Threads: 1 / 2D 2048^2 transpose [1,0]----
transpose_2d_2048Threads: 4 / 2D 2048^2 transpose [1,0]----
transpose_2d_2048Threads: 8 / 2D 2048^2 transpose [1,0]----
transpose_3d_256_102Threads: 1 / 3D 256^3 transpose [1,0,2]----
transpose_3d_256_102Threads: 4 / 3D 256^3 transpose [1,0,2]----
transpose_3d_256_102Threads: 8 / 3D 256^3 transpose [1,0,2]----
transpose_3d_256_201Threads: 1 / 3D 256^3 transpose [2,0,1]----
transpose_3d_256_201Threads: 4 / 3D 256^3 transpose [2,0,1]----
transpose_3d_256_201Threads: 8 / 3D 256^3 transpose [2,0,1]----

Charts below are ordered best first (smallest ratio).

cyclic_15d_3 Threads: 1 / 15D 3^15 cyclic [1,2,...,0] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (26.773 ms)strided-rs26.773 msstrided-jl53.681 msjulia-base56.022 mstenferro-rs23.353 ms · 0.87x

cyclic_15d_3 Threads: 4 / 15D 3^15 cyclic [1,2,...,0] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (9.059 ms)strided-rs9.059 msstrided-jl22.914 msjulia-base50.240 mstenferro-rs9.008 ms · 0.99x

cyclic_15d_3 Threads: 8 / 15D 3^15 cyclic [1,2,...,0] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (7.849 ms)strided-rs7.849 msstrided-jl24.627 msjulia-base60.210 mstenferro-rs7.705 ms · 0.98x

memcpy_24d_contiguous Threads: 1 / memcpy baseline (24D 2^24) · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (23.889 ms)memcpy23.889 msstrided-rs24.092 ms

memcpy_24d_contiguous Threads: 4 / memcpy baseline (24D 2^24) · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (24.198 ms)strided-rs24.198 msmemcpy25.528 ms

memcpy_24d_contiguous Threads: 8 / memcpy baseline (24D 2^24) · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (32.537 ms)memcpy32.537 msstrided-rs32.796 ms

reverse_15d_3 Threads: 1 / 15D 3^15 reverse · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (47.575 ms)strided-rs47.575 msstrided-jl100.057 msjulia-base201.032 mstenferro-rs47.437 ms · 1.00x

reverse_15d_3 Threads: 4 / 15D 3^15 reverse · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (24.792 ms)strided-rs24.792 msstrided-jl45.386 msjulia-base191.802 mstenferro-rs24.914 ms · 1.00x

reverse_15d_3 Threads: 8 / 15D 3^15 reverse · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (30.715 ms)strided-rs30.715 msstrided-jl42.450 msjulia-base216.372 mstenferro-rs30.773 ms · 1.00x

reverse_23d_2 Threads: 1 / 23D 2^23 reverse · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (29.096 ms)strided-rs29.096 msstrided-jl46.826 msjulia-base175.393 mstenferro-rs17.333 ms · 0.60x

reverse_23d_2 Threads: 4 / 23D 2^23 reverse · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (21.878 ms)strided-rs21.878 msstrided-jl25.863 msjulia-base179.001 mstenferro-rs12.688 ms · 0.58x

reverse_23d_2 Threads: 8 / 23D 2^23 reverse · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (22.663 ms)strided-jl22.663 msstrided-rs26.251 msjulia-base196.518 mstenferro-rs12.782 ms · 0.56x

rotation_6d_32_32_32_32_16_16 Threads: 1 / 6D 32^4x16x16 rotation [5,0,4,1,3,2] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (550.466 ms)strided-rs550.466 msstrided-jl682.466 msjulia-base907.605 mstenferro-rs530.417 ms · 0.96x

rotation_6d_32_32_32_32_16_16 Threads: 4 / 6D 32^4x16x16 rotation [5,0,4,1,3,2] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (217.389 ms)strided-rs217.389 msstrided-jl254.964 msjulia-base921.240 mstenferro-rs216.095 ms · 0.99x

rotation_6d_32_32_32_32_16_16 Threads: 8 / 6D 32^4x16x16 rotation [5,0,4,1,3,2] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (201.310 ms)strided-rs201.310 msstrided-jl245.357 msjulia-base1030.3 mstenferro-rs209.380 ms · 1.04x

tn_light_415_24d_contiguous_same_perm Threads: 1 / 24D contiguous source, TN light 415 late-step permutation · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (28.836 ms)strided-rs28.836 msstrided-jl66.003 msjulia-base67.239 mstenferro-rs26.322 ms · 0.91x

tn_light_415_24d_contiguous_same_perm Threads: 4 / 24D contiguous source, TN light 415 late-step permutation · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (9.868 ms)strided-rs9.868 msstrided-jl27.169 msjulia-base59.900 mstenferro-rs10.907 ms · 1.11x

tn_light_415_24d_contiguous_same_perm Threads: 8 / 24D contiguous source, TN light 415 late-step permutation · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (8.415 ms)strided-rs8.415 msstrided-jl27.067 msjulia-base79.651 mstenferro-rs8.854 ms · 1.05x

tn_light_415_24d_scattered_to_colmajor Threads: 1 / 24D scattered -> col-major · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (26.419 ms)strided-rs26.419 msstrided-jl64.943 msjulia-base154.294 mstenferro-rs26.294 ms · 1.00x

tn_light_415_24d_scattered_to_colmajor Threads: 4 / 24D scattered -> col-major · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (10.541 ms)strided-rs10.541 msstrided-jl28.214 msjulia-base145.558 mstenferro-rs10.560 ms · 1.00x

tn_light_415_24d_scattered_to_colmajor Threads: 8 / 24D scattered -> col-major · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (9.550 ms)strided-rs9.550 msstrided-jl28.088 msjulia-base216.703 mstenferro-rs9.683 ms · 1.01x

transpose_2d_2048 Threads: 1 / 2D 2048^2 transpose [1,0] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (9.648 ms)strided-rs9.648 msstrided-jl15.069 msjulia-base29.653 mstenferro-rs5.196 ms · 0.54x

transpose_2d_2048 Threads: 4 / 2D 2048^2 transpose [1,0] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (3.608 ms)strided-rs3.608 msstrided-jl9.642 msjulia-base28.356 mstenferro-rs3.024 ms · 0.84x

transpose_2d_2048 Threads: 8 / 2D 2048^2 transpose [1,0] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (2.887 ms)strided-rs2.887 msstrided-jl9.534 msjulia-base39.579 mstenferro-rs2.498 ms · 0.87x

transpose_3d_256_102 Threads: 1 / 3D 256^3 transpose [1,0,2] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (32.716 ms)strided-rs32.716 msstrided-jl52.217 msjulia-base54.321 mstenferro-rs32.327 ms · 0.99x

transpose_3d_256_102 Threads: 4 / 3D 256^3 transpose [1,0,2] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (11.215 ms)strided-rs11.215 msstrided-jl23.870 msjulia-base49.375 mstenferro-rs12.371 ms · 1.10x

transpose_3d_256_102 Threads: 8 / 3D 256^3 transpose [1,0,2] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (9.242 ms)strided-rs9.242 msstrided-jl24.718 msjulia-base61.644 mstenferro-rs9.444 ms · 1.02x

transpose_3d_256_201 Threads: 1 / 3D 256^3 transpose [2,0,1] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (51.173 ms)strided-rs51.173 msstrided-jl65.306 msjulia-base88.407 mstenferro-rs51.355 ms · 1.00x

transpose_3d_256_201 Threads: 4 / 3D 256^3 transpose [2,0,1] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (14.375 ms)strided-rs14.375 msstrided-jl26.953 msjulia-base87.760 mstenferro-rs14.894 ms · 1.04x

transpose_3d_256_201 Threads: 8 / 3D 256^3 transpose [2,0,1] · n=7

bar = median time (log scale) · shorter (left) is faster · dashed line = best reference (10.936 ms)strided-rs10.936 msstrided-jl26.280 msjulia-base104.484 mstenferro-rs11.053 ms · 1.01x

Original report

CPU Permutation Benchmark Results

CPU Information

On the Linux CPU devcontainer, thread counts are controlled via RAYON_NUM_THREADS / OMP_NUM_THREADS / JULIA_NUM_THREADS; no CPU-affinity pinning (taskset / numactl) is applied, matching the repository devcontainer convention. The controlled thread environment is recorded per thread count in the run's run_t<N>.yaml.

tenferro-rs measures TypedTensorView::transpose_view followed by BackendSession::to_contiguous_read; one shared session is entered before timing, and input view descriptors and metadata-only transpose_view are built outside the timed region. Materialization accepts arbitrary source strides. Every backend allocates a fresh destination inside each timed call, so the table compares allocation-inclusive end-to-end materialization rather than destination-reuse copy kernels. hptt only participates in patterns with a contiguous source and destination. Correctness is verified against an internal, untimed odometer reference before any timing; a FAILED cell means that backend's output did not match the reference for that pattern.

Threads: 1

Median (p25 / p75) in ms. Missing backends are shown as -; the fastest backend per pattern is bolded.

pattern label tenferro-rs (ms) HPTT (ms) strided-rs (ms) Julia Base (ms) Strided.jl (ms) memcpy (ms)
cyclic_15d_3 15D 3^15 cyclic [1,2,...,0] 23.353 (23.298 / 23.532) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 26.773 (26.702 / 26.829) 56.022 (36.738 / 56.507) 53.681 (35.659 / 55.072) -
memcpy_24d_contiguous memcpy baseline (24D 2^24) - - 24.092 (24.015 / 24.209) - - 23.889 (23.618 / 24.065)
reverse_15d_3 15D 3^15 reverse 47.437 (46.900 / 48.859) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 47.575 (46.979 / 48.816) 201.032 (181.421 / 202.038) 100.057 (80.743 / 100.978) -
reverse_23d_2 23D 2^23 reverse 17.333 (17.313 / 17.380) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 29.096 (29.058 / 29.117) 175.393 (173.558 / 188.906) 46.826 (46.424 / 61.352) -
rotation_6d_32_32_32_32_16_16 6D 32^4x16x16 rotation [5,0,4,1,3,2] 530.417 (528.564 / 532.553) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 550.466 (550.134 / 552.926) 907.605 (899.829 / 914.239) 682.466 (674.342 / 684.357) -
tn_light_415_24d_contiguous_same_perm 24D contiguous source, TN light 415 late-step permutation 26.322 (26.207 / 26.392) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 28.836 (28.773 / 28.985) 67.239 (47.095 / 68.515) 66.003 (44.076 / 66.644) -
tn_light_415_24d_scattered_to_colmajor 24D scattered -> col-major 26.294 (26.202 / 26.574) - 26.419 (26.402 / 26.628) 154.294 (134.099 / 156.392) 64.943 (49.823 / 76.306) -
transpose_2d_2048 2D 2048^2 transpose [1,0] 5.196 (5.186 / 5.214) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 9.648 (9.632 / 9.672) 29.653 (23.035 / 34.900) 15.069 (13.943 / 21.794) -
transpose_3d_256_102 3D 256^3 transpose [1,0,2] 32.327 (32.251 / 32.465) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 32.716 (32.631 / 33.008) 54.321 (41.108 / 56.498) 52.217 (39.332 / 53.282) -
transpose_3d_256_201 3D 256^3 transpose [2,0,1] 51.355 (51.324 / 51.409) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 51.173 (51.113 / 51.319) 88.407 (88.254 / 95.491) 65.306 (60.579 / 72.930) -

Threads: 4

Median (p25 / p75) in ms. Missing backends are shown as -; the fastest backend per pattern is bolded.

pattern label tenferro-rs (ms) HPTT (ms) strided-rs (ms) Julia Base (ms) Strided.jl (ms) memcpy (ms)
cyclic_15d_3 15D 3^15 cyclic [1,2,...,0] 9.008 (8.932 / 9.065) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 9.059 (8.909 / 9.487) 50.240 (37.573 / 52.024) 22.914 (10.939 / 26.361) -
memcpy_24d_contiguous memcpy baseline (24D 2^24) - - 24.198 (24.118 / 24.301) - - 25.528 (25.503 / 25.576)
reverse_15d_3 15D 3^15 reverse 24.914 (24.701 / 25.104) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 24.792 (24.615 / 25.143) 191.802 (189.575 / 192.260) 45.386 (44.662 / 48.099) -
reverse_23d_2 23D 2^23 reverse 12.688 (12.517 / 12.758) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 21.878 (21.760 / 21.948) 179.001 (175.032 / 185.913) 25.863 (15.158 / 29.587) -
rotation_6d_32_32_32_32_16_16 6D 32^4x16x16 rotation [5,0,4,1,3,2] 216.095 (215.903 / 216.182) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 217.389 (217.121 / 217.500) 921.240 (908.189 / 927.503) 254.964 (237.442 / 255.947) -
tn_light_415_24d_contiguous_same_perm 24D contiguous source, TN light 415 late-step permutation 10.907 (10.834 / 10.969) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 9.868 (9.718 / 10.346) 59.900 (59.151 / 60.029) 27.169 (13.708 / 31.244) -
tn_light_415_24d_scattered_to_colmajor 24D scattered -> col-major 10.560 (10.505 / 10.591) - 10.541 (10.231 / 10.759) 145.558 (145.314 / 147.580) 28.214 (26.435 / 31.748) -
transpose_2d_2048 2D 2048^2 transpose [1,0] 3.024 (3.007 / 3.078) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 3.608 (3.574 / 3.670) 28.356 (26.795 / 29.115) 9.642 (4.851 / 10.987) -
transpose_3d_256_102 3D 256^3 transpose [1,0,2] 12.371 (12.174 / 12.537) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 11.215 (11.149 / 11.668) 49.375 (48.966 / 49.980) 23.870 (20.237 / 24.570) -
transpose_3d_256_201 3D 256^3 transpose [2,0,1] 14.894 (14.771 / 15.030) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 14.375 (14.147 / 14.714) 87.760 (86.166 / 88.744) 26.953 (25.138 / 28.641) -

Threads: 8

Median (p25 / p75) in ms. Missing backends are shown as -; the fastest backend per pattern is bolded.

pattern label tenferro-rs (ms) HPTT (ms) strided-rs (ms) Julia Base (ms) Strided.jl (ms) memcpy (ms)
cyclic_15d_3 15D 3^15 cyclic [1,2,...,0] 7.705 (7.535 / 7.859) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 7.849 (7.626 / 7.896) 60.210 (54.298 / 61.530) 24.627 (8.717 / 27.502) -
memcpy_24d_contiguous memcpy baseline (24D 2^24) - - 32.796 (32.213 / 32.886) - - 32.537 (32.150 / 32.612)
reverse_15d_3 15D 3^15 reverse 30.773 (30.432 / 31.163) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 30.715 (30.514 / 31.087) 216.372 (214.980 / 217.893) 42.450 (39.950 / 44.811) -
reverse_23d_2 23D 2^23 reverse 12.782 (12.610 / 12.881) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 26.251 (26.207 / 26.440) 196.518 (193.408 / 203.619) 22.663 (10.607 / 24.372) -
rotation_6d_32_32_32_32_16_16 6D 32^4x16x16 rotation [5,0,4,1,3,2] 209.380 (209.182 / 209.718) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 201.310 (201.215 / 206.096) 1030.315 (1009.038 / 1037.005) 245.357 (227.913 / 246.195) -
tn_light_415_24d_contiguous_same_perm 24D contiguous source, TN light 415 late-step permutation 8.854 (8.711 / 9.025) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 8.415 (8.316 / 8.546) 79.651 (78.840 / 83.257) 27.067 (22.598 / 29.473) -
tn_light_415_24d_scattered_to_colmajor 24D scattered -> col-major 9.683 (9.523 / 9.703) - 9.550 (9.384 / 9.640) 216.703 (215.886 / 217.616) 28.088 (24.323 / 28.440) -
transpose_2d_2048 2D 2048^2 transpose [1,0] 2.498 (2.475 / 2.512) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 2.887 (2.830 / 2.944) 39.579 (38.281 / 40.740) 9.534 (3.997 / 11.266) -
transpose_3d_256_102 3D 256^3 transpose [1,0,2] 9.444 (9.331 / 9.589) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 9.242 (9.027 / 9.339) 61.644 (61.431 / 64.140) 24.718 (19.734 / 26.591) -
transpose_3d_256_201 3D 256^3 transpose [2,0,1] 11.053 (10.974 / 11.122) skipped (hptt crate exposes only one-shot transpose with per-call plan construction; no prepared-plan API for operation-only timing) 10.936 (10.783 / 11.146) 104.484 (103.505 / 105.902) 26.280 (23.242 / 29.144) -