def minimum_cl(a, b=None): """ Minimum values of two GPUArrays. Parameters ---------- a : gpuarray First GPUArray. b : gpuarray Second GPUArray. Returns ------- gpuarray Minimum values from both GPArrays, or single value if one GPUarray. Examples -------- >>> a = minimum_cl(give_cl(queue, [1, 2, 3]), give_cl(queue, [3, 2, 1])) [1, 2, 1] >>> type(a) <class 'pyopencl.array.Array'> """ if b is not None: return cl_array.minimum(a, b) return cl_array.min(a)
def minimum(t: Tensor, uts: Union[Tensor, Scalar]) -> Tensor: """Returns the minimum of a tensor.""" if t.gpu: if not isinstance(uts, Tensor): ot: cl.array.Array = clarray.empty(QUEUE, t.shape, dtype=np.float32).fill(uts) return Tensor(clarray.minimum(t._data, ot), gpu=True) return Tensor(clarray.minimum(t._data, uts._data), gpu=True) if not isinstance(uts, Tensor): return Tensor(np.minimum(t._data, uts)) return Tensor(np.minimum(t._data, uts._data))
def test_if_positive(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) from pyopencl.clrandom import rand as clrand l = 20000 a_gpu = clrand(context, queue, (l,), numpy.float32) b_gpu = clrand(context, queue, (l,), numpy.float32) a = a_gpu.get() b = b_gpu.get() max_a_b_gpu = cl_array.maximum(a_gpu, b_gpu) min_a_b_gpu = cl_array.minimum(a_gpu, b_gpu) print(max_a_b_gpu) print(numpy.maximum(a, b)) assert la.norm(max_a_b_gpu.get()- numpy.maximum(a, b)) == 0 assert la.norm(min_a_b_gpu.get()- numpy.minimum(a, b)) == 0
def test_if_positive(ctx_factory): context = ctx_factory() queue = cl.CommandQueue(context) from pyopencl.clrandom import rand as clrand ary_len = 20000 a_gpu = clrand(queue, (ary_len,), np.float32) b_gpu = clrand(queue, (ary_len,), np.float32) a = a_gpu.get() b = b_gpu.get() max_a_b_gpu = cl_array.maximum(a_gpu, b_gpu) min_a_b_gpu = cl_array.minimum(a_gpu, b_gpu) print(max_a_b_gpu) print(np.maximum(a, b)) assert la.norm(max_a_b_gpu.get() - np.maximum(a, b)) == 0 assert la.norm(min_a_b_gpu.get() - np.minimum(a, b)) == 0
def test_if_positive(ctx_getter): context = ctx_getter() queue = cl.CommandQueue(context) from pyopencl.clrandom import rand as clrand l = 20000 a_gpu = clrand(context, queue, (l, ), numpy.float32) b_gpu = clrand(context, queue, (l, ), numpy.float32) a = a_gpu.get() b = b_gpu.get() max_a_b_gpu = cl_array.maximum(a_gpu, b_gpu) min_a_b_gpu = cl_array.minimum(a_gpu, b_gpu) print max_a_b_gpu print numpy.maximum(a, b) assert la.norm(max_a_b_gpu.get() - numpy.maximum(a, b)) == 0 assert la.norm(min_a_b_gpu.get() - numpy.minimum(a, b)) == 0
def minimum(self, x, y): import pyopencl.array as cl_array return cl_array.minimum(x, y)