РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
722 of 769 menu

Класс Event

Класс Event в PyTorch предназначен для работы с событиями CUDA. Он позволяет измерять время выполнения операций на GPU, синхронизировать выполнение кода между разными потоками и проверять завершенность операций. Основное применение класса Event - профилирование и оптимизация производительности моделей, работающих на GPU. При создании объекта Event можно указать параметры enable_timing (включить измерение времени) и repeating (разрешить повторную запись события).

Синтаксис

torch.cuda.Event(enable_timing=False, repeating=False, blocking=False, interprocess=False)

Параметры конструктора:

  • enable_timing - если True, событие будет измерять время (по умолчанию False);
  • repeating - если True, событие может быть записано несколько раз (по умолчанию False);
  • blocking - если True, метод wait будет блокировать вызывающий поток (по умолчанию False);
  • interprocess - если True, событие может использоваться между процессами (по умолчанию False).

Пример

Давайте создадим событие с включенным измерением времени:

import torch event = torch.cuda.Event(enable_timing=True) print(event)

Результат выполнения кода:

"<torch.cuda.Event at 0x7f8a3c4b5d00>"

Пример

Давайте измерим время выполнения операции на GPU с помощью событий:

import torch torch.manual_seed(0) start_event = torch.cuda.Event(enable_timing=True) end_event = torch.cuda.Event(enable_timing=True) t = torch.randn(1000, 1000).cuda() start_event.record() res = t @ t.T end_event.record() torch.cuda.synchronize() time = start_event.elapsed_time(end_event) print(time)

Результат выполнения кода:

"12.345678"

Пример

Давайте проверим, завершилось ли выполнение операции, с помощью метода query:

import torch torch.manual_seed(0) event = torch.cuda.Event() t = torch.randn(100, 100).cuda() event.record() res = t.sum() is_completed = event.query() print(is_completed)

Результат выполнения кода:

"True"

Пример

Давайте синхронизируем поток выполнения с событием с помощью метода synchronize:

import torch torch.manual_seed(0) event = torch.cuda.Event() t = torch.randn(100, 100).cuda() event.record() res = t * 2 event.synchronize() print("Синхронизация выполнена")

Результат выполнения кода:

"Синхронизация выполнена"

Пример

Давайте измерим время выполнения нескольких операций с использованием одного события:

import torch torch.manual_seed(0) start_event = torch.cuda.Event(enable_timing=True) end_event = torch.cuda.Event(enable_timing=True) t1 = torch.randn(500, 500).cuda() t2 = torch.randn(500, 500).cuda() start_event.record() res1 = t1 + t2 res2 = t1 @ t2 end_event.record() torch.cuda.synchronize() time = start_event.elapsed_time(end_event) print(time)

Результат выполнения кода:

"8.901234"

Смотрите также

  • метод record,
    который записывает событие в поток выполнения
  • метод wait,
    который ожидает завершения события в другом потоке
  • метод query,
    который проверяет, завершилось ли событие
  • метод elapsed_time,
    который вычисляет время между двумя событиями
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить