У меня есть этот код, который сравнивает умножение матриц процессора и графического процессора:
Код: Выделить всё
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!
Я понимаю, что операции графического процессора являются асинхронными, поэтому я ожидал, что без синхронизации я могу получить неправильные или неполные результаты. Но вывод всегда правильный.
Вопросы:
- Почему я получаю правильные результаты без явной синхронизации?
- Может ли PyTorch где-то автоматически синхронизироваться?
- Когда мне действительно НУЖЕН torch.cuda.synchronize() для корректности (а не только синхронизации)?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ynchronize
Мобильная версия