Skip to content
Snippets Groups Projects
Commit db2e2977 authored by René Heß's avatar René Heß
Browse files

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.
parent a7950143
No related branches found
No related tags found
No related merge requests found
...@@ -130,7 +130,7 @@ class VectorSumfactKernelInput(SumfactKernelInterfaceBase): ...@@ -130,7 +130,7 @@ class VectorSumfactKernelInput(SumfactKernelInterfaceBase):
@property @property
def signature_args(self): 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))) return tuple("const {}* fastdg{}".format(type_floatingpoint(), i) for i, _ in enumerate(remove_duplicates(self.interfaces)))
else: else:
return () return ()
...@@ -385,7 +385,9 @@ class SumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable): ...@@ -385,7 +385,9 @@ class SumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable):
# TODO: For now we do not vectorize SumfactKernels with different # TODO: For now we do not vectorize SumfactKernels with different
# quadrature_permutation. This should be handled like upper/lower # quadrature_permutation. This should be handled like upper/lower
# vectorization # 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 @property
def cache_key(self): def cache_key(self):
...@@ -631,6 +633,8 @@ class VectorizedSumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable) ...@@ -631,6 +633,8 @@ class VectorizedSumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable)
assert len(set(k.predicates for k in kernels)) == 1 assert len(set(k.predicates for k in kernels)) == 1
# Assert properties of the matrix sequence of the underlying kernels # 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): 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].rows for k in kernels))) == 1
assert len(set(tuple(k.matrix_sequence_quadrature_permuted[i].cols for k in kernels))) == 1 assert len(set(tuple(k.matrix_sequence_quadrature_permuted[i].cols for k in kernels))) == 1
......
...@@ -71,6 +71,11 @@ if(consistent-edge-orientation_FOUND) ...@@ -71,6 +71,11 @@ if(consistent-edge-orientation_FOUND)
INIFILE poisson_dg_3d_gmsh.mini INIFILE poisson_dg_3d_gmsh.mini
ANALYZE_GRID 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 dune_add_formcompiler_system_test(UFLFILE poisson_dg_3d.ufl
BASENAME sumfact_poisson_fastdg_3d_gmsh BASENAME sumfact_poisson_fastdg_3d_gmsh
INIFILE poisson_fastdg_3d_gmsh.mini INIFILE poisson_fastdg_3d_gmsh.mini
......
__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
...@@ -7,7 +7,7 @@ deg_suffix = deg{formcompiler.ufl_variants.degree} ...@@ -7,7 +7,7 @@ deg_suffix = deg{formcompiler.ufl_variants.degree}
{deg_suffix} == deg1 | exclude {deg_suffix} == deg1 | exclude
{quadvec_suffix} == quadvec | exclude {quadvec_suffix} == quadvec | exclude
{gradvec_suffix} == gradvec | exclude # {gradvec_suffix} == gradvec | exclude
gmshFile = cube_hexa.msh gmshFile = cube_hexa.msh
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment