def test_key_value_sorter(ctx_factory): from pytest import importorskip importorskip("mako") context = ctx_factory() queue = cl.CommandQueue(context) n = 10**5 nkeys = 2000 from pyopencl.clrandom import rand as clrand keys = clrand(queue, n, np.int32, b=nkeys) values = clrand(queue, n, np.int32, b=n).astype(np.int64) assert np.max(keys.get()) < nkeys from pyopencl.algorithm import KeyValueSorter kvs = KeyValueSorter(context) starts, lists, evt = kvs(queue, keys, values, nkeys, starts_dtype=np.int32) starts = starts.get() lists = lists.get() mydict = dict() for k, v in zip(keys.get(), values.get()): mydict.setdefault(k, []).append(v) for i in range(nkeys): start, end = starts[i:i+2] assert sorted(mydict[i]) == sorted(lists[start:end])
def __init__(self, context, tree, discr): """ :arg tree: a :class:`boxtree.Tree` :arg discr: a :class: `meshmode.discretization.Discretization` Boxes and elements can be non-aligned as long as the domains (bounding boxes) are the same. """ assert tree.dimensions == discr.dim self.dim = discr.dim self.context = context self.tree = tree self.discr = discr from pyopencl.algorithm import KeyValueSorter self.key_value_sorter = KeyValueSorter(context) from boxtree.area_query import AreaQueryBuilder self.area_query_builder = AreaQueryBuilder(self.context)
def __init__(self, context): self.context = context from pyopencl.algorithm import KeyValueSorter self.key_value_sorter = KeyValueSorter(context)
def __init__(self, context): self.context = context from pyopencl.algorithm import KeyValueSorter self.key_value_sorter = KeyValueSorter(context) self.area_query_builder = AreaQueryBuilder(context)
def key_value_sort(self): from pyopencl.algorithm import KeyValueSorter return KeyValueSorter(self.cl_context)