显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(5):TPU
TPU(Tensor Processing Unit)张量处理单元,为机器学习定制的芯片,经过专门深度机器学习方面的训练,它有更高效能(每瓦计算能力)。
谷歌,2015年6月,I/O开发者大会上推出的计算神经网络专用芯片,为优化自身的TensorFlow机器学习框架而打造,主要用于AlphaGo系统,谷歌地图、谷歌相册和谷歌翻译等应用中。进行搜索、图像、语音等模型和技术的并行处理。
7.5.1、TPU发展史
2016 年,AlphaGo以4:1总分打败围棋世界冠军李世石,随后独战群雄,在与排名世界第一围棋的冠军柯洁对战胜利后宣布“隐退江湖”,背后的芯片开启了芯片产业的新篇章。
地覆天翻的四年,AI芯片领域,尤其是云端AI芯片,市场规模一路扶摇直上,成为芯片巨头和新势力虎视眈眈之地。
赛迪2019年8月发布的《中国人工智能芯片产业发展白皮书》,2018年全球云端AI芯片市场规模为62.1亿美元,这一数值预计在2021年达到221.5亿美元,巨大的市场将如火山爆发般呈现在众人眼前,芯片制造的高光时刻到来了。
这片蓝海中,有一个角色起到了划时代的意义,它就是谷歌TPU(Tensor Processing Unit,张量处理单元)。
与李世石、柯洁,以及中日韩数十位围棋高手的围棋对战中脱颖而出后,谷歌TPU曾一路狂飙突进,独步天下,现在已演进到了第四代。它的出现,无疑打破了GPU、GPGPU曾一度称霸神经网络推理和训练市场的局面。在大数据、人工智能领域,谷歌的王者之风逐渐显现。
2019年5月,谷歌I/O开发者大会上,万众瞩目的第四代TPU意外缺席,取而代之的是以1000个TPUv3组成的TPUv3 Pod,以及边缘AI芯片Edge TPU。即便如此,它仍通过一定程度的对外开放,以及辅助谷歌内部服务器应用深刻地影响着云端AI芯片市场。那次大会,后知后觉的人们意识到,谷歌卖的是方案与思想,谷歌已经脱离了技术。
从市场角度看,未来云端AI芯片巨大的发展潜力和市场机遇为谷歌TPU提供了肥沃的土壤;另一方面,紧迫的算力瓶颈和摩尔定律放缓等问题也越来越难以忽视。谷歌属于未来科技公司,有无穷的可能。
7.5.1.1、始于算力瓶颈,首秀人类围棋界
区别于GPU、GPGPU,谷歌TPU是一种ASIC芯片方案。ASIC全称为Application-Specific Integrated Circuit(应用型专用集成电路),是专为某种特定应用需求而定制的芯片。但一般来说,ASIC芯片的开发不仅需要花费数年的时间,且研发成本也极高,一直是个别公司的阵地。
对于数据中心机房中AI工作负载的高算力需求,许多厂商更愿意继续采用现有的GPU集群或GPU+CPU异构计算解决方案,也甚少在ASIC领域冒险。但谷歌说不了。
谷歌2006年起产生了要为神经网络研发一款专用芯片的想法,而这一需求在2013年也开始变得愈发急迫。谷歌这家超前的公司,在未雨绸缪。当时,谷歌提供的谷歌图像搜索、谷歌照片、谷歌云视觉API、谷歌翻译等多种产品和服务,都需要用到深度神经网络。
庞大的应用规模下,谷歌意识到,夜以继日运行的数百万台服务器,它们内部快速增长的计算需求,使得数据中心的数量需要再翻一倍才能得到满足。然而,从成本还是从算力上看,内部中心已不能依靠GPU和CPU来维持。制造芯片的冲动变成了现实。
种种因素的推动下,不差钱的谷歌正式开始了TPU的研发之旅。经过研发人员15个月的设计、验证和构建,TPU 2014年研发完成,率先部署在谷歌内部的数据中心。谷歌强大的财力保证了研发的成功,成功很大程度源于不差钱。
内部秘密运行了一年外,谷歌TPU还在围棋界“大杀四方”,斩获“人机大战”的神话。在今天,谷歌还有多少技术,还装在黑匣子中呢?
使用TPU之前,AlphaGo内置1202个CPU和176个GPU击败欧洲冠军范惠。2015年与李世石对战时,AlphaGo才开始使用TPU,而当时部署的TPU数量,只有48个。TPU大开杀戒,进入无人之境。
这场对战胜利的“秘密武器”也在一年后的谷歌I/O开发者大会上被揭开神秘面纱,TPU正式面世。在技术上,谷歌隐藏的太深。
7.5.1.2、谷歌TPU的迭代、云端构建、终端应用
面世后短短两年,谷歌TPU已经迭代到了第四代,性能亦不断跃升。随着研发的投入和广泛应用,谷歌也逐步推出可扩展云端超级计算机TPU Pod,以及Edge TPU。谷歌最终目的是超算领域与人工智能。今天,谷歌与英伟达成为超算领域的头狼。
名称 |
发布日期 |
性能 |
应用 |
TPU V1 |
2016年 |
28nm 功耗40w,主频700MHZ |
深度学习推理 |
TPU V2 |
2017年 |
180TFLOPs浮点运算、64GB高带宽内存(HBM) |
机器学习训练和推理,开始在Google Compute Engine上运行,以用于TensorFlow应用程序 |
TPU V3 |
2018年 |
420TFLOPs浮点运算,128GB(HBM) |
扩展至更广泛的深度学习训练和推理领域,已进入Alpha测试阶段。 |
EDGE TPU |
2018年 |
内建EDGE TPU、网络功能和加密芯片,具有高吞吐量。 |
企业中的机器学习任务而设计,主要执行AI推理。 |
TPU V2 POD |
2019年 |
每秒11.5千万亿次浮点运算,4TB (HBM)、环面网状网络 |
深度学习领域 |
TPU V3 POD |
2019年 |
每秒100千万亿次浮点运算、32TB(HBM),环面网状网络。 |
深度学习领域 |
7.5.1.2.1、2016年:第一代TPU
为神经网络而研发,但谷歌最初的第一代TPU仅用于深度学习推理。从性能上看,第一代谷歌TPU采用了28nm工艺制造,功耗约为40W,主频700MHz。
研发之初,谷歌需要尽快将TPU部署到内部现有的服务器中,因此研发人员选择将处理器打包成外部加速卡,以插入SATA硬盘插槽后进行嵌入式安装。毫无疑问的是,这种设计是成功的,并很快投入了应用。
TPU通过PCIe Gen3 x16总线连接到主机,实现了12.5GB/s的有效带宽。除了在AlphaGo上应用之外,谷歌第一代TPU还用于谷歌的搜索、翻译和相册等应用的机器学习模型中。
▲Google第一代TPU(左),在谷歌数据中心中部署的TPU(右)
7.5.1.2.2、2017年:第二代TPU,引入Google Cloud
一年更新、研发和迭代,谷歌在2017年5月发布了第二代TPU,并从这一代起能够用于机器学习模型的训练和推理。
与第一代相比,第二代TPU实现180TFLOPs浮点运算的计算能力,同时其高带宽内存(HBM)也提升到了64GB,解决了第一代TPU内存受带宽限制的问题。电子硬件的发展堪称神速。
运行AI工作负载上,谷歌第二代TPU与同期的CPU、GPU相比,性能比传统的GPU高了15倍,比CPU高了30倍,每瓦性能亦提高了30至80倍。硬件有强大的提升空间,保障谷歌思想的实现。
从第二代TPU起,谷歌第二代TPU引入Google Cloud,应用在谷歌计算引擎(Google Compute Engine ,简称GCE)中,也称为Cloud TPU,进一步优化谷歌搜索引擎、Gmail、YouTube和其他服务的运行。谷歌通过K8S进行云端软件技术处理,TPU提供硬件保障。
同时,Cloud TPU通过TensorFlow进行编程,并与CPU、GPU及基础设施和服务结合,以根据用户应用需求构建和优化机器学习系统。谷歌在云上的技术铺垫深厚,谷歌未来的主战场是云端。
谷歌第二代TPU的发布,新一轮的人机大战也再次揭开序幕。而这一代AlphaGo的芯片配置,仅用了4块TPUv2,击败当时的世界围棋冠军柯洁。
谷歌除了推出第二代TPU外,还宣布计划研发可扩展云端超级计算机TPU Pods,通过新的计算机网络将64块Cloud TPU相结合,能够提供约11500万亿次浮点运算能力。强大的运算能力为谷歌平台提供了技术保障。
7.5.1.2.3、2018年:第三代TPU,边缘AI芯片Edge TPU
2018年5月,谷歌不出意外地发布了第三代TPU,其各方面性能不仅实现了升级,也进一步扩展到更广泛的深度学习训练和推理领域。我们怀疑的是,第三代TPU应该在2017年研发完成。
谷歌表示,第三代TPU的性能均是第二代TPU的两倍,可实现420TFLOPs浮点运算,以及128GB的高带宽内存。同时,它还可部署在基于云计算的超级计算机TPU Pod中,其中的芯片数量是上一代的四倍。这些数据表明,微电子技术的发展方兴未艾。
与第二代TPU Pod的部署相比,第三代每个Pod的性能提高了8倍,且每个Pod最多拥有1024个芯片。这些TPU的集群,形成了强大的狼群并行处理能力。
谷歌2018年发布了用于边缘推理的微型AI加速芯片——Edge TPU,专为企业机器学习任务而设计,用于IoT设备中。市场是细分的,技术必须根据市场变动。
Edge TPU同样是一款ASIC芯片。从应用上看,它与Cloud TPU相互补,用户能够先使用Cloud TPU对机器学习模型进行加速训练,再将训练好的模型放入相关设备中,进一步用Edge TPU进行机器学习推理。TPU的芯片向纵深发展。
据了解,Edge TPU能够让IoT设备以每秒30帧以上的速度,在高分辨率视频上运行多个先进的计算机视觉模型。数据处理重要的一部分是计算机视觉,谷歌TPU这种技术,很可能在未来的某一天,这些硬件产品出现在我们身边。
谷歌还为Edge TPU推出了一套名为Cloud IoT Edge的软件平台,该平台拥有Edge IoT Core和Edge ML两大主要组件,能够帮助用户将在Google Cloud上构建和训练的机器学习模型,通过Edge TPU扩展到边缘设备中运行。技术的开源是未来的发展趋势,软件平台的出现,为谷歌技术的推广推波助澜。
7.5.1.2.4、2019年:第二/三代TPU Pod
这一年谷歌并未发布第四代TPU,却上演了另一个重头戏——发布第二代和第三代TPU Pod,可以配置超过1000颗TPU。强大的集群带来了强大的性能,在硬件技术突破的同时,谷歌在软件集群技术上也在进行着发展。
作为TPU的“升级版”,谷歌第二代TPU Pod能够容纳512个内核,实现每秒11.5千万亿次浮点运算;第三代TPU Pod速度则更快,可实现每秒超过100千万亿次浮点运算。这次升级之后,我们期待着谷歌新一代TPU的发布,相信带来更强大的性能。
据悉,在相同配置(265块TPU)下训练ResNet-50模型时,第二代TPU Pod需要11.3分钟,而第三代TPU Pod只需7.1分钟。这些数据的背后,是TPU集群快速增长的结果。让我们很难想象的是,谷歌TPU在集群技术路上还能走多远。
7.5.1.3、架构创新,掀起云端造芯大浪潮
谷歌TPU系列芯片的出现,不仅突破了最初深度学习硬件执行的瓶颈,还在一定程度上撼动了英伟达、英特尔等传统GPU芯片巨头的地位。英伟达、AMD、INTEL在PC市场上这些传统霸主地位受到了挑战。
2015年以来,与AI芯片相关的研发逐渐成为整个芯片行业的热点,在云端的深度学习训练和推理领域,已然不是GPU,尤其是英伟达独霸一方。
谷歌TPU的诞生,越来越多的公司前赴后继地尝试设计GPU之外的专用AI芯片,进一步实现更高效的性能。这是一条成功的路线,科技巨头都在进行着尝试。
技术层面看,谷歌TPU的出现在架构创新上也为行业带来了以下思考。这种影响,在未来几十年将会深刻的感受到。
7.5.1.3.1、大规模片上内存
谷歌看来,片外内存低是GPU能效比低的主要原因。一些GPU由于片上内存较少,因此在运行过程中需要不断地去访问片外动态随机存取存储器(DRAM),从而在一定程度上浪费了不必要的能耗。在从前,关于CPU与GPU上的内存是争论的喋喋不休的话题,在功耗等各方面都有考量。
因此,谷歌在最初设计TPU时,总共设计了占总芯片面积37%的内存,其中包括24MB的局部内存、6MB的累加器内存,以及用于与主控处理器对接的内存。谷歌反其道而行之,用功耗换取效率。
7.5.1.3.2、用量化技术进行整数运算
一般来说,神经网络的预测并不需要32位或16位的浮点计算精度,因此它可以通过8位低精度运算的方法,在保证适当准确度的同时,对神经网络进行预测。这种精细化的设计,适应了神经网络技术的需求。
通过量化技术,神经网络预测的成本大大减少,相应减少了内存的使用。例如,当研发人员将量化应用于流行的图像识别模型Inception时,芯片内存从91MB压缩到了23MB,约为其原始大小的四分之一。
人工智能时代每一种算法数据都有自己的特点,神经网络作为人工智能的主流算法,有自己的计算特点,谷歌深谙此道,并对硬件改进,取得了GPU的成功。
7.5.1.3.3、可编程性
虽然谷歌TPU是ASIC芯片,但却与FPGA又有些类似,它具备一定的可编程性能力。谷歌看来,TPU的研发并非只用于运行一种神经网络模型。因此,谷歌选择采用了复杂指令集(CISC)作为TPU指令集的基础,能够较为侧重地运行更复杂的任务。软硬件技术的结合是TPU成功的关键因素。
谷歌还定义了十二个专门为神经网络推理而设计的高级指令,能够在输入数据和权重之间执行矩阵乘法,并应用激活函数。今天,国内的学习是从指令开始起步。
为了能进一步对TPU进行编程,谷歌还创建了一个编译器和软件堆栈,能够调用TensorFlow图中的API,转化成TPU指令。TPU与TensorFlow的融合,让TPU开始接底气,并为TensorFlow做大规模的神经网络数据训练打下基础。
7.5.1.3.4、并行计算
谷歌为TPU设计了矩阵乘法单元(MXU)的并行计算。并行计算是数据发展的要求,今天并行计算是人工智能面临的第一个问题。
它能够在一个时钟周期内处理数十万次矩阵运算,相当于一次打印一个字符、一次打印一行字或一次打印一页文档。这种高效的形式,是成功的关键因素所在。
7.5.1.3.5、脉动阵列设计
MXU具有与传统CPU和GPU截然不同的架构,又称为脉动阵列(systolic array)。不同硬件设计带来的效果是惊人的。
脉动阵列使得在每次运算过程中,谷歌TPU能够将多个运算逻辑单元(ALU)串联在一起,并复用从一个寄存器中都取得结果。脉动阵列设计形式,大大提高了效率。
这种设计,不仅能够将数据复用实现最大化,减少芯片在运算过程中的内存访问次数,同时也降低了内存带宽压力,进而降低内存访问的能耗。
▲TPU的矩阵乘法器单元(MXU)
谷歌TPU的一鸣惊人,不仅为AI芯片领域带来了架构创新,同时亚马逊、微软等一众科技巨头,以及寒武纪、天数智芯等新势力亦开始纷纷入局,云端AI芯片市场开始风起云涌,掀起行业云端造芯大浪潮。
这是一个芯片制造的年代,如果没有技术的积淀与雄厚资本的支持,芯片制造是水中花、镜中月,革命性芯片的研发投入在百亿以上。国内的弘芯、龙芯值得我们深思。
7.5.2、TPU与机器学习
TPU的出现,加速了第二代人工智能系统TensorFlow的运行,效率也大大超过GPU,Google的深层神经网络由TensorFlow引擎驱动。TPU是专为机器学习量身定做,执行每个操作所需的晶体管数量更少,自然效率更高。补充说明的是,能耗也更高。
TPU与同期的CPU和GPU相比,可以提供15-30倍的性能提升,以及30-80倍的效率(性能/瓦特)提升。在人工智能发展过程中,效率的提升可以对算法进行有效的测试。由于效率问题,很多算法暂时无法测试。
TPU每瓦能为机器学习提供比所有商用GPU和FPGA更高的量级指令,高性能计算得以在民间应用。TPU为机器学习应用特别开发,使芯片在计算精度降低的情况下更耐用。
在人工智能年代,未来,指令级编程将称为常态。对于国内大多数技术人员而言,对指令的熟悉程度影响着个人技术的发展。
每一个操作只需要更少的晶体管,用更多精密且大功率的机器学习模型,并快速应用这些模型,因此用户便能得到更正确的结果。
7.5.3、对比说明
CPU和GPU都是较为通用的芯片,但是有句老话是这样讲的:万能工具的效率永远比不上专用工具。而TPU就是一个专业工具。
随着社会的计算需求越来越专业化,芯片的专业化需求在增强。便产生了ASIC(专用集成电路)的概念。这个概念其实很早就出现了,但是ASIC不是任何一家公司都能尝试的,其复杂程度、集成程度堪称技术的堡垒。
ASIC是指依产品需求不同而定制化的特殊规格集成电路,由特定使用者要求和特定电子系统的需要而设计、制造。这些是定制化的芯片开发,定制化的芯片开发一直广泛存在。在这个领域,谷歌的TPU技术是成功的尝试。
因为ASIC很“专一”,只做一件事,它就比CPU、GPU等能做很多件事的芯片在某件事上做的更好,实现更高的处理速度和更低的能耗。相应的,ASIC的生产成本也非常高。
TPU就是谷歌专门为加速深层神经网络运算能力而研发的一款芯片,其实也是一款ASIC。
图:谷歌第二代TPU
原来很多的机器学习以及图像处理算法大部分都跑在GPU与FPGA(半定制化芯片)上面,但这两种芯片都还是一种通用性芯片,在效能与功耗上不能更紧密的适配机器学习算法。硬件改变的初衷便形成了
Google一直坚信伟大的软件将在伟大的硬件的帮助下更加大放异彩,所以Google便想,可不可以做出一款专用机机器学习算法的专用芯片,TPU便诞生了。
据称,TPU与同期的CPU和GPU相比,可提供15-30倍的性能提升,以及30-80倍的效率(性能/瓦特)提升。第一代TPU只能做推理,依靠Google云实时收集数据并产生结果,训练过程还需要额外的资源;第二代TPU既可以用于训练神经网络,又可以用于推理。
图:TPU 各模块的框图
如上图所示,TPU在芯片上使用了高达24MB的局部内存,6MB的累加器内存以及用于与主控处理器进行对接的内存,总共占芯片面积的37%(图中蓝色部分)。这在从前是不可想象的。
图:TPU芯片布局图
这表示谷歌充分意识到了片外内存访问是GPU能效比低的问题所在,不惜成本的在芯片上放了巨大的内存。相比之下,同时期英伟达的K80只有8MB片上内存,需要不断地去访问片外DRAM。这种设计,和传统硬件设计有巨大的区别,也许只有谷歌财大气粗的公司才有如此的魄力吧。
7.5.4、TPU性能与应用
TPU的高性能还来源于对于低运算精度的容忍。研究结果表明,低精度运算带来的算法准确率损失很小,但是在硬件实现上却可以带来巨大的便利,包括功耗更低、速度更快、占芯片面积更小的运算单元、更小的内存带宽需求等。TPU采用了8比特的低精度运算。
不同的技术有不同的应用,不同的应用有不同的算法,不同的算法有不同的精度,TPU的神经网络不需要传统的精度,这和从前的很多设计思路是有区别的。
目前为止,TPU已经干了很多惊天动地的事情,并且为我们服务了很多年。并且在更多领域应用。
机器学习人工智能系统RankBrain,帮助Google用户处理搜索结果;街景Street View,提高地图与导航的准确性;下围棋的计算机程序AlphaGo。这些大事记背后,代表着人工智能时代到来了。
7.5.5、示例代码
7.5.5.1、变分程序
7.5.5.2、并行VAE程序
7.5.6、总结
从CPU到GPU,再到如今ASIC和FPGA相继入局,云端AI芯片市场百花齐放,与谷歌TPU的推动息息相关。
今天,云端AI芯片市场杀得热火朝天,前有赛灵思和寒武纪等新老势力不断崛起,进一步蚕食非GPU领域的市场,后有科技巨头四处找寻机会“大鱼吃小鱼”,合并有潜力的新玩家,整片市场呈一派割据混战、百家争鸣之势。
不容忽视的是,随着云端AI芯片不断发展,大数据、云平台持续爆发,以及摩尔定律逐渐放缓,算力也再次来到新的瓶颈。
玩家是通过先进制程再次撕开云端AI芯片的新技术领域,还是依靠研发创新架构来实现算力的飞跃,不管走向哪条路都需直面种种挑战。
在AI芯片市场开辟之初,谷歌凭借TPU逐渐打开云端AI芯片市场新的竞争格局,但当云端AI芯片开始进入新时代,谷歌在云平台大数据的技术优势,相信TPU能再次延续过往辉煌,为市场开辟新的方向和路径。
TPU由谷歌独家提出,独家研发,独家应用,这些能给我们多少启示呢?谷歌从一个搜索科技公司,过渡到大数据、云计算公司,进而走在人工智能、硬件科技的大道上。
显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(5):TPU相关推荐
- 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(1):显示标准
7.显示标准与视频处理单元 消费级视频智能处理大体有10年左右,有了巨大的发展,展望未来,对应于大厂而言,竞争是标准的竞争.包含显示标准与处理单元,竞争推动了科技的进步,市场的繁荣. 新的显示硬件也不 ...
- 音视频开发系列(15):视频与音频同步
上次分享了将视频与音频同时推流到服务上的代码封装,然后上节分享在测试后会发现音视频不同步,这边说一下原因: 从帧率及采样率,即可知道视频/音频播放速度.声卡和显卡均是以一帧数据来作为播放单位,如果单纯 ...
- 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(2):VPU
VPU(Video Processing Unit,视频处理单元)是一种全新的视频处理平台核心引擎,具有硬解码功能以及减少CPU负荷的能力.VPU可以减少服务器负载和网络带宽的消耗. VPU由ATI提 ...
- 显示硬件发展与视频开发系列(6)----显示标注与视频处理单元(3):APU
APU是"Accelerated Processing Units"的简称,中文名字叫加速处理器,是AMD融聚未来理念的产品,它第一次将处理器和独显核心做在一个晶片上. CPU与A ...
- 【音视频开发系列】一学就会,快速掌握音视频开发的第一个开源项目FFmpeg
快速掌握音视频开发的第一个开源项目:FFmpeg 1.为什么要学FFmpeg 2.FFmpeg面向对象思想分析 3.FFmpeg各种组件剖析 视频讲解如下,点击观看: [音视频开发系列]一学就会,快速 ...
- 【音视频开发系列】盘点音视频直播RTSP/RTMP推流一定会遇到的各种坑,教你快速解决
聊聊RTSP/RTMP推流那些坑 1.推流架构分析 2.推流缓存队列的设计 3.FFmpeg函数阻塞问题分析 [音视频开发系列]盘点音视频直播一定会遇到的各种坑,教你快速解决 更多精彩内容包括:C/C ...
- 【音视频开发系列】srs-webrtc-janus开源流媒体服务器分析
全球最牛开源流媒体服务器源码分析 1.如何学习流媒体服务器 2.全球最牛流媒体服务器架构分析 3.我们能从全球最牛流媒体服务器得到什么 [音视频开发系列]srs-webrtc-janus流媒体服务器分 ...
- 音视频开发之旅(32)-音视频学习资料
目录 为什么要学习音视频? 如何学习系统性音视频? 音视频相关的资料 学习实践的输出文章分类聚合 收获 最近有朋友问想学习音视频,应该怎么学,有什么资料吗? 这个问题也困扰我很久,几年前就想开始音视频 ...
- Android音视频开发基础(七):视频采集-系统API基础
前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了<Android 音视频从入门到提高 - 任务列表>.本文是Android音视 ...
最新文章
- 行列式介绍及Eigen/OpenCV/C++的三种实现
- 《极乐空间》特效制作与渲染
- python 函数的调用的时候参数的传递_python定义函数时的参数调用函数时的传参...
- 16位灰度数据成像_16位 250M双通道PCI数据采集卡 FCFR-PCI9808
- 大数据互联网架构阶段 Redis(二)
- 人生的12个经典领悟
- 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案...
- java access jdbc_Java连接Access数据库
- 把偷快递的贼炸到怀疑人生!不愧是NASA工程师,奇思妙想
- Linux网络协议栈:网卡收包分析
- 电脑处理器排行榜2021版
- 5.6.1 Boolean类型
- 与计算机博弈相关的学术论文,爱恩斯坦棋计算机博弈系统的研究与实现计算机应用技术专业论文.docx...
- Android笔记:使用Glide加载图片刷新时会闪烁
- CentOS7下安装配置zookeeper集群及设置开机自启
- linux 强制重启 sysrq,用Magic SysRq键实现Linux安全重启
- 数据库修改表名,字段名 字段类型
- ue4 后期处理景深_【UE4设计师】2-3后期处理效果——使用景深设置电影拍摄
- 理解卷积的空间不变性和通道特异性
- 0.96寸4针OLED的使用与驱动模块