11from devito import Eq
22from devito .ir .equations import ClusterizedEq
3- from devito .ir .iet import Call , Expression , List , derive_parameters , find_affine_trees
3+ from devito .ir .iet import (Call , Expression , List , MetaCall , derive_parameters ,
4+ find_affine_trees )
45from devito .ir .iet .visitors import FindSymbols , Transformer
56from devito .logger import warning
67from devito .operator import Operator
@@ -26,7 +27,6 @@ class OperatorOPS(Operator):
2627 _default_headers = Operator ._default_headers + ['#define restrict __restrict' ]
2728
2829 def __init__ (self , * args , ** kwargs ):
29- self ._ops_kernels = []
3030 super (OperatorOPS , self ).__init__ (* args , ** kwargs )
3131 self ._compiler = ops_configuration ['compiler' ].copy ()
3232
@@ -88,7 +88,8 @@ def _specialize_iet(self, iet, **kwargs):
8888 )
8989
9090 pre_time_loop .extend (pre_loop )
91- self ._ops_kernels .append (ops_kernel )
91+ self ._func_table [namespace ['ops_kernel_file' ](ops_kernel .name )] = \
92+ MetaCall (ops_kernel , False )
9293 mapper [tree [0 ].root ] = ops_par_loop_call
9394 mapper .update ({i .root : mapper .get (i .root ) for i in tree }) # Drop trees
9495
@@ -108,13 +109,13 @@ def _specialize_iet(self, iet, **kwargs):
108109
109110 @property
110111 def hcode (self ):
111- return '' .join (str (kernel ) for kernel in self ._ops_kernels )
112+ return '' .join (str (kernel . root ) for kernel in self ._func_table . values () )
112113
113114 def _finalize (self , iet , parameters ):
114- # Applies _finalize for each generated OPS kernel, which will generate the .h file
115- self . _ops_kernels = [ super ( OperatorOPS , self ). _finalize (
116- kernel , derive_parameters ( kernel , True ) )
117- for kernel in self . _ops_kernels ]
115+ for k , v in self . _func_table . items ():
116+ parameters = derive_parameters ( v . root , True )
117+ root = super ( OperatorOPS , self ). _finalize ( v . root , parameters )
118+ self . _func_table [ k ] = MetaCall ( root , v . local )
118119
119120 return super ()._finalize (iet , parameters )
120121
0 commit comments