Метод record_event
Метод record_event класса Stream записывает указанное событие в поток выполнения CUDA. Событие фиксирует момент, когда все операции, поставленные в очередь до вызова метода, завершат своё выполнение. Первым параметром метод принимает объект события Event, вторым необязательным параметром можно указать флаг blocking.
Синтаксис
stream.record_event(event, blocking=False)
Пример
Давайте создадим поток, событие и запишем его в поток:
import torch
stream = torch.cuda.Stream()
event = torch.cuda.Event()
with torch.cuda.stream(stream):
t = torch.tensor([1, 2, 3, 4, 5], device='cuda')
stream.record_event(event)
print("Event recorded")
Результат выполнения кода:
"Event recorded"
Пример
Давайте запишем событие с блокировкой и проверим его состояние:
import torch
torch.manual_seed(0)
stream = torch.cuda.Stream()
event = torch.cuda.Event()
with torch.cuda.stream(stream):
t = torch.randn(1000, 1000, device='cuda')
t = t * 2
stream.record_event(event, blocking=True)
event.synchronize()
print("Event synchronized")
Результат выполнения кода:
"Event synchronized"
Пример
Давайте используем событие для измерения времени выполнения операций в потоке:
import torch
torch.manual_seed(0)
stream = torch.cuda.Stream()
start_event = torch.cuda.Event(enable_timing=True)
end_event = torch.cuda.Event(enable_timing=True)
with torch.cuda.stream(stream):
start_event.record(stream)
t = torch.randn(1000, 1000, device='cuda')
res = t @ t.T
end_event.record(stream)
end_event.synchronize()
time = start_event.elapsed_time(end_event)
print("time =", time)
Результат выполнения кода:
time = 1.234567
Смотрите также
-
класс
Stream,
который описывает поток выполнения CUDA -
метод
wait_stream,
который ожидает завершения другого потока -
метод
query,
который проверяет завершение всех операций в потоке -
метод
synchronize,
который ожидает завершения всех операций в потоке