You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The `constant_function` keyword argument (and type parameter) determines whether the function object itself should be considered constant or not during differentiation with Enzyme.jl.
53
+
For simple functions, `constant_function` should usually be set to `false`, but in the case of closures or callable structs which contain differentiated data that can be treated as constant, `constant_function` should be set to `true` for increased performance (more details below).
51
54
52
55
# Fields
53
56
54
57
- `mode::M`: can be either
55
58
56
59
+ an object subtyping `EnzymeCore.Mode` (like `EnzymeCore.Forward` or `EnzymeCore.Reverse`) if a specific mode is required
57
60
+ `nothing` to choose the best mode automatically
61
+
62
+
# Notes
63
+
64
+
If `constant_function = true` but the enclosed data is not truly constant, then Enzyme.jl will not compute the correct derivative values.
65
+
An example of such a function is:
66
+
67
+
```julia
68
+
cache = [0.0]
69
+
function f(x)
70
+
cache[1] = x[1]^2
71
+
cache[1] + x[1]
72
+
end
73
+
```
74
+
75
+
In this case, the enclosed cache is a function of the differentiated input, and thus its values are non-constant with respect to the input.
76
+
Thus, in order to compute the correct derivative of the output, the derivative must propagate through the `cache` value, and said `cache` must not be treated as constant.
77
+
78
+
Conversely, the following function can treat `parameter` as a constant, because `parameter` is never modified based on the input `x`:
79
+
80
+
```julia
81
+
parameter = [0.0]
82
+
function f(x)
83
+
parameter[1] + x[1]
84
+
end
85
+
```
86
+
87
+
In this case, `constant_function = true` would allow the chosen differentiation system to perform extra memory and compute optimizations, under the assumption that `parameter` is kept constant.
0 commit comments