为什么GPU上的乘法比CPU上的慢?

时间:2020-10-27 14:34:22

标签: python pytorch gpu

这是我的代码(模拟前馈神经网络):

import torch
import time

print(torch.cuda.is_available())    # True
device = torch.device('cuda:0' )

a = torch.tensor([1,2,3,4,5,6]).float().reshape(-1,1)
w1 = torch.rand(120,6)
w2 = torch.rand(1,120)
b1 = torch.rand(120,1)
b2 = torch.rand(1,1).reshape(1,1)

start = time.time()
for _ in range(100000):
    ans = torch.mm(w2, torch.mm(w1,a)+b1)+b2
end = time.time()
print(end-start)                    # 1.2725720405578613 seconds

a = a.to(device)
w1 = w1.to(device)
w2 = w2.to(device)
b1 = b1.to(device)
b2 = b2.to(device)

start = time.time()
for _ in range(100000):
    ans = torch.mm(w2, torch.mm(w1,a)+b1)+b2
end = time.time()
print(end-start)                    # 5.6569812297821045 seconds

我想知道我做错了方法还是什么,我该如何更改代码以显示GPU IS 比在矩阵乘法中的CPU快?

2 个答案:

答案 0 :(得分:6)

原因可能有很多:

  1. 您的模型很简单。
  2. 对于GPU计算,存在往返于GPU内存的内存传输成本
  3. 您的计算量很小,可能有更大的数据样本,因此在GPU上的性能应该比CPU更好
  4. 我们不要忘记缓存,您一遍又一遍地计算相同的操作,可能会为每次运行生成随机a张量

这是pytorch论坛上的一个话题:https://discuss.pytorch.org/t/cpu-faster-than-gpu/25343

另外,您应该使用更好的探查器,如本线程中所述:https://discuss.pytorch.org/t/how-to-measure-time-in-pytorch/26964

答案 1 :(得分:0)

CPU到GPU的传输会产生开销。您还可以看到,与前面的模型相比,模型的第一层需要花费大量时间。

因为,张量首先从主机内存转移到GPU内存。然后,CUDA内核对CUDA内存中的张量执行操作。