Skip to content

Commit d37227f

Browse files
committed
Add algebra benchmarks
1 parent 68a3ca8 commit d37227f

File tree

3 files changed

+93
-96
lines changed

3 files changed

+93
-96
lines changed

benchmark/adjacency_matrix.jl

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
A = [
2+
0 1 0 1 1 0 1 0 1 0
3+
1 0 1 0 0 0 0 0 0 0
4+
0 1 0 0 0 0 0 0 0 0
5+
1 0 0 0 1 0 0 0 0 0
6+
1 0 0 1 0 1 0 0 0 0
7+
0 0 0 0 1 0 0 0 0 0
8+
1 0 0 0 0 0 0 1 0 0
9+
0 0 0 0 0 0 1 0 1 1
10+
1 0 0 0 0 0 0 1 0 0
11+
0 0 0 0 0 0 0 1 0 0
12+
]
13+
14+
B = [
15+
0 1 0 0 0 1 0 0 0
16+
1 0 0 0 0 1 0 0 0
17+
0 0 0 0 0 1 1 0 1
18+
0 0 0 0 0 0 1 1 0
19+
0 0 0 0 0 0 0 1 1
20+
1 1 1 0 0 0 1 0 0
21+
0 0 1 1 0 1 0 1 1
22+
0 0 0 1 1 0 1 0 1
23+
0 0 1 0 1 0 1 1 0
24+
]
25+
26+
C = [
27+
0 1 1 0 0 0
28+
1 0 0 1 0 0
29+
1 0 0 1 1 0
30+
0 1 1 0 0 1
31+
0 0 1 0 0 1
32+
0 0 0 1 1 0
33+
]
34+
35+
D = [
36+
0 1 1 0 1 0
37+
1 0 0 1 0 1
38+
1 0 0 1 0 0
39+
0 1 1 0 0 0
40+
1 0 0 0 0 1
41+
0 1 0 0 1 0]
42+
43+
ZAA = zeros(Int64, 10, 10)
44+
ZAB = zeros(Int64, 10, 9)
45+
ZAC = zeros(Int64, 10, 6)
46+
ZAD = zeros(Int64, 10, 6)
47+
ZBB = zeros(Int64, 9, 9)
48+
ZBC = zeros(Int64, 9, 6)
49+
ZBD = zeros(Int64, 9, 6)
50+
ZCC = zeros(Int64, 6, 6)
51+
ZCD = zeros(Int64, 6, 6)
52+
53+
ZBA = ZAB'
54+
ZCA = ZAC'
55+
ZDA = ZAD'
56+
ZCB = ZBC'
57+
ZDB = ZBD'
58+
ZDC = ZCD'
59+
60+
61+
# Graph 1 is disconnected, 2-3-4-5 are connected, 6 is disconnected, 7 is disconnected
62+
63+
A = [
64+
A ZAA ZAB ZAC ZAA ZAA ZAD
65+
ZAA A ZAB ZAC ZAA ZAA ZAD
66+
ZBA ZBA B ZBC ZBA ZBA ZBD
67+
ZCA ZCA ZCB C ZCA ZCA ZCD
68+
ZAA ZAA ZAB ZAC A ZAA ZAD
69+
ZAA ZAA ZAB ZAC ZAA A ZAD
70+
ZDA ZDA ZDB ZDC ZDA ZDA D
71+
]
72+
73+
A[13,21] = A[21,13] = 1
74+
A[16,30] = A[30,16] = 1
75+
A[20,36] = A[36,20] = 1

benchmark/example_benchmark.jl

Lines changed: 17 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,108 +1,33 @@
11
using GraphBasedSystems
22
using LinearAlgebra
33

4-
A = [
5-
0 1 0 1 1 0 1 0 1 0
6-
1 0 1 0 0 0 0 0 0 0
7-
0 1 0 0 0 0 0 0 0 0
8-
1 0 0 0 1 0 0 0 0 0
9-
1 0 0 1 0 1 0 0 0 0
10-
0 0 0 0 1 0 0 0 0 0
11-
1 0 0 0 0 0 0 1 0 0
12-
0 0 0 0 0 0 1 0 1 1
13-
1 0 0 0 0 0 0 1 0 0
14-
0 0 0 0 0 0 0 1 0 0
15-
]
4+
include("adjacency_matrix.jl")
165

17-
B = [
18-
0 1 0 0 0 1 0 0 0
19-
1 0 0 0 0 1 0 0 0
20-
0 0 0 0 0 1 1 0 1
21-
0 0 0 0 0 0 1 1 0
22-
0 0 0 0 0 0 0 1 1
23-
1 1 1 0 0 0 1 0 0
24-
0 0 1 1 0 1 0 1 1
25-
0 0 0 1 1 0 1 0 1
26-
0 0 1 0 1 0 1 1 0
27-
]
28-
29-
C = [
30-
0 1 1 0 0 0
31-
1 0 0 1 0 0
32-
1 0 0 1 1 0
33-
0 1 1 0 0 1
34-
0 0 1 0 0 1
35-
0 0 0 1 1 0
36-
]
37-
38-
D = [
39-
0 1 1 0 1 0
40-
1 0 0 1 0 1
41-
1 0 0 1 0 0
42-
0 1 1 0 0 0
43-
1 0 0 0 0 1
44-
0 1 0 0 1 0]
45-
46-
ZAA = zeros(Int64,10,10)
47-
ZAB = zeros(Int64,10,9)
48-
ZAC = zeros(Int64,10,6)
49-
ZAD = zeros(Int64,10,6)
50-
ZBB = zeros(Int64,9,9)
51-
ZBC = zeros(Int64,9,6)
52-
ZBD = zeros(Int64,9,6)
53-
ZCC = zeros(Int64,6,6)
54-
ZCD = zeros(Int64,6,6)
55-
56-
ZBA = ZAB'
57-
ZCA = ZAC'
58-
ZDA = ZAD'
59-
ZCB = ZBC'
60-
ZDB = ZBD'
61-
ZDC = ZCD'
62-
63-
64-
# Graph 1 is disconnected, 2-3-4-5 are connected, 6 is disconnected, 7 is disconnected
65-
66-
A = [
67-
A ZAA ZAB ZAC ZAA ZAA ZAD
68-
ZAA A ZAB ZAC ZAA ZAA ZAD
69-
ZBA ZBA B ZBC ZBA ZBA ZBD
70-
ZCA ZCA ZCB C ZCA ZCA ZCD
71-
ZAA ZAA ZAB ZAC A ZAA ZAD
72-
ZAA ZAA ZAB ZAC ZAA A ZAD
73-
ZDA ZDA ZDB ZDC ZDA ZDA D
74-
]
75-
76-
A[13,21] = A[21,13] = 1
77-
A[16,30] = A[30,16] = 1
78-
A[20,36] = A[36,20] = 1
796

807
function initialize!_posdef!(system::System{N}) where N
818
initialize!(system,rand)
829
for i=1:N
83-
system.matrix_entries[i,i].value += 1000*I
10+
system.matrix_entries[i,i].value += 10*I
8411
end
12+
# display(isposdef(full_matrix(system)))
8513
end
8614

8715

8816
system = System{Float64}(A, ones(Int,size(A)[1])*3)
8917
systemldlt = System{Float64}(A, ones(Int,size(A)[1])*3, symmetric=true)
9018
systemllt = System{Float64}(A, ones(Int,size(A)[1])*3, symmetric=true)
9119

92-
SUITE["ldu"] = @benchmarkable ldu_solve!($system) samples=2 setup=(initialize!($system))
93-
SUITE["lu"] = @benchmarkable lu_solve!($system) samples=2 setup=(initialize!($system))
94-
SUITE["ldlt"] = @benchmarkable ldlt_solve!($systemldlt) samples=2 setup=(initialize!($systemldlt))
95-
SUITE["llt"] = @benchmarkable llt_solve!($systemllt) samples=2 setup=(initialize!_posdef!($systemllt))
96-
97-
# A = [
98-
# 0 1 1 1 1
99-
# 1 0 1 1 1
100-
# 1 1 0 1 1
101-
# 1 1 1 0 1
102-
# 1 1 1 1 0
103-
# ]
104-
105-
106-
107-
108-
20+
SUITE["sparse_ldu"] = @benchmarkable ldu_solve!($system) setup=(initialize!($system))
21+
SUITE["sparse_lu"] = @benchmarkable lu_solve!($system) setup=(initialize!($system))
22+
SUITE["dense_lu"] = @benchmarkable lu(F)\f setup=(initialize!($system);F=full_matrix($system);f=full_vector($system))
23+
SUITE["sparse_ldlt"] = @benchmarkable ldlt_solve!($systemldlt) setup=(initialize!($systemldlt))
24+
SUITE["dense_ldlt"] = @benchmarkable bunchkaufman(F)\f setup=(initialize!($systemldlt);F=full_matrix($systemldlt);f=full_vector($systemldlt))
25+
SUITE["sparse_llt"] = @benchmarkable llt_solve!($systemllt) setup=(initialize!_posdef!($systemllt))
26+
SUITE["dense_llt"] = @benchmarkable cholesky(F)\f setup=(initialize!_posdef!($systemllt);F=full_matrix($systemllt);f=full_vector($systemllt))
27+
28+
SUITE["sparse_add"] = @benchmarkable +($system,$system) setup=(initialize!($system))
29+
SUITE["dense_add"] = @benchmarkable (+(F,F);+(f+f)) setup=(initialize!($system);F=full_matrix($system);f=full_vector($system))
30+
SUITE["sparse_mul"] = @benchmarkable *($system,$system) setup=(initialize!($system))
31+
SUITE["dense_mul"] = @benchmarkable *(F,F) setup=(initialize!($system);F=full_matrix($system))
32+
SUITE["sparse_solve"] = @benchmarkable \($system,Bmat) setup=(initialize!($system);Bmat=deepcopy(system.matrix_entries);initialize!($system))
33+
SUITE["dense_solve"] = @benchmarkable \(F1,F2) setup=(initialize!($system);F2=full_matrix($system);initialize!($system);F1=full_matrix($system))

src/solvers/llt.jl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,7 @@ function llt_backsubstitution_d!(vector, diagonal, diagonal_inverse)
5959
if diagonal_inverse.isinverted
6060
vector.value = diagonal_inverse.value * vector.value
6161
else
62-
invdiagonal = inv(diagonal.value)
63-
diagonal_inverse.value = invdiagonal
64-
diagonal_inverse.isinverted = true
65-
vector.value = diagonal_inverse.value * vector.value
62+
vector.value = diagonal.value \ vector.value
6663
end
6764
return
6865
end

0 commit comments

Comments
 (0)