您的位置:首页 > 其它

走进tensorflow第十二步——测试cpu和gpu的速度差距

2019-05-22 19:52 966 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/u014483914/article/details/90450246

好久没看这一块了,最近一直瞎折腾,各种捣鼓,到了这个阶段,迷……

打算测一下cpu和gpu的实际差距,虽然我这gpu一般般,只有2G,但还是想看看能不能来点儿惊喜。

测试代码来自如下平台:

https://databricks.com/tensorflow/using-a-gpu

如果嫌麻烦可以直接copy以下代码:

[code]#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import tensorflow as tf
from datetime import datetime

device_name = sys.argv[1]  # Choose device from cmd line. Options: gpu or cpu
shape = (int(sys.argv[2]), int(sys.argv[2]))
if device_name == "gpu":
device_name = "/gpu:0"
else:
device_name = "/cpu:0"

with tf.device(device_name):
random_matrix = tf.random_uniform(shape=shape, minval=0, maxval=1)
dot_operation = tf.matmul(random_matrix, tf.transpose(random_matrix))
sum_operation = tf.reduce_sum(dot_operation)

startTime = datetime.now()
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as session:
result = session.run(sum_operation)
print(result)

# It can be hard to see the results on the terminal with lots of output -- add some newlines to improve readability.
print("\n" * 5)
print("Shape:", shape, "Device:", device_name)
print("Time taken:", datetime.now() - startTime)
print("\n" * 5)

原文中导入了numpy模块,根本没用到,于是乎就去掉了,整体代码还是很流畅的,可能有些方法看不懂,但大体知道是什么意思,注意一下sys.argv[],这明显是在调用列表,在这里也就是我们手动设置的参数列表,给大家看一下一个博主写的简介:

也就是说这里的sys.argv[0]就是程序本身,如果输出一下就是该.py文件自身的路径,然后可以设置sys.argv[1]和sys.argv[2],分别是选择cpu/gpu和shape大小(sys.argv[2]*sys.argv[2]);

比如:tf.random_uniform((4, 4), minval=low,maxval=high,dtype=tf.float32)))返回4*4的矩阵,产生于low和high之间,产生的值是均匀分布的。

开始测试:

在cmd中运行程序,第一次编译运行程序花的时间会比较长,需要有额外的花销,所以为了公平,第一次测试不计入比较结果:

首先运行程序,注意两个外部参数 gpu  1500

结果为:

用时将近19秒,第一次会很长,接着再运行一遍:

这次就快了很多,然后对比一下cpu,同样的大小:

结果为:

惊喜出现了。。cpu比gpu还快~~~

为了防止个别情况,我们试一下大小为1000的:

结果为:

和上边的1500大小的差不多,稍微快了一丢丢,然后是gpu:

结果为:

还是老毛病,比相同大小的cpu慢,甚至比1500大小的gpu都慢。。。

猜想造成这一结果的原因:是不是规模太小,gpu不能尽情地施展拳脚,所谓杀鸡焉用牛刀,于是乎,加码,用10000的:

首先用cpu跑10000*10000大小的,结果为:

这次就比上边的慢多了,再看下gpu:

同样是10000*10000,看下结果:

呜呼,终于展现出自己的实力了,这也告诉我们,小规模网络的就不要惊扰gpu了,咱们只干大事儿~~

最后还有个问题,由于我这gpu内存只有2G,这样当规模过大时就会提时错误:ResourceExhaustedError

很明显,这活儿太大了,干不了,已把gpu资源消耗殆尽,这时候就只能退而求其次了,关于这块大家可以去查查,最好的方式就是搞个高逼格显卡,嗯。。。只要有钱~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: