Почему matmul PyTorch GPU дает правильные результаты без torch.cuda.synchronize()?Python

Программы на Python
Ответить
Anonymous
 Почему matmul PyTorch GPU дает правильные результаты без torch.cuda.synchronize()?

Сообщение Anonymous »

Я изучаю программирование графического процессора с помощью PyTorch и не понимаю, когда действительно необходим torch.cuda.synchronize().
У меня есть этот код, который сравнивает умножение матриц процессора и графического процессора:

Код: Выделить всё

import torch
import time

size = 5000

# CPU computation
A_cpu = torch.randn(size, size)
B_cpu = torch.randn(size, size)
C_cpu = torch.matmul(A_cpu, B_cpu)

# GPU computation
A_gpu = A_cpu.cuda()
B_gpu = B_cpu.cuda()
C_gpu = torch.matmul(A_gpu, B_gpu)
# torch.cuda.synchronize()  # Commented out!

# Compare results
C_gpu_cpu = C_gpu.cpu()
results_match = torch.allclose(C_cpu, C_gpu_cpu, rtol=1e-5, atol=1e-5)
print(f"Results match: {results_match}")  # Returns True!
Мое замешательство: Результаты идеально совпадают даже БЕЗ torch.cuda.synchronize().
Я понимаю, что операции графического процессора являются асинхронными, поэтому я ожидал, что без синхронизации я могу получить неправильные или неполные результаты. Но вывод всегда правильный.
Вопросы:
  • Почему я получаю правильные результаты без явной синхронизации?
  • Может ли PyTorch где-то автоматически синхронизироваться?
  • Когда мне действительно НУЖЕН torch.cuda.synchronize() для корректности (а не только синхронизации)?
Я читал, что синхронизация() необходима для измерения времени, но не уверена, нужна ли она для получения правильных результатов.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ynchronize
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»