片内总线在cpu扮演什么角色?他为什么能实现高效,不同的CPU为什么采用不同的总线协议?

news2024/9/22 1:21:24

文章目录

    • 各种新型片上总线
      • 维度(Degree)
      • 跳(Hop)和跳数(Hop Count,HC)
      • 直连拓扑和路由器
    • Intel的Ring和Mesh+总线
      • 双Ring结构
      • Mesh+ Bus
    • 结论

片上总线,也称作片上网络(Network on Chip, NoC),在CPU核心日益增多的今天,变得更加重要。Intel早在志强Skylake-SP和Knight Landing中就引入新一代片上总线Mesh网络,IBM对Mesh引入的更早,距离我这篇颇受欢迎的介绍Mesh总线的文章登出,也有五年多了:

破茧化蝶,从Ring Bus到Mesh网络,CPU片内总线的进化之路

但最新经常有网友问我,Intel Client端最新的CPU Raptorlake(RPL)和还在开发阶段,引入Chiplet的Meterlake(MTL),为啥还是基于老的Ring Bus,而不迁移到Mesh Bus这个更加“高级”的技术上去?

其实技术无所谓高级不高级,适用的才是最好的。Mesh Bus除了带来灵活、降低延迟和提高吞吐量这些好处之外,还对功耗、复杂度、芯片面积和成本带来负面影响。Intel的Mesh Bus,本质上也不是传统的Mesh网络,而更像一种杂合体。我们今天就一起来Deep Dive一下,从理论上了解一下各种片上总线的优缺点,和深入理解Intel的Mesh+ Bus。本文可能会涉及一些计算机图形学,会相对枯燥一些,不感兴趣的读者可以直接跳到结论部分。

各种新型片上总线

早期CPU内部模块数目较少,结构单一,多采用星型、全连接或者交换开关(Crossbar)拓扑(topology)结构。在过去的10多年中,随着多核处理器逐渐取代了单核处理器,CPU芯片中的IP逐渐增多,如何处理好它们之间的通讯成为了解决CPU性能的重要抓手。新型CPU片上总线主要基本结构有三种:

img

a) Ring Bus b)Mesh Bus c)Torus Bus

选择不同的拓扑结构,对CPU片上网络的成本和效率构成绝对影响,需要仔细衡量。a)是现在已经广泛应用在消费品市场和服务器市场CPU中的环形总线(Ring Bus);b)是主要应用在服务器CPU中的Mesh Bus;c)在Mesh的基础上进行变形,将每个行列的节点收尾相连,组成了一个个环,可以看做a)和b)的杂合体,叫做Torus Bus。

现实中的CPU片上总线很多是这三种片上总线的变形和优化,要了解这些变形的特性,首先需要理解基础结构的特性。这些特性和性能的衡量有一些技术指标和参数。

维度(Degree)

维度是指每个节点的连接数量。如图中a)的维度是2;b)的维度是2、3或者4;c)的维度总是4。维度是实现一个网络节点的开销的重要指标。毫无疑问,Ring Bus的开销最小,Mesh居中,而Torus最大。

跳(Hop)和跳数(Hop Count,HC)

一个节点到另一个相邻节点称作一跳。两个节点之间Hop的个数叫做跳数(HC)。我们知道每一跳都需要消耗时间,两个节点之间跳数越少,延迟越少。这里有两个重要的指标:最大跳数,是指节点之间HC对多是多少,它是延迟的最大值;平均跳数,是指所有节点跳数的平均值,它可以很好的反应平均延迟。

我们来看图中三个拓扑的这两个指标。Ring Bus的最大跳数是4,平均跳数是2.22;Mesh的最大跳数是4,平均跳数是1.77;Torus的最大跳数是2,平均跳数是1.33。从数据来看,Torus延迟无疑最小,Mesh次之,而Ring则垫底。

直连拓扑和路由器

直连拓扑是指每个节点不但产生和接受数据,也居中进行数据的中转。现今几乎所有上市产品的片上总线都是直连拓扑,非直连拓扑目前仅用于学术研究,在此不做讨论。直连拓扑每个节点既然要中转数据,节点的维度就相当重要。节点为了维护每个维度信息和数据的传输,必须建立物理层和链路层连接。也就意味着,每个维度都要通过金属布线层进行实际物理相连,并在每个维度设立路由器。路由器需要或简单或复杂的路由算法、流量控制和FIFO逻辑。

每个维度上物理层和链路层逻辑增加了设计复杂度,增大了芯片面积、增加了功耗和成本,这就是为什么维度是衡量网络成本的最重要指标

Intel的Ring和Mesh+总线

片上总线的选型需要根据实际情况,如节点的数量、性能目标、整体功耗和成本进行综合考虑,现实中的片上总线往往是理论拓扑的某种变形,或者形成多层拓扑结构。服务器CPU往往节点比较多,我们就一起来看看Intel的两种服务器CPU的实际取舍情况。

双Ring结构

Intel初期服务器的Ring Bus,除了采用正反两个方向的Ring之外(实际上每个方向上还有很多子Ring),几乎和经典Ring Bus完全一致。直到V4之后,由于核心数目增多,造成无论平均跳数和最大跳数都增加到严重影响性能的程度,不得已采用双Ring结构:

img

在每个Ring上,单独开设两个专用节点(Ring Stop),用于两个Ring通讯。如此设计,即减小了平均跳数,也减少了最大跳数,并结合NUMA,设置亲缘性,进一步提高性能。

Mesh+ Bus

随着内核数目的进一步增多,双Ring片上总线结构已经不能满足延迟的要求。Intel在Skylake中引入Mesh总线,但根据Ring Bus的经验,进行了一定融合:

img

看起来就是标准的Mesh网络,不是吗?如果我们仔细观察图中的红线,会发现两处不同:图中每一行每一列不是一根线,而是两根;在行列的尽头,连线都绕回来了,形成一个闭环。这是什么结构?

实际上,每一行和每一列的两个通路都是单向的,并在首尾折回,形成一个**半环总线**(Semi-Ring)。它是结合了以前Ring本身是双路单向的特点,并在2D空间相连,形成一个Mesh+网络。它的路由算法采取XY算法,即数据先沿着列到达X行,再被接力传递到Y列,达到目标节点。

这种结构看起来有点像Torus Bus,但Torus Bus行列不是半环结构,是全环结构(Full Ring)。Semi-Ring克服了传统Mesh维度不确定(2、3或4)的问题,又避免了Torus的边缘节点环的长走线问题(尽管已经有通过混杂来平均走线长度的方案,但会极大增加布局布线的难度),个人觉得是个不错的折中。

结论

好了,我们回到问题:“为什么消费品CPU还不用Mesh总线呢?”通过前文,我们知道Mesh或者Torus总线虽然会带来性能(延迟和吞吐量)的提高,但会加倍总线拓扑的维度,造成成本、芯片面积和成本的增加,在核心数还未突破某个具体阈值的时候,还是采用Ring Bus更符合性价比的原则。

最后给大家出个思考题:片上总线拓扑节点路由器中,路由信息是静态还是动态的?由谁来提供的?

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

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

相关文章

毕业设计-基于机器视觉的火灾烟雾检测识别系统-yolo

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java基于网络安全维护的机房设备管理19rya

对于计算机专业的学生最头疼的就是临近毕业时的毕业设计,对于如何选题,技术选型等这些问题,难道了大部分人,确实,还没毕业的学生对于这些问题还比较陌生,只有学习的理论知识,没有实战经验怎么能独自完成毕业设计这一系列的流程,今天我们就聊聊如何快速应对这一难题. 比较容易的…

LSM Tree

LSM Tree 的存储模型,包括 Tidb,HBase等 特点 通过将大量的随机写转换为顺序写,从而极大地提升了数据写入的性能,虽然与此同时牺牲了部分读的性能。 只适合存储 key 值有序且写入大于读取的数据,或者读取操作通常是…

vueX持久化存储插件

场景:我们在做vue项目时,会遇到存储一些公共值,这样方便在不同的页面去调用这些值 vue中有个vuex,一般我们都存储在这里,这样在每个页面都能够调用 但是,当页面刷新了,这些值就被自动清理掉了 这…

第七届 Sky Hackathon 笔记集合贴

Alex_McAvoy--------NVIDIA 7th SkyHackathon(二)开发套件的安装与测试 Alex_McAvoy--------NVIDIA 7th SkyHackathon(三)语音数据集的制作 Alex_McAvoy--------NVIDIA 7th SkyHackathon(四)Nemo ASR 模型训…

vue.js ES6对象字面量的增强写法

1.属性的增强写法 ES5的写法&#xff1a; 运行效果 ES6的写法&#xff1a; 运行效果 2.函数的增强写法 ES5的写法&#xff1a; ES6的写法&#xff1a; 完整代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"…

基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT)

毕业设计&#xff08;论文&#xff09; &#xff08; 20 届&#xff09; 论文&#xff08;设计&#xff09;题目 基于Javamail的邮件收发系统 作 者 二级学院、专业 班 级 指导教师&#xff08;职称&#xff09; 论 文 字 数 论文完成时间 20年月日 基于JavaMail的邮件…

169-Rust和Solana环境配置

之前写过一篇Rust和Solana环境配置的 应该说写得是非常非常好 并不是说博文写得好 而是说写得非常非常的必要 比如我现在就是想要搞Rust和Solana配置 但是好久好久没搞了 已经完全忘记了 看到那一篇博文的时候就感觉想起来了很多 如果可以参考那篇完整做下来的话 就会…

是时候展示给大家这5款压箱底的软件了

是时候把自己压箱底的软件都发出来了&#xff0c;软件都是小巧耐用&#xff0c;不带广告的&#xff0c;赶紧下载起来吧&#xff01;就算暂时用不到的&#xff0c;也可以收藏起来等需要的时候再来下载&#xff01; 1.PPT演示——Focusky 一个高效的动画 PPT 演示软件&#xff0…

Linux学习-71-GRUB手动安装方法

16.13 GRUB手动安装方法 需要手工安装 GRUB 主要有两种情况&#xff1a; Linux 系统原先不是使用 GRUB 作为引导程序而现在想要使用 GRUB 来作为引导程序&#xff1b;MBR 中的引导程序被覆盖&#xff0c;需要在 MBR 中重新安装 GRUB&#xff0c;如先安装了 Linux 系统&#xf…

主成分分析的基本原理

目录 什么是主成分分析&#xff1f; 主成分分析的步骤 根据什么选择主成分&#xff1f; 怎样解释主成分&#xff1f; 特征值、方差解释率及碎石图 载荷系数与共同度 什么是主成分分析&#xff1f; 主成分的概念由Karl Pearson在1901年提出的。他是考察多个 变量间相关性…

Qt扫盲-Qt Creator IDE使用总结

Qt Creator IDE使用总结一、欢迎页1. 最近项目2. 示例3. 教程二、编辑页1. 左侧菜单区1. 工具栏2. 项目目录常用操作介绍1. 项目名2. 中间编码区1.顶部工具区2.编码区的常用功能1. 文件操作2. 类的一些方便操作1、Follow Symbol Under Cursor2. 查找和替换3. Refactor4. F1帮助…

AP1236 线性LDO稳压IC 工作原理图分享

深圳世微半导体有限公司&#xff0c;专业研发DC/DC降压恒流车灯IC&#xff0c;我们有一流的研发团队&#xff0c;良好的服务&#xff0c;做一流品质的产品&#xff0c;所有产品均提供配套方案和技术支持 供应多种DC/DC降压恒流方案选型表&#xff1a; AP5160 外置MOS电流20MA-…

构造一个m行n列的二维数组(mln的取值均小于等于4, mln均由键盘输入),并由键盘输入数组元素的值,并且按照矩阵的形式输出

构造一个m行n列的二维数组(mln的取值均小于等于4&#xff0c; mln均由键盘输入),并由键盘输入数组元素的值&#xff0c;并且按照矩阵的形式输出 Scanner sc new Scanner(System.in); System.out.println("请输入行"); int m sc.nextInt(); System.out.println(&quo…

【Java】阿拉伯数字转汉字(完全符合中文阅读习惯)(支持所有整数类型)

Java 阿拉伯数字转汉字 网上看过很多实现&#xff0c;但都有 BUG&#xff0c;不是多余0没有处理&#xff0c;就是很多生成的汉字字符串根本不符合中文阅读习惯&#xff08;各位代码写完测试的时候用例多搞一点啊&#xff09; 刚好公司有个项目就要实现这个小功能&#xff0c;…

Python爬虫实战,requests+parsel模块,爬取二手房房源信息数据

前言 最近在尝试用Python爬虫二手房房源信息数据&#xff0c;在这里给需要的小伙伴们提供代码&#xff0c;并且给出一点小心得。 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫&#xff0c;基本的是加请求头&#xff0c;但是这样的纯文本数据爬取的人会很多&…

关于chatGPT对有关Docker Desktop问题的一个回答

1、关于chatGPT 最近用https://github.com/Hitachi-Automotive-And-Industry-Lab/semantic-segmentation-editor的基于React的web端数据标记工具&#xff0c;挺好用。 但发现即便删除了container&#xff0c;之前标注的label都还在&#xff0c;觉得很奇怪&#xff0c;因为mon…

添加组件 页面上找一些功能组件直接用(比如layui)

layDate - JS 日期和时间选择器组件/插件 - 在线演示 - Layui 比如&#xff0c;我想添加一个日期的组件&#xff0c;我现在上面页面找 1.先找到日期与时间选择组件 2.找到你想要的组件 3.点击查看代码&#xff0c;找到组件代码的位置 在页面中添加上&#xff1a; <div cl…

你需要偷偷珍藏的java兼职平台

兼职在现在来说&#xff0c;应该不算什么非常罕见的事情。如果你感觉java技术还可以再练练手&#xff0c;或者想在闲暇的时间赚一点外快。那下面这些Java兼职平台&#xff0c;你一定要收藏。 1&#xff0c;程序员客栈 老实说&#xff0c;当时我使用这个平台&#xff0c;一个原…

vue 图片放大、缩小、旋转、滚轮操作图片放大缩小

组件 <template><!-- --><div class"imgCont"ref"imgCont"mousewheel.prevent"rollImg($event)"><div class"iconBtn"><span class"refreshBtn"><i class"el-icon-zoom-out"cl…