Метод record
Метод record класса Event записывает
момент времени события в указанный поток CUDA.
Это позволяет измерить время выполнения операций
на GPU. Метод принимает один необязательный
параметр - поток, в котором происходит запись.
Синтаксис
event.record(stream=None)
Параметр stream задаёт поток CUDA,
в котором записывается событие. Если поток
не указан, используется текущий поток.
Пример
Давайте создадим событие и запишем его в текущем потоке:
import torch
event = torch.Event(enable_timing=True)
event.record()
Пример
А теперь запишем событие в конкретном потоке и измерим время выполнения операции:
import torch
torch.manual_seed(0)
# Создаём поток и событие
stream = torch.cuda.Stream()
start_event = torch.Event(enable_timing=True)
end_event = torch.Event(enable_timing=True)
# Записываем начало в потоке
start_event.record(stream)
# Выполняем операцию в потоке
with torch.cuda.stream(stream):
t = torch.randn(1000, 1000, device='cuda')
t = t @ t.T
# Записываем конец в потоке
end_event.record(stream)
# Синхронизируем поток
stream.synchronize()
# Вычисляем время
time = start_event.elapsed_time(end_event)
print(f"Time: {time:.2f} ms")
Результат выполнения кода:
Time: 1.23 ms
В этом примере метод record записывает
время начала и конца вычислений в указанном
потоке. Это позволяет точно измерить время
выполнения операции на GPU.
Пример
Если вызвать record без параметров,
событие записывается в текущий поток:
import torch
event = torch.Event(enable_timing=True)
# Запись в текущем потоке
event.record()
# Проверяем, записано ли событие
print(event.query())
Результат выполнения кода:
True
Метод query возвращает True,
если все операции перед событием выполнены.
Смотрите также
-
класс
Event,
который представляет событие CUDA для синхронизации -
метод
wait,
который заставляет поток ждать наступления события -
метод
query,
который проверяет, выполнено ли событие -
метод
elapsed_time,
который вычисляет время между двумя событиями