摘要:

1.以动态图形式计算一个简单的加法

2.cpu和gpu计算力比较(包括如何指定cpu和gpu)

3.关于gpu版本的tensorflow安装问题,可以参考另一篇博文:https://www.cnblogs.com/liuhuacai/p/11684666.html

正文:

1.在tensorflow中计算3.+4.

  1. ##1.创建输入张量
  2. a = tf.constant(2.)
  3. b = tf.constant(4.)
  4. ##2.计算结果
  5. print('a+b=',a+b)

输出:a+b= tf.Tensor(7.0, shape=(), dtype=float32)

总结:20版本在加法实现过程中简单了不少,所见即所得。(1.x的实现过程相对复杂)据说动态的实现也是后端转化成静态图实现的。

2.cpu和gpu计算力比较

说明:通过计算不同大小的矩阵乘法,获得计算时间。

  1.指定cpu或gpu通过 with tf.device('/cpu:0'):或 with tf.device('/gpu:0'):指定,在需要加速的操作前添加即可(此处生成随机               数和矩阵乘法都加速)

  2.统计计算时间的函数timeit.timeit需要导入import timeit【timeit.timeit(需计时的函数或语句,计算次数)】

  3.计算量的大小与cpu和gpu计算时间的关系,计算量通过改变矩阵大小实现

  1. import tensorflow as tf
  2. import timeit
  3. 以矩阵A[10,n]和矩阵B[n,10]的乘法运算(分别在cpugpu上运行)来测试,
  4. '''
  5. with tf.device('/cpu:0'): ##指定操作用cpu计算
  6. cpu_a = tf.random.normal([10,n]) ##生成符合高斯分布的随机数矩阵,通过改变n大小,增减计算量
  7. cpu_b = tf.random.normal([n,10])
  8. print(cpu_a.device,cpu_b.device)
  9. with tf.device('/gpu:0'):
  10. gpu_a = tf.random.normal([100n])
  11. gpu_b = tf.random.normal([n,10])
  12. print(gpu_a.device,gpu_b.device)
  13. def cpu_run():
  14. with tf.device('/cpu:0'): ##矩阵乘法,此操作采用cpu计算
  15. c = tf.matmul(cpu_a,cpu_b)
  16. return c
  17. def gpu_run():
  18. with tf.device('/gpu:0'): ##矩阵乘法,此操作采用gpu计算
  19. c = tf.matmul(gpu_a,gpu_b)
  20. return c
  21. ##第一次计算需要热身,避免将初始化时间计算在内
  22. cpu_time = timeit.timeit(cpu_run,number=10)
  23. gpu_time = timeit.timeit(gpu_run,number=10)
  24. print('warmup:',cpu_time,gpu_time)
  25. ##正式计算10次,取平均值
  26. cpu_time = timeit.timeit(cpu_run,number=10)
  27. gpu_time = timeit.timeit(gpu_run,number=10)
  28. print('run_time:',cpu_time,gpu_time)

  通过改变矩阵大小,增加矩阵乘法的计算量:计算结果如下

  结论:1.在计算量较小的情况下,cpu的计算速度比gpu计算速度快,但是都是微量级别的差异

     2.随着计算量的增加,cpu的计算时间逐步增加,而gpu的计算时间相对平缓,在计算量达到一定程度之后,gpu的优势就出来了。

  实现过程的完整代码:

  

  1. import tensorflow as tf
  2. import timeit
  3. import matplotlib.pyplot as plt
  4. '''
  5. 以矩阵A[10,n]和矩阵B[n,10]的乘法运算(分别在cpu和gpu上运行)来测试,
  6. '''
  7. def cpu_gpu_compare(n):
  8. with tf.device('/cpu:0'): ##指定操作用cpu计算
  9. cpu_a = tf.random.normal([10,n]) ##生成符合高斯分布的随机数矩阵,通过改变n大小,增减计算量
  10. cpu_b = tf.random.normal([n,10])
  11. print(cpu_a.device,cpu_b.device)
  12. with tf.device('/gpu:0'):
  13. gpu_a = tf.random.normal([10,n])
  14. gpu_b = tf.random.normal([n,10])
  15. print(gpu_a.device,gpu_b.device)
  16. def cpu_run():
  17. with tf.device('/cpu:0'): ##矩阵乘法,此操作采用cpu计算
  18. c = tf.matmul(cpu_a,cpu_b)
  19. return c
  20. def gpu_run():
  21. with tf.device('/gpu:0'): ##矩阵乘法,此操作采用gpu计算
  22. c = tf.matmul(gpu_a,gpu_b)
  23. return c
  24. ##第一次计算需要热身,避免将初始化时间计算在内
  25. cpu_time = timeit.timeit(cpu_run,number=10)
  26. gpu_time = timeit.timeit(gpu_run,number=10)
  27. print('warmup:',cpu_time,gpu_time)
  28. ##正式计算10次,取平均值
  29. cpu_time = timeit.timeit(cpu_run,number=10)
  30. gpu_time = timeit.timeit(gpu_run,number=10)
  31. print('run_time:',cpu_time,gpu_time)
  32. return cpu_time,gpu_time
  33. n_list1 = range(1,2000,5)
  34. n_list2 = range(2001,10000,100)
  35. n_list = list(n_list1)+list(n_list2)
  36. time_cpu =[]
  37. time_gpu =[]
  38. for n in n_list:
  39. t=cpu_gpu_compare(n)
  40. time_cpu.append(t[0])
  41. time_gpu.append(t[1])
  42. plt.plot(n_list,time_cpu,color = 'red',label='cpu')
  43. plt.plot(n_list,time_gpu,color='green',linewidth=1.0,linestyle='--',label='gpu')
  44. plt.ylabel('耗时',fontproperties = 'SimHei',fontsize = 20)
  45. plt.xlabel('计算量',fontproperties = 'SimHei',fontsize = 20)
  46. plt.title('cpu和gpu计算力比较',fontproperties = 'SimHei',fontsize = 30)
  47. plt.legend(loc='upper right')
  48. plt.show()

(一)tensorflow-gpu2.0学习笔记之开篇(cpu和gpu计算速度比较)的更多相关文章

  1. DirectX 总结和DirectX 9.0 学习笔记

    转自:http://www.cnblogs.com/graphics/archive/2009/11/25/1583682.html DirectX 总结 DDS DirectXDraw Surfac ...

  2. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...

  3. SQL反模式学习笔记1 开篇

    什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. ...

  4. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. vue2.0学习笔记之路由(二)路由嵌套

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. TensorFlow机器学习框架-学习笔记-001

    # TensorFlow机器学习框架-学习笔记-001 ### 测试TensorFlow环境是否安装完成-----------------------------```import tensorflo ...

  7. hdcms v5.7.0学习笔记

    hdcms v5.7.0学习笔记 https://note.youdao.com/ynoteshare1/index.html?id=c404d63ac910eb15a440452f73d6a6db& ...

  8. dhtmlxgrid v3.0学习笔记

    dhtmlxgrid v3.0学习笔记 分类: dhtmlx JavaScript2012-01-31 15:41 1744人阅读 评论(0) 收藏 举报 stylesheetdatecalendar ...

  9. OAuth 2.0学习笔记

    文章目录 OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,与"服务商提供商"进行互动. OAuth在"客户端&quo ...

随机推荐

  1. 使用docker布署wordpress

    环境准备 本博客使用docker环境搭建,从而做到布署简单 centos7环境(centos6跑docker要升级内核,也不建议这样做) 在centos7上安装好docker环境docker安装文档 ...

  2. 在Linux系统上安装Git

    Git是目前流行的非常好用的版本控制工具,这里介绍两种安装方式,1.yum安装,2.从github上下载最新的源码编译后安装 一.yum安装 1.在Linux上是有yum安装Git,非常简单,只需要一 ...

  3. servlet中的“/”代表当前项目,html中的“/”代表当前服务器

    servlet中重定向或请求转发的路径如果用“/”开头,代表当前项目下的路径,浏览器转发这条路径时会自动加上当前项目的路径前缀,如果这个路径不是以“/”开头,那么代表这个路径和当前所在servlet的 ...

  4. 安装pecl

    $ wget http://pear.php.net/go-pear.phar $ php go-pear.phar //php版本 < 7  $ yum install php-pear // ...

  5. Android 获取手机的厂商、型号、Android系统版本号等工具类(转载)

    Android 获取手机的厂商.型号.Android系统版本号等工具类 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串 ...

  6. C#中的@和$ 占位符

    c#中@的三种用法: 1.忽略转移字符 string str = "C:\\windows\\system32"; string str = @"C:\windows\s ...

  7. SAIF anno

    https://www.cnblogs.com/IClearner/p/6898463.html SAIF--RTL BACK分析法 RTL backward SAIF文件是通过对RTL代码进行仿真得 ...

  8. Jarvis OJ - 软件密码破解-1 -Writeup

    Jarvis OJ - 软件密码破解-1 -Writeup 转载请标明出处http://www.cnblogs.com/WangAoBo/p/7243801.html 记录这道题主要是想记录一下动态调 ...

  9. SQL基础语法—insert语句

    1 insert语句 insert语句用于插入数据到表中,其基本语法有以下三种: Syntax: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IG ...

  10. openshift3.10集群部署

    简介 openshift是基于k8s的开源容器云. 要求 系统环境:CentOS 7.5 搭建一个master节点,两个node节点 注意: openshift3 依赖docker的版本为1.13.1 ...