Неблокирующее копирование с хоста в буфер с помощью enqueue_copyPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Неблокирующее копирование с хоста в буфер с помощью enqueue_copy

Сообщение Anonymous »

Я пишу код с помощью PyOpenCL для разгрузки тяжелых вычислений на графический процессор. Для оптимизации алгоритма хотелось бы распараллелить некоторые операции по передаче памяти с дальнейшими вычислениями. Однако я наблюдаю поведение блокировки несмотря ни на что:

Код: Выделить всё

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
Время блокировки и неблокировки копий практически одинаково, несмотря на наличие аргумента is_blocking=False. Я читал, что если объект NannyEvent, возвращаемый копией, не сохраняется до завершения передачи, операция все равно будет заблокирована. Но это тоже не помогло.
Кроме того, первая копия в буфер существенно длиннее второй.
Мой вопрос: как мне добиться неблокирующего поведения?

Подробнее здесь: https://stackoverflow.com/questions/792 ... queue-copy
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»