Skip to content

p2qbxl_from_csr fails to generate with check_implemented_domains error

Here is what you can do to reproduce reliably:

  1. Clear cache
  2. Go to examples/layerpot.py from pytential and set qbx_order = 17
  3. Run examples/layerpot.py

Here's the error you get:

-------------------------------------------------------------------------------
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/matt/src/loopy/loopy/codegen/__init__.py", line 491, in generate_code_v2
    device_code_str)
  File "/home/matt/src/loopy/loopy/check.py", line 740, in check_implemented_domains
    % (insn_id, insn_impl_domain, desired_domain, "\n".join(lines)))
loopy.diagnostic.LoopyError: sanity check failed--implemented and desired domain for instruction 'insn_6' do not match

implemented: [ntgt_centers, isrc_box_start, isrc_box_stop, isrc_end, isrc_start] -> { [itgt_center_outer, itgt_center_inner, isrc_box, idim = 1] : itgt_center_outer >= 0 and itgt_center_inner >= 0 and isrc_box_start <= isrc_box < isrc_box_stop and ((16itgt_center_outer <= -16 + ntgt_centers and itgt_center_inner <= 15) or (16itgt_center_outer >= -15 + ntgt_centers and itgt_center_inner < ntgt_centers - 16itgt_center_outer)); [itgt_center_outer, itgt_center_inner, isrc_box, idim = 0] : itgt_center_outer >= 0 and itgt_center_inner >= 0 and isrc_box_start <= isrc_box < isrc_box_stop and ((16itgt_center_outer <= -16 + ntgt_centers and itgt_center_inner <= 15) or (16itgt_center_outer >= -15 + ntgt_centers and itgt_center_inner < ntgt_centers - 16itgt_center_outer)) }

desired:[ntgt_centers, isrc_box_start, isrc_box_stop, isrc_end, isrc_start] -> { [itgt_center_outer, itgt_center_inner, isrc_box, idim] : isrc_start < isrc_end and itgt_center_inner >= 0 and -16itgt_center_outer <= itgt_center_inner <= 15 and itgt_center_inner < ntgt_centers - 16itgt_center_outer and isrc_box_start <= isrc_box < isrc_box_stop and 0 <= idim <= 1 }

sample point in implemented, but not desired: isrc_start=0, isrc_box=0, isrc_box_start=0, idim=0, ntgt_centers=1, isrc_box_stop=1, itgt_center_inner=0, isrc_end=0, itgt_center_outer=0
gist of implemented, but not desired: [ntgt_centers, isrc_box_start, isrc_box_stop, isrc_end, isrc_start] -> { [itgt_center_outer, itgt_center_inner, isrc_box, idim] : isrc_start < isrc_end }

I think this may be related to the recent domain tree changes, because I've only noticed it recently.

Here's a pickled version of the kernel, but I think this is unlikely to work on an environment that is different from mine anyway: p2qbxl_from_csr.loopy