在AI的世界里,算力就是生产力。把AI芯片想象成一间顶级餐厅的后厨:CPU是全能主厨,什么菜都会做,但一次只能服务一桌;GPU是一群手脚麻利的帮工,擅长同时处理一堆简单、重复的活儿;而华为昇腾NPU里藏着一位“超级刀工”——AI加速器CUBE。它一次下刀,就能把4096个食材同时切丁、同时下锅、同时出锅,效率远超任何人类想象。整座后厨(达芬奇架构)都围绕这位超级刀工设计:专人负责传菜(数据流水线)、标准化菜谱(指令集)、多店连锁经营(昇腾910多核协同)。今天,我们就推开这间后厨的门,看看这把“超级刀工”究竟如何炼成,又怎样支撑起现代AI的高墙大厦。
理解CUBE的计算逻辑与软件栈适配,是从事AI芯片设计、算子开发或高性能AI推理优化的入场券——它直接决定你的模型在硬件上能跑多快、功耗压到多低。
目录
可视化演示
展示CUBE单元核心:GEMM矩阵乘法A[M,K]×B[K,N]=C[M,N]逐元素计算过程,以及Tiling分块策略匹配L0缓冲区实现高效数据复用。
本节配有交互动效(进入视口后自动加载,约 3KB)。
GEMM矩阵乘法 A[M,K]:左矩阵 B[K,N]:右矩阵 C[M,N]:结果矩阵 C[i,j] = Σ A[i,k]×B[k,j], k=0..K-1 CUBE单元单周期完成cube_size³次乘加运算。
达芬奇架构:后厨的分工布局
一间后厨不会只放一口锅,它一定会分成洗菜台、切菜台、炒菜灶,各司其职。华为昇腾NPU的AI Core,就是这样一间完整的“后厨模块”,而它的整体设计被称为达芬奇架构。每个AI Core内有三条计算管线:标量计算单元像总厨,负责循环控制、地址计算这类“精细动作”;向量计算单元像配菜组,能对一长串数据进行整齐的加减乘除;CUBE单元则是“矩阵加工专区”,专门接待神经网络里铺天盖地的矩阵乘法。三者分工明确,让不同类型的计算各归其位,互不抢锅。
为什么偏偏是CUBE占据C位?因为现代AI模型的骨架——卷积、全连接、注意力机制——底层几乎都是同一件事:矩阵乘法。输入特征是一块矩阵,权重也是一块矩阵,两者相乘再加偏置,就完成了一次“理解”。把矩阵乘法这块硬骨头啃下来,AI计算的半壁江山就到手了。于是达芬奇架构在标量和向量之外,专门劈出一块三维算力特区,让CUBE专心打磨这门“刀法”。
后厨布局的关键,是不让大材小用。矩阵活儿交给CUBE,向量活儿交给向量单元,总厨只负责发号施令。理解了这个分工,就理解了NPU为什么能在AI任务上碾压通用处理器——因为它把最多的晶体管,献给了最常出现的那一刀。
- 结果元素 \(C_{i,j}\)它对应输出矩阵第 \(i\) 行第 \(j\) 列的单个数值;一个输出点就是一次“行与列的点积”。
- 累加求和 \(\sum_{k=1}^{K}\)把 \(K\) 个乘积从第1项一直加到第K项;这是MAC(乘加)中“加”的部分,也是CUBE里最重要的累加器。
- 乘积项 \(A_{i,k} \times B_{k,j}\)\(A\) 的第 \((i,k)\) 号元素与 \(B\) 的第 \((k,j)\) 号元素相乘;两个矩阵共享的维度 \(K\) 叫规约维,它决定了每个输出点要做多少次乘法。
3D Cube:三维超级刀工
普通帮工切菜,是一片一片竖着切;超级刀工则完全不同——它让食材在砧板上排成一个立方体,从三个方向同时下刀。CUBE就是这样一把“三维刀”。它不是一个排在平面上的计算阵列,而是一个真正的立体乘加阵列:输入矩阵 \(A\) 从上方“压”下来,权重矩阵 \(B\) 从侧面“挤”过来,结果矩阵 \(C\) 从正面“滚”出去。三个方向的数据在立方体内相遇,每一对需要相乘的数据都恰好被送到对应的乘加器嘴边。
这种立体排布带来了宝贵的“三维复用”。如果只是把一堆乘法器平铺成一条线,那么喂饱它们需要海量的数据带宽,数据搬运会成为瓶颈;而把乘加器堆成立方体后,同一份输入数据可以在一个方向被多个乘加器共享,权重可以在另一个方向被多个输出复用,累加结果还能在第三个方向接力传递。结果就是:搬运量大大降低,每个数据被从内存里取出来后,能在芯片内部反复利用很多次。这就像一位刀工把一块萝卜切成36片后,每一片又能同时切成36根丝——一次备料,百次出菜。
这个三维阵列正是“3D Cube“名字的由来。CUBE每一个周期都在执行一个固定尺寸的矩阵乘加,就像一个标准的”刀法模具“:无论外面的矩阵多大,CUBE每次只稳稳地处理一个 \(16 \times 16 \times 16\) 的”食材立方体”,再由控制逻辑像拼接积木一样,把大矩阵拆成若干个小立方体逐一加工。中间结果暂时存放在CUBE旁边的累加缓冲里,等所有小立方体都算完了,再一次性写回,避免频繁访问内存。
超级刀工的秘诀,不是蛮力,而是“让数据在自己的立体刀网里多转几圈”。正是这个三维结构,让CUBE在同样面积、同样功耗下,比二维计算阵列多赢得一个维度的复用效率。
4096次乘加:刀工评级卡
餐厅给刀工评级,看的是“一分钟能切多少根丝”;CUBE的评级卡上写的则是“一个时钟周期能做多少次乘加”。芯片的时钟每“咔哒”响一次,CUBE就能完成4096次FP16半精度乘加运算。这个数字是怎么来的?因为CUBE是一个每条边长度均为16的立方体运算阵列:输出平面上有 \(16 \times 16 = 256\) 个位置,每个位置都要沿规约维累加16个乘积,所以总操作数就是 \(256 \times 16 = 4096\)。
在计算机体系结构里,“先乘后加”是一对绑定的动作,叫MAC(Multiply-Accumulate)。传统CPU一条指令只能完成1次MAC,GPU的一排处理单元能做几百到上千次,而CUBE一条指令就是4096次,而且是在一个周期内完成的。这靠的不是频率魔法,而是阵列并行:把4096个乘加器像阅兵方阵一样排成16个纵队、16个横排、16个纵深,一次检阅全部完成。用厨房类比,普通厨师按菜谱一步一步来,CUBE则像16×16个帮厨同时站在各自砧板前,每人按顺序完成16刀,一轮下来直接出整盘菜。
同时,CUBE面向的是FP16半精度数据。AI模型的权重和激活值不需要双精度那种“称盐精确到毫克”的执着,FP16的六成精度足够产生出色的模型效果。半精度换来的是存储占用减半、带宽压力减半,而吞吐量却可以翻倍。用更小的数据宽度换取更高的并行度,这正是“能效比优势”的底层逻辑。
评级卡上那行“4096 MAC/Cycle“,是CUBE最响亮的头衔。下次再看到芯片厂商宣传”NPU算力XX TFLOPS“,你可以拆开来看:不过是”4096 × 频率 × 核数”的组合拳罢了。
- 第一个16(输出行)输出矩阵在 \(M\) 方向上有16行;每行对应一个独立的输出行位置。
- 第二个16(输出列)输出矩阵在 \(N\) 方向上有16列;与前一个16共同撑起一个 \(16 \times 16\) 的输出平面,共256个输出格。
- 第三个16(规约深度)每个输出格需要沿 \(K\) 方向对16个乘积累加;\(256 \times 16\) 恰好等于4096次MAC。
数据流水线:别让大厨等菜
刀工再快,食材没到砧板也是空转。CUBE就像一位每分钟能处理成千上万个食材的狂人,但前提是数据必须提前送到它的手边。NPU为此设计了一套专属“传菜系统”:L0缓冲相当于手边的小料碟,L1缓存是台面上的备菜筐,而数据搬运引擎(DMA)则是一群穿着轮滑鞋的传菜员,在内存和各级缓存之间飞速穿梭。如果没有这套系统,CUBE即使算力再高,也只能干等着“巧妇难为无米之炊”。
这套系统里最精彩的设计叫“乒乓机制”。它准备了两组轮换使用的缓冲区A和B:这个周期CUBE专注计算缓冲区A里的数据,DMA同时往缓冲区B里灌入下一批数据;下一个周期,两者角色互换。于是计算和搬运像打乒乓球一样一左一右、无缝衔接。想象你把一筐土豆递给刀工,刀工削皮的时候,你不要站在旁边发呆,而是立刻转身去搬下一筐——一个干活一个补货,谁也不等谁。
这样一来,即使数据搬运本身比较慢,只要它总体不超过计算时间,CUBE就不会空转。整个系统的吞吐不再由“搬运+计算”串行相加决定,而是由两者中较慢的一方单独决定。这正是高性能计算里最经典的思想之一:用重叠掩盖延迟。对于CUBE这种吃数据怪物,搬运效率几乎和计算效率同等重要。
回看这座后厨,最深的智慧不是那把快刀,而是让快刀永不落空的后勤系统。CUBE之所以能保持极高的利用率,靠的正是这条精心设计的“传菜流水线”。
- 计算时长 \(T_{\text{compute}}\)CUBE从L0缓冲取数、执行矩阵乘加、写回中间结果的全部时钟周期。
- 搬运时长 \(T_{\text{memory}}\)数据从内存经DMA引擎搬到L0缓冲所花的时间;它反映食材从仓库到砧板的速度。
- 取最大 \(\max(\cdot)\)重叠后两项并行执行,总时间由较慢环节兜底;只要搬运不比计算慢,刀工就永远有大豆可以处理。
指令集与软件栈:菜谱写好了
一把好刀,没有菜谱就是一块铁片。CUBE的硬件再凶猛,也需要一条条指令来指挥。NPU拥有自己的一套AI指令集,其中一条最显眼的CUBE指令形如 cube(C, A, B, M, N, K),意思是:“请按规格 \(M \times K\) 乘 \(K \times N\),把矩阵A和B相乘并累加到矩阵C。”一条指令,干完一整块矩阵乘法,这正是CUBE能够“一招鲜、吃遍天”的原因。
但麻烦的是,程序员写代码通常用循环,比如三层for循环来算矩阵乘法。为了让循环代码能映射到CUBE指令上,编译器要做“循环展开”:把重复的迭代体逐个摊开,根据矩阵尺寸算出需要多少块 \(16 \times 16 \times 16\) 的立方体,然后生成对应数量的CUBE指令。展开后指令数量有精确的计算公式——这正是软件栈与硬件咬合的关键接口。
更进一步,华为提供了TBE(Tensor Boost Engine)算子开发框架,把底层指令进一步封装成张量算子。开发者用Python描述算子的计算逻辑,TBE会自动生成高性能的CUBE指令序列。这个过程好比过去主厨要现场扯着嗓子喊“倒油、下葱、炒三下”,如今则把每道菜写成标准化流程卡,机器照着卡片批量执行。硬件是“刀”,指令集是“刀谱”,编译器与TBE则是“自动写谱人”,三者缺一不可。
菜谱不只是写给刀工看的,更是写给整个厨房管理体系看的。硬件、指令集、编译器、算子框架共同构成一条完整的“烹饪流水线”,CUBE只是其中最锋利的那把刀而已。
- 向上取整 \(\lceil \cdot \rceil\)当矩阵维度不能被16整除时,多出来的边角料也必须安排一个立方体来承接。
- 行方向分块数\(M\) 方向的输出行分成多少块;每个块对应CUBE输出平面的一行。
- 三方向块数相乘行、列、规约维三个方向的分块数量相乘,得到总指令数;这正是循环展开后CUBE指令的精确条数。
昇腾910实战:后厨开成连锁
单间后厨再厉害,服务的食客也有限;真正的餐饮帝国要把后厨开成连锁。昇腾910芯片就像一座中央厨房,里面集成了多个AI Core——也就是多套“标量+向量+CUBE”三件套工位,工位之间通过高速片上互联彼此协作。每一把“超级刀工”同时开工,整片芯片的总算力就按AI Core数量成倍放大。以1.8GHz时钟频率、32个AI Core做粗略估算,峰值可达每秒数百万亿次FP16乘加,达到“数百TFLOPS量级”的恐怖水平。
算力堆起来之后,软件栈必须跟上。MindSpore等深度学习框架在昇腾平台上做了深度适配:训练阶段可以使用FP16混合精度,把梯度更新等关键环节保留FP32精度,其余矩阵运算统统交给CUBE,像“细火慢炖”一样稳住训练精度;推理阶段则把整个矩阵乘法打包成CUBE指令流水线,像快餐出餐一样快速吞吐。从训练到部署,硬件、框架、算子三方面协同,才让昇腾910真正成为AI算力圈里的“连锁餐饮巨头”。
这也是整篇文章最想传达的一点:CUBE不是一个孤立的硬件名词,它是一整套“三维计算阵列 + 数据流水线 + 指令软件栈”协同设计的结晶。单看4096这个数字令人震撼,但只有当数据流水线把它喂饱、指令集和编译器把它唤醒、框架把它接入真实模型时,这把超级刀工才真正在AI战场上发威。
从一间后厨到连锁帝国,CUBE的故事讲完了。你手里的每一帧AI生成画面、每一次智能语音回复,背后可能都有一把这样的超级刀工在高速运转。理解它,你就理解了这个算力时代最锋利的锋芒。
- 核心数 \(C_{\text{cores}}\)芯片中集成的AI Core数量;每个核心都自带一套CUBE。
- 单核每周期MAC数 4096每个CUBE每周期固定的乘加吞吐;这是单间后厨的刀工极限。
- 时钟频率 \(f_{\text{clock}}\)每秒有多少个时钟周期;把“每周期次数”放大为“每秒总次数”。
AI 应用场景
云端推理服务加速
阶段:部署推理
解决的问题:传统CPU跑大模型的Self-Attention,一个batch要几秒,延迟高、成本高。AI推理服务商需要用专用硬件把矩阵乘法吞吐提上去。NPU的CUBE把QKV投影和多头注意力里的矩阵乘法全部做成立体并行计算,推理延迟从秒级降到几十毫秒。
具体案例:某云厂商在昇腾910上部署BERT类中文理解模型,通过MindSpore的图优化把多个矩阵乘合并为CUBE指令序列,在线推理吞吐量提升约4倍,单次请求成本下降超60%。
自动驾驶视觉感知
阶段:边缘端模型推理
解决的问题:车载芯片功耗有限,但车辆每秒要处理多路摄像头图像,CNN卷积本质上就是大量矩阵乘法。CUBE在FP16下以4096次/周期的密度处理卷积矩阵化后的乘加,让车辆在毫秒级完成目标检测,同时把功耗压在车载可承受范围内。
具体案例:某自动驾驶方案将YOLO系列检测网络部署到昇腾车规级NPU上,利用TBE算子框架定制卷积算子,CUBE利用率达到80%以上,端到端感知延迟低于50毫秒,保障了高速场景下的安全制动。
大模型训练混合精度
阶段:模型训练
解决的问题:大模型参数量动辄百亿,全用FP32训练不仅显存爆炸,且矩阵乘慢。昇腾NPU利用CUBE的FP16高吞吐特性做混合精度训练:矩阵乘用FP16、梯度累积用FP32,既保住精度又成倍加速。
具体案例:某科研机构在昇腾910集群上微调GPT类模型,借助CUBE分块矩阵乘和流水线重叠设计,训练吞吐提升的同时,显存占用较FP32方案减少近半,使原本放不下的千亿参数模型得以在集群内完成微调。
Python 演示
import numpy as np class CubeSimulator: """模拟CUBE的16x16x16分块矩阵乘法""" def __init__(self, edge=16, clock=1.8e9): self.edge = edge self.clock = clock self.cube_cycles = 0 self.mac_per_cycle = edge * edge * edge def cube_mm(self, A, B): M, K = A.shape K2, N = B.shape assert K == K2 C = np.zeros((M, N)) for i in range(0, M, self.edge): for j in range(0, N, self.edge): for k in range(0, K, self.edge): a = A[i:i + self.edge, k:k + self.edge] b = B[k:k + self.edge, j:j + self.edge] C[i:i + self.edge, j:j + self.edge] += a @ b self.cube_cycles += 1 return C def theoretical_mac(self): return self.mac_per_cycle * self.clock def main(): cube = CubeSimulator() A = np.random.randn(64, 64) B = np.random.randn(64, 64) C = cube.cube_mm(A, B) ref = A @ B error = np.max(np.abs(C - ref)) print("分块矩阵乘法CUBE周期数:", cube.cube_cycles) print("每周期MAC次数:", cube.mac_per_cycle) print("理论FP16峰值MAC/s:", cube.theoretical_mac()) print("与NumPy结果最大误差:", error) if __name__ == "__main__": main()
self.mac_per_cycle = edge * edge * edge一个CUBE周期并行完成4096次乘加,这正是三维阵列的核心指标。for i in range(0, M, self.edge)把大矩阵在行方向上切成16行一块的小块,模拟CUBE分块调度。C[i:i + self.edge, j:j + self.edge] += a @ b矩阵乘加并累加到输出块上,对应CUBE的“乘加”语义。self.cube_cycles += 1每算一个立方体记一个周期,最终统计整次矩阵乘法消耗的CUBE周期数。return self.mac_per_cycle * self.clock将单周期MAC放大到每秒,得到理论峰值吞吐量。
常见误区
误区我一直以为NPU里的CUBE就是显卡上的GPU核心,反正都是用来算AI的,叫法不同而已。
正解CUBE和GPU核心本质上是两种物种。GPU的CUDA core是通用流处理器,要应对图形渲染和通用并行计算,硬件上为“任意并行任务”设计;而CUBE是专为矩阵乘加设计的专用集成电路(ASIC),它的三维阵列结构只为一种运算服务。就像普通菜刀和削皮刀的差别——都能切菜,但削皮刀削土豆皮的速度是菜刀比不了的。因此CUBE在矩阵运算上的算力密度和能效比远高于GPU通用核心。
为何常见:因为消费者接触最多的是GPU,且GPU确实能跑AI,于是很容易把“NPU计算单元”想当然地等同于“显卡里的计算单元”。
误区CUBE一个周期能算4096次乘加,那这块NPU芯片每秒就只能做4096次运算吧?
正解4096只是“单个CUBE在单个时钟周期内”的吞吐量。要得到整块芯片每秒的总算力,还要乘以时钟频率(每秒几亿个周期)和AI Core数量(芯片内并联几个CUBE)。拿1.8GHz、32个AI Core粗略估算,每秒乘加次数达到了数十万亿量级。4096是“一刀”的威力,而芯片的真正实力要看“一秒钟能挥多少刀、多少把刀同时挥”。
为何常见:人们习惯把宣传中最显眼的数字当作总量,忽略了频率、核数这些放大系数。
误区AI模型计算要用FP32甚至FP64高精度,FP16半精度误差这么大,算出来的模型肯定不能用。
正解AI的容错能力远超想象。神经网络的权重和激活值分布在有规律的范围内,FP16的表示精度足够捕捉这些数值特征;关键位置还可以用FP32做累加(混合精度),把误差控制住。就像炒菜放盐不需要称到毫克级,调料的大致份量就决定了菜的味道八九不离十。此外,FP16让数据宽度减半,带宽压力减半,CUBE的吞吐获得成倍增长,这是训练大模型时实实在在的速度红利。
为何常见:很多人用“数字精度”的直觉去理解AI计算,忽略了深度学习的鲁棒性和混合精度策略的存在。
误区CUBE有4096次/周期的算力,那芯片实际跑AI模型肯定无敌,数据搬运什么的不用操心。
正解算力再高,数据不到位就会空转。CUBE的4096次乘加必须依赖L0/L1缓存、DMA搬运和乒乓缓冲配合,计算与搬运重叠才能保持高利用率。如果数据搬运时间远大于计算时间,再锋利的刀也只能等菜。真实世界中,很多NPU芯片跑不出理论峰值,短板往往不在算力而在存储带宽。就像米其林后厨,厨师刀工再好,传菜员太慢照样翻台率上不去。
为何常见:硬件宣传总把算力顶峰印在最醒目的位置,而流水线效率这种“软件与体系结构协同”的功夫,普通人很难一眼看到。
误区CUBE是焊在芯片里的硬件电路,软件工程师不用了解它,跑模型靠框架自动搞定。
正解CUBE必须靠指令集、编译器和算子框架配合才能工作。从 cube() 指令的生成,到循环展开后分块数量计算,再到TBE算子开发框架的映射,每一步都是软硬协同的结果。没有编译器把循环翻译成CUBE指令,没有TBE把算子描述转成高效指令序列,CUBE的4096次乘加能力根本无法发挥。软件栈和硬件一样,是决定NPU真实性能的半壁江山。
为何常见:传统观念里“硬件是硬件、软件是软件”,而AI芯片恰恰打破了这条边界,软硬一体设计才是主流。
面试题
Q1. 华为昇腾NPU里的CUBE单元在达芬奇架构中属于什么角色?
- A.通用图形渲染单元
- B.三维矩阵计算单元← 正确答案
- C.中央处理器逻辑单元
- D.量子比特运算单元
答案:B。CUBE是达芬奇架构中专攻矩阵乘加的三维计算阵列,选项1正确。GPU核心(选项0)负责图形与通用并行计算,CPU逻辑单元(选项2)处理通用指令,量子单元(选项3)属于量子计算领域,都不符合CUBE的定位。
Q2. FP16半精度相比FP32的主要优势是?
- A.数值精度比FP32更高
- B.存储占用和带宽开销减半← 正确答案
- C.直接提升芯片的时钟频率
- D.让模型代码编译速度更快
答案:B。FP16的数据位宽是FP32的一半,因此存储占用和传输带宽都减半,CUBE能获得更好的并行效率,选项1正确。FP16精度低于FP32(选项0),与时钟频率(选项2)和编译速度(选项3)都没有直接关系。
Q3. CUBE一个时钟周期能完成多少次FP16乘加运算?
- A.16次乘加运算
- B.4096次乘加运算← 正确答案
- C.64次乘加运算
- D.256次乘加运算
答案:B。CUBE是各边长为16的三维阵列,\(16 \times 16 \times 16 = 4096\)。选项1精确对应CUBE单周期MAC次数。16(选项0)、64(选项2)、256(选项3)分别代表单边长度、单面行数等局部维度,均不是总吞吐量。
Q4. CUBE单周期4096次乘加,从结构上看最根本的原因是?
- A.输出平面256位各乘16次再累加← 正确答案
- B.芯片内部正好有4096个晶体管
- C.编译器把16个循环拼接在一起
- D.数据从存储搬运需要4096时钟
答案:A。CUBE的 \(16 \times 16\) 输出平面上有256个位置,每个位置沿规约维累加16个乘积,因此256乘16得4096,选项0正确。晶体管数量(选项1)与运算结构无关,循环拼接(选项2)是软件层面的循环展开,搬运周期(选项3)属于流水线概念。
Q5. NPU数据流水线中的“乒乓机制”主要是为了解决什么问题?
- A.让芯片温度保持恒定
- B.把矩阵尺寸翻倍再计算
- C.让计算与数据搬运重叠← 正确答案
- D.让两个矩阵相加更加准确
答案:C。乒乓机制用两个缓冲区交替工作:一边计算一边搬运,让 \(T_{\text{compute}}\) 和 \(T_{\text{memory}}\) 重叠执行,避免CUBE空转,选项2正确。温度控制(选项0)、矩阵尺寸(选项1)和计算精度(选项3)都不是双缓冲机制的设计目标。
Q6. 一条典型的CUBE指令 cube(C, A, B, M, N, K) 在硬件上完成的是什么操作?
- A.一条指令完成整块矩阵乘法← 正确答案
- B.一条指令完成单个数值加法
- C.一条指令读取一整页内存
- D.一条指令重置所有缓存数据
答案:A。cube 指令把A和B两个矩阵按M×K乘K×N的规格相乘并累加到C,这是CUBE硬件的核心操作,选项0正确。单个加法(选项1)是标量单元的工作,读内存(选项2)是DMA的职责,重置缓存(选项3)与矩阵计算无关。
Q7. 达芬奇架构中一个AI Core包含哪几类计算单元?
- A.标量计算单元← 正确答案
- B.向量计算单元← 正确答案
- C.三维Cube单元← 正确答案
- D.图形渲染管线
答案:ABC。AI Core由标量计算单元(处理地址与流程控制)、向量计算单元(处理一维数组运算)和CUBE单元(处理矩阵乘加)三部分组成,选项0、1、2正确。图形渲染管线属于GPU的组成模块,不是达芬奇AI Core的一部分。
Q8. 某NPU芯片集成32个AI Core,时钟1.8GHz,每个CUBE每周期4096次MAC,其FP16峰值MAC吞吐约为?
- A.约236 TMAC/s← 正确答案
- B.约4096 TMAC/s
- C.约7.4 TMAC/s
- D.约32 TMAC/s
答案:A。峰值MAC吞吐 = 32核 × 4096次/周期 × 1.8GHz ≈ 2.36e14 MAC/s,即约236 TMAC/s,选项0正确。4096(选项1)只是单核单周期次数,7.4(选项2)是单核乘以1.8GHz的结果,32(选项3)只是核数,三者都未完成量纲换算。
Q9. 以下哪些措施可以有效提升CUBE在实际AI模型中的利用率?
- A.优化数据块排布方式← 正确答案
- B.分块缓存数据提高复用← 正确答案
- C.增加无效数据搬运次数
- D.让计算与搬运互相重叠← 正确答案
答案:ABD。数据排布优化(选项0)能减少存储访问冲突,分块缓存(选项1)能提高三维复用率,计算与搬运重叠(选项3)能消除空转等待,三者都是提升CUBE利用率的有效手段。增加无效搬运(选项2)只会浪费带宽、拖慢系统。
Q10. 计算 \(C = A \times B\),其中 \(M=32\)、\(N=32\)、\(K=64\),CUBE按 \(16 \times 16 \times 16\) 分块,最少需要多少条Cube指令?
- A.需要执行4次Cube运算
- B.需要执行64次Cube运算
- C.需要执行16次Cube运算← 正确答案
- D.需要执行32次Cube运算
答案:C。M方向分块数为 \(32/16=2\),N方向为 \(32/16=2\),K方向为 \(64/16=4\),总指令数 \(=2 \times 2 \times 4 = 16\),选项2正确。4(选项0)少乘了K方向分块数,64(选项1)是三个方向尺寸直接相乘,32(选项3)是把K方向错算为2。