Вот выдержка из Юпитера:
В [1]
:
import torch, numpy as np, datetime
cuda = torch.device('cuda')
В [2]
:
ac = torch.randn(10000, 10000).to(cuda)
bc = torch.randn(10000, 10000).to(cuda)
%time cc = torch.matmul(ac, bc)
print(cc[0, 0], torch.sum(ac[0, :] * bc[:, 0]))
Время стены: 349 мс
тензор (17,0374, устройство = 'cuda: 0') тензор (17.0376, устройство = 'cuda: 0')
Время низкое, но все же разумное (0,35 с для умножения 1e12)
Но если мы повторим то же самое:
ac = torch.randn(10000, 10000).to(cuda)
bc = torch.randn(10000, 10000).to(cuda)
%time cc = torch.matmul(ac, bc)
print(cc[0, 0], torch.sum(ac[0, :] * bc[:, 0]))
Время стены: 999 мкс
тензор (-78.7172, устройство = 'cuda: 0') тензор (-78.7173, устройство = 'cuda: 0')
1e12
умножений в 1ms
?!
Почему время изменилось с 349 мс до 1 мс?
Информация:
- Протестировано на GeForce RTX 2070;
- Может быть воспроизведено в Google Colab.