Skip to content

Commit c02f3ad

Browse files
committed
compiler: Add optoption for collecting derivatives
1 parent 22a288c commit c02f3ad

4 files changed

Lines changed: 15 additions & 3 deletions

File tree

devito/core/cpu.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def _normalize_kwargs(cls, **kwargs):
7676

7777
# Code generation options for derivatives
7878
o['expand'] = oo.pop('expand', cls.EXPAND)
79+
o['deriv-collect'] = oo.pop('deriv-collect', cls.DERIV_COLLECT)
7980
o['deriv-schedule'] = oo.pop('deriv-schedule', cls.DERIV_SCHEDULE)
8081
o['deriv-unroll'] = oo.pop('deriv-unroll', False)
8182

@@ -151,7 +152,7 @@ class Cpu64AdvOperator(Cpu64OperatorMixin, CoreOperator):
151152
@classmethod
152153
@timed_pass(name='specializing.DSL')
153154
def _specialize_dsl(cls, expressions, **kwargs):
154-
expressions = collect_derivatives(expressions)
155+
expressions = collect_derivatives(expressions, **kwargs)
155156

156157
return expressions
157158

devito/core/gpu.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ def _normalize_kwargs(cls, **kwargs):
8989

9090
# Code generation options for derivatives
9191
o['expand'] = oo.pop('expand', cls.EXPAND)
92+
o['deriv-collect'] = oo.pop('deriv-collect', cls.DERIV_COLLECT)
9293
o['deriv-schedule'] = oo.pop('deriv-schedule', cls.DERIV_SCHEDULE)
9394
o['deriv-unroll'] = oo.pop('deriv-unroll', False)
9495

@@ -189,7 +190,7 @@ class DeviceAdvOperator(DeviceOperatorMixin, CoreOperator):
189190
@classmethod
190191
@timed_pass(name='specializing.DSL')
191192
def _specialize_dsl(cls, expressions, **kwargs):
192-
expressions = collect_derivatives(expressions)
193+
expressions = collect_derivatives(expressions, **kwargs)
193194

194195
return expressions
195196

devito/core/operator.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,12 @@ class BasicOperator(Operator):
123123
finite-difference derivatives.
124124
"""
125125

126+
DERIV_COLLECT = True
127+
"""
128+
Factorize finite-difference derivatives exploiting the linearity of the FD
129+
operators.
130+
"""
131+
126132
DERIV_SCHEDULE = 'basic'
127133
"""
128134
The schedule to use for the computation of finite-difference derivatives.

devito/passes/equations/linearity.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@
1111

1212

1313
@timed_pass()
14-
def collect_derivatives(expressions):
14+
def collect_derivatives(expressions, options=None, **kwargs):
1515
"""
1616
Exploit linearity of finite-differences to collect `Derivative`'s of
1717
same type. This may help CIRE creating fewer temporaries while catching
1818
larger redundant sub-expressions.
1919
"""
20+
deriv_collect = options['deriv-collect']
21+
if not deriv_collect:
22+
return expressions
23+
2024
processed = []
2125
for e in expressions:
2226
# Track type and number of nested Derivatives

0 commit comments

Comments
 (0)