Код: Выделить всё
import numpy as np
import pyopencl as cl
from timeit import default_timer as dt
ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)
a = np.random.random((1000, 1000, 500)).astype(np.float64)
mf = cl.mem_flags
start = dt()
a_buff = cl.Buffer(ctx, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=a)
print(f'Buffer creation time: {dt()-start:0.4f} s')
start = dt()
event1 = cl.enqueue_copy(queue, a_buff, a, is_blocking=False)
event1.wait()
print(f'Copy time blocking 1: {dt()-start:0.4f} s')
start = dt()
event2 = cl.enqueue_copy(queue, a_buff, a, is_blocking=False)
event2.wait()
print(f'Copy time blocking 2: {dt()-start:0.4f} s')
start = dt()
event3 = cl.enqueue_copy(queue, a_buff, a, is_blocking=False)
print(f'Copy time non-blocking 1: {dt()-start:0.4f} s')
Код: Выделить всё
Buffer creation time: 0.8559 s
Copy time blocking 1: 1.1018 s
Copy time blocking 2: 0.4177 s
Copy time non-blocking 1: 0.4364 s
Кроме того, первая копия в буфер существенно длиннее второй.
Мой вопрос: как мне добиться неблокирующего поведения?
Подробнее здесь: https://stackoverflow.com/questions/792 ... queue-copy