code: def reasonable_work_group_size_multiple(dev, ctx=None):
      try:
          return dev.warp_size_nv
      except Exception:
          pass
  
      if ctx is None:
          ctx = cl.Context([dev])
      prg = cl.Program(
          ctx,
          """
          __kernel void knl(__global float *a)
          {
              a[get_global_id(0)] = 0;
          }
          """,
      )
      prg.build()
      return prg.knl.get_work_group_info(
          cl.kernel_work_group_info.PREFERRED_WORK_GROUP_SIZE_MULTIPLE,
          dev,
      )
  
imports: import pyopencl
  from pytools import memoize
  from typing import Dict, Optional, Tuple
label_desc: Use image node_id 3 for calling a global function with example usage: reasonable_work_group_size_multiple(dev, ctx) and returns: prg, dev