# your code goes here
import pyopencl as cl
import numpy as np
import time
kernsrc = """
__kernel void foo(__global float* a){
size_t gid = get_global_id(0);
float s = a[gid];
a[gid] = s*(sin(s)+cos(s));
}
"""
mf = cl.mem_flags
ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)
prg = cl.Program(ctx, kernsrc).build()
sz = 134217728
arr = np.random.rand(sz).astype(np.float32)
res = np.zeros(sz, dtype=arr.dtype)
t1a = time.time()
clarr = cl.Buffer(ctx, mf.READ_WRITE| mf.COPY_HOST_PTR, hostbuf=arr)
t1b = time.time()
evt = prg.foo(queue, (sz,), None, clarr)
evt.wait()
t3a = time.time()
cl.enqueue_copy(queue, res, clarr)
t3b = time.time()
print("Copy to device: {0:.3f}s\nRun: {1:.3f}s\nCopy from device: {2:.3f}s".format(t1b-t1a, t3a-t1b, t3b-t3a))
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmltcG9ydCBweW9wZW5jbCBhcyBjbAppbXBvcnQgbnVtcHkgYXMgbnAKaW1wb3J0IHRpbWUKCmtlcm5zcmMgPSAiIiIKX19rZXJuZWwgdm9pZCBmb28oX19nbG9iYWwgZmxvYXQqIGEpewogICAgc2l6ZV90IGdpZCA9IGdldF9nbG9iYWxfaWQoMCk7CiAgICBmbG9hdCBzID0gYVtnaWRdOwogICAgYVtnaWRdID0gcyooc2luKHMpK2NvcyhzKSk7Cn0KIiIiCgptZiA9IGNsLm1lbV9mbGFncwpjdHggPSBjbC5jcmVhdGVfc29tZV9jb250ZXh0KCkKcXVldWUgPSBjbC5Db21tYW5kUXVldWUoY3R4KQpwcmcgPSBjbC5Qcm9ncmFtKGN0eCwga2VybnNyYykuYnVpbGQoKQpzeiA9IDEzNDIxNzcyOAphcnIgPSBucC5yYW5kb20ucmFuZChzeikuYXN0eXBlKG5wLmZsb2F0MzIpCnJlcyA9IG5wLnplcm9zKHN6LCBkdHlwZT1hcnIuZHR5cGUpCnQxYSA9IHRpbWUudGltZSgpCmNsYXJyID0gY2wuQnVmZmVyKGN0eCwgbWYuUkVBRF9XUklURXwgbWYuQ09QWV9IT1NUX1BUUiwgaG9zdGJ1Zj1hcnIpCnQxYiA9IHRpbWUudGltZSgpCmV2dCA9IHByZy5mb28ocXVldWUsIChzeiwpLCBOb25lLCBjbGFycikKZXZ0LndhaXQoKQp0M2EgPSB0aW1lLnRpbWUoKQpjbC5lbnF1ZXVlX2NvcHkocXVldWUsIHJlcywgY2xhcnIpCnQzYiA9IHRpbWUudGltZSgpCgpwcmludCgiQ29weSB0byBkZXZpY2U6IHswOi4zZn1zXG5SdW46IHsxOi4zZn1zXG5Db3B5IGZyb20gZGV2aWNlOiB7MjouM2Z9cyIuZm9ybWF0KHQxYi10MWEsIHQzYS10MWIsIHQzYi10M2EpKQ==