From db2e297703c236cce34186b0c93b81d9ca1eeec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de> Date: Wed, 14 Nov 2018 14:29:24 +0100 Subject: [PATCH] Add direct_is_possible and the quadrature size to the parallel key Note: - direct_is_possible true/false could probably be handled in an upper/lower vectorization way. - Vectorization of SF kernels should be based on cost permuted matrix sequence. --- python/dune/codegen/sumfact/symbolic.py | 8 +++-- test/sumfact/poisson/CMakeLists.txt | 5 +++ .../poisson/poisson_fastdg_2d_gmsh.mini | 32 +++++++++++++++++++ .../poisson/poisson_fastdg_3d_gmsh.mini | 2 +- 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini diff --git a/python/dune/codegen/sumfact/symbolic.py b/python/dune/codegen/sumfact/symbolic.py index 8b28f8f3..a0868a5c 100644 --- a/python/dune/codegen/sumfact/symbolic.py +++ b/python/dune/codegen/sumfact/symbolic.py @@ -130,7 +130,7 @@ class VectorSumfactKernelInput(SumfactKernelInterfaceBase): @property def signature_args(self): - if get_form_option("fastdg"): + if self.interfaces[0].direct_is_possible: return tuple("const {}* fastdg{}".format(type_floatingpoint(), i) for i, _ in enumerate(remove_duplicates(self.interfaces))) else: return () @@ -385,7 +385,9 @@ class SumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable): # TODO: For now we do not vectorize SumfactKernels with different # quadrature_permutation. This should be handled like upper/lower # vectorization - return tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) + return tuple(m.quadrature_size for m in self.matrix_sequence_quadrature_permuted) + tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) + (self.interface.direct_is_possible,) + # return tuple(m.quadrature_size for m in self.matrix_sequence_quadrature_permuted) + tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) + # return tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) @property def cache_key(self): @@ -631,6 +633,8 @@ class VectorizedSumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable) assert len(set(k.predicates for k in kernels)) == 1 # Assert properties of the matrix sequence of the underlying kernels + # For now we don't mix direct and non_direct input. Could be done in an upper/lower way. + assert len(set(tuple(k.interface.direct_is_possible for k in kernels))) == 1 for i in range(kernels[0].length): assert len(set(tuple(k.matrix_sequence_quadrature_permuted[i].rows for k in kernels))) == 1 assert len(set(tuple(k.matrix_sequence_quadrature_permuted[i].cols for k in kernels))) == 1 diff --git a/test/sumfact/poisson/CMakeLists.txt b/test/sumfact/poisson/CMakeLists.txt index fb5c4ac3..3adde632 100644 --- a/test/sumfact/poisson/CMakeLists.txt +++ b/test/sumfact/poisson/CMakeLists.txt @@ -71,6 +71,11 @@ if(consistent-edge-orientation_FOUND) INIFILE poisson_dg_3d_gmsh.mini ANALYZE_GRID ) + dune_add_formcompiler_system_test(UFLFILE poisson_dg_2d.ufl + BASENAME sumfact_poisson_fastdg_2d_gmsh + INIFILE poisson_fastdg_2d_gmsh.mini + ANALYZE_GRID + ) dune_add_formcompiler_system_test(UFLFILE poisson_dg_3d.ufl BASENAME sumfact_poisson_fastdg_3d_gmsh INIFILE poisson_fastdg_3d_gmsh.mini diff --git a/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini b/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini new file mode 100644 index 00000000..56b69c77 --- /dev/null +++ b/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini @@ -0,0 +1,32 @@ +__name = sumfact_poisson_fastdg_2d_gmsh_{__exec_suffix} +__exec_suffix = {deg_suffix}_{quadvec_suffix}_{gradvec_suffix} + +quadvec_suffix = quadvec, nonquadvec | expand quad +gradvec_suffix = gradvec, nongradvec | expand grad +deg_suffix = deg{formcompiler.ufl_variants.degree} + +# {deg_suffix} == deg1 | exclude +{quadvec_suffix} == quadvec | exclude +# {gradvec_suffix} == gradvec | exclude + +gmshFile = square_quad.msh + +[wrapper.vtkcompare] +name = {__name} +extension = vtu + +[formcompiler] +compare_l2errorsquared = 5e-5, 5e-7 | expand deg +grid_unstructured = 1 +debug_interpolate_input = 1 + +[formcompiler.r] +numerical_jacobian = 0 +sumfact = 1 +fastdg = 1 +sumfact_regular_jacobians = 1 +vectorization_quadloop = 1, 0 | expand quad +vectorization_strategy = model, none | expand grad + +[formcompiler.ufl_variants] +degree = 1, 2 | expand deg diff --git a/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini b/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini index 7e669e5d..438b8d00 100644 --- a/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini +++ b/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini @@ -7,7 +7,7 @@ deg_suffix = deg{formcompiler.ufl_variants.degree} {deg_suffix} == deg1 | exclude {quadvec_suffix} == quadvec | exclude -{gradvec_suffix} == gradvec | exclude +# {gradvec_suffix} == gradvec | exclude gmshFile = cube_hexa.msh -- GitLab