Метод query
Метод query класса Event проверяет состояние события.
Он возвращает True, если событие было зарегистрировано
(произошло), и False в противном случае.
Этот метод не блокирует выполнение программы, в отличие
от метода wait.
Метод особенно полезен для неблокирующей проверки завершения операций на GPU. Он позволяет опрашивать состояние события в циклах или условных конструкциях, не останавливая основной поток выполнения.
Синтаксис
event.query()
Метод не принимает параметров и возвращает значение
типа bool.
Пример
Базовый пример использования метода query для
проверки состояния события:
import torch
# Создаем событие
event = torch.cuda.Event(enable_timing=False)
# Записываем событие
t = torch.tensor([1, 2, 3, 4, 5]).cuda()
event.record()
# Проверяем состояние
is_occurred = event.query()
print(is_occurred)
Результат выполнения кода:
False
В момент проверки событие ещё не произошло,
поэтому метод возвращает False.
Пример
Использование метода query для опроса состояния
события в цикле:
import torch
import time
# Создаем событие
event = torch.cuda.Event(enable_timing=False)
# Выполняем операцию на GPU
t = torch.randn(1000, 1000).cuda()
result = t.matmul(t.T)
event.record()
# Опрашиваем состояние с задержкой
while not event.query():
print("Waiting for event...")
time.sleep(0.1)
print("Event occurred!")
Результат выполнения кода:
Waiting for event...
Waiting for event...
Event occurred!
Метод query позволяет выполнять другие действия,
пока событие не произойдёт.
Пример
Проверка состояния события после явной синхронизации:
import torch
# Создаем событие
event = torch.cuda.Event(enable_timing=False)
# Записываем событие
t = torch.zeros(100, 100).cuda()
t.add_(1)
event.record()
# Принудительно синхронизируем
event.synchronize()
# Проверяем состояние
is_occurred = event.query()
print(is_occurred)
Результат выполнения кода:
True
После вызова метода synchronize событие точно
произошло, и query возвращает True.
Смотрите также
-
класс
Event,
который используется для создания событий -
метод
record,
который регистрирует событие в потоке -
метод
wait,
который блокирует поток до наступления события -
метод
synchronize,
который синхронизирует текущий поток с событием