Skip to content

Commit c07b6a1

Browse files
authored
Update spectralnorm-fast.jl (#32)
1 parent 25a31a2 commit c07b6a1

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

spectralnorm/spectralnorm-fast.jl

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
# https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
33

44
# based on the Javascript program
5+
# optimizations by Kristoffer Carlsson
56

67
using Printf
78

89
A(i,j) = 1.0 / ( (((i+j)*(i+j+1)) >> 1) + i+1)
910

10-
@inline function Au!(w, u)
11+
function Au!(w, u)
1112
n = length(u)
1213
Threads.@threads for i = 1:n
1314
w[i] = 0
@@ -19,7 +20,7 @@ A(i,j) = 1.0 / ( (((i+j)*(i+j+1)) >> 1) + i+1)
1920
end
2021
end
2122

22-
@inline function Atu!(v, w)
23+
function Atu!(v, w)
2324
n = length(w)
2425
Threads.@threads for i = 1:n
2526
z = 0.0
@@ -30,16 +31,19 @@ end
3031
end
3132
end
3233

34+
function AtAu!(w, v, u)
35+
Au!(w, u)
36+
Atu!(v, w)
37+
end
38+
3339
function perf_spectralnorm(n::Int=100)
3440
u = ones(Float64, n)
3541
v = zeros(Float64 ,n)
3642
w = zeros(Float64, n)
3743
vv = vBv = 0
3844
for i = 1:10
39-
Au!(w, u)
40-
Atu!(v, w)
41-
Au!(w, v)
42-
Atu!(u, w)
45+
AtAu!(w, v, u)
46+
AtAu!(w, u, v)
4347
end
4448
@inbounds @simd for i = 1:n
4549
vBv += u[i]*v[i]

0 commit comments

Comments
 (0)