Skip to content

WriteRaceConditionWarning is prompted for atomic operations

Minimal reproducer:

import loopy as lp
import pyopencl as cl

ctx = cl.create_some_context()


knl = lp.make_kernel(
        "{[i]:0<=i<10}",
        """
        a[0] = a[0] + 2.0*i {atomic}
        """, [lp.GlobalArg('a', shape=(1,), dtype=float, for_atomic=True)],
        lang_version=(2018, 2))

knl = lp.split_iname(knl, 'i', 2, inner_tag='l.0', outer_tag='g.0')

evt, (out,) = knl(cl.CommandQueue(ctx))
assert out.get()[0] == 90

The warning emitted is:

$ python example.py
/home/kaushikcfd/projects/loopy-dev/src/loopy/loopy/check.py:354: WriteRaceConditionWarning: in kernel loopy_kernel: instruction 'insn' contains a write race: instruction will be run across parallel iname(s) 'i_inner,i_outer', which is/are not referenced in the lhs index (add 'write_race(insn)' to silenced_warnings kernel attribute to disable)
  WriteRaceConditionWarning)
Edited by Kaushik Kulkarni