Skip to content

Commit f1987d5

Browse files
committed
add new benchmark for sparse AD on simple loop written diffusion operator
1 parent 6864e55 commit f1987d5

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
title: Diffusion operator loop sparse AD benchmarks
3+
author: Yolhan Mannes
4+
---
5+
6+
```julia
7+
using DifferentiationInterface
8+
using DifferentiationInterfaceTest
9+
using LinearAlgebra
10+
using SparseConnectivityTracer: TracerSparsityDetector
11+
using SparseMatrixColorings
12+
import Enzyme,ForwardDiff,Mooncake
13+
```
14+
15+
## Backends tested
16+
17+
```julia
18+
bcks = [
19+
AutoEnzyme(mode=Enzyme.Reverse),
20+
AutoEnzyme(mode=Enzyme.Forward),
21+
AutoMooncake(config=nothing),
22+
AutoForwardDiff(),
23+
AutoSparse(
24+
AutoForwardDiff();
25+
sparsity_detector=TracerSparsityDetector(),
26+
coloring_algorithm=GreedyColoringAlgorithm()
27+
),
28+
AutoSparse(
29+
AutoEnzyme(mode=Enzyme.Forward);
30+
sparsity_detector=TracerSparsityDetector(),
31+
coloring_algorithm=GreedyColoringAlgorithm()
32+
)
33+
]
34+
```
35+
36+
## Diffusion operator simple loop
37+
38+
```julia
39+
uin() = 0.0
40+
uout() = 0.0
41+
function Diffusion(u)
42+
du = zero(u)
43+
for i in eachindex(du,u)
44+
if i == 1
45+
ug = uin()
46+
ud = u[i+1]
47+
elseif i == length(u)
48+
ug = u[i-1]
49+
ud = uout()
50+
else
51+
ug = u[i-1]
52+
ud = u[i+1]
53+
end
54+
du[i] = ug + ud -2*u[i]
55+
end
56+
return du
57+
end;
58+
```
59+
60+
## Manual jacobian
61+
```julia
62+
function DDiffusion(u)
63+
A = diagm(
64+
-1 => ones(length(u)-1),
65+
0=>-2 .*ones(length(u)),
66+
1 => ones(length(u)-1))
67+
return A
68+
end;
69+
```
70+
71+
## Define Scenarios
72+
73+
```julia
74+
u = rand(1000)
75+
scenarios = [ Scenario{:jacobian,:out}(Diffusion,u,res1=DDiffusion(u))];
76+
```
77+
78+
## Run Benchmarks
79+
80+
```julia
81+
df = benchmark_differentiation(bcks, scenarios)
82+
```

0 commit comments

Comments
 (0)