pytorch深度学习实战lesson29

news2025/1/20 3:04:07

第二十九课 深度学习硬件

       这节课讲一下深度学习的硬件。具体来讲一下所谓的 CPU 和 GPU有什么区别,为什么 GPU 会快?

目录

CPU

GPU


       首先大家如果学习深度学习的话基本上都有一个GPU的电脑,如果你自己装一台机器的话,很有可能是一个这样子的配置,用英特尔i7 的芯片,然后内存用的 DDR 4的内存,大概有32 GB。然后再在机器上插一块显卡——泰坦X。CPU 和GPU 在进步的过程中,是有规律可言的。

CPU

       i7-6700k 是当年很经典的,性价比很高的一个 CPU。首先它有四个核,有一个GPU

还有一些连接内存的通道,中间是一个第三级显存就是 share 的 llc。

       那么怎么样提升在 CPU 上的利用率呢?

       首先假设如果要计算 A 向量加 B向量,A 向量和B向量放在主内存里面了,所以计算之前需要之前CPU要干很多事情,它需要把数据从主内存搬到L3开始,然后再搬到L2,然后再搬到 L 1的cache 最后才到寄存器。所以可以看到一个数据真的要做计算,其实要走一条很长的路。然后这些路其实性能是不一样的,L 1比较快,它的访问延迟比较高了,是0.5纳秒。然后 L 2的 cache 又比 L 1要大了一点点,访问一次 L 2的延时是L1的14倍。访问一次L3相当于访问200次 L1。所以可以发现虽然CPU算得比较快,频率比较高,但实际上实测下来远远的没有达到 CPU 理论的算值。那是为什么?通常的时候,特别是对于数值运算来讲,就是内存访问太慢了。所以一般来说,所谓的加速的重点就是提升空间和内存的稳定性,使得缓存的效率更高。

       具体来说有两种办法,一个是提升时间上的本地性,一个是提升空间上的本地性。时间上的本地性就是说如果数据不用了的话,CPU会把数据一层一层退回去;如果下一次数据还被用到,那么就不需要把主内存一直搬过来了,就不需要去下面再去取数据了。

       第二个是说提升数据的空间性。就是说一个数据如果在内存里面是存在一起的话,那么CPU 读内存的时候其实是一块一块读。所以假设在下一个计算的时候,用的数据跟前一个是相邻的话,那么CPU会做很多优化,使得你在做计算准备的时候,他一次性的把数据搬过来。

       访行访问和按列访问是非常的速度是非常不一样,按行访问会快一些。特别是当你的矩阵比较大的情况下。

       提升CPU 利用率的第二个办法是并行,因为摩尔定理,但不管是 CPU 的频率还是 GPU的频率,在过去一些年它涨的都是比较慢的。但是我们的还是按照摩尔定律来,是因为加了很多核。

       超线程对于计算密集性的应用没有太多用,是因为这两个超线程共享的是一个寄存器,因为寄存器并没有被 double。那就是说做运算的时候,你要把数据放在寄存器里对吧?但是如果一个核把寄存器全部用满了的话,另外那个超线程就得等着。

       左边会比右边会慢很多,第一个原因是说左边调用了 N 次函数,就假设你 N 是那个 Aa的长度的话,就每次调用它是有开销的。第二个是说这一个运算非常容易做并行。

GPU

       上图所示GPU有六个大核,大核的数量取决于显卡的型号。然后大核里面有很多小核,每个小核就是每一个绿点,每一个绿点其实是可以认为是一个计算单元,就是说可以在一个绿点上开一个线程。和CPU不一样CPU 是说一个核里面可以算一个指令。但在 GPU 来讲它是一个绿点能算一个指令。

下图是CPU和GPU的区别:

不要频繁的在CPU和GPU之间搬数据,一是因为带宽受限,第二个是得同步你每次CPU的开销。第三尽量的少传一点数据获取。

无论是CPU还是GPU,AMD和ARM的都是不错的。

总结一下就是说 CPU 是干嘛? CPU 是用来处理通用计算,所有计算都会在 CPU 做性能的优化,主要是说数据读写的,就时间,空间稳定性,要合理的利用 CPU 的多核。 GPU 的话那就是它通过更小的更多的和更好的内存带宽,使得它更适合做能够大规模并行的计算任务。所以导致说现在用 GPU 是一个主流的硬件来做深度学习的开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaScript高级】04-JavaScript函数增强

JavaScript函数增强函数属性和arguments函数对象的属性函数中的argumentsarguments转Array函数的剩余参数纯函数的理解和应用JavaScript纯函数定义纯函数案例柯里化的理解和应用柯里化定义组合函数理解和应用函数属性和arguments 函数对象的属性 在JavaScript中函数也是一个对…

维格云自定义按钮入门教程

目录 维格云自定义按钮功能简介 维格云自定义按钮适用场景 维格云自定义按钮设置步骤 开启插件 在拓展设置中创建按钮 在数据表中添加自定义按钮 效果展示 维格云自定义按钮注意事项 维格云自定义按钮功能简介 给不同情境下的数据详情页面,添加按钮,点击后可往另一个…

【博弈论】极小极大搜索(Minimax Algorithm)与α-β剪枝(Alpha-Beta Pruning)

文章目录一、极大极小搜索(Minimax Algorithm)二、α-β剪枝(Alpha-Beta Pruning)三、解题技巧一、极大极小搜索(Minimax Algorithm) 在零和博弈(有完整信息的,确定的、轮流行动的&…

steam搬砖项目月入过万靠谱吗

大家好,我是阿阳 什么是国外steam游戏装备汇率差项目 一、项目介绍 其实,Steam就是一个美国的游戏平台,搬砖主要是搬的一款火遍全球的游戏CSGO的装备和饰品。CS听说过吧,这款游戏就是CS的一个系列。(通俗易懂的理解就…

【C++数据结构】性能测量

性能测量 4.1 引言 容易计算内存的需求大小,只要知道编译后的代码和数据空间的大小就可以了; 数据空间的大小取决于用户所要解决的问题实例的大小。 要确定程序运行时间,需要通过实验来测量。 程序性能不仅依赖操作类型和数量&#xff0c…

Excel逆向查询的多种方法,赶快学起来

关于匹配查询,我们平时用的做多的就是VLOOKUP函数了,但VLOOKUP函数只能正向查找,不能逆向查询。 像是下面这种情况就不可以: (现在我们想用编码去匹配书名) 如果在不改变原表格结构的基础上查找出书目编码…

当MySQL和java通过媒婆navicate谈上了恋爱 ------ MySQL的安装和Java的连接

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 **收录于专栏 数据库 ⭐当MySQL和java通过媒婆navicate谈上了恋爱⭐ 文章目录⭐当MySQL和java通过媒婆navicate谈上了恋爱…

vue组件库发布到npm

修改项目的信息 在package.json文件中: 修改Readme文件的信息 注册npm 账号 指路官网 vscode终端登录npm 执行 npm login 输入用户名,密码,邮箱,邮箱验证码 如下图 执行 npm publish 如下图 出现的问题 npm ERR! code E403 …

CSAPP Lab6:Malloc

文章目录一、实验简介二、隐式链表实现基本宏块的相关函数mm_initmm_mallocmm_freemm_reallocextend_heapblk_mergeblk_findblk_split使用下次匹配三、显式链表实现四、分离适配五、完整代码隐式链表显式链表课本实现一、实验简介 实现一个动态内存分配器。 tar xvf mallocla…

Linux 应急响应命令总结,收藏版

系统排查 系统基本信息 CPU 信息 CPU 信息:lscpu 操作系统信息 操作系统信息:uname -a 操作系统信息:cat /proc/version 模块信息 模块信息:lsmod 账户信息 系统所有账户 系统所有账户:cat /etc/passwd 超级权限账户 超…

3D-SKIPDENSESEG医学图像分割

蓝色三角、黄色三角、红色三角相对应。 得到第三个feature map,反卷积会恢复到原来的尺寸 Dense block,通道增加了 Transition,池化 用正则表达式把里面的h5文件匹配一下吧 os.path.join()把两个部分的路径拼一下 root_path —data_train *.…

[kubernetes]-k8s开启swap

导语:记录k8s开启swap后先后做的调整 测试版本 k8s1.20版本 使用参数--fail-swap-onfalse Environment"KUBELET_EXTRA_ARGS--fail-swap-onfalse"使用测试 可以开启swap不报错 但是pod使用swap不太理想。且无法实现在使用swap的时候限制pod的内存。会造…

【Java面试】List接口

文章目录Iterator 和 ListIterator 有什么区别?遍历一个 List 有哪些不同的方式?每种方法的实现原理是什么?Java中List 遍历的最佳实践是什么?说一下 ArrayList 的优缺点如何实现数组和 List 之间的转换?ArrayList 和 …

M4 tm4c1294单片机软件调式总结

1,框架图: 调式基本方法: (1)加串口打印初始化,单步跟踪查看,类似gdb的单步; (2)打印命令行,重点参数添加命令行打印; (3&#xff…

Redis 的相关基础知识

【一】 Redis 中默认的端口号为什么是6379 图中的人名为 Alessia Merz ,其中的 Merz 对应的九键输入法按出来的就是6379 【二】 Redis 默认的数据库 Redis 中默认使用的是16个数据库,类似数组下标从0开始,初始默认使用0号数据库 【三】 Redis…

vscode搭建Verilog HDL开发环境

工欲善其事,必先利其器。应该没有多少人会使用Quartus和vivado这些软件自带的编辑器吧,原因在于这些编辑器效率很低,Verilog HDL代码格式比较固定,通常可以利用代码片段补全加快书写。基本上代码写完之后才会打开Quartus或者vivad…

一文带你了解Spring中的事务管理

文章目录前言一、事务的基础概念二、spring中事务的使用声明式事务编程式事务如何选择事务方式三、spring中事务管理实现原理前言 本文将涉及以下知识点: 事务的基础概念spring当中事务的使用spring当中事务管理的实现原理 一、事务的基础概念 事务(T…

python画图

python画图1.使用matplotlib画图2.使用pyecharts画图2.x pyecharts的三种图片渲染工具2.x.1 snapshot_selenium2.x.2 snapshot_phantomjs2.x.3 snapshot_pyppeteer1.使用matplotlib画图 2.使用pyecharts画图 pyecharts是一款将python与echarts结合的强大的数据可视化工具&…

阿里云服务器安装tomcat

一、前置条件 安装tomcat需要先安装jdk,所以没有安装jdk同学,详见参考文章或者此文章 二、Linux上安装tomcat 1. 下载Apache tomcat tomcat官网下载地址 在左边,可以选择下载各种版本的tomcat。根据服务器操作系统选择下载。Linux操作系统…

第七章TCP/IP——ARP网络攻击与欺骗

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…