想象你站在一家超级快递分拣中心的二层走廊上。楼下是几万个分拣工位,每个工位前都有一排小抽屉——里面预先塞好了该片区最常见的快递单号对应的货架号。一件包裹从传送带入口滑下来,经过第1个工位时,工人瞄一眼面单,不用查电脑,直接按手边那张固定的小抄,秒速把包裹推向对应滑槽;包裹继续往前滚,滚到第2个工位,这个工位的小抄写的是“根据包裹上的数字和上一个工位传来的结果做一次累加”,于是工人又快速加了一笔再传给第3个工位……整条流水线上,成千上万个包裹像心跳一样同步前进,每个工位只做一件极简单的事,但整条线每秒钟完成的“面单匹配+累加”次数却高达千万亿次。 这,就是TPU(张量处理器)里那颗神秘引擎——MXU(矩阵乘单元)的真实工作画面。今天,我们就走进这座“矩阵乘法超级分拣厂”,看看它是如何用2.56万个规规矩矩的工位(PE),把让其他芯片头疼的矩阵乘法,变成一条永不堵塞的传送带流水线的。
对AI从业者而言,理解MXU是理解AI芯片性能上限的钥匙——无论是估算大模型推理成本、设计高效算子,还是和硬件团队高效沟通,你都需要知道“做乘法这件事”,芯片内部到底是怎么干的。
可视化演示
展示256x256 PE脉动阵列数据流、数据复用模式及MXU与GPU张量核架构性能对比。
本节配有交互动效(进入视口后自动加载,约 3KB)。
PE阵列架构 256x256 PE阵列脉动计算矩阵乘 激活从顶部流入权重从左侧流入 部分和沿对角线累加输出结果
矩阵乘法之重
你可能会问:为什么一座快递分拣中心,非得专门建一个巨型车间来处理“包裹面单匹配”这件事?因为在AI的世界里,“矩阵乘法”就是那个无处不在的包裹面单匹配。神经网络里的每个神经元,做的本质工作就是“把一堆输入数字各自乘上一个权重,再全部加起来”。几十亿个神经元堆在一起,你算一算,一次推理要做多少次乘加?答案是几十亿次起步,训练时更是要来回算上几万亿次。可以说,AI计算的九成以上,都是在做矩阵乘法这件事。
传统计算机面对这种海量乘法时,会撞上一堵墙——“内存墙”。冯·诺依曼结构里,计算单元和内存是分开的,CPU得先把数据从内存里“搬”到计算单元,算完再“搬”回去。搬数据的速度,远跟不上算数据的速度。就像快递分拣中心如果只有一个人,他需要反复跑到仓库深处去翻找面单对照表,那他一天也分拣不了几个包裹。
MXU的破局思路是“空间换时间”。既然搬数据慢,那就把要用的数据一次性摊开,摆在一个巨大的工位阵上,让数据在工位之间像流水一样自己流动起来。谷歌的第一代TPU里,MXU直接配了256×256个PE(处理单元)工位,也就是65536个工人同时开工。这相当于把原来只有一条传送带的小作坊,升级成了2.56万个工位同步运转的超级工厂。
回到我们的比喻:矩阵乘法如此重要,就像面单匹配是分拣中心的灵魂。MXU的存在,就是把这个灵魂动作极致地工厂化——让每一件包裹经过每个工位时,工人只需做一个简单动作,剩下的交给流水线本身。
- 算力需求AI 模型每跑一次,需要完成的浮点运算总次数,通常以万亿次(TOPS)为单位衡量。
- 矩阵乘法运算量神经网络的前向传播和反向传播,最终都归结为大量矩阵乘法,后者是前者的主体。
- 参数量模型里所有权重系数的个数,参数越多,每次推理要做的乘法就越多。
- 数据量模型一次处理多少条输入(比如一次看多少张图片),数据量越大,公式重复执行的次数就越多。
脉动阵列大阅兵
现在让我们走进MXU的核心——脉动阵列。想象你站在一个巨大的厂房里,2.56万名工人(PE)站成一个方方正正的棋盘,每人面前一台像计算器一样的小机器。有趣的是,每个工人不需要看任何屏幕或操作台,他们只需要做两个动作:把收到的两个数字乘起来,再加到自己本子上记的那个数上。就这么简单。工人之间没有复杂的电话线,只靠一条条短短的滑槽(寄存器直连)把包裹递给左边、右边或前方的邻居。
这就是“脉动阵列”名字的由来——数据不是乱哄哄地各自乱跑,而是像血管里的血液一样,随着心脏(时钟)的每一次跳动,整齐地向前涌动一格。每个时钟周期,每个PE完成一次“乘法+累加”(MAC操作),然后把结果传给下一个PE。这里的“下一次”,不是随机任务,而是精心安排的流水线接力。
流水线的妙处在于“时间上重叠”。第一个数据刚走完第一列,第二个数据就已经开始进入第一列了。就像包裹流水线上,第一个包裹还在第3个工位时,第100个包裹已经滑进了第1个工位。这样一来,2.56万个PE几乎每个周期都在满负荷运转,而不是像传统架构那样,大部分时间都在“等待下一个数据”。
脉动阵列的威力,不在单个工人有多快,而在“阵列”本身——2.56万个工人步调一致地重复简单动作,汇成一股每秒千万亿次的算力洪流。这就是它和普通处理器的本质区别:后者是少数几个全能冠军轮流上阵,前者是2.56万个专才永不疲倦地同步开火。
- 每个 PE阵列中的一个处理单元,就是一个“工人”,包含一个乘法器、一个加法器和若干寄存器。
- 每周期一个时钟周期,可以理解为一次“心跳”,全阵列同步前进一格。
- 乘法 + 累加PE 的核心动作,把输入数据乘以权重,再加到之前的中间结果上。
- MACMultiply-Accumulate 的缩写,即“乘累加”,是AI芯片的基本工作量单位。
权重钉在工位上
快递分拣中心有一个巧妙的设计:每个工位的小抽屉里,预先塞好了一张“面单对照表”——这不是谁临时塞的,而是开工前,整个厂房的管理系统根据今天要处理的包裹批次,统一给每个工位配好的。工人们开工后,只需要低头看一眼抽屉里那张固定不变的小抄,不需要去仓库翻任何手册。这张小抄,在MXU的世界里,就是“权重”。
为什么要这样做?因为在一个计算批次中,权重矩阵会被反复使用。如果用传统方式,每个PE每做一次乘法,都要跑到内存里去取一次对应的权重值,那2.56万个工位就是2.56万个同时冲向仓库的快递员,仓库的吞吐能力瞬间被挤爆。这就是“内存墙”的具体体现。MXU的做法是:先把整个权重矩阵一次性载入每个PE的寄存器阵列——每个PE的寄存器里,稳稳地存着它负责的那一个权重值。
于是,在推理过程中,权重“纹丝不动”,而输入数据(激活值)像传送带上的包裹一样,一列一列地流经每个工位。每流经一个工位,就完成一次“当前权重×当前输入”的乘法。这样,同一份权重被反复使用了成千上万次,而取权重的次数,被压缩到了最小——只在最开始装载一次。这就是“权重固定”数据复用的精髓。
“权重钉在工位上”这个设计,把最费时的数据搬运工作压缩到了极致。试想,如果每个包裹都要工人跑到仓库核对一次面单,那分拣中心早就瘫痪了。正因为小抄就在手边,工人们才能以每秒数十亿次的速度,行云流水地完成分拣——MXU 也正是靠这个绝招,在 2015 年就以远超同代 GPU 的能效,惊艳了整个 AI 界。
- 总 MAC 次数整个计算过程中,阵列完成的乘法累加总数,等于 N×N 个 PE 各自算 N 次。
- 取数次数从内存加载数据(权重或输入)的次数,权重固定后,权重只加载 N×N 次。
- 数据复用率一次取数能被多少操作共享,是衡量芯片内存效率的关键指标。
数据流动模式
权重视为“推不动”的固定工位,那数据呢?数据是“流动”的。在 MXU 的脉动阵列里,输入数据(激活值)不是一次性广播给所有PE,而是沿着行方向,一个周期一个周期地“接力推进”。每个PE从左侧邻居那里接过数据,用它做一次乘法累加,然后在下个周期把它传给右侧邻居。就像快递流水线上,包裹不会瞬间瞬移到最后一站,而是跟着传送带一格一格地走——但正因为每格都有工人处理,整条线并没有“等待”的时间。
数据流动的深层妙处,是“半成品”也沿着对角线方向自然传播。假设我们要计算 C = A×B,C 矩阵里每个元素是 A 的一行和 B 的一列的点积。在脉动阵列中,A 的各个元素沿行方向流动,B 的各个元素沿列方向流动,它们在每个 PE 处“相逢”,相乘后累加,累加的结果(部分和)被 PE 保留下来,等待和下一个到达的元素继续累加。最终,当最后一批数据流过之后,每个 PE 的累加器里,就静静躺着结果矩阵的一个元素。
为了让这幕配合完美,所有数据必须步调一致,这就是“脉动”的含义。整个阵列由全局时钟统一控制:每个周期,每个PE同时完成“接收左邻居的数据→乘上自己寄存器里的权重→加到累加器→把数据传给右邻居”。不允许谁快一步,也不允许谁慢一步。这种严格的同步,让数据流动像训练有素的仪仗队,整齐划一。
在数据流动的世界里,不存在“把数据从远处取来”的概念——数据永远来自身边的邻居,而结果永远积攒在自己的本子上。这种“让数据动起来,而不是让工人跑起来”的哲学,正是脉动阵列对冯·诺依曼结构最优雅的反叛。
- C_ij结果矩阵第 i 行第 j 列的元素,即第 i 个输出神经元的值。
- 求和符号从 k=1 到 K 累加,K是输入特征的数量,也是内层循环的次数。
- A_ik第 i 个输入样本的第 k 个特征值,沿行方向在阵列中流动。
- W_kj第 k 个输入特征到第 j 个输出神经元的权重,预先存放在 PE 中。
硬件运算链
现在我们把镜头拉近,看看单个PE的内部构造。每个PE,本质上是一台微型计算站,里面有三个核心部件:一个乘法器(负责把两个数相乘)、一个加法器(把乘法和之前的累加值相加)、以及一组寄存器(负责暂存数据)。它们排成一条微型流水线:数据从左边的邻居进来,乘法器立刻把它和寄存器里的权重相乘,乘积送入加法器,与累加器里的旧值相加,新值存回累加器——一个周期内完成全部动作。
为了让这套流水线高速运转,MXU 在物理设计上做了两个关键决策。第一,寄存器直接嵌在PE旁边,数据从上一个PE传过来不需要经过复杂的总线,直接通过窄而短的导线“手递手”传递,延迟极低。第二,整个阵列由统一时钟驱动,所有PE的“心跳”完全同步,避免了异步设计带来的协调开销。正是这种高度规整的物理布局,让 2.56 万个PE可以在单个芯片上愉快地并肩作战,而不会因为布线问题互相打架。
MXU 的规模通常表达为 256×256——即 256 行、256 列,共 65536 个PE。这个数字不是随意定的,它和 TPU 的片上存储(SRAM)容量、内存带宽之间是精心匹配的。每个时钟周期,MXU 可以从左边的缓冲器取 256 个激活值,从下方的缓冲器取 256 个权重,完成 65536 次乘法累加。如果主频是 700MHz,那么峰值算力就是 65536×2×700M ≈ 92 TOPS——这里的"×2"是因为一次 MAC 算一次乘法和一次加法,共两次浮点操作。
回忆快递分拣中心:每个工人(PE)的工位都配有一台固定的小计算器(乘法器+加法器)和一本流水账本(累加器)。2.56万个工人,人人手边有账本,每秒钟计算器同步按下 7 亿次,整座工厂的吞吐量自然惊人。MXU 的全部秘密,就是把这套极其简单的工位,乘以 2.56 万份,再用时钟完美地同步起来。
- PE 数量阵列规模,256×256=65536 个处理单元。
- 乘以 2一次乘累加包含一次乘法和一次加法,算两个浮点操作(FLOPS)。
- 主频时钟每秒跳动的次数,如 700MHz = 每秒 7 亿次心跳。
利用率与演进
脉动阵列如此强大,但它并非“银弹”。MXU 有个挥之不去的烦恼:形状匹配。脉动阵列就像一个固定尺寸的棋盘——256×256,只能高效处理 256×256 的矩阵乘法。如果输入矩阵的某一维不是 256 的整数倍,就会出现“部分工位空转”的现象。比如要算一个 100×100 的矩阵乘法,会有超过 80% 的工位闲着。这就像分拣中心有 2.56 万个工位,但今天只来了 100 件包裹,绝大多数工人只能干瞪眼。
另一个瓶颈是数据搬运开销。权重固定解决了权重重复取用的问题,但输入数据(激活值)依然是“流”进来的——它必须先被从内存搬到芯片上的缓冲器里,才能喂给阵列。如果阵列算得太快,而数据供给跟不上,MXU 就会“等米下锅”,利用率大幅下降。谷歌的解决方案之一是“批处理”:一次喂一批数据进来,让权重被更多数据复用,摊薄单个数据的搬运成本。批处理越大,复用率越高,利用率越好——这也是为什么 TPU 特别适合大 batch 的推理和训练场景。
MXU 自身的演进也印证着这些思考。TPU v1(2015)是推理专用,MXU 搭载 256×256 阵列和 28MB 片上存储;TPU v2/v3 走向训练,MXU 改为“脉动阵列+向量单元”双引擎,并引入“数据流”(数据沿列方向流动)模式;TPU v4 则把超级计算机的互联拓扑融入 MXU 集群,让 4096 块芯片协同工作。每一代的宿敌没变——都是那堵“内存墙”,每一代的破局思路也没变——继续提高数据复用,减少搬运。
回顾全文,MXU 就是一座把“做乘法”这件事极致工厂化的超级分拣中心。它的聪明之处不是让单个工人变快,而是用权重固定、数据流动、脉动同步这三大设计,让 2.56 万个工人像一个人一样高效协同。理解 MXU,你就拿到了理解 TPU 乃至整个 AI 芯片设计哲学的金钥匙。
- 实际完成真正做有用的 MAC 操作的次数,排除了空转周期。
- 峰值 MAC所有 PE 全速运转时理论上能完成的 MAC 次数。
- 计算时间阵列真正在做乘累加的时间。
- 空转时间数据没跟上、或者形状不匹配导致 PE 闲等的时间。
AI 应用场景
大模型推理加速的“硬核底座”
阶段:模型推理与部署优化
解决的问题:大语言模型(LLM)生成一个 token 要做一次巨大的矩阵乘法(如 4096×4096 乘以 4096×1),如果使用传统 GPU,取权重本身就占掉大量时间。MXU 的权重固定设计,让权重一次性载入后反复被每个 token 复用,显著降低数据搬运开销。
具体案例:Google 将 TPU v4 用于训练和部署其 PaLM 大模型。因为 LLM 的参数量高达数千亿,推理时每个 token 都要和全部参数做矩阵乘。TPU 的 MXU 阵列让权重常驻在 PE 寄存器中,激活值像传送带一样流过整个矩阵,吞吐量远超同代 GPU。
批量图像识别的“流水线工厂”
阶段:数据预处理与批量推理
解决的问题:当 AI 需要同时处理成千上万张图片(如 OCR 识别发票、人脸识别打卡),传统的 CPU/GPU 逐张处理会浪费宝贵的权重加载开销。MXU 偏好大 batch——一次喂入 256 张图片,让已被加载的权重矩阵被 256 个输入反复复用,摊薄每次搬运成本。
具体案例:Google 图片搜索背后的视觉模型,在 TPU 上对海量图片进行批量特征提取。每张图经过卷积层时,卷积核权重(等效为矩阵)被固定在 MXU 中,256 张图的特征图按行流入阵列,实现接近 100% 的阵列利用率。
边缘设备能效优化的“设计蓝图”
阶段:AI 芯片选型与能效评估
解决的问题:在选择端侧 AI 芯片时,传统的 “看 TOPS” 会误导——真正重要的是“数据复用率”。MXU 的脉动阵列设计理念,启发了大量边缘 NPU 的架构设计,让它们在做矩阵乘时减少对外部 DRAM 的依赖。
具体案例:华为昇腾、寒武纪等 AI 芯片在设计时都借鉴了脉动阵列思想——把权重预存进 PE,数据以流水方式推进。NPU 跑 MobileNet 这类轻量模型时,能效比(FPS/W)远高于 GPU,正是因为照搬了 MXU 的“权重固定”哲学。
Python 演示
import numpy as np class PESystolicArray: """模拟一个 NxN 的脉动阵列,权重固定模式。""" def __init__(self, n, weight_matrix): self.n = n # 每个 PE 存放一个权重值 self.weights = np.array(weight_matrix, dtype=np.float32) # 每个 PE 的累加器清零 self.accumulators = np.zeros((n, n), dtype=np.float32) def run(self, a_matrix): """a_matrix 形状为 (n, n),按行流入阵列。""" a = np.array(a_matrix, dtype=np.float32) # 初始化累加器 self.accumulators.fill(0.0) for t in range(2 * self.n - 1): for i in range(self.n): j = t - i if 0 <= j < self.n: # PE(i, j) 从左方接收 a[i][j] 并乘上权重 self.accumulators[i][j] += a[i][j] * self.weights[i][j] return self.accumulators.copy() class MXUEmulator: """MXU 仿真器:分批处理大矩阵乘法。""" def __init__(self, array_size=4): self.array_size = array_size self.total_mac = 0 self.idle_cycles = 0 def multiply(self, a, b): """计算 A (m x k) 与 B (k x n) 的乘积,使用 2D 分块。""" m, k = a.shape k2, n = b.shape assert k == k2 c = np.zeros((m, n), dtype=np.float32) s = self.array_size for i0 in range(0, m, s): for j0 in range(0, n, s): for k0 in range(0, k, s): a_block = a[i0:i0+s, k0:k0+s] b_block = b[k0:k0+s, j0:j0+s] if a_block.shape[0] < s: a_block = np.pad(a_block, ((0, s - a_block.shape[0]), (0, 0))) if a_block.shape[1] < s: a_block = np.pad(a_block, ((0, 0), (0, s - a_block.shape[1]))) if b_block.shape[0] < s: b_block = np.pad(b_block, ((0, s - b_block.shape[0]), (0, 0))) if b_block.shape[1] < s: b_block = np.pad(b_block, ((0, 0), (0, s - b_block.shape[1]))) pe_array = PESystolicArray(s, b_block.T) partial = pe_array.run(a_block) c[i0:i0+s, j0:j0+s] += partial[:min(s, m-i0), :min(s, n-j0)] self.total_mac += s * s * s return c def main(): m, n, k = 8, 6, 7 rng = np.random.default_rng(42) a = rng.normal(size=(m, k)) b = rng.normal(size=(k, n)) emulator = MXUEmulator(array_size=4) c_mxu = emulator.multiply(a, b) c_np = a @ b print("MXU 仿真结果:\n", c_mxu) print("NumPy 参考结果:\n", c_np) print("最大误差:", np.max(np.abs(c_mxu - c_np))) print("总 MAC 次数:", emulator.total_mac) if __name__ == "__main__": main()
class PESystolicArray定义单个脉动阵列块,内部用二维数组模拟 PE 网格。self.weights = np.array(...)把权重矩阵“钉”在每个 PE 的寄存器中,对应权重固定设计。for t in range(2 * self.n - 1)模拟脉动时序:数据沿对角线逐拍流入,共需 2n-1 个周期。self.accumulators[i][j] += a[i][j] * self.weights[i][j]每个 PE 完成一次乘累加,对应 MAC 操作。class MXUEmulator外层仿真器,处理任意形状矩阵的分块计算。for i0 in range(0, m, s)按 4x4 块遍历大矩阵,把大矩阵乘法拆成多个小方块,让每个块都适配脉动阵列尺寸。np.pad当矩阵边缘不足 4x4 时补零,模拟真实硬件中“形状不匹配导致的部分空转”。self.total_mac += s * s * s统计完成的总乘累加次数,用于评估硬件利用率。
常见误区
误区既然 TPU 的 MXU 算力这么高(几百 TOPS),那我随便什么模型丢上去都能享受这个算力,比 GPU 快好几倍。
正解MXU 只对“大规模规则矩阵乘法”高效。对于稀疏模型(大量零元素)、小矩阵、动态 shape 的模型,脉动阵列的形状匹配问题会导致大量 PE 空转,实际算力可能连峰值的 10% 都不到。就像 2.56 万个工人的分拣中心,如果今天只有 100 件包裹,效率远不如一个小作坊。MXU 是“专才”,不是“通才”。
为何常见:硬件厂商宣传时习惯用峰值 TOPS 做营销,而峰值是在“完美形状+完美数据供给”下测出来的,实际场景很难达到。
误区MXU 把权重固定在 PE 里,训练时每个 step 权重都要更新,那它是不是只能做推理,不能做训练?
正解权重固定是“在一个计算批次内固定”,不是“永远固定”。训练时每个 step 算完梯度后,权重会更新,然后把新权重重新载入 PE。TPU v2/v3 之所以能训练,是因为每次迭代都重新装载更新后的权重。这就像分拣中心每来一批新货,工人们就换一张新面单对照表——换表也需要时间,这也是为什么训练比推理更容易触碰数据供给瓶颈。
为何常见:把“固定”理解成了“静态”,忽略了时间维度上“批内固定、批间更新”的动态过程。
误区MXU 里数据自己会流动,那我写 Python 代码时什么都不用管,编译器会搞定一切布局。
正解脉动阵列的数据流动时序需要精心编排。同一个矩阵乘法,数据从哪个方向流入、权重放在哪个 PE、分块大小怎么选,直接影响性能和正确性。AI 编译器(如 XLA)要对计算图做大量“布局优化”,才能把高层算子映射到 MXU 的物理结构上。数据流动的“指挥”是编译器的核心工作之一,不是自动发生的。
为何常见:高层框架(PyTorch/TensorFlow)隐藏了硬件细节,让人误以为“自动微分+自动并行”就万事大吉,忽略了中间还有一层艰巨的编译器映射工作。
误区MXU 有 256×256=65536 个 PE,那我做一个 512×512 的 MXU,算力直接翻四倍,肯定更强。
正解PE 变多意味着同一周期要喂入更多数据,对片上 Buffer 容量、内存带宽、供电散热都提出更高要求。如果带宽跟不上,阵列越大,饿死(数据断供空转)的 PE 越多,利用率反而下降。TPU v1 选 256×256 是带宽、面积、功耗三者权衡的结果,而不是单纯追求 PE 数。就像分拣中心不可能无限扩编工人——传送带只有那么宽,人多了反而互相挡路。
为何常见:线性外推思维——“规模翻倍性能翻倍”只在资源无约束时成立,真实系统的短板约束才是决定上限的因素。
误区谷歌的 TPU 有 MXU,NVIDIA 的 GPU 没有,所以 MXU 一定全面碾压 GPU,AI 计算以后都用 TPU 了。
正解两者是不同设计哲学。MXU(脉动阵列)擅长规则的矩阵乘法,但灵活性差;GPU(SIMT 架构)拥有几千个通用核心和强大编程生态,能处理各种不规则计算(如稀疏注意力、动态控制流)。在矩阵乘法密集、网络结构规整的任务上 TPU 能效更高;在灵活多变的前沿模型上,GPU 的通用性依然不可替代。真实场景中,Google 内部也同时使用 GPU 和 TPU。
为何常见:非黑即白的二元对立思维,忽略了“专才 vs 通才”的分工互补关系。
面试题
Q1. MXU 中 PE 的核心运算操作是什么?
- A.向量点积和归一化
- B.乘法累加(MAC)← 正确答案
- C.矩阵转置和求逆
- D.数据搬移和缓存
答案:B。MXU 的每个 PE 就是一个微型计算站,核心动作是“乘上权重再加到累加器”,即 MAC(乘法累加)。向量点积是多个 MAC 的组合,矩阵转置是数据整理操作,搬移缓存是数据通路的工作,都不是 PE 的核心运算。
Q2. 第一代 TPU 中 MXU 的阵列规模是?
- A.128×128
- B.192×192
- C.256×256← 正确答案
- D.512×512
答案:C。TPU v1 的 MXU 采用 256×256 的脉动阵列,共 65536 个 PE。这个数字是带宽、片上存储和功耗折中的结果。128×128 是缩水版,512×512 远超当时带宽供给能力,192×192 并非标准选择。
Q3. “权重固定”数据复用策略的核心收益是什么?
- A.减少权重从内存重复加载← 正确答案
- B.提高每个 PE 的时钟频率
- C.让权重数值保持不更新
- D.降低激活值的数据精度
答案:A。权重固定把权重预加载进 PE 寄存器,一个批次的推理中反复使用,避免了每个 MAC 都去内存取权重,大幅降低数据搬运。它不改变时钟频率,也不意味着权重永远不更新(训练时仍会重新装载),更与激活值精度无关。
Q4. 脉动阵列名称的由来是什么?
- A.数据像心跳一样同步流动← 正确答案
- B.电压像脉搏一样波动
- C.计算速度时快时慢
- D.散热系统周期性启动
答案:A。“脉动”借喻血液循环——数据在全局时钟驱动下,以固定节奏在 PE 间逐拍传递,像心跳驱动的血流。MXU 的计算是严格同步的,不会时快时慢,与电压和散热无关。
Q5. 以下哪些属于 MXU 的设计特点?
- A.PE 间通过寄存器直连← 正确答案
- B.每个 PE 都含乘法器和加法器← 正确答案
- C.使用全局时钟同步所有 PE← 正确答案
- D.每个 PE 拥有独立的大容量缓存
答案:ABC。MXU 的关键设计是 PE 寄存器直连、乘加器一体、时钟全局同步。选项 D 错误——MXU 的 PE 只有小容量寄存器,没有独立大缓存,数据主要依靠邻居间流动,这正是它节省面积和功耗的原因。
Q6. MXU 在计算 100×100 的小矩阵时利用率低,主要原因是?
- A.PE 的乘法器功耗过高
- B.矩阵形状与 256×256 阵列不匹配← 正确答案
- C.权重固定策略失效
- D.数据精度不够高
答案:B。MXU 是 256×256 的固定棋盘,100×100 的矩阵放入后,约 85% 的 PE 处于空转状态,利用率急剧下降。这就像 2.56 万工位的分拣中心只来了几百件包裹。这不涉及功耗、精度或权重固定失效。
Q7. TPU v2/v3 相比 v1 的重要改进包括哪些?
- A.从推理扩展到训练场景← 正确答案
- B.引入向量单元配合 MXU← 正确答案
- C.支持数据流(Data Flow)模式← 正确答案
- D.彻底取消脉动阵列架构
答案:ABC。v2/v3 从推理芯片扩展到训练,结构上增加向量单元处理非矩阵运算,同时改进数据流模式支持训练时频繁的权重更新。但脉动阵列依然是 MXU 的核心,D 说“彻底取消”完全错误。
Q8. MXU 的峰值算力公式中 "×2" 代表什么?
- A.一次 MAC 算乘法和加法两次操作← 正确答案
- B.两个 MXU 同时工作
- C.数据双向流动
- D.权重和激活各占一半
答案:A。一次 MAC(乘累加)= 1 次乘法 + 1 次加法 = 2 次浮点操作(FLOPS),所以算力公式里要 ×2。它不是指双引擎或双向流动,而是对 FLOPS 定义的正确理解。
Q9. 编译器在将算子映射到 MXU 时,最重要的优化目标是?
- A.最大化数据复用、最小化数据搬运← 正确答案
- B.让每个 PE 的寄存器更省电
- C.提高 Python 代码的可读性
- D.增加权重矩阵的稀疏度
答案:A。MXU 的性能瓶颈是数据供给而非计算本身,编译器(如 XLA)的核心工作是做布局优化——选择合适的分块、决定数据流向,让已加载进阵列的数据被最大化复用,减少对内存的访问。寄存器功耗、代码可读性、稀疏度都不是编译器优化 MXU 映射的目标。
Q10. 关于 MXU 的“脉动阵列”与 GPU 的"SIMT"架构,正确的说法是?
- A.脉动阵列擅长规则矩阵乘法← 正确答案
- B.SIMT 架构灵活性更高← 正确答案
- C.两者在数据复用策略上思路不同← 正确答案
- D.脉动阵列已被 GPU 全面淘汰
答案:ABC。MXU 脉动阵列用空间换时间,擅长规则矩阵乘;GPU 的 SIMT 用海量通用线程处理不规则任务,灵活性更高;两者最大差异正是“数据复用 vs 通用并行”的策略选择。D 错误——脉动阵列至今仍是 AI 芯片的重要架构。