diff --git a/jinja_filters.py b/jinja_filters.py index 3ec11f235fd092bf337f7dc2ed24c4ab41ff0c96..4e518b7a0b9193c59a2db2e7f2083c7bc76c4288 100644 --- a/jinja_filters.py +++ b/jinja_filters.py @@ -24,6 +24,15 @@ else }} """ +temporary_constructor = """ +~{class_name}() {{ {contents} }} +""" + +delete_loop = """ + for(auto p: cache_{original_field_name}_) {{ + delete p; + }} +""" def make_field_type(dtype, f_size, is_gpu): if is_gpu: @@ -318,6 +327,16 @@ def generate_members(ctx, kernel_info, parameters_to_ignore=(), only_fields=Fals return "\n".join(result) +def generate_destructor(kernel_info, class_name): + if not kernel_info.temporary_fields: + return "" + else: + contents = "" + for field_name in kernel_info.temporary_fields: + contents += delete_loop.format(original_field_name=field_name[:-len('_tmp')]) + return temporary_constructor.format(contents=contents, class_name=class_name) + + def add_pystencils_filters_to_jinja_env(jinja_env): jinja_env.filters['generate_definition'] = generate_definition jinja_env.filters['generate_declaration'] = generate_declaration @@ -328,3 +347,4 @@ def add_pystencils_filters_to_jinja_env(jinja_env): jinja_env.filters['generate_block_data_to_field_extraction'] = generate_block_data_to_field_extraction jinja_env.filters['generate_swaps'] = generate_swaps jinja_env.filters['generate_refs_for_kernel_parameters'] = generate_refs_for_kernel_parameters + jinja_env.filters['generate_destructor'] = generate_destructor diff --git a/templates/Sweep.tmpl.h b/templates/Sweep.tmpl.h index 8f976215a36075fd9e16bb54019f6a0fc642a8cf..bda958e8fff1fcebcd4d723bee17ecfb727c7f3d 100644 --- a/templates/Sweep.tmpl.h +++ b/templates/Sweep.tmpl.h @@ -54,6 +54,8 @@ public: : {{ kernel|generate_constructor_initializer_list }}, stream_(stream) {}; + {{ kernel| generate_destructor(class_name) |indent(4) }} + void operator() ( IBlock * block ); private: {{kernel|generate_members|indent(4)}} diff --git a/templates/SweepInnerOuter.tmpl.h b/templates/SweepInnerOuter.tmpl.h index 2bdde0a994961ab5ebf14417a821ba113a8c0078..a9377dd685bb6c1b4fb9e565f8328c70b84419a3 100644 --- a/templates/SweepInnerOuter.tmpl.h +++ b/templates/SweepInnerOuter.tmpl.h @@ -55,6 +55,9 @@ public: : {{ kernel|generate_constructor_initializer_list }} {}; + {{ kernel| generate_destructor(class_name) |indent(4) }} + + void operator() ( IBlock * block{%if target is equalto 'gpu'%} , cudaStream_t stream = 0{% endif %} ); void inner( IBlock * block{%if target is equalto 'gpu'%} , cudaStream_t stream = 0{% endif %} );