ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

多级立方体网络怎么学?从交叉开关到逐级寻径彻底搞懂

多级立方体网络怎么学?从交叉开关到逐级寻径彻底搞懂 第一次翻开《计算机系统结构》教材看到“多级立方体网络”那一页的人十有八九会愣住满页的开关、交叉线、端口编号还有一堆 Cube、Omega、STARAN 的术语往外蹦。最要命的是教材往往只给一张图加一小段“级间连接按立方体函数排列”然后就开始讲控制方式了。图的每一根线都认识但整体在干什么完全没概念。这篇文章就是把“多级立方体网络”这块硬骨头拆开嚼碎它到底解决什么问题、为什么叫立方体、每一级开关在干什么、数据是怎么一步一步走到目的地的。目标读者是正在学计算机系统结构的学生、准备考研复试的人以及工作中突然需要补互连网络基础的同学。全程不堆公式尽量用大白话和能动手验证的推演方式讲清楚。1. 先忘掉公式为什么互连网络不能全用交叉开关1.1 从办公室电话转接说起多级互连网络解决的本质问题一句话让任意一个输入端能连到任意一个输出端。你可以想象一个办公室里有很多台电话分机之间要能互相通话。最朴素的办法是给每两台电话之间单独拉一根线——几台电话还能忍几十台电话线就乱成一团麻了。另一个极端是设一个总机台所有分机的线都接到总机上需要谁跟谁通话时由总机操作员把两端用跳线连起来。这就是交叉开关网络Crossbar。它很直接M 个输入和 N 个输出交叉成网格每个交叉点就是一个开关。想连谁就连谁绝对无阻塞。交叉开关的缺陷也一目了然交叉点数量是M×N。在系统结构课程里一个典型的处理机-存储器互连场景动辄十几个甚至几十个节点。32×32 的交叉网络就需要 1024 个交叉点每个交叉点还不是一根导线那么简单——它要有通断控制、缓冲、仲裁逻辑。面积、功耗、延迟全上去了。1.2 交叉开关的成本墙把交叉开关的成本量化一下你就能理解为什么工程师们宁可绕远路也要设计多级结构。假设做一个 N×N 的交叉开关网络交叉点的数量是 N²控制线的数量至少也是 N² 量级每个交叉点内部需要驱动电路负载电容随 N 增大而增加延迟跟着涨。N8 时 64 个交叉点听起来还行。N64 时 4096 个交叉点PCB 布线的复杂度已经让人头皮发麻。要是系统规模到 1024 个节点百万级交叉点谁做谁破产。多级互连网络的思路是用多个小规模的开关通常是 2×2逐级连接代替一个巨大的交叉开关。N 个输入需要 log₂N 级每级 N/2 个 2×2 开关总开关数是 (N/2)·log₂N。算一下账N64 时交叉开关要 4096 个交叉点多级立方体网络只需要 32×6192 个 2×2 开关。代价是网络可能阻塞——多个数据同时传输时可能抢同一条链路但大多数场景下这个取舍非常划算。1.3 单级网络的另一个问题数据绕路有同学可能会问既然 2×2 开关这么便宜那我把 N/2 个 2×2 开关排成一排让数据反复通过它们不也能实现任何输入到任何输出的连接吗一次连不通就多绕几圈。这就是单级互连网络的思想硬件只有一级数据要经过多“拍”才能从输入传到输出。比如单级立方体网络数据从输入端口进去经过一次交换再从输出端出来如果需要的话再绕回到输入端继续下一轮交换。单级网络的问题在于每一次数据都要绕回输入端控制逻辑要在“当前在第几轮、该做哪个 Cube 操作”之间反复切换。数据走 n 轮时延是 n 倍。如果十路数据同时在网络里绕或者说有多路数据要排队等同一个输入端调度就非常复杂。多级网络正是把单级网络“绕 n 次”的动作摊开成 n 级硬件每一级负责一个位的变化数据一路从头走到尾不用回头。2. 最小积木二功能开关和它背后的立方体函数2.1 二功能开关只有两个动作的“换道闸”多级立方体网络的基本单元是一个 2×2 开关教材里叫二功能开关。它有两个输入 A、B两个输出 C、D内部只有两种工作状态直通StraightA→CB→D数据“不换道”交换ExchangeA→DB→C数据“交叉换道”。就这么简单。一个开关只有两个自由度比十字路口的红绿灯还简单。但无数个这样的开关组合起来却能完成任意输入端到任意输出端的连接。为什么因为每一个开关在路径上提供了一次“可选的方向改变”。初学时容易把“直通”当成什么都不做这是理解上的一个误区。直通不是不做事它表示这一级不改变当前数据的某些位交换则表示这一级把两个配对端点互换。每一级都参与路径构造只是参与方式是“变”还是“不变”。2.2 立方体函数 Cube_i按二进制位配对接下来是这个知识点的真正核心也是大多数教材一句话带过导致读者卡壳的地方。把 N 个端口用二进制编号从 0 到 N-1。立方体函数 Cube_i 的作用是把编号第 i 位从低位算起i0,1,2,...不同的两个端口配对连接起来。用 N8 举例端口编号是 3 位二进制Cube₀第 0 位取反。配对为 (0,1)、(2,3)、(4,5)、(6,7)。每一个配对里的两个数二进制只有最后一位不同。Cube₁第 1 位取反。配对为 (0,2)、(1,3)、(4,6)、(5,7)。比如 0000和 2010差的是中间那一位。Cube₂第 2 位取反。配对为 (0,4)、(1,5)、(2,6)、(3,7)。比如 0000和 4100差的是最高位。看明白这个规律了吗Cube_i 连接的都是“在某个二进制位上互为镜像”的两个端口。这就是“立方体”这个名字的数学来源一个 n 维超立方体的顶点可以用 n 位二进制编号相邻顶点之间恰好只有一位不同每条边就代表一个 Cube_i 操作。2.3 为什么叫“立方体”三维直觉把维度降到 3画一个正立方体8 个顶点分别标上 000、001、010、011、100、101、110、111。你会发现顶点 000 和 001 之间的边是第 0 位不同的边——Cube₀顶点 000 和 010 之间的边是第 1 位不同的边——Cube₁顶点 000 和 100 之间的边是第 2 位不同的边——Cube₂。一个普通的三维立方体只有这 3 个方向但每条边的两端恰好是一对 Cube 配对。N8 的互连网络恰恰有 8 个端口正好对应一个三维立方体的 8 个顶点每级开关处理一个“方向”的配对3 级就处理完 3 个二进制位。这就是“多级立方体网络”命名的由来不是什么玄学就是按二进制位做维度划分。推广到 n 维2ⁿ 个顶点每个顶点有 n 维坐标任意两个顶点之间至多差 n 位。从一个顶点走到另一个顶点最多改变 n 次坐标。对应到网络上就是最多经过 n 级开关就能把任意输入连到任意输出。3. 从单级到多级三级电话网是怎么“展开”的3.1 单级网络要重复使用 n 次有了 2×2 开关和 Cube 函数的配对规则可以搭一个只有一级的网络输入端口按 Cube₀ 规则配对接到 N/2 个开关上。这一级开关能实现什么呢每个开关可以直通或交换因此整个网络只能做到“相邻端口互换”——所有配对都在 Cube₀ 的配对内部完成。想实现跨更远距离的连接怎么办把数据送回来把配对规则换成 Cube₁再来一轮。这就是单级网络的循环使用同一个硬件反复配置成 Cube₀、Cube₁、Cube₂……直到数据到达目标端口。相当于一个人要走很远的路但只有一辆自行车只能一条路一条路地骑骑完一段折回来换方向再骑一段。3.2 多级网络用空间换时间多级立方体网络的思路是不把数据绕回来而是把 Cube₀、Cube₁、Cube₂ 对应的开关级物理上串起来。第一级处理第 0 位的变换第二级处理第 1 位第三级处理第 2 位。数据一路往前走每经过一级就朝目的地靠近一个维度。这就是“用空间换时间”增加硬件级数但数据不用折返延迟从 n 次往返降为一次穿越。更重要的是不同输入的数据可以同时在各级之间流动形成流水线式的并行传输。这在 SIMD 阵列处理机和多处理机系统中非常关键——互连网络不只是“连得通”还要能“同时连很多对”。3.3 8×8 多级立方体网络长什么样把上面的思路落成一个具体的 8×8 网络第 0 级4 个 2×2 开关输入对按 Cube₀ 配对即 (0,1)、(2,3)、(4,5)、(6,7)。第 1 级4 个 2×2 开关输入对按 Cube₁ 配对即 (0,2)、(1,3)、(4,6)、(5,7)。第 2 级4 个 2×2 开关输入对按 Cube₂ 配对即 (0,4)、(1,5)、(2,6)、(3,7)。级与级之间由固定连线连接这些连线的作用就是把上一级开关的输出端口“重新配对”成下一级需要的输入对。可以这样理解第 i 级和下一级之间的连线本质上就是按 Cube_{i1} 的配对规则重新排列。所以整张图的构造顺序是先写端口编号 → 按 Cube₀ 画第一级开关 → 按 Cube₁ 配对画第二级开关输入 → 再按 Cube₂ 配对画第三级开关输入。很多同学觉得图上那些线乱是因为没有按“配对规则”去读图。你只要盯住一对具体的输入端口比如 0 和 1跟着它们在每一级的连线走会发现它俩在 Cube₀ 这一级确实进同一个开关出来后被级间连线拆开分别和 2、3 重新配对进 Cube₁ 的开关。每一级都在重新分组分组的依据永远是“某一位二进制是否不同”。4. 数据怎么走逐级寻径算法的本质4.1 看出“差几位”就知道要交换几次理解多级立方体网络的工作方式关键是掌握一个核心操作给定源端口 s 和目的端口 d计算二者二进制编码的异或结果有几位是 1就说明路径上需要做几次交换。举个例子源端口 s1001目的端口 d6110001 ⊕ 110 111异或结果有 3 个 1表示 s 和 d 在 3 个二进制位上都不同所以路径上需要 3 次交换——正好对应网络的 3 级。再来一个例子s0000d6110000 ⊕ 110 110异或结果有 2 个 1只需要 2 次交换。路径会是多少s 和 d 在第 1 位和第 2 位不同那么第 1 级做一次 Cube₁ 交换把 0 变成 2第 2 级做一次 Cube₂ 交换把 2 变成 6最终到达目的地。第 0 级一直直通即可。这个“异或差值”法则是整篇内容里最值得记住的技巧。考试时画出路径、判断某级开关该直通还是交换全靠它。4.2 每一级开关只负责“一个比特”为什么第 0 级不能直接处理第 2 位的差异因为在 8×8 网络里第 0 级开关的输入配对是 (0,1)、(2,3)、(4,5)、(6,7)。0 和 2 根本不进同一个开关第 0 级想交换也够不着。这是多级网络与全连接交叉开关的一个本质区别每一级开关只能访问“某个特定二进制位”对应的那两个端点。Cube₀ 级只能交换相邻编号端口Cube₁ 级只能交换隔一个编号的端口Cube₂ 级只能交换隔四个编号的端口。逐级传递任务每一级解决一个位这就是“多级”的含义。再往深一层级间连线到底在干什么它在把上一级处理完的结果重新分发到下一级合适的开关输入端。第 0 级处理完 bit₀ 后输出端口集合里的元素还是“邻居配对”的如果不经过重排第 1 级开关只能看到相邻对永远无法处理 bit₁。级间连线做了一次“按位重排”把需要配对的端口送到同一个开关去下一级才有机会处理新的位。可以说开关是“执行者”级间连线是“调度员”。4.3 控制方式级控、部分级控、单元控知道开关该怎么动作还要解决“由谁来决定动作”的问题。教材里最常见的分类是三种控制方式控制方式控制粒度特点实现代价级控制同一级所有开关共用一个控制信号控制最简单但每级只能全直通或全交换灵活性差控制线数量最少log₂N 根部分级控制同一级内分成若干组每组独立控制灵活性居中是级控和单元控的折中控制线数量取决于分组方式单元级控制每个 2×2 开关独立控制最灵活能同时实现多种不同的交换需求控制线数量为 (N/2)·log₂N 根用打电话来类比级控制就像整栋楼的电话总机约定“这一分钟所有人只做同一件事”单元级控制则是每个交换台自己决定接哪条线。灵活性越高控制线越多但能支持的传输模式就越丰富。多级立方体网络在单元级控制下具备自路由特性数据的目的地址编码就是天然的路由信息每一级开关读取其中一个二进制位就可以决定直通或交换不需要外部集中控制器给每个开关下发单独的路由表。这一点和后来更流行的 Omega 网络、Delta 网络一脉相承——它们都继承了“逐级按目的地址某一位选路”的思想。5. 这网的脾气阻塞性、置换能力与 STARAN 实践5.1 为什么它是阻塞网络多级立方体网络用少量开关换来了低成本和规则化结构但付出的代价是它不一定无阻塞。想象一下输入端口 0 要向输出端口 1 发送数据同时输入端口 2 要向输出端口 3 发送数据。如果两条路径在某个中间节点或某条级间连线上发生重叠其中一个数据就必须等待或丢弃这种现象就叫阻塞。交叉开关网络为什么无阻塞因为每对输入输出之间有一条独占路径不存在共享链路。多级立方体网络则不同多个输入可能汇聚到同一个中间开关或同一条级间线冲突就成了必然。处理阻塞的常见手段有传输前先做路径仲裁、加入缓冲队列、失败后重试或者把一次通信限制为单组数据流。STARAN 这类实际系统的做法就是通过控制方式限制作业规模换得可预测的延迟。5.2 它能实现哪些置换教材中常说的“置换”是一组多对多的输入输出映射所有输入同时连到所有输出且不冲突。多级立方体网络在级控制方式下能做到的置换非常有限因为每级只有两种状态N8 时 3 级一共只有 2³8 种状态组合显然不可能覆盖全部 8! 40320 种排列。单元级控制下灵活得多N8 时有 12 个开关每个开关 2 种状态理论上 2¹²4096 种开关配置。去掉链路冲突和非法路径能实现的合法置换仍只占全部排列的一部分。因此考试里常考这样一个判断题“多级立方体网络可以实现任意置换”——错误。它只能实现一部分置换而且是阻塞网络。如果你需要任意置换和无阻塞要么回到交叉开关要么增加网络级数或采用具有重排能力的网络如 Benes 网络它是多级网络的一种扩展能实现任意置换但硬件更多。系统结构教材安排这么多网络类型落点就是让你理解“性能与代价的权衡”。5.3 STARAN 网络与常见考点多级立方体网络的经典工程代表是 STARAN 相联处理机中使用的 STARAN 网络。它支持两种工作模式交换模式所有级都执行同一个 Cube 函数等效于完成一次整体重排置换模式每一级独立决定交换或直通实现更复杂的置换。STARAN 用 4×4 开关模块作为基本构件而不是裸的 2×2 开关这样可以在硬件上兼顾灵活性和复杂度。教材把它作为多级立方体网络的案例主要为了说明这个理论结构真的在真实机器上用过不是纸面模型。考研和期末考题里关于多级立方体网络的高频考法总结一下画一个 N8 或 N16 的多级立方体网络拓扑给定源端口和目标端口标出每一级开关应该直通还是交换区分级控制、部分级控制、单元级控制的控制线数量判断网络是否无阻塞、能否实现任意置换STARAN 网络与 Omega 网络的区别STARAN 属于多级立方体网络Omega 网络用均匀洗牌互连但两者在功能上等价——不同教材把它们归入同一族互连网络只是画法和控制信号的位序不同。6. 动手验证三张表彻底搞定多级立方体网络6.1 第一张表Cube 函数配对表不借助仿真工具一支笔一张纸就能验证前面所有结论。先画一张 N8 的配对表端口编号二进制Cube₀ 配对Cube₁ 配对Cube₂ 配对0000(0,1)(0,2)(0,4)1001(0,1)(1,3)(1,5)2010(2,3)(0,2)(2,6)3011(2,3)(1,3)(3,7)4100(4,5)(4,6)(0,4)5101(4,5)(5,7)(1,5)6110(6,7)(4,6)(2,6)7111(6,7)(5,7)(3,7)这张表的规律就是Cube_i 连接的两个端口二进制编号只有第 i 位不同。先自己填完这张表再做下面的路径推演正确率会明显提升。6.2 第二张表源端口到目的端口的路径推演选一个源端口 s1目的端口 d6做路径推演。第一步异或s001d110 001 ⊕ 110 111三个位都是 1所以三级都要交换。第 0 级门控位是 bit₀ 1交换1 变成 0第 1 级门控位是 bit₁ 1交换0 变成 2第 2 级门控位是 bit₂ 1交换2 变成 6。输出端口 6成功。再看一个需要直通的例子s0d2。000 ⊕ 010 010只有 bit₁ 是 1所以第 0 级直通第 1 级交换0→2第 2 级直通。用这个方法可以验证任意输入输出对整个过程不依赖画图纯算就能得到每级开关的状态。考试时先用异或算出交换位置再去图上核对基本不会错。6.3 第三张表各级开关状态表把整张网络要完成的多个传输任务放在一起可以做成一张状态表输入端口输出端口第 0 级第 1 级第 2 级06直通交换交换14交换直通交换23交换直通直通37直通交换交换注意看第三行和第四行输入 0→6 和 3→7 都要在第 1 级、第 2 级做交换如果它们的路径在某个开关处汇聚到同一个输出口就会冲突。这张表不仅能帮你理解寻径还能帮你直观感受阻塞多组传输任务同时配置时一旦发现某个开关的“交换方向”互相打架就说明该网络当前状态下无法同时完成这些任务。6.4 怎么用教材和仿真工具加深理解光看文章不做练习过三天就会忘。我的建议是先照上面的办法手推 10 组不同的输入输出对把每级开关状态写清楚在纸上完整画一个 8×8 多级立方体网络不要抄书先画 Cube 配对表确定开关输入再连线如果手边有课程配套的仿真实验工具比如 STAR COP2018 这类计算机组成原理与系统结构教学软件进去找到互连网络、多级立方体网络的实验模块把开关状态配上去跑一下看数据是否按预期到达。仿真工具最大的价值不是帮你偷懒而是让你把“推送一个数据从输入到输出”这件事的每一个中间状态可视化。跑通三个例子之后再回来看教材里那幅图你就能看出哪根线是 Cube₀、哪根是 Cube₁、哪根是 Cube₂而不是一团的交叉线了。7. 几个容易踩的坑和对应的理解纠偏第一次学这个知识点几乎所有人都会在下面几个地方卡住提前说出来能省不少时间。第一个坑把级间连线和开关的交换功能混为一谈。级间连线是固定的不随控制信号变化开关内部的直通/交换才是“动态”的。连线负责的是重组端口配对开关负责的是在该配对内部做选择。分清这两者读图的一大半困难就消失了。第二个坑以为单元级控制就能实现任意置换。单元级控制只是让每个开关独立决策但拓扑结构限制了可置换的范围阻塞依然存在。能不能实现某种置换要看整张网络上是否存在一条互不冲突的完整路径组合而不是看控制方式多灵活。第三个坑只记公式不理解异或的本质。很多人背“异或结果有几位是 1 就交换几次”但不知道为什么要异或。其实异或在超立方体里就是“两个顶点的海明距离”每一位上的 1 都代表该维度上的坐标需要翻转。理解了这一点寻径算法就是顺理成章的事不用背。第四个坑忽视端口编号的二进制表示。网络拓扑的一切规律都以二进制编号为基础编号写不对Cube 函数、级间连接、寻径全部会错。我见过很多人画图时把端口标成十进制阿拉伯数字算到一半就开始乱根源就在这里。无论如何先把所有端口的二进制写在草稿纸最显眼的位置。回到最初的问题多级立方体网络到底怎么理解我的体会是不要试图一下子背下整张图。先理解 2×2 二功能开关的两种状态再理解 Cube_i 函数“按二进制位取反配对”的本质然后把它想象成 n 维立方体上从一个顶点走到另一个顶点、每一步只翻转一个坐标的过程。有了这三层铺垫后面那些多级连接方式、寻径方式、控制方式都不用死记全部是自然而然的推论了。
返回列表