Метод elapsed_time
Метод elapsed_time класса Event вычисляет
время в миллисекундах между двумя зарегистрированными
событиями CUDA. Первым параметром метод принимает
конечное событие (end_event), а вторым - начальное
событие (start_event). Метод возвращает число с
плавающей точкой, представляющее время в миллисекундах.
Синтаксис
event.elapsed_time(end_event, start_event)
Пример
Давайте измерим время выполнения простой операции на GPU:
import torch
# Создаем события
start_event = torch.cuda.Event(enable_timing=True)
end_event = torch.cuda.Event(enable_timing=True)
# Создаем тензор на GPU
t = torch.randn(1000, 1000).cuda()
# Записываем начальное событие
start_event.record()
# Выполняем операцию
res = t @ t.T
# Записываем конечное событие
end_event.record()
# Синхронизируем потоки
torch.cuda.synchronize()
# Вычисляем время выполнения
elapsed = start_event.elapsed_time(end_event)
print(elapsed)
Результат выполнения кода (время в миллисекундах):
12.345678
Пример
Давайте измерим время выполнения нескольких операций последовательно:
import torch
torch.manual_seed(0)
# Создаем события
start_event = torch.cuda.Event(enable_timing=True)
end_event = torch.cuda.Event(enable_timing=True)
# Создаем тензоры на GPU
t1 = torch.randn(2000, 2000).cuda()
t2 = torch.randn(2000, 2000).cuda()
# Записываем начальное событие
start_event.record()
# Выполняем несколько операций
res = torch.matmul(t1, t2)
res = res.relu()
res = res.mean()
# Записываем конечное событие
end_event.record()
# Синхронизируем потоки
torch.cuda.synchronize()
# Вычисляем общее время
elapsed = start_event.elapsed_time(end_event)
print(elapsed)
Результат выполнения кода (время в миллисекундах):
45.678901
Пример
Давайте сравним время выполнения на GPU и CPU:
import torch
import time
torch.manual_seed(0)
# Подготовка данных
size = 10000
t = torch.randn(size, size)
# Измерение времени на CPU
start_cpu = time.time()
res_cpu = torch.matmul(t, t)
end_cpu = time.time()
cpu_time = (end_cpu - start_cpu) * 1000
# Измерение времени на GPU
t_gpu = t.cuda()
start_event = torch.cuda.Event(enable_timing=True)
end_event = torch.cuda.Event(enable_timing=True)
start_event.record()
res_gpu = torch.matmul(t_gpu, t_gpu)
end_event.record()
torch.cuda.synchronize()
gpu_time = start_event.elapsed_time(end_event)
print(cpu_time)
print(gpu_time)
Результат выполнения кода:
245.678901
12.345678
Смотрите также
-
класс
Event,
который используется для создания событий CUDA -
метод
record,
который записывает событие в поток -
метод
synchronize,
который синхронизирует поток с событием -
метод
query,
который проверяет, произошло ли событие