Skip to content

Instantly share code, notes, and snippets.

@fjarri
Created January 16, 2020 01:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fjarri/9aff0474868e2faf438f7e8229d194ec to your computer and use it in GitHub Desktop.
Save fjarri/9aff0474868e2faf438f7e8229d194ec to your computer and use it in GitHub Desktop.
import numpy
import pyopencl as cl
import pyopencl.array as array
src = """
__kernel void test(__global int *a)
{
int gid = get_global_id(0);
a[gid] = gid;
}
"""
platform = cl.get_platforms()[0]
devices = platform.get_devices()
devices = [devices[0], devices[2]]
context = cl.Context(devices)
print("Using devices", devices)
queue1 = cl.CommandQueue(context, devices[0])
queue2 = cl.CommandQueue(context, devices[1])
program = cl.Program(context, src).build()
l = 16
dtype = numpy.dtype('int32')
a_dev = cl.Buffer(context, cl.mem_flags.READ_WRITE | cl.mem_flags.ALLOC_HOST_PTR, l * dtype.itemsize)
a_dev_1 = a_dev.get_sub_region(0, l // 2 * dtype.itemsize)
cl.enqueue_migrate_mem_objects(queue1, [a_dev_1])
a_dev_2 = a_dev.get_sub_region(l // 2 * dtype.itemsize, l // 2 * dtype.itemsize)
cl.enqueue_migrate_mem_objects(queue2, [a_dev_2])
queue1.finish()
queue2.finish()
program.test(queue1, (l // 2,), None, a_dev_1)
program.test(queue2, (l // 2,), None, a_dev_2)
queue1.finish()
queue2.finish()
a_res = numpy.empty(l, numpy.int32)
#cl.enqueue_migrate_mem_objects(queue1, [a_dev_2])
cl.enqueue_copy(queue1, a_res, a_dev, is_blocking=False)
queue1.finish()
queue2.finish()
print(a_res)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment