Skip to content

DArray: Add SVD algorithm#716

Open
jpsamaroo wants to merge 5 commits into
masterfrom
jps/svd
Open

DArray: Add SVD algorithm#716
jpsamaroo wants to merge 5 commits into
masterfrom
jps/svd

Conversation

@jpsamaroo

Copy link
Copy Markdown
Member

Written by Claude Opus and Sonnet

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Dagger benchmarks: dirty vs master

master dirty master / dirty
array/dagger/N=1024 (block 512)/add (X + X) 8.7 ± 0.22 ms 8.94 ± 1.6 ms 0.974 ± 0.17
array/dagger/N=1024 (block 512)/alloc (rand) 3.5 ± 0.45 ms 3.26 ± 0.65 ms 1.07 ± 0.26
array/dagger/N=1024 (block 512)/broadcast (X .+ 1) 6.7 ± 1 ms 6.16 ± 0.38 ms 1.09 ± 0.18
array/dagger/N=1024 (block 512)/map (sin.(X)) 8.99 ± 1.1 ms 8.62 ± 1.5 ms 1.04 ± 0.23
array/dagger/N=1024 (block 512)/norm 3.46 ± 0.17 ms 3.41 ± 0.16 ms 1.01 ± 0.067
array/dagger/N=1024 (block 512)/reduce (sum) 7.63 ± 1.3 ms 6.49 ± 0.42 ms 1.18 ± 0.21
array/dagger/N=1024 (block 512)/transpose (permutedims) 5.59 ± 0.76 ms 5.57 ± 0.12 ms 1 ± 0.14
array/dagger/N=256 (block 256)/add (X + X) 2.98 ± 0.19 ms 3.05 ± 0.2 ms 0.976 ± 0.09
array/dagger/N=256 (block 256)/alloc (rand) 1.2 ± 0.067 ms 1.24 ± 0.026 ms 0.969 ± 0.058
array/dagger/N=256 (block 256)/broadcast (X .+ 1) 2.71 ± 0.33 ms 3.48 ± 2.5 ms 0.779 ± 0.56
array/dagger/N=256 (block 256)/map (sin.(X)) 3.03 ± 0.21 ms 3.13 ± 0.28 ms 0.967 ± 0.11
array/dagger/N=256 (block 256)/norm 1.94 ± 0.21 ms 1.92 ± 0.14 ms 1.01 ± 0.13
array/dagger/N=256 (block 256)/reduce (sum) 4.7 ± 1.4 ms 3.54 ± 0.35 ms 1.33 ± 0.42
array/dagger/N=256 (block 256)/transpose (permutedims) 2.32 ± 0.27 ms 2.38 ± 0.19 ms 0.975 ± 0.14
linalg/dagger/N=1024 (block 512)/cholesky 0.0339 ± 0.0063 s 26.5 ± 3.8 ms 1.28 ± 0.3
linalg/dagger/N=1024 (block 512)/lu 6.54 s 6.6 s 0.991
linalg/dagger/N=1024 (block 512)/matmul (A*A) 0.0338 ± 0.00076 s 0.0412 ± 0.0055 s 0.82 ± 0.11
linalg/dagger/N=1024 (block 512)/matvec (A*x) 8.12 ± 0.62 ms 8.44 ± 1.1 ms 0.962 ± 0.15
linalg/dagger/N=1024 (block 512)/qr 0.209 ± 0.0042 s 0.224 ± 0.0092 s 0.934 ± 0.043
linalg/dagger/N=1024 (block 512)/solve (A\b via lu) 9.46 s 9.31 s 1.02
linalg/dagger/N=1024 (block 512)/syrk (A'*A) 31.6 ± 29 ms 0.0339 ± 0.0026 s 0.932 ± 0.86
linalg/dagger/N=256 (block 256)/cholesky 6.05 ± 0.11 ms 6.15 ± 1.8 ms 0.983 ± 0.29
linalg/dagger/N=256 (block 256)/lu 1.16 ± 0.0095 s 1.14 ± 0.028 s 1.01 ± 0.026
linalg/dagger/N=256 (block 256)/matmul (A*A) 3.84 ± 0.079 ms 3.66 ± 0.24 ms 1.05 ± 0.072
linalg/dagger/N=256 (block 256)/matvec (A*x) 3.04 ± 0.06 ms 3.08 ± 0.16 ms 0.987 ± 0.054
linalg/dagger/N=256 (block 256)/qr 8.77 ± 0.53 ms 8.53 ± 0.9 ms 1.03 ± 0.13
linalg/dagger/N=256 (block 256)/solve (A\b via lu) 1.92 ± 0.011 s 1.94 ± 0.015 s 0.989 ± 0.0095
linalg/dagger/N=256 (block 256)/syrk (A'*A) 5.88 ± 0.15 ms 5.6 ± 0.47 ms 1.05 ± 0.092
stencil/dagger/N=1024 (block 512)/alloc (neighbors Wrap) 0.0756 ± 0.015 s 0.047 ± 0.0015 s 1.61 ± 0.31
stencil/dagger/N=1024 (block 512)/assign (const) 3.47 ± 0.036 ms 3.6 ± 0.22 ms 0.963 ± 0.059
stencil/dagger/N=1024 (block 512)/multi-expr 9.8 ± 0.34 ms 8.96 ± 0.29 ms 1.09 ± 0.052
stencil/dagger/N=1024 (block 512)/neighbors (Clamp) 0.0756 ± 0.012 s 0.0467 ± 0.0016 s 1.62 ± 0.27
stencil/dagger/N=1024 (block 512)/neighbors (Pad) 0.0727 ± 0.014 s 0.0749 ± 0.018 s 0.971 ± 0.3
stencil/dagger/N=1024 (block 512)/neighbors (Reflect) 0.041 ± 0.0058 s 0.0444 ± 0.0047 s 0.925 ± 0.16
stencil/dagger/N=1024 (block 512)/neighbors (Wrap) 0.047 ± 0.0017 s 0.0439 ± 0.0069 s 1.07 ± 0.17
stencil/dagger/N=1024 (block 512)/update (+) 6.39 ± 0.38 ms 5.89 ± 0.35 ms 1.08 ± 0.091
stencil/dagger/N=256 (block 256)/alloc (neighbors Wrap) 13.9 ± 0.41 ms 12.5 ± 0.7 ms 1.11 ± 0.07
stencil/dagger/N=256 (block 256)/assign (const) 2.54 ± 0.28 ms 2.35 ± 0.058 ms 1.08 ± 0.12
stencil/dagger/N=256 (block 256)/multi-expr 4.34 ± 0.061 ms 4.66 ± 0.33 ms 0.931 ± 0.067
stencil/dagger/N=256 (block 256)/neighbors (Clamp) 13.5 ± 0.66 ms 12.1 ± 0.19 ms 1.11 ± 0.057
stencil/dagger/N=256 (block 256)/neighbors (Pad) 13.5 ± 0.37 ms 13.3 ± 0.63 ms 1.02 ± 0.056
stencil/dagger/N=256 (block 256)/neighbors (Reflect) 12.1 ± 0.84 ms 13.1 ± 1.8 ms 0.924 ± 0.14
stencil/dagger/N=256 (block 256)/neighbors (Wrap) 12.5 ± 1.4 ms 11.9 ± 1.9 ms 1.05 ± 0.2
stencil/dagger/N=256 (block 256)/update (+) 2.54 ± 0.57 ms 2.75 ± 0.2 ms 0.925 ± 0.22
time_to_load 0.896 ± 0.006 s 0.893 ± 0.018 s 1 ± 0.022

Plots

⚠️ Regressions (> 25.0%)

  • array/dagger/N=256 (block 256)/broadcast (X .+ 1): +28.4%

Improvements (> 25.0% faster)

  • stencil/dagger/N=1024 (block 512)/neighbors (Clamp): -38.3%
  • stencil/dagger/N=1024 (block 512)/alloc (neighbors Wrap): -37.8%

Full results and plots (download the benchmark-results artifact).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant