换个角度看PCIE发展史

news2024/9/26 5:21:41

讲点废话

按照我的习惯,在开始做一件事情之前,我倾向于介绍我做这个事情的思路和原因。因为往往误解就是从我们思考问题的方式开始的,我觉得交代清楚了我做事情的背景,那么你就可以顺着我的思路来思考,这个过程中也很容易产生你自己的理解和认知,而对于做技术而言,有自己的认知很关键。有自己的认知就有自己的判断,有自己的判断你就知道对与错,问题在哪儿,怎么解决,能不能更好的解决,你就会去进行更多的探索,形成良性思考循环。

布拉布拉一大堆,我要开始了!欢迎大家吐槽。

第一个背景,写这篇文章时我是一个6年芯片验证外加3年芯片全流程的芯片从业者,资历属实比较浅,我尽量能把问题的前世今生讲清楚。讲这个的原因是我可能更多会基于这个行业背景去思考和解释问题,但一个问题从不同侧视角理解起来还是有差异的。大家注意自己的视角也建议多跟不同领域的技术大拿多聊天,看看不同工作岗位是怎么理解的,这没有坏处。

第二个背景,网上其实已经能找到非常多的关于PCIE发展史的介绍。其实讲的都很好,但是忽略了技术的更新都是随着时代的变化而变化的,具体点讲就是说,在历史某个时间节点上,必须得作出技术上的更新才能满足需求了。的再具体点,PCIE有各种各样的产品形态,我们以最常见PC加速卡的形态来举例,PCIE加速卡插在PC主板插槽上,访问加速卡的指令是从主机CPU发出的,这里面涉及到的硬件技术环节包括CPU技术、PCB板卡技术、插槽技术、总线技术(PCIE)、设备技术(显卡就指的是图形和显示技术;硬盘就指的是非易失存储技术;如今的AI算力卡需求;等等)。这些技术是需要相辅相成的,规格太高没有性价比。这里还隐藏一个意思就是说独立的研究PCIE其实是不合理的,PCIe一定是一个系统问题,这里提前给大家注入这样一个思想。

第三个背景,我是按照PCIE协议的脉络来整理文章的,毕竟我还是认为PCIE协议是最好的学习PCIE的资料。我的大多数资料来源都是从PCIE5.0协议来的,这我得告诉各位。PCIE5.0协议比较好获取,我这里也有自己做的中文翻译,各位需要的话我可以提供。

第四个背景,PCIE的技术体系是比较庞大的,我还是想尽量提供有价值的信息出来,不过视角有限,建议还是要大量查阅相关文献,这样才能足够全面的理解这门技术。我是这么理解的:不要去相信一篇文章带你学会PCIe这种鬼话,技术是要沉下来慢慢打磨的。

言归正传,PCIE5.0在开篇之前就讲到PCIE技术的发展史。这里面描述了整个PCIE协议的发展历程与修订历程,信息量也比较大,如果全部放在这的话反而会造成理解上的负担,我贴了一部分内容在这,表示有这个事。每一代的技术修正都能在协议里找到细节,在开始PCIE协议内容分析之后我们再细聊。细聊之后大家再回头看PCIE发展史,再结合每代PCIE里引入的技术,就会豁然开朗。

图片

PCI阶段

2002年是PCIe协议诞生元年,但不是产品诞生元年哈,在此之前的十年都是PCI的天下。在这个10年,PCI总线是比较成功的。PCI总线从最初的32bit/33MHz提高到最后的PCI-X的64bit/533MHz,能提供的最大带宽能力从132MB提到到4264MB,这意味着这10年里PCI的带宽能力提高了32倍之多。注意我们这里讲的都是理论带宽,不算协议开销。但随着处理器主频的不断提高以及设备侧对带宽需求的提高(我们最能体会到的就是显卡对带宽要求的提高),PCI的问题出现了,PCI主要存在以下问题:

  1. 带宽问题:带宽问题主要取决于性能和总线频率。2002年左右PCI的带宽能力已经不够了,而PCI总线只能采用提高总线位宽和频率的方法增加其传输带宽。但是这种方法从性能价格比的角度上看,并不是最优的。数据总线位宽的提高将直接影响芯片的生产成本,64位的PCI总线接口需要设计者使用更多的芯片引脚,从而导致64位的PCI总线接口芯片的价格远高于32位的PCI总线接口芯片。

  2. 总线拓扑问题:PCI总线基于共享并行总线架构,所有的PCI主机和所有的设备共享一组通用的地址、数据和控制总线(大家可以参考I2C的拓扑来类比)。共享并行总线架构最大的问题就是对设备的访问是按时间顺序的,对某一设备的请求必须在响应回来之后才能继续。这个问题造成了共享并行总线的冲突和竞争问题、延迟和性能问题。

    1. 冲突和竞争:当多个设备尝试同时访问总线时,可能会发生冲突和竞争,需要通过总线仲裁机制来解决。这些机制可以基于优先级、轮询或其他算法来确定哪个设备具有优先权访问总线。

    2. 延迟和性能:共享总线架构可能导致延迟增加和性能下降。特别是在高负载情况下,设备需要等待较长时间才能访问总线,从而影响系统的响应速度和效率。

  3. 成本问题:与32位PCI总线接口相比,设计者还需要使用更多的PCB层数来实现64位PCI总线接口以解决信号完整性问题。更多的电路板层数以及更高的速率都意味着PCB成本的提高。有兴趣的同学可以去了解下PCB板的成本来源,这也是项目上做成本预算的必要过程。

  4. 还有一些别的问题。

    1. 频率和总线接口数目的提高同时带来的问题就是带负载能力。一条33MHz的PCI总线最多可以驱动10个负载,而66Mhz的PCI总线最多只能驱动4个负载。这在服务器多卡场景下就是个要命问题。

    2. PCI总线在设计之初并没有考虑服务质量的问题(QoS)。服务质量的需求来源其实是不同的场景对带宽、延迟要求不一样造成的。有些实时数据采集卡,音频或者视频的多媒体应用需要PCI总线提供额定带宽,而PCI总线上的设备只能轮流使用PCI总线,当一个设备长期占用PCI总线时,将阻止其他PCI设备使用PCI总线,从而影响了PCI总线的传送质量。

    3. PCI不支持原子访问。原子访问本身是处理器与操作系统技术发展过程中演化出来的需求。当处理器技术从单核进化到多核,就产生了多核之间对资源访问的冲突问题。操作系统中的同步机制就是解决这类问题的,原子操作就属于其中一个话题。原子访问是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何上下文切换 。于是处理器定义了相关的原子访问指令,这些原子访问指令就需要总线支持。

PCI还有很多问题这里不再描述更多,在之后的PCIE中我们会去探索这些技术演化背后的逻辑。但在当时的技术条件下,PCI已经很难进一步带来性能上的提升。于是2001年8月3日,非营利组织PCI-SIG组织了9个大厂,包括英特尔、AMD、惠普、康柏、博通、IBM、微软、德州仪器和凤凰科技等,全票通过了PCIE总线标准。

可以这么来讲,PCI时代是并行外设总线快速发展的十年。而在那个时代并行外设总线物理层技术的极限限制了它之后的发展,所以PCIe也算是顺应时代的产物。之所以这么讲是因为从今天的技术角度来看并行总线还是有进步空间,只不过我们已经有更好的替代的技术了且已形成一个庞大的生态,从工程意义上来讲PCI该淘汰了。

PCIE阶段

每每跟大家交流技术问题的时候,我总会习惯性的问一个问题:大家有什么问题没?当我发现大家都很沉默的时候我就知道:坏了,大家不知道我在说啥。因为发现问题是解决问题的前提,如果没问题,那要么就是真没问题,要么就是不知道问题在哪儿。不知道问题在哪儿,那解决屁的问题。PCI的几个主要问题我们已经列出来了,怎么解决的是2002年之前的先辈们在思考的问题,当然大家也可以在这里停顿一下,去思考下我们有没有解决的办法。这里再次把PCI问题罗列一遍:

  1. 带宽问题:现在大家肯定都知道了提高带宽的各种各样的办法,比如串行电路传输技术、带宽压缩技术、缓存技术等等。PCI到PCIE技术一个巨大的变化就是并行传输技术向串行传输技术的变化,当然这背后的技术也要配合着数电、模电、数字信号处理技术的发展。这当中一个非常重要的技术产物就是并串转换逻辑(SerDes)技术的发展。

  2. 拓扑问题:拓扑问题在以前甚至到现在都一直是研究的热点问题,而且存在于各个技术领域,包括互联网、数据中心、服务器、主机外设系统、芯片内部互联等等,找机会会跟大家一起交流。PCIE采用点对点(Point-to-Point)的互联拓扑方案,允许设备之间直接通信,从而避免了共享总线架构中的冲突和竞争问题。

  3. 成本问题:PCI因为线路多带来的布线问题。PCIe定义的最多32对差分线(实际上还没见过x32的PCIe产品,目前见过最多的就是x16产品)的全双工通信来传输命令和数据。

  4. 带负载能力:PCIe定义了一套拓扑结构,包括RC、Switch、EP、Retimer等组件,这些组件可以用主机供电也可以单独供电,用于解决PCIe带负载问题。

  5. QoS问题:PCIe定义了VC(Virtual Channel)技术来给不同的业务类型提供不同的服务。

  6. 原子访问:PCIe也定义了原子访问来满足处理器需求。

毫不夸张的说,PCIe1.0标准的颁发是外设总线技术的一次革命。其强大的扩展能力已经持续了近20多年,且依然在随着时代的进步在进步。

PCIe 1.0

PCIe 1.0在2002年由PCI-SIG 正式推出相关规范。PCIe1.0数据传输速率为2.5GT/s。宏观上来讲,PCIe 1.0在协议层定义了基于TLP(Transaction Layer Packet)包的Packet传输方式,在链路层定义了DLLP(Data Link layer Packet)的包格式用来管理链路的可靠性,在物理层定义了Symbol来管理TLP的DLLP的对齐、链路的状态等。这也是PCIe规范主要的思路,也是笔者认为的最好的学习思路。

PCIe 2.0

PCIe 2.0规范发布于2007年1月,其规范主要变化在于相比PCe 1.0,每通道传输速率提高到5GT/s,不过数据编码依旧使用了8B/10B的方案。PCIe2.0在典型应用比如PCIex16接口的单向带宽也达到了8GB/s,双向带宽更是达到了16GB/s。注意:此处和下文中提到的通道和Lane是同一个概念,他们具有物理意义,指的是一组Tx/Rx差分对。

除了带宽暴增外,PCIe2.0还带来了不少新的技术,包括新增的虚拟化技术;另外还加入了动态链路管理和链路宽度管理以及电源控制等多项功能,继续完善着PCIe的技术和生态体系。

在PCIe3.0之后每代PCIe都会有一些新增的技术,但在这里我们不会展开来讲,还是文章开始讲的思路,这是一篇描述PCIe发展史的文章,用来做概述和总结是比较合适的。

PCIe 3.0

PCI-SIG在发布PCIe1.0和PCIe2.0相关技术标准时都比较顺利,没有遇到太多的技术难题。但是在PCIe3.0上,PCI-SIG遇到引艮多技术难题。PCIe3.0的预览规格早在2007年就宣布了(恰好是PCIe2.0发布后没多久),但是实际的首个版本PCIe3.0规范在三年后的2010年11月18日才推出。

PCIe3.0遇到的难题主要来自工程实现。PCIe信号在传输中采用的是铜介质,铜介质实际上是有其物理传输频率上限的,目前的技术估计其物理上限大约在12GT/s。在PCIe 3.x规范研发之初,业内有消息称新的PCIe的传输频率会在PCIe 2.x的基础上继续翻倍,传输速率为10GT/s的水平。不过在当时的技术条件下,人们发现单纯的频率翻倍难以实现,包括相应连接器件的设计和线路布局都面临困难,成本也可能大幅度上升。作为一个普适性的标准而言,这样的情况让人难以接受。不过,最终技术人员采用了巧妙的手段避开了频率翻倍的问题。

插入一个话题:从技术角度讲,PCIe整个发展历程中最艰难的部分一直都是物理层技术,也就是上面讲的铜传输问题。而铜传输问题实际上就是通信原理问题、信号处理问题以及电路问题。少了这些基础,看问题的角度是不全面的,那解决问题的思路就会局限,所以基础不能丢。

PCIe3.0的最终标准采用的是8GT/s的数据传输速率,相比之前的PCIe 2.0提升了60%,并未翻倍。但是在物理层编码方案上,PCIe3.0不再采用8B/10B的方案,转而采用了全新算法的128B/130B方案,以及全新的硬件加扰和解码模块等,其编码带宽开销从之前的 20%大跌至1.54%,甚至几乎可以忽略,极大地提升了有效数据的传输带宽。这样一来,PCIe3.0不需要翻倍传输速率就能够达到实际带宽基本翻倍的目的。

不过问题还没有结束,即使是采用8GT/s的数据传输速率,PCI-SIG组织也怀疑当时的技术难以完成。为此,PCIe3.0规范加入了一些增强信号指令,以及对数据完整性的优化,包括发送器和接收器以及拓扑结构等,再加上重新优化的PLL、数据通道等。但这还不够,PCI-SIG还进行了为期六个月的技术分析,包括现有低成本材料是否能够满足PCIe3.0高带宽的需求等,好在最终一切顺利。

最终完成的PCIe3.0标准每通道带宽为理论16GB/s的水平,相比之前的PCIe 2.x基本做到了翻倍。此外,PCIe3.0标准的更新版本PCIe3.P在2014年11月发布。加入了包括电源管理、性能优化和功能拓展等多项改变,当然本质的数据传输能力没有变化。

由于PCIe 3.0的研发遇到了一些困难,因此PCe3.0的相关产品推出也比较晚。在处理器端支持PCIe3.0的首款产品是英特尔第三代酷处理器,典型产品包括Core i7-3770,发布于2012年第二季度,搭配芯片组为英特尔6系列,包括Z68、P67等,不过CPU提供的PCe3.0x16链路主要用于显卡,其他设备基本无缘。主板方面,支持PCIe3.0的产品就要晚很多了直到2015年9月英特尔发布100系列芯片组,其他设备才有幸使用到PCIe3.0的带宽。从那时候的产品和应用角度来看,PCIe3.0是当下的主力数据传输接口,尤其是对显卡、SSD、高端万兆网卡等设备来说,PCe3.0的出现和应用,解放了长期以来对这些产品在带宽方面的约束,大幅度推动了产品的发展速度。尤其是SSD,在使用了相关PCIe规范的NVMe接口后,有效改善了电脑启动、存储数据时间长的不足。

PCIe 4.0

在PCIe3.0之后,人们又将眼光瞄向了4.0时代。实际上也可以看出,随着PCIe 带宽越来越大,PCIe 技术每一代之间的时间间隔也越来越长。PCIe 1.x到PCIe 2.x之间只有3年,PCIe2.x到PCe3.x之间差不多4年半,而PCIe3.0到PCIe4.0之间更是长达7年之久。

出现这样的问题,依旧是铜传输的极限即将来临,对的,又是这个问题。不过在PCIe3.0之后,PCIe总线做出了很多改进,包括信号可靠性和完善性的改进,新的Retimer、Driver、Receiver等,又将整个传输的性能和带宽大大向前推进了一步,在这种情况下,PCIe 4.0诞生。

PCIe4.0的相关规范于2011年11月29日由PCI-SIG宣布。从表面规格来看,PCIe 4.0相比之前的3.x,传输速率直接翻倍来到了16GT/S,因此相比之下带宽再度比PCIe3.0翻倍。在6年后的2017年6月8日,PCI-SIG宣布PCIe4.0规范完成。

PCIe4.0在协议层上扩展了Tag功能,Tag功能其实跟AXI总线的outstanding技术是同一个思想,用来提高总线的传输效率。PCIe 4.0规范增加了不少新的内容,包括全新的通知机制(RN, Readiness Notification)、精确时间管理(PTM, Precision Time Measurement)、全新的拓展方式 (DPC, Downstream Port Containment)和enhanced DPC以及轻量通知协议(LN, LightweightNotification)等等。

PCIe 5.0

从 PCIe 4.0 到 PCIe 5.0 规范的演变主要是传输速率升级(同样请思考:这个时候又在物理层上做了什么样的变化去解决铜传输极限问题)。过去几年,计算领域发生了重大变化,云计算、边缘计算以及人工智能、机器学习和分析等应用引发了对更快的数据处理和移动的需求。随着计算和内存容量呈指数级增长,我们需要以更快的节奏维持 I/O 带宽翻倍,以跟上新兴应用程序的性能。

例如,400 Gb(或双 200 Gb)网络需要 32.0 GT/s 的 x16 PCIe 来维持带宽。这就要求在PCIe 4.0架构之后不到两年的时间里发布一个完全向后兼容的PCIe 5.0——这对于一个标准来说是一个重大的成就。

PCIe 6.0

PCIe 6.0的市场驱动因素依然是人工智、云计算、机器学习等数据中心对卡间互联设备间互联的带宽需求。2022年1月11日,PCI-SIG正式发布了PCIe 6.0最终版本1.0,从技术上来说,PCIe 6.0是PCIe问世近20年来,变化最大的一次。PCIe 6.0主要有三大变化:数据传输速率从32GT/s翻倍至64GT/s;编码方式从NRZ 信令模式转向PAM4信令模式;从传输可变大小TLP到固定大小FLIT(当然依然是兼容之前的TLP方式的)。

前两个变化依然是在物理层上做技术更新,解决铜传输极限问题;而后者是在协议层上做出了重大变更。回归从PCIe1.0到5.0时代,协议层除了在增加了更多的扩展功能之外,协议层的本质上是没有太大变化的。PCIe6.0相当于在这个层面做出了重大变化。为什么PCIe6.0要考虑在协议上做重大变化呢,这么优美的协议已经不够用了吗?这跟下文要提到的FLIT和LwFEC技术有关。

PAM-4

学过通信原理的同学应该比较熟悉这个概念,PAM-4编码是一种脉冲幅度调制技术,从传输信息量的角度看,PAM-4在单个UI内传输2bit信息;从电路角度看,PAM-4在单个UI内有四种电平幅度。通信原理教科书上早就对这项技术有介绍,除了PAM-4,PAM-8也有,现在不知道有没有PAM-16,PAM-32等,但一直到最近几年该技术才逐渐应用到以太网PHY和PCIe的物理层上,可见其实现难度。基于PAM-4的物理层技术跟Gen5之前的物理层技术有着很大的区别,而这显然也会影响到周边的很多领域,比如PCB、线材、测试方法、测试设备等等。

PAM-4也使得RX的工作更加困难(实际上通常来讲RX的设计都会比Tx难),因为眼图不仅在电压域要小得多(这是因为本身在),而且在时域也要小得多,而且这么多的转换必须嵌入同一个UI中。因此,使用PAM-4时,时钟和数据恢复更加困难,需要更好的RX设计。PAM-4的大多数设计将在RX中配置一个模数转换器(ADC),以更好地满足PAM-4的多电平信号需求以及对传统NRZ的支持。这意味着数字滤波是完全开放的,一个RX对另一个RX使用特定的数字信号处理(DSP)算法,再叠加针对不同通道的模拟和数字均衡的仔细平衡,将区分PHY性能。此外,更窄的PAM-4眼意味着PCIe 6.0上的TX抖动性能需要比PCIe 5.0上好2倍左右,开发者应该仔细考虑这些因素。

从NRZ信号转换为PAM-4信号还会显著影响封装和电路板设计,因为更改为四个电平信号会导致信噪比(SNR)立即退化9.6dB,因此正确管理噪声变得更加关键,即使奈奎斯特频率相同,封装和电路板设计中的串扰和回波损耗也比PCIe 5.0高。噪声敏感性增加意味着我们用于PCIe的1e-12误码率(BER)不可行,并且需要前向纠错 (FEC),因为PAM-4信令的BER将比1e-12高几个数量级,第一位误码率(FBER)的目标是1e-6。在其他标准(如以太网)中,使用强大的FEC来获得可接受的BER,但代价是带来100ns量级的大量额外延迟,这对PCIe来说是不可接受的。

由于FEC延迟和复杂性会随着需要纠正的符号数量的增加而增加,并且由于PCIe 6.0的延迟目标非常苛刻,因此使用了LwFEC(Lightweight Forward Error Correction),也叫轻量级FEC,并与使用循环冗余码(CRC)检测错误的PCIe的重试能力相结合,以便数据包可以重新发送或重试。PCIe 6.0的轻量级FEC可以产生1e-6级的重试概率,并且与更强的CRC结合使用时,整个系统可以提供稳定、接近无误的性能,对往返时延的影响非常小(通常约为2纳秒)。这意味着开发者可以使用与PCIe 5.0基本相同的延迟预期进行设计,对于许多情况,例如大于128字节(32DW)的事务层数据包(TLP),相对于PCIe 5.0将获得显而易见的实际延迟改进。

FLIT

由于PAM-4编码的更改和使用到的LwFEC需要将误码率提高到可接受的水平,所以PCI-SIG的成员们需要去思考怎么解决这个问题,而解决的办法就是动协议层。LwFEC一个比较大的特点是它只能用于固定大小的数据包,因此PCIe 6.0采用了256字节FLIT作为标准大小的数据传输单元,这就是PCIe 6.0为什么要动协议层的原因。FLIT的引入对PCIe的实现是有影响的,因为处理器和DMA的数据请求可不是固定的,所以PCIe的实现本身是需要去适应处理器和DMA的需求的,使用固定包大小,那就势必涉及到拆包、组包、不满包这些问题,也就是说一些FLIT可能有来自多个TLP的数据,而其他FLIT可能只包含TLP的一部分,这显然需要更复杂的电路设计以及更多的存储资源来解决。另一个影响是,一旦设备进入FLIT模式(例如,通过协商必须支持FLIT的PCIe 6.0链路进入),则无论链路质量有何变化,它都必须保持FLIT模式。因此,如果由于通道不稳定而需要降低链路速度,则新协商的较低数据速率将保持FLIT模式。这意味着在PCIe 6.0中,需要支持的所有可能的速率都有FLIT模式。

随着在PCIe 6.0中引入新的FLIT模式,TLP和数据层数据包(DLLP)包头格式发生了变化,RX设计时需要正确解析这些变化。例如,对于PCIe 6.0,FLIT包含自己的CRC,因此数据链路层数据包(DLLP)和TLP不再需要像在PCIe 5.0和前几代中那样的单独CRC字节。此外,由于FLIT的大小固定,因此无需使用前几代(非FLIT模式)中的PHY层Frame Token(指的是STP, SDP, END这些物理层定义的Symbol)。与PCIe 5.0相比,这提高了带宽效率。

用于FLIT模式的L0p

PCIe 6.0引入了一种新的低功耗状态,称为L0p,允许PCIe 6.0链路在不中断数据流的情况下扩展带宽利用率,从而降低功耗。在前几代中,为了改变链路宽度,整个链路重新训练时,数据流会中断几微秒,但L0p允许链路关闭Lane,从而降低功耗,但至少一个Lane要处于Active状态。需要注意的是,这种新的低功耗模式仅在FLIT模式下可用。

这种新的低功耗模式是对称的,这意味着TX侧和RX侧电路都要对L0p做出支持,并且支持FLIT模式的Retimer也需要支持这种模式。在处于L0p期间空闲Lane的PHY功耗与关闭Lane时的功耗相近。

Tag数量的剧增

为了在PCIe系统中实现最佳性能,开发者需要确定系统必须处理的未发布请求(NPR,Non-Post Request)的最大数量,也就是历代协议中都提到可用Tag的数量,并且是必须根据系统需求正确设置的控制器属性。对于PCIe 6.0,随着数据速率再增加一倍,PCie 4.0和PCIe 5.0支持的最大768个Tag已经远远不够,因此Tag数量最大值急剧增加,Tag字段变为14 Bit,最大支持15360个NPR。

PCIe 7.0

PCIe 7.0的标准还未正式发布,目前已经访问到的是0.5版的草案,但是目前来看目标还是确定的。PCIe 7.0 的传输速率提高到每通道单向 16 GB/s 左右;在 16 条通道 (PCIe 7.0 x16) 的最大配置下,速度相应为 256 GB/s。由于  PCI Express 支持双工操作并同时进行双向数据传输,因此 PCI-SIG 宣称7.0实际速度为 512  GB/s,其中向下兼容的PCIe 6.0标准可以实现256 GB/s、5.0 128 GB/s 和 4.0 64 GB/s几个档次的速度标准。与  PCIe 6.0 一样,7.0规范使用四级脉冲幅度调制 (PAM-4)。

截至目前为止市面上还没有PCIe6.0的产品。就像之前说的,周边的技术配套,PCB、线路、测试技术等都要完备,那时候才是PCIe6.0大放异彩的时候。

收个尾

从我自己的视角来看,上述可能很多的术语都是有概念的,所以如果出现了什么生僻的术语影响大家理解,请留言!

每一代PCIe其实变化都比较多,细节也比较多。这里其实是没列全的,列出来的都是一些相对重大的变化。如果有大家觉得重要的我没列出来的,请留言!

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

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

相关文章

【第29章】Spring Cloud之Sentinel规则

文章目录 前言一、规则的种类1. 流量控制规则 (FlowRule)2. 熔断降级规则 (DegradeRule)3. 系统保护规则 (SystemRule)4. 访问控制规则 (AuthorityRule)5. 热点规则 (ParamFlowRule)6.规则常量(RuleConstant) 二、查询更改规则1.查询规则(类型)2.查询规则(所有) 三、规则文件总…

Java预备知识 Day2

1.IDEA的简单使用与介绍 1.1 IDEA的项目工程介绍 Day2_0904:项目名称 E:\0_code\Day2_0904:表示当前项目所在路径 .idea:idea软件自动生成的文件夹,最好不要动 src:srcsourse→源,我们的源代码就放在这…

3.js - 着色器设置点材质(螺旋星系特效)

上图 着色器设置点材质时,在顶点着色器中,最好设置gl_PointSize,不然看不到你在页面中添加的点 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlsimport gsap from gsapimp…

FIDAVL:基于视觉语言模型的假图像检测与归因 !

FIDAVL:基于视觉语言模型的假图像检测与归因 ! 这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 作者提出了FIDAVL:使用视觉语言模型进行虚假图像检测。FIDAVL是一…

基于 ROS 的Terraform托管服务轻松部署Qwen-VL-Chat

介绍 Qwen-VL是阿里云研发的大规模视觉语言模型(Large Vision Language Model)。Qwen-VL可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。在Qwen-VL的基础上,利用对齐机制打造出基于大语言模型的视觉AI助手Qwen-VL-…

什么是嵌入式?行业前景如何?

目录 什么是嵌入式? 主要特点 常见应用场景 1. 工业自动化 2. 交通运输 3. 智能家居 4. 消费电子 5. 医疗设备 6. 航空航天 7. 物联网(IoT) 8. 能源管理 行业前景如何? 市场需求强劲 物联网(IoT)的爆发 汽车…

vue3的基本使用(步骤,架构模式,调试工具,指令)

1.基本使用步骤 a.导入vue.js的script脚本文件&#xff08;自动为window对象挂载vue构造函数&#xff09; b.在页面中声明一个将要被vue控制的Dom区域 c.创建vue实例对象 <body><div id"app">{{msg}}</div> </body> </html> <s…

树形弹窗选择框/vue2/Element/弹框选择

前言 此类选择器根据vueelementUI实现&#xff0c;使用vue3的可以根据此案例稍作改动即可实现&#xff0c;主要功能有弹出选择、搜索过滤、搜索结果高亮等&#xff0c;此选择器只支持单选&#xff0c;如需多选可在此基础进行改造。 效果图 代码实现 使用时&#xff0c;props-…

文件备份的方法有哪些?应该怎么弄?分享六个高效便捷的电脑文件备份方法

我们的电脑中存储了大量重要文件&#xff0c;如照片、文档、视频以及重要资料等。 然而&#xff0c;面对突如其来的硬件故障、病毒攻击或人为误操作&#xff0c;这些数据仿佛都悬于一线。 虽然说可以选择的恢复方法有很多&#xff0c;但是没有任何一个方法可以做到100%的&…

【Mysql】记录sql在执行过程中很慢

在改之前的测试脚本,之前写了一些sql,这次准备顺手把sql也调整一下,因为虽然sql能用&#xff0c;但是写的十分拉跨 附sql 分析过程: 1. 初步推测慢主要是因为left join了好几张表。 然后我去查了也跟开发求证过sql在执行过程中是"先联表&#xff0c;再执行查询条件"…

SCADA|KingSCADA运行报错:加载网络服务失败

哈喽,你好啊,我是雷工! 今天要运行KingSCADA程序时报错:加载 网络服务失败 ,导致无法运行。 解决问题思路及过程记录如下: 01 问题描述 如下图所示,报加载 网络服务失败 ; 02 处理过程 软件运行信息窗口中会有详细的运行信息,可以先查看软件的信息窗口。 也可以在日…

bluez SPP使用

然后退出bluetoothctl&#xff0c;执行rfcomm listen /dev/rfcomm0 1&#xff0c;如果已被使用&#xff0c;则执行rfcomm release 0(执行该命令会有数据回显&#xff0c;既手机收到开发板发来的相同数据&#xff0c;若要关闭回显需要加上参数-r&#xff0c;开启raw mode) 手机上…

项目中常用注解整理

Mybatis/MybatisPlus TableName //用来将指定的数据库表和 JavaBean 进行映射TableId(type IdType.AUTO) //标记为数据库中的主键TableField(existfalse) //标记为数据库中不存在的字段&#xff0c;防止报错Paramparam标签提供了对某个函数的参数的各项说明&#xff0c;包括参…

CTF 竞赛密码学方向学习路径规划

目录 计算机科学基础计算机科学概念的引入、兴趣的引导开发环境的配置与常用工具的安装Watt Toolkit&#xff08;Steam&#xff09;、机场代理Scoop&#xff08;Windows 用户可选&#xff09;常用 Python 库SageMathLinux小工具 yafuOpenSSL Markdown编程基础Python其他编程语言…

@老板:图纸防泄密方法有哪些?图纸防泄密高招分享

图纸&#xff0c;就像是企业的秘密武器设计图纸&#xff0c;里面藏着产品的精髓和创新的火花。一旦这些图纸落入竞争对手之手&#xff0c;就像是自家的独门秘籍被外人偷学&#xff0c;后果不堪设想。因此&#xff0c;保护图纸不泄密&#xff0c;是每个企业都必须认真对待的大事…

【QT】常用类

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;QT 目录 &#x1f449;&#x1f3fb;QMediaPlayer&#x1f449;&#x1f3fb;QMediaPlaylistsetPlaybackMode &#x1f449;&#x1f3fb;QDir&#x1f449;…

stm32驱动HX711称重传感器 c++代码分享

一、HX711模块介绍 HX711模块是一种专门用于称重传感器的放大器模块。它的主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围。 HX711模块通常配合称重传感器一起使用&#xff0c;例如压力传感器、负载细胞等。它采用24位的模数转换器&#xff08;ADC&#xff09…

交叉熵函数与kl散度的区别

公式上的区别 手动计算的方式展示如何实现这两个损失函数 交叉熵损失函数 import torch import torch.nn.functional as F# 模型的输出 logits 和真实标签 target logits torch.tensor([[2.0, 0.5, 0.1], [0.3, 2.5, 0.8]], requires_gradTrue) target torch.tensor([0, 1])…

测试开发基础——软件测试中的bug

二、软件测试中的Bug 1. 软件测试的生命周期 软件测试贯穿于软件的整个生命周期 需求分析 测试计划 测试设计与开发 测试执行 测试评估 上线 运行维护 用户角度&#xff1a;软件需求是否合理 技术角度&#xff1a;技术上是否可行&#xff0c;是否还有优化空间 测试角度…

某郊到家:互联网时代下的按摩服务革新

在快速发展的时代背景下&#xff0c;一群具有前瞻性的企业家在2018年勇敢地进军了按摩服务行业&#xff0c;引领了一场对传统模式的革新。他们不仅在竞争激烈的市场中站稳脚跟&#xff0c;还成功地在不断变化的市场环境中确立了自己的位置。 创新的商业模式和持续的努力&#x…