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

Метод synchronize

Метод synchronize класса Event блокирует текущий поток выполнения до тех пор, пока событие не будет зафиксировано в потоке CUDA с помощью метода record. Этот метод полезен для синхронизации вычислений между разными потоками CUDA или для ожидания завершения асинхронных операций.

Метод не принимает никаких параметров и возвращает None. При вызове текущий поток блокируется до тех пор, пока событие не будет зафиксировано в потоке, с которым оно связано.

Синтаксис

event.synchronize()

Пример

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

import torch torch.manual_seed(0) # Создаём событие event = torch.cuda.Event() # Создаём тензор на GPU t = torch.tensor([1, 2, 3, 4, 5]).cuda() # Выполняем операцию на GPU t = t * 2 # Записываем событие в поток CUDA event.record(torch.cuda.current_stream()) # Синхронизируем поток event.synchronize() print(t.cpu())

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

tensor([ 2, 4, 6, 8, 10])

Пример

Давайте используем метод synchronize для ожидания завершения асинхронных операций в разных потоках CUDA:

import torch torch.manual_seed(0) # Создаём событие и поток event = torch.cuda.Event() stream = torch.cuda.Stream() # Создаём тензоры на GPU t1 = torch.tensor([1, 2, 3, 4, 5]).cuda() t2 = torch.tensor([5, 4, 3, 2, 1]).cuda() # Выполняем операции в другом потоке with torch.cuda.stream(stream): t1 = t1 + t2 event.record(stream) # Синхронизируем поток с событием event.synchronize() print(t1.cpu())

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

tensor([6, 6, 6, 6, 6])

Пример

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

import torch torch.manual_seed(0) # Создаём событие и поток event = torch.cuda.Event() stream = torch.cuda.Stream() # Создаём тензор на GPU t = torch.tensor([1, 2, 3, 4, 5]).cuda() # Выполняем операцию в другом потоке with torch.cuda.stream(stream): t = t * 3 event.record(stream) # Проверяем состояние события print("До синхронизации:", event.query()) # Синхронизируемся с событием event.synchronize() # Проверяем состояние события после синхронизации print("После синхронизации:", event.query()) print(t.cpu())

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

До синхронизации: False После синхронизации: True tensor([ 3, 6, 9, 12, 15])

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

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