首页 » 网站推广 » phpmwtt技巧_最易懂的ARM芯片开拓科普建议收藏

phpmwtt技巧_最易懂的ARM芯片开拓科普建议收藏

访客 2024-11-17 0

扫一扫用手机浏览

文章目录 [+]

首先,我们跑去ARM,问它有没有现成的系统。
ARM说有啊,A73/G71/视频/显示/ISP/总线/系统掌握/内存掌握器/Trustzone全都帮你集成好了,CPU和GPU后端也做了,还是16nm的,包你性能和功耗不出问题。
然后我们再跑到Synopsys或者Cadence买EDA工具,把仿真平台也一起打包了,顺带捎上周边IP和PHY。
至于基带,Wifi和蓝牙,先不做吧,毕竟是第一次攒,哀求不能太高。

在掏了几亿银子出来后,我们拿到一个别系框图:

phpmwtt技巧_最易懂的ARM芯片开拓科普建议收藏

A73MP4@3Ghz,A53MP4@1.6Ghz,G71MP8@850Mhz,显示4K分辨率双路输出,视频4K,支持VR,支持Trustzone,内存带宽25.6GB/s(LPDDR4x64@3200Gbps)。

phpmwtt技巧_最易懂的ARM芯片开拓科普建议收藏
(图片来自网络侵删)

本来可以乐呵呵的一手交钱一手交货的,可我们是来攒机的,不是买整机,我们得知道这个别系到底是怎么搭起来的,免得被坑。
于是ARM给了一个更详细的图:

有了这张图,我们就可以对每个模块的性能,功耗,面积还有系统性能进行详细剖析了。
本文会涉及到一些基本观点,之前的文章(https://zhuanlan.zhihu.com/p/24878742?refer=c_70349842)先容过,这篇里就不重复了。

首先是大核模块,这是一个手机芯片最受人关注的焦点。
我们这里A73MP4的PPA如下:

工艺:TSMC16FFLL+

频率:2.1GHz@SSG/0.72C/0C, 2.5GHz@TT/0.8V/85C,3GHz@TT/1.0C/85C

MP4静态功耗:251mW@TT/0.8V/85C

动态功耗:200mW@TT/0.8V/85C

面积:6.7mm,MP4, 64KB L1D, 2MB L2, No ECC, with NEON&FP

跑分:835/Ghz SPECINT2K

也便是说,跑在极限3Ghz的时候,动态功耗是200x1.25x1.25x3=937mW,四核得上4W,而手机SoC最多也就能稳定跑在3W。
跑在2.5G时候,动态功耗是200x2.5=500mW,MP4总功耗2.25W,可以接管。

A53的如下:

工艺:TSMC16FFLL+

频率:1.5GHz@SSG/0.72C/0C, 1.6GHz@TT/0.8V/85C

MP4静态功耗:63mW@TT/0.8V/85C

动态功耗:88mW@TT/0.8V/85C

面积:3.9mm,MP4, 32KB L1D, 1MB L2, No ECC, with NEON&FP

跑分:500/Ghz SPECINT2K

四核跑在1.6Ghz时功耗463毫瓦,加上A73MP4,一共2.7瓦。

这里的缓存大小是可以配置的,面积越大,性能收益实在是递减的,可以根据须要自行选取。

A53的:

A73的:

作为CPU,集成到SoC中的时候,一个主要的参数是访存延迟。
有个数据,在A73上,每减少5ns的访存韶光,SPECINT2K分数就可以提高1%。
总的延迟如下:

上图只是一个例子,频率和参考设计并不一样。
在上图,我们可以算出,访存在CPU之外,也便是总线和DDR上统共须要58.7ns,这个韶光也便是静态延时,在做系统设计时可以掌握。
要缩短它,一个是提高时钟频率,一个是减少路径上的模块。
在ARM给的系统中总线利用了CCI550,如果跑在1Ghz,一个Shareable的传输从进去到DDR打个来回须要10cycle,也便是10ns(上图是CCI500跑在800Mhz,所以是12.5ns)。
CCI550和CPU之间还须要一个异步桥,来隔绝时钟,电源和电压域。
这个异步桥实在也很花韶光,来回须要7.5ns,6个cycle,快遇上总线延迟了。
但是没办法,它是省不掉的,只有通过增加总线频率来减少绝对延迟。
只有一种情形例外,便是异步桥连接的两端时钟频率是整数倍,比如这里的内存掌握器和CCI之间频率相同,那可以去掉。

有的设计会把CCI550以及它上面的CPU,GPU作为一个子网挂在NoC下,由NoC连到内存掌握器。
这样的好处是可以把交织和调度交给NoC,坏处是凭空增加额外一层总线10-20ns的延迟,CPU的跑分就要低了2-4%。
在ARM的方案中,交织由CCI直接完成,而调度交给内存掌握器。
既然所有主设备的访问都须要到DDR,那由DMC来调度更得当。
再加上没有采取两层总线的链接办法,一共可以去掉两层异步桥,省却12个cycle,已经快占到全体通路静态延迟的五分之一了。
以是,现在我看到的主流总线拓扑,都是把CCI直接连内存掌握器。
那可不可以直接把CPU连内存掌握器?只要DMC的端口够多,也没什么不可以,但是这样一来大小核就不能形成硬件支持的SMP了,功能上不许可。

路径上还有DMC和PHY的延迟,也是将近15ns,20cycle,这部分挺难降落。
如果实现Trustzone,还要加上DMC和CCI之间的TZC400延迟,还会再多几个cycle。
至于DDR颗粒间的延迟(行选择,命令和预充电),可以通过准确的DMC预测和调度来减少,稍后再讲。

静态延迟算完,我们来看带宽和动态延迟。

CCI和CPU/GPU之间是ACE口相连,数据宽度读写各128bit,16Byte。
如果总线跑在800Mhz,单口的理论读或者写带宽分别是10.8GB/s。
这个速率够吗?可以通过CPU端和总线真个Outstanding Transaction个数来判断。
A73的手册上明确指出,ACE接口同时支持48个Cacheable的读要求,14x4(CPU核数量)设备和non-Cacheable的TLB/指令读,7x4+16写,这是固定的。
而对应的CCI550的ACE接口支持OT数量是可配置的,配多大?有个大略公式可以打算。
假设从CPU出来的传输全都是64字节的(Cacheable的一定是,而non-Cacheable的未必),而我们的带宽是10.8GB/s(假设是读),而一个传输从进入ACE到离开是51.3ns(按照上图打算),那么最大OT数是10.8x51.3/64=8.也便是说,只要8个OT就可以搪塞CPU那里100多个读的OT,多了也没用,由于总线数据传输率在那。
从这点看,瓶颈在总线的频率。

那为什么不通过增加总线的数据位宽来移除这个瓶颈呢?紧张是是位宽增加,总线的最大频率相应的会降落,这是物理特性。
同时我们可能会想,真的有须要做到更高的带宽吗,CPU那里发的出来吗?我们可以打算一下。
先看单个A73核,A73是个乱序CPU,它的读来自于三类办法,一个是读指令本身,一个是PLD指令,一个是一级缓存的预取。
A73的一级缓存支持8路预取,每路预取范围+/-32,深度是4,预取要求会送到PLD单元一起实行,如下图。
以是他们同时受到BIU上Cacheable Linefill数目的限定,也便是8.此外还有一个隐含的瓶颈,便是A73的LSU有12个槽,读写共享,所有的读写要求(包括读写指令,PLD和反馈过来的预取)都挂在这12个槽中独立掩护。

言归正传,假设系统里全是读要求,地址连续;此时A73每一条读指令的延迟是3个cycle(PLD可能只须要1个cycle,我不愿定)跑在3Ghz的A73,一每秒可以发出1G次读,每个8字节(LDM)的话,便是8GB/s带宽,相称于每秒128M次Linefill要求,除以BIU的8个Linefill数量,也便是每个要求可以完成的韶光是60ns这和我们看到的系统延迟靠近。
此时一级缓存预取也会起浸染,以是8个Linefill肯定用满,瓶颈实在还是在在BIU的Linefill数量,按照50ns延迟算,差不多是10GB/s。
假设都是写,指令一个周期可以完成,每cycle写8字节(STM),带宽24GB/s。
如果写入的地址随机,会引起大量的Linefill,于是又回到BIU的Linefill瓶颈。
地址连续的话,会触发Streaming模式,在BIU内部只有一个传输ID号,由于有竞争,肯定是按次序的,以是显然这里会成为写的瓶颈。
由于写的确认来自于二级缓存,而不是DDR(是cacheable的数据,只是没分配一级缓存),延迟较小,假设是8个cycle,每秒可以往外写64B/8=8GB的数据。
总的来说,A73核内部,瓶颈在BIU。

到了二级缓存这,预取可以有27次。
当一级缓存的BIU创造自己到了4次的极限,它可以见告二级缓存去抓取(Hint)。
单个核的时候,4+27<48,瓶颈是在一级缓存的BIU;如果四个核同时发多路要求,那便是4x8=32个OT,再加上每路都可以要求二级缓存,其总和大于ACE的48个Cacheable读要求。
按照带宽算,每核是10GB/s,然后CPU的ACE口的读是4864B/50ns=60GB/s。
虽然60GB/s大于4x10GB/s,看上去像是用不满,但是一级缓存会提示二级缓存自动去预取,以是,综合一级二级缓存,簇内的瓶颈还是在ACE接口上,也意味着总线和核之间的瓶颈在总线带宽上,并且60GB/s远高于10.8GB/s。

A53是顺序实行的,读取数据支持miss-under-miss,没有A73上槽位的设计,就不详细剖析了。

这里我大略打算下各个模块须要的带宽。

CPU簇x2,每个接口理论上总线接口共供应读写43.2GB/s带宽(我没有SPECINT2K时的带宽统计)。

G71MP8在跑Manhattan时每一帧须要370M带宽(读加写未压缩时),850Mhz可以跑到45帧,靠近17GB/s,压缩后须要12GB/s。

4K显示模块须要4096x2160x4(Bytes)x60(帧)x4(图层)的输入,未压缩,共须要8GB/s的带宽,压缩后可能可以做到5GB/s。
这还都是单向输入的,没有打算反馈给其他模块的。

视频需求带宽少些,解压后是2GB/s,加上解压过程当中对参考帧的访问,压缩后算2GB/s。

还有ISP的,拍摄视频时会大些,算2GB/s。

当然,以上这些模块不会全都同时运行,繁芜的场景下,视频播放,GPU渲染,CPU跑驱动,显示模块也在事情,带宽需求可以达到20GB/s。

而在参考设计里,我们的内存掌握器物理极限是3.2Gbpsx8Bytes=25.6GB/s,这还只是理论值,有些场景下系统设计不当,带宽利用率只有50%,那只能供应13GB/s的带宽了,显然不足。

而我们也不能无限制的增加内存掌握器和内存通道,一个是内存颗粒本钱高,还有一个缘故原由是功耗会随之上升。
光是内存掌握和PHY,其功耗就可能超过1瓦。
以是我们必须走提高带宽利用率的路线。

在这个条件下,我们须要剖析下每个模块数据流的特色。

对付CPU,先要担保它的延迟,然后再是带宽。

对付GPU,须要担保它的带宽,然后再优化延迟,低延迟对性能跑分也是有提高的。

对付视频和ISP,带宽相对来说不大,我们要担保它的实时性,间接的须要担保带宽。

对付显示模块,它的实时性哀求更高,相对付运用跑的慢,跳屏可能更让人难以容忍。

别的的模块可以相对放在靠后的位置考虑。

在CCI550上,每个端口的带宽是读写共21.6GB/s,大小核簇各须要一个端口,GPU每四个核也须要一个端口。
显示和视频并没有放到CCI550,缘故原由稍后阐明。
CCI550的构造如下:

它一共可以有7个ACE/ACE-Lite入口,读写通道分开,地址共用,并且会进行竞争检讨,每cycle可以仲裁2个地址要求。
之前我们只打算了独立的读写通道带宽,那共用的地址会是瓶颈吗?算一下就知道。
对付CPU和GPU,所有从端口出来的传输,无论是不是Cacheable的,都不超过64字节,也便是16x4的突发。
一拍地址对应四拍数据,那便是可以同时有八个端口发起传输,或者4个通道同时发起读和写。
假设在最差情形下,CPU+GPU同时发起shareable读要求,并且,读回去的数据全都引起了eviction,造成同等数量的写。
此时数据通道上不冲突,地址通道也恰好符合。
如果是CPU+GPU同时发起shareable写要求,并且全都命中别人的缓存,引起invalidate,读通道此时空闲,但是invalidate占用地址,造成双倍地址要求,也符合上限。
到DMC的地址不会成为瓶颈,由于共四个出口,每周期可以出4个。
这里,我们利用的都是shareable传输,每次都会去Snoop Filter查找,每次可能须要两个对TAG RAM的访问(一次判断,一次更新标志位,比如Invalidate),那便是每cycle四次(地址x2)。
而我们的Tagram用的是2cycle访问延迟的2块ram,也便是说,须要同时支持8个OT。
这一点,CCI550已经做到了。
在以上的打算中,DMC是假设为固定延迟,并且OT足够,不成为瓶颈。
实际情形中不会这么空想,光是带宽就不可能知足。

在CCI550中,有两处OT须要打算,一个是入口,每个端口独立,一个是做Snooping的时候,所有通道放在一起。
之前我们打算过,如果静态延迟是50ns,单口的读须要8个OT。
但是,上面的静态延迟算的是DDR命中一个打开的bank,并且也不须要预充电。
如果加上这两步,延迟就须要85ns,而CCI必须为最差的情形作考虑。
这样,OT就变成了10.8x85/64= 15。
写的话须要的更少,由于写无需等待数据返回,只须要DMC给Early response就可以,也便是穿过CCI550(10cycle)加上少于DMC的静态延迟(10cycle),不超过20ns,OT算3。
以是,单口OT便是18,意味着须要4x18=72个来存储要求(四个入口)。

在出口,如果是shareable的传输,会须要去查表实现snooping,此时所有的要求会放在一起,它的大小按照四个出口,每个带宽2x10.8GB/s,共86.4GB/s。
但是,由于我们DDR最多也就25.6GB/s,打算OT时候延迟按照读的75ns(85-10,CCI本身的延迟可以去掉了,写延迟小于读,按照读来打算),75x25.6/64=30。
如果是non-shareable传输,那就还是利用入口的OT。

上面打算出的OT都是用来存储读写要求的,其数据是要暂存于CCI550内部的buffer。
对付写来说如果数据不能暂存,那就没法给上一级early response,减少上一层的OT;对付读,可以在乱序地址访问时,提高效率。
由于DMC会做一定程度的调度,以是CCI550发送到DMC的读写要求,很多时候不是按照读要求的次序完成的,须要额外的缓冲来存储先返回的数据。
下面是读buffer大小和带宽的关系图。
我们可以看到,对付随机地址,buffer越深带宽越高。
而对付顺序地址访问,险些没有影响。
这个深度根据行列步队事理是可以算出来的,我们这里就不写了。

同样,增加缓存也可以减少总线动态延迟,下图一览无余:

至于设置buffer的大小,根据行列步队事理,由于受到DMC调度的影响,数据回到CCI500的延迟期望值不随意马虎打算,而直接设比较大的值又有些摧残浪费蹂躏(面积相对要求缓冲较大),比较靠谱的方法是跑仿真。

关于CCI550的资源配置,还有末了一项,即tag ram的大小。
CCI550的特点便是把各个主设备内部的缓存标志位记录下来供应给Snooping操作,那这个tag ram的大小该如何定。
理论上,最大的配置是等同于各级exclusive缓存的tag ram总合。
如果小于这个值,就须要一个操作,叫做back invalidation,关照相应的缓存,把它内部的标志位去掉,免得标志位不一致。
这个是由于tag ram本身的大小限定引入的操作,在实行这个操作过程中,同地址是有竞争的,这个竞争是多余的,并且会壅塞所有缓存对这一地址的snooping操作,以是须要只管即便避免。
ARM定义了一个CCI550中的tag ram和原始大小的比例,使得back invalidation保持在1-2%以下,参考下图:

大略来说,可以用所有exclusive cache总大小的10%,把back invalidation限定在1%以下。

其他的配置参数还有地址线宽度,决定了物理地址的范围,这个很随意马虎理解。
还有传输ID的宽度,太小的话没法支持足够的OT。

到这里为止,我们已经设置好了硬件资源的大小,只管即便使得动态延迟靠近静态延迟。
下图是全速运行时的带宽和功耗(这里移除了内存的瓶颈)。

在这里,读写比例是2:1,也便是说出口收到的要求最多64+32=96GB/s。
但我们可以看到有时是可以做到超越100GB/s的,为什么呢?由于有相称部分是命中了内部的tag,转而从缓存进行读操作。
我们之前算过,Snooping操作在CCI550内部访问tag ram是足够的,但是如果命中,就须要从别人的缓存读数据,而这就收到上级缓存访问窗口的限定。
以是我们看到当命中率是100%,总带宽反而大大低落,此时的瓶颈在访问上级缓存。
所幸的是,对付SMP的CPU,常日命中率都在10%以下,正处于带宽最高的那段。
至于通用打算,是有可能超过10%的,等到GPU之后再谈论。

第二副图显示了动态功耗,在25GB/s时为110毫瓦,还是远小于CPU的功耗,可以接管。
静态功耗常日是10-20毫瓦,对付待机功耗实在并不低,而且tag ram是没法关闭的(300KB旁边),只要有一个小核在运作,就必须打开。
以是CCI550的静态功耗会比CCI400高一些,这便是性能的代价,须要有部分关闭tag ram之类的设计来优化。

不过,一个没法避免的事实是,总线的入口带宽是86.4GB/s,出口却只能是25.6GB/s。
我们须要一些方法来来达到理论带宽。
在总线上,可以利用的方法有调度和交织。

调度之前已经提到过,利用乱序来提高不存在竞争问题的读写传输,CCI550自已有内嵌策略,不须要配置。

而交织在之前的文章中也提过。
在CCI550上,只接了CPU和GPU,而他们发出的所有传输都不会超过64字节,也便是一个缓存行长度。
只有一种可能的例外,便是exclusive传输,在spin lock中会用到。
如果有一个变量跨缓存行,那么就有可能产生一个128字节的传输。
而由于这类可能存在的传输,CCI550可以设置的最小粒度是128字节,来避免它被拆开到两个内存掌握器,毁坏原子性。
不过到目前为止,CPU/GPU都不会发出128字节传输,如果有跨缓存行的变量,直接割断。
这样虽然会造成软件逻辑上的缺点,但这缺点是软件不遵守规范引起的,ARM软件规范里明确禁止了这类问题。

对付视频和显示模块,它们并没有连在CCI550。
由于CCI550内部只有两个优先级,不利于QoS。
QoS我们稍后再谈论,先看系统中的NIC400总线。
参考设计中NIC400链接了视频/显示和DMC,但实在NIC400并没有高效的交织功能,它的交织必须把全体物理地址空间按照4KB的页一个个写到配置文件。
此外,它也没有调度和缓冲功能,以是在繁芜系统中并不推举利用。
NIC400更适宜大略的系统,比如只有一个内存掌握器,可以用更低的功耗和面积实现互联。
在这里我们可以利用NoC来更换。
NoC还有一个适宜传输长数据的功能,便是分割,可以把265字节乃至4KB的突发传输隔成小块,更利于交织。

这里就引出了一个问题,到底我们交织的粒度是多少得当?粒度越大,越不随意马虎分散到各个DMC,而粒度越小,越不随意马虎形成对某个DMC和DDR Bank的连续访问。

在四个通道的DMC上,CCI550利用了这样一个哈希变换,来使得各个模块的传输能够均匀分布:

◦Channel_Sel[0] = Addr[8] ^ Addr[10] ^ Addr [13] ^ Addr [21]

◦Channel_Sel[1] = Addr[9] ^ Addr [11] ^ Addr [16] ^ Addr[29]

然后在DMC,利用了这样的变革来使访问分散到各个Bank:

◦For four channel memory: Addr[29:0] = {Addr[31:10], Addr[7:0]}

经由哈希化后,在CPU的顺序地址上效果如下:

在显示模块的上效果如下:

显然,在256字节的交织颗粒时效果最好,尤其是对付连续地址。
对付随机地址,有个细节我们可以把稳下,在颗粒度64/128字节的时候最好,这实在也符合预期。

刚刚我们提到了在DMC中的哈希优化。
DMC最主要的功能是调度,这是提高带宽利用率的关键。
ARM的DMC可以做到在多个主设备的64字节随机地址访问时做到94%的利用率(读),写也可以到88%。
我们可以通过一些参数的设置来影响它的调度判断:读写操作切换韶光,Rank(CS旗子暗记)切换韶光以及页内连续命中切换阈值,高优先超时切换韶光等,这些看名字就能理解,不详细阐明了。

调度完这么多参数,还有一个最根本的问题没有办理:DDR理论带宽也只有25.6GB/s,各个主设备一起访问,总会有拥挤的时候。
这时该采纳什么策略来最大程度上担保传输?答案是QoS。
QoS的基本策略是设置优先级,其次还有一些赞助策略,比如动态优先级调度,整流等。

上图是优先等级表,左边是总线的(包括CCI和NoC/NIC),高低依次是显示模块>视频>CPU>GPU>PCIe>DMA,基带跳过。
在CCI550内部,实际上只有高和第两种优先级,CPU高,GPU低,没法区分更多的主设备。
CCI550的优先级高低是给外部用的,可以拿来给DMC,让DMC定一个阈值,见告CCI哪些级别之上优先发送,哪些暂缓。

当中的表是DMC内部对QoS优先级的重映射。
DMC500支持把某个模块的优先级提高,并动态调度。
这里,CPU在每秒发送1.6GB之后,优先级会被降落,和外部总线一样。
下图中,我们可以看到在没有QoS的时候,CPU的延迟最大(最左边noqos),有了QoS,由于CPU的优先级相对较高,延迟大大降落(qos_only)。
而用了重映射之后,在1.6GB之下,延迟又进一步较大降落。

让我们再看一个例子,更好的解释如何通过调度优先级来在有限的带宽下担保实时性:

在上图,我们看最右边,由于显示和视频总带宽需求不高,以是都能知足。

而这2张图里面,带宽需求上升,我们看到Video的带宽反而低落,而CPU不变。
可在我们设置的表里,CPU的优先级是低于视频模块的。
于是我们利用DMC的门限,见告CCI不要送低优先级的,并把CPU中小核的优先级降落到门限之下,这样只要有视频流,CCI送到DMC的数据就会减少,如下图:

当然,我们也可以通过别的机制来达到类似的效果,比如限流等。
攒机是个细致活,功夫够了肯定能调好,便是须要耐心和积累。

到这里才把CPU和总线,内存掌握器考虑了,其他的GPU,多媒体,显示,系统掌握和调度,传感器,安全,ISP,VR,通用打算,还没开始阐明呢,往后有空逐步更新吧。

R

eading

标签:

相关文章

IT女绿箭侠,智能科技与侠义的完美融合

在现代社会,科技与侠义的交织成为了一种独特的现象。在这个充满挑战与机遇的时代,一位名叫“IT女绿箭侠”的科技英雄悄然崛起,她以智能...

网站推广 2024-12-26 阅读0 评论0

IT官方自营,品质保证的智慧选择

随着互联网技术的飞速发展,我国信息技术产业迎来了前所未有的机遇。在这个背景下,IT官方自营逐渐成为广大用户的首选。本文将从多个角度...

网站推广 2024-12-26 阅读0 评论0

IT审计,守护企业数字安全的坚实防线

随着信息技术的飞速发展,企业对信息系统的依赖程度日益加深。在这个数字化时代,信息安全已成为企业发展的关键因素。而IT审计作为一项专...

网站推广 2024-12-26 阅读0 评论0