gpu 比 cpu 快吗?
早期的计算机是顺序执行程序的,每次执行一个程序中的一个函数。为了提高机器的利用率,允许机器同时执行多个程序或者多个函数,前者称为多进程,后者称为多线程,常采用基于任务的并行处理方式。gpu是一种基于数据的并行处理方式,它将数据分解为多个部分,在多个计算单元中分别计算。在pytorch中,只需要说明数据的位置即可。
一般来说,用cpu训练模型花费的时间比用gpu的用时要多出几十倍,但并非总是如此。下列代码分别对10×10、100×100、1000×1000元素的数组做加法运算,对比分别在cpu和gpu上完成运算的用时。由结果可见,对于小的数组,gpu没有什么优势,而对于大的数组,则优势很明显。
import torch
import time
for n in [10,100,1000]:
###CPU
start_time = time.time()
a = torch.ones(n,n)
for _ in range(10000):
a += 1
elapsed_time = time.time() - start_time
print('CPU time = ',elapsed_time)
###GPU
start_time = time.time()
b = torch.ones(n,n).cuda()
for _ in range(10000):
b += 1
elapsed_time = time.time() - start_time
print('GPU time = ',elapsed_time)
# end for
结果
CPU time = 0.04978775978088379
GPU time = 0.3040804862976074
CPU time = 0.16215920448303223
GPU time = 0.2978651523590088
CPU time = 4.651455640792847
GPU time = 0.5731358528137207