Last active
February 14, 2018 23:47
-
-
Save JonnoFTW/2aa358e7b7e57eecf140ce7beae3fa85 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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