Skip to content

Instantly share code, notes, and snippets.

@JonnoFTW
Last active February 14, 2018 23:47
Show Gist options
  • Save JonnoFTW/2aa358e7b7e57eecf140ce7beae3fa85 to your computer and use it in GitHub Desktop.
Save JonnoFTW/2aa358e7b7e57eecf140ce7beae3fa85 to your computer and use it in GitHub Desktop.
<pyopencl.Device 'Tonga' on 'AMD Accelerated Parallel Processing' at 0x749460>
Repeating [test_overwrite_ecb()] 1000 times....
Function [test_overwrite_ecb] finished in average of 0:00:00.003962
Repeating [test_overwrite_efb()] 1000 times....
Function [test_overwrite_efb] finished in average of 0:00:00.002380
import pyopencl as cl
import numpy as np
import functools
from datetime import datetime, timedelta
def timeit_repeat(repeats=100):
def _timeit(func):
@functools.wraps(func)
def newfunc(*args, **kwargs):
times = []
params = list(args) + map(lambda x: "{}={}".format(x[0], repr(x[1])), kwargs.items())
print(
"Repeating [{}{}] {} times....".format(func.__name__, '(' + ', '.join(map(str, params)) + ')', repeats))
for i in xrange(repeats):
start_time = datetime.now()
func(*args, **kwargs)
elapsed_time = datetime.now() - start_time
times.append(elapsed_time)
avg = sum(times, timedelta(0)) / len(times)
print('Function [{}] finished in average of {}\n'.format(
func.__name__, avg))
return newfunc
return _timeit
device = cl.get_platforms()[1].get_devices()[0]
print(device)
ctx = cl.Context([device])
queue = cl.CommandQueue(ctx)
reps = 1000
zero_buffer = np.zeros((64 * 1000000,), dtype=np.uint32)
mf = cl.mem_flags
cl_zero_buffer = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=zero_buffer)
cl_empty_buffer = cl.Buffer(ctx, mf.READ_ONLY, size=zero_buffer.nbytes)
zero = np.uint32(0)
# make sure both buffers are initialised
cl.enqueue_copy_buffer(queue, cl_zero_buffer, cl_empty_buffer, zero_buffer.nbytes).wait()
@timeit_repeat(reps)
def test_overwrite_ecb():
cl.enqueue_copy_buffer(queue, cl_zero_buffer, cl_empty_buffer, zero_buffer.nbytes).wait()
@timeit_repeat(reps)
def test_overwrite_efb():
cl.enqueue_fill_buffer(queue, cl_empty_buffer, zero, 0, zero_buffer.nbytes).wait()
if __name__ == "__main__":
test_overwrite_ecb()
test_overwrite_efb()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment