Commit 68f909ee authored by Michael Kuron's avatar Michael Kuron
Browse files

Check if fluctuating LB compiles when vectorized

parent a6e35ca6
Pipeline #32335 failed with stage
in 11 minutes and 59 seconds
......@@ -6,6 +6,10 @@ from lbmpy.creationfunctions import *
from lbmpy.macroscopic_value_kernels import macroscopic_values_setter
import numpy as np
from lbmpy.moments import is_bulk_moment, is_shear_moment, get_order
from pystencils.rng import PhiloxTwoDoubles
import pytest
from pystencils.backends.simd_instruction_sets import get_supported_instruction_sets
def single_component_maxwell(x1, x2, kT, mass):
......@@ -54,7 +58,7 @@ def add_pressure_output_to_collision_rule(collision_rule, pressure_field):
collision_rule.main_assignments = collision_rule.main_assignments + pressure_ouput
def get_fluctuating_lb(size=None, kT=None, omega_shear=None, omega_bulk=None, omega_odd=None, omega_even=None, rho_0=None, target=None):
def get_fluctuating_lb(size=None, kT=None, omega_shear=None, omega_bulk=None, omega_odd=None, omega_even=None, rho_0=None, target=None, cpu_vectorize_info=None):
# Parameters
stencil = get_stencil('D3Q19')
......@@ -81,7 +85,8 @@ def get_fluctuating_lb(size=None, kT=None, omega_shear=None, omega_bulk=None, om
collision_rule = create_lb_collision_rule(
method,
fluctuating={
'temperature': kT
'temperature': kT,
'rng_node': PhiloxTwoDoubles,
},
optimization={'cse_global': True}
)
......@@ -98,7 +103,7 @@ def get_fluctuating_lb(size=None, kT=None, omega_shear=None, omega_bulk=None, om
{'density': rho, 'velocity': u})
opts = {'cpu_openmp': True,
'cpu_vectorize_info': None,
'cpu_vectorize_info': cpu_vectorize_info,
'target': dh.default_target}
# Compile kernels
......@@ -242,3 +247,41 @@ def test_point_force(target="cpu"):
momentum, introduced_momentum + 0.5 * point_force, atol=1E-10)
dh.cpu_arrays["force"][force_pos[0],
force_pos[1], force_pos[2]] = np.zeros(3)
@pytest.mark.skipif(not get_supported_instruction_sets(), reason="No vector instruction sets supported")
@pytest.mark.parametrize('assume_aligned', (True, False))
@pytest.mark.parametrize('assume_inner_stride_one', (True, False))
@pytest.mark.parametrize('assume_sufficient_line_padding', (True, False))
def test_vectorization(assume_aligned, assume_inner_stride_one, assume_sufficient_line_padding):
method = create_mrt_orthogonal(
stencil=get_stencil('D2Q9'),
compressible=True,
weighted=True,
relaxation_rate_getter=rr_getter)
collision_rule = create_lb_collision_rule(
method,
fluctuating={
'temperature': sp.Symbol("kT"),
'rng_node': PhiloxTwoDoubles,
'block_offsets': (0, 0),
},
optimization={'cse_global': True}
)
collision = create_lb_update_rule(collision_rule=collision_rule,
stencil=method.stencil,
method=method,
compressible=True,
kernel_type='collide_only')
opts = {'cpu_openmp': False,
'cpu_vectorize_info': {
'instruction_set': get_supported_instruction_sets()[0],
'assume_aligned': assume_aligned,
'assume_inner_stride_one': assume_inner_stride_one,
'assume_sufficient_line_padding': assume_sufficient_line_padding,
},
'target': 'cpu'}
code = ps.create_kernel(collision, **opts)
code.compile()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment