# Unexpected 4x slowdown when computing many svds in loop

**URL:** <https://discourse.julialang.org/t/unexpected-4x-slowdown-when-computing-many-svds-in-loop/27148>\
**Category:** Performance\
**Created:** [August 4, 2019, 12:21pm UTC](https://discourse.julialang.org/t/unexpected-4x-slowdown-when-computing-many-svds-in-loop/27148 "2019-08-04T12:21:20Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![egcjm](https://avatars.discourse-cdn.com/v4/letter/e/5fc32e/32.png) [@egcjm](https://discourse.julialang.org/u/egcjm)\
**Post date:** [August 4, 2019, 12:21pm UTC](https://discourse.julialang.org/t/unexpected-4x-slowdown-when-computing-many-svds-in-loop/27148/1 "2019-08-04T12:21:20Z")

</div>

I compute svds of N roughly ~100x100 matrices and note a 4x slowdown when I do this in a loop for N \> 100.

```julia
function f_svd(n::Int64,a::Array{Float64,2})
     for i in 1:n
          u,s,v = svd(a);
     end
 end

```

(in my real code I compute svds of different matrices and store away results).

```julia
using BenchmarkTools
using LinearAlgebra
a = rand(100,100)
@btime f_svd($1,$a);
@btime f_svd($10,$a);
@btime f_svd($100,$a);   
@btime f_svd($1000,$a);

```

3.101 ms (16 allocations: 482.02 KiB)  
64.479 ms (160 allocations: 4.71 MiB)  
1.317 s (1600 allocations: 47.07 MiB)  
13.964 s (16000 allocations: 470.72 MiB)

Note that the time for n = 10 is roughly 2 x 10 x (time for n = 1). The time for n = 100 is roughly 4 x 100 x (time for n = 1). Beyond n = 100 the extra slowdown is minimal.

Is this effect purely due to the processors having a hard time swapping data in and out of memory, or is there a Julia trick i can use to speed up my code (by roughly a factor of 4)?

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [August 4, 2019, 3:13pm UTC](https://discourse.julialang.org/t/unexpected-4x-slowdown-when-computing-many-svds-in-loop/27148/2 "2019-08-04T15:13:46Z")

</div>

```julia
julia> @btime f_svd($1,$a);
  3.181 ms (12 allocations: 481.95 KiB)

julia> @btime f_svd($10,$a);
  35.871 ms (120 allocations: 4.71 MiB)

julia> @btime f_svd($100,$a);
  487.371 ms (1200 allocations: 47.07 MiB)

julia> @btime f_svd($1000,$a);
  5.105 s (12000 allocations: 470.66 MiB)

julia> versioninfo()
Julia Version 1.1.1
Commit 55e36cc308 (2019-05-16 04:10 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, skylake)
Environment:
  JULIA_NUM_THREADS = 4

```

---

<div class="post-metadata">

**Author:** ![RoyiAvital](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/royiavital/32/571_2.png) [@RoyiAvital](https://discourse.julialang.org/u/RoyiAvital)\
**Post date:** [August 4, 2019, 3:42pm UTC](https://discourse.julialang.org/t/unexpected-4x-slowdown-when-computing-many-svds-in-loop/27148/3 "2019-08-04T15:42:39Z")

</div>

Are you using Laptop?  
If you do, it might be a CPU throttling happening when you stress the CPU for longer time.

---

<div class="post-metadata">

**Author:** ![egcjm](https://avatars.discourse-cdn.com/v4/letter/e/5fc32e/32.png) [@egcjm](https://discourse.julialang.org/u/egcjm)\
**Post date:** [August 4, 2019, 3:52pm UTC](https://discourse.julialang.org/t/unexpected-4x-slowdown-when-computing-many-svds-in-loop/27148/4 "2019-08-04T15:52:53Z")

</div>

I am using Juliabox:

versioninfo()

> Julia Version 1.0.3  
> Commit 099e826241 (2018-12-18 01:34 UTC)  
> Platform Info:  
> OS: Linux (x86\_64-pc-linux-gnu)  
> CPU: Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz  
> WORD\_SIZE: 64  
> LIBM: libopenlibm LLVM: libLLVM-6.0.0 (ORCJIT, broadwell)  
> Environment:  
> JULIABOX = true  
> JULIA\_PKG\_SERVER = [https://pkg.juliacomputing.com](https://pkg.juliacomputing.com/)  
> JULIA = /opt/julia-0.6/bin/julia JULIA\_KERNELS = [‘julia-0.6’, ‘julia-1.0’, ‘julia-1.0k’]  
> JULIA\_PKG\_TOKEN\_PATH = /mnt/juliabox/.julia/token.toml JULIABOX\_ROLE =  
> JULIA\_NUM\_THREADS = 4

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [August 4, 2019, 4:01pm UTC](https://discourse.julialang.org/t/unexpected-4x-slowdown-when-computing-many-svds-in-loop/27148/5 "2019-08-04T16:01:06Z")

</div>

Probably not a good platform for benchmarking.
