想象你走进一家新开的连锁中央厨房,名字叫Grayskull。街对面是老牌餐厅英伟达,他们靠一两位米其林大厨(超大规模GPU核心)包办一切,出菜快但耗电惊人。Grayskull不走这条路:它请了120个普通厨师班组,每个班组配有小伙计、掌勺大厨和自己的备菜区,大家一起开工,通力合作。这就是Tenstorrent公司推出的首款商用AI加速芯片——Grayskull。它不是什么“另一种GPU”,而是一个数据流驱动的“烹饪网络”:数据像食材一样在班组间流转,计算跟随数据走。而安排这一切的,是一套叫BUDA的“总谱系统”,它把客人的点单(深度学习模型)自动拆成每个班组的操作卡。本篇文章就用这座厨房的故事,带你看懂Grayskull的架构、编程模型和性能真相。
学习价值:看懂非英伟达AI芯片的差异化思路,能在异构计算选型、算子移植评估、AI硬件趋势讨论中建立判断力,帮助你理解“算力不是只有GPU一条路”。
目录
可视化演示
展示Tenstorrent Grayskull的Tensix核心阵列、NoC数据流通信与Tile矩阵计算,交互切换查看AI加速芯片架构核心机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Tensix核心网格:NoC数据流架构 120个Tensix核心以网格阵列排布 NoC数据流在核心间传递张量分块 Tensix = RISC-V + Matrix Unit 数据流驱动避免总线拥塞
芯片定位:新式中央厨房开张
市面上的AI老牌餐厅靠一两位米其林大厨包办一切——成千上万个CUDA核心排成阵列,由统一调度员指挥。而Grayskull这家新开张的中央厨房选择了另一条路:请120个普通厨师班组,每个班组独立备菜、独立掌勺,彼此通过传送带协作。这就是Grayskull和传统GPU最大的气质差异——它不追求单点极致,而是靠大量协作型“班组”取胜。
这场“厨房革命”在技术上对应的是:Grayskull是Tenstorrent公司2021年推出的首款商用AI加速芯片,内部集成了120个Tensix核心。它不是GPU,而是数据流架构——数据像食材一样主动流向各班组,谁有空谁处理,而不是被中央调度员拽来拽去。这样的设计极大减少了无谓的搬运,也让功耗控制得特别低,因此Grayskull早期定位就是AI推理场景,尤其是对功耗敏感的服务器与边缘设备。
要估算这家厨房的总产能,可以套用这个公式:峰值算力 = 班组数 × 每个班组一次颠勺的菜量 × 颠勺频率 × 2。写成数学表达就是:
这家厨房的定位很清晰:不用米其林大厨,用一群配合默契的普通班组,把电费省下来、把出菜量提上去。这种“低功耗 + 高并行”的组合,正是Grayskull在AI推理市场站稳脚跟的第一步。
- N(核心数)Grayskull 拥有 120 个 Tensix 核心,每个核心都是一个独立班组。
- M(每核乘加数)每个 Tensix 的矩阵引擎在一个时钟周期内可以完成成千上万次乘加,这里的 M 代表这个吞吐量。
- f(工作频率)核心实际运行的时钟频率,单位是 GHz,类似“颠勺的速度”。
- ×2(乘加拆分)一次“乘加”是乘法加加法两笔账,算力统计时要各算一次。
Tensix核心:一个厨师班组的配置
走进任何一个Tensix班组,你会看到三种角色:几个手脚麻利的小伙计、一位掌勺大厨、一个贴身的调料架。小伙计们是RISC-V处理器,他们不炒菜,只负责听口令、递食材、收拾台面;掌勺大厨是矩阵计算引擎,所有颠勺爆炒的活儿都由他一个人承担;调料架则是本地SRAM,大厨伸手就能拿到常用配料,不必满厨房跑。
让这个小班组高效运转的关键,是各角色各司其职。矩阵计算引擎是班里唯一的“技术大牛”,他擅长的是深度学习最常用的基本功——矩阵乘法。而RISC-V处理器们虽然只会干杂活,但他们灵活、听话,能完成循环、分支、数据搬运等各种控制类任务。这种“通用控制 + 专用计算”的分工模式,让每个Tensix核心既灵活又高效。
矩阵乘法的本质,就是输出矩阵中每个元素等于左边一行与右边一列逐对相乘再求和:
一个大厨颠一次勺,就算好了一个输出元素;120个班组一起颠勺,整个矩阵很快就能出锅。这个“分工明确、各展所长”的设计,正是Tensix核心的精髓。
- C_{i,j}(成品位置)结果矩阵第 i 行第 j 列的元素,相当于一盘成品菜的量。
- 求和下标 k从 1 到 K 遍历,把 A 的第 i 行和 B 的第 j 列逐对取出来。
- A_{i,k} × B_{k,j}(配对相乘)A 中一个元素与 B 中对应元素相乘,再把所有乘积累加,就得到成品。
内存机制:食材搬运与备菜轮换
传统GPU像一家只有一个巨型冷库的餐厅:所有菜都从冷库取,大厨一伸手就要跨越大半个厨房,路途远、速度慢。Grayskull则让每个班组自带调料架和备菜区——这就是分布式SRAM。每份食材(数据)被切成小块(tile),哪个班组需要,就让食材主动流过去,而不是大厨跑过去取。
“让数据走动、而不是让人走动”是这家厨房的第一法则。每个Tensix核心拥有自己的本地SRAM,计算时优先用身边的食材;只有本地没有的配料,才通过厨房里的传送带——片上网络——从邻居那里借。更妙的是双缓冲机制:每个班组有两个备菜区,一个正在被大厨使用时,小伙计们同步把下一份食材装进另一个备菜区,等上一个用完立刻轮换。这样大厨永远不空等,计算与搬运被完美重叠。
数据流架构是否高效,要算一笔“食材复用账”,也就是算术强度:
双缓冲让搬运和计算像两个齿轮一样咬合转动,而算术强度则是判断这家厨房适不适合做某道菜的先决条件。AI推理任务往往复用率高,正好对上了Grayskull的胃口。
- F(运算量)完成这个任务需要做的浮点操作总数,单位是 FLOPs。
- B(数据量)从内存搬运进来的字节总数,相当于食材的运输量。
- I(算术强度)两者相除。I 高,数据可以被反复用;I 低,厨房忙着搬菜没空炒菜。
网格互联:多间厨房连成网络
一家中央厨房的产能总归有限。幸好Grayskull设计时就考虑了“开分店”:每张卡都有PCIe接口,像外卖柜台一样对接主机;更关键的是卡与卡之间有专门的直连通道,像分店之间的冷链车,让多张卡可以拼成一张大网络,一起处理超大模型。
不过分店之间怎么连是有讲究的。全互联当然最爽——每家分店都有直达管道通向其他所有分店——但管道数量会爆炸式增长。Grayskull选择的是邻居直连:每张卡只和相邻的卡建立高速通道,数据需要时再逐跳中转。这种2D网格拓扑在成本和性能之间取得了平衡,也是多芯片AI加速器的主流做法。
为什么不全互联?算一笔账就明白了。要让 N 家分店两两直连,需要的管道数量是:
扩展是有代价的,但邻居直连让代价变得可以承受。分店越开越多,只要管道不堵,整个厨房网络就能一起接更大的订单。
- N(分店数量)参与互联的芯片总数,比如一个服务器里插了 4 张 Grayskull 卡。
- N(N-1)/2(全互联成本)每两家分店之间都拉一条专线,需要的总线路数。
- 网格替代只连相邻节点,线路数从 O(N²) 降为 O(N),虽然多走几步,但整体成本可控。
BUDA编程:总谱自动分发任务
厨房开了120个班组,如果让每道菜都得厨师们自己商量谁做什么,那肯定乱套。Grayskull的解法是配一位“总谱指挥官”——BUDA。你只需要把客人点的菜(PyTorch/TensorFlow里的深度学习模型)交给BUDA,它就会自动把菜拆成一道道工序,安排到具体的班组、具体的灶台,甚至连哪份食材先送到哪个备菜区都规划得清清楚楚。
BUDA(Big Unified Device Architecture)是Tenstorrent的软件编译栈,核心能力是“自动映射”。它读入高层模型描述后,会先做图优化(把能合并的算子合并)、再切块(把大矩阵切成适合SRAM的小块)、然后做数据布局规划(决定每块数据放在哪个核心的SRAM里),最后生成每个Tensix核心的具体执行任务。整个过程中,开发者不需要手动编写CUDA风格的内核函数,也不需要关心120个核心各自在做什么——这种抽象让AI工程师的上手成本大大降低。
BUDA的调度器本质上在解一个最优化问题——让数据搬运总量最小:
有了总谱指挥官,120个班组看似各自为战,实则配合得像一台精密机器。这也让Grayskull的距离一下子从“硬件玩家”拉近到了“软件可用”。
- move(t)(单次搬运量)第 t 个计算片段需要搬运的数据量。
- 求和(总搬运成本)把所有片段的搬运量加在一起,就是整个任务的数据流动总成本。
- min(最小化目标)BUDA 的调度器在搜索空间中寻找让 S 最小的切块和分配方案。
性能生态:实测出菜速度与口碑
厨房吹得再好,客人还是要看实际出菜速度和电费账单。Grayskull在标准和效推理基准上的表现如何?答案是:能效比相当亮眼,绝对算力与老牌大厂仍有差距。在ResNet-50等经典推理任务上,Grayskull以远低于GPU的功耗跑出了可观的吞吐,非常适合“电费敏感”的大规模部署场景。
用一句话总结Grayskull的性能哲学,就是“省着花”。专注推理而非训练,用专用矩阵单元 + 数据流设计,把每一瓦电都花在刀刃上。衡量这份“省”的指标就是能效比:
但再好的硬件也要看“生态口碑”。Grayskull的软肋很明显:CUDA深耕二十年,积累了海量库和开发者;而Tenstorrent的BUDA生态还很年轻,支持的网络模型和算子仍在快速扩充。这家新厨房的菜好吃,但菜单还薄。未来能否靠开源RISC-V路线和持续迭代打动更多开发者,是决定它命运的关键。
- P_OPS(峰值算力)芯片每秒能执行的操作次数,用前面公式算出。
- TDP(热设计功耗)芯片满负荷跑时的最大发热功率,单位瓦特,代表“电费上限”。
- E(能效比)两者相除,得到每瓦特每秒能做的操作数,即 TOPS/W。
AI 应用场景
数据中心低功耗AI推理
阶段:模型部署与推理优化
解决的问题:传统GPU做大规模推理时功耗高、电费贵,尤其在图片分类、目标检测等7×24小时在线场景,GPU的算力浪费与服务成本都是痛点。Grayskull以数据流架构专攻推理,用远低于GPU的功耗提供同样量级的吞吐,特别适合互联网公司处理海量图片和文本审核。
具体案例:某内容平台需要对每天上亿张用户上传的图片做鉴黄和分类。原本用GPU集群推理,电费占运营成本三成;将模型迁移到Grayskull后,用BUDA自动映射优化,整体功耗下降约60%,推理吞吐满足峰值需求,电费账单明显变薄。
边缘端AI智算盒子
阶段:边缘部署与硬件选型
解决的问题:工厂质检、智慧零售、自动驾驶小车等边缘场景对功耗和体积极敏感,传统GPU体积大、发热高,部署环境受限。Grayskull的低功耗和片上SRAM数据流设计,让它天然适合做成“小盒子”形态的AI推理设备。
具体案例:一家智能制造工厂在流水线上部署缺陷检测系统。工控机原本插着GPU显卡,车间温度高、故障频发。改用Grayskull加速卡后,盒子功耗从300W降到120W,散热压力骤减,同时依靠BUDA的分块调度,实现了金属表面缺陷的毫秒级实时识别。
开源RISC-V AI芯片研究
阶段:硬件架构探索与定制
解决的问题:传统AI芯片的指令集和核心完全黑盒,研究者无法修改内部逻辑做架构实验。Grayskull的Tensix核心基于开源RISC-V指令集,研究者可以查看甚至定制扩展指令,自由探索调度算法和计算单元设计,是高校和芯片创企理想的实验平台。
具体案例:某高校实验室基于Grayskull研究“稀疏矩阵跳过”优化。他们修改RISC-V控制核的微码,让矩阵引擎在遇到零元素时自动跳过计算,在稀疏推荐模型上取得了1.8倍的加速比,论文发表在系统架构顶会上。
Python 演示
import random class TensixCore: """模拟一个Tensix核心:负责一小块矩阵乘法""" def __init__(self, core_id): self.core_id = core_id self.task_count = 0 def multiply(self, tile_a, tile_b): """执行小块矩阵乘法 A*B""" n = len(tile_a) out = [[0] * n for _ in range(n)] for i in range(n): for k in range(n): for j in range(n): out[i][j] += tile_a[i][k] * tile_b[k][j] self.task_count += 1 return out def cut_blocks(mat, block): """把矩阵切成 block x block 的小块,返回行块数和切块函数""" rows = len(mat) // block def get(r, c): return [row[c * block:(c + 1) * block] for row in mat[r * block:(r + 1) * block]] return rows, get def buda_schedule(a, b, block, cores): """BUDA 风格调度:把分块后的乘加任务轮流分给各核心""" nb = len(a) // block a_get = cut_blocks(a, block)[1] b_get = cut_blocks(b, block)[1] c_blocks = {} next_core = 0 for i in range(nb): for j in range(nb): acc = [[0] * block for _ in range(block)] for k in range(nb): core = cores[next_core % len(cores)] next_core += 1 part = core.multiply(a_get(i, k), b_get(k, j)) for r in range(block): for c in range(block): acc[r][c] += part[r][c] c_blocks[(i, j)] = acc return c_blocks, next_core def main(): n = 4 block = 2 a = [[random.randint(1, 3) for _ in range(n)] for _ in range(n)] b = [[random.randint(1, 3) for _ in range(n)] for _ in range(n)] cores = [TensixCore(i) for i in range(4)] c_blocks, total = buda_schedule(a, b, block, cores) print("=== 分块调度结果 ===") for (i, j), blk in sorted(c_blocks.items()): print(f"C块({i},{j}) = {blk}") print(f"共下发 {total} 个乘加子任务到 4 个核心") for core in cores: print(f"核心{core.core_id} 完成 {core.task_count} 次子任务") if __name__ == "__main__": main()
class TensixCore:定义一个Tensix核心类,每个核心有核心ID和任务计数器,对应一个独立厨师班组。def multiply(self, tile_a, tile_b)核心执行小块矩阵乘法,相当于掌勺大厨颠勺做一道菜。cut_blocks(mat, block)把大矩阵切成block×block的小块,对应BUDA的算子切块阶段。buda_schedule(a, b, block, cores)总谱调度函数,决定每一块“乘加子任务”分给哪个核心。next_core % len(cores)使用轮询策略在4个核心间循环分配,模拟BUDA的任务映射。cores[i].task_count统计每个核心实际完成的任务数,可以看到负载均衡效果。
常见误区
误区Grayskull有120个核心,也是并行计算卡,叫它“120核GPU”就行了吧?都是用来跑AI模型的。
正解Grayskull是数据流架构,不是GPU。GPU有统一的大容量显存和SIMT调度模型,所有线程按统一波长执行;Grayskull则把计算和数据打散到120个独立Tensix核心,每个核心自带SRAM,数据通过片上网络在核心间流动。比喻来说:GPU是“一位大厨用一口超大锅”,Grayskull是“120个独立厨师班组各炒各的锅”。
为何常见:两者都是“多核心并行AI芯片”,表面形态太像,外行人容易用一个熟悉的类别去套。
误区既然有120个Tensix核心,性能自然应该是单核的120倍吧?多核不就是线性加速吗?
正解受Amdahl定律和数据搬运开销限制,加速永远达不到线性。任务有串行部分,数据在核心间流动也需要时间。只有BUDA把数据切得足够好、核心间通信足够快,才能逼近线性加速。比喻:120个班组做一道菜,如果食谱规定“第3步必须等第2步的汤炖好”,再多班组也快不了多少。
为何常见:直觉上“人多好办事”,忽略了现实中的并列依赖和通信开销。
误区用Grayskull就得学一套新的CUDA,手动写内核函数、手动管理显存、手动同步线程。
正解BUDA是高层自动映射编译器。开发者描述高层模型,BUDA自动完成算子切块、数据布局、核心分配和调度,不需要手写核心级代码。就像你去餐厅点菜,总谱系统自动把菜分配给120个班组,不需要你进后厨教每个厨师怎么做。
为何常见:习惯了GPU编程模型(CUDA需要手写kernel),默认所有AI芯片都需要底层手工优化。
误区Tensix核心里有多个RISC-V处理器,它们肯定也在参与矩阵计算,不然放那么多CPU干什么?
正解RISC-V处理器只负责控制、同步和数据搬运,真正的矩阵乘加由专用矩阵计算引擎完成。两人分工完全不同:RISC-V是小伙计,负责递菜传菜;矩阵引擎才是掌勺大厨。让RISC-V去做矩阵运算,就像让传菜小弟颠勺,既慢又浪费。
为何常见:只看到“核心内有很多CPU”,忽略了专用加速单元的存在。
误区Grayskull支持多芯片直连,那只要不断加卡、不断连接,算力就可以无限翻倍,GPU做不到的扩展性它都能做。
正解扩展受片间通信带宽的硬约束。数据跨芯片搬运要经过有限的直连通道,模型越大、跨芯片流量越高,管道先堵住,扩展的边际收益急剧下降。比喻:分店之间的冷链车就一辆,菜品再多也运不过来,加再多的厨房也没用。
为何常见:厂商宣传“支持多卡互联”时,容易让人忽略通信带宽这个物理瓶颈。
面试题
Q1. Grayskull芯片内集成了多少个Tensix核心?
- A.32个核心
- B.120个核心← 正确答案
- C.512个核心
- D.1024个核心
答案:B。Grayskull是Tenstorrent首款商用AI芯片,集成120个Tensix核心,每个核心都是独立的“厨师班组”。32是常见GPU的SM数量,512和1024是新一代GPU的核心数量级,都是干扰项。
Q2. Tensix核心中负责执行矩阵乘加运算的是?
- A.精简指令集控制核
- B.专用矩阵计算引擎← 正确答案
- C.片上网络路由器
- D.本地SRAM控制器
答案:B。Tensix核心由RISC-V控制核、矩阵计算引擎和本地SRAM组成。矩阵引擎如同掌勺大厨专做乘加;RISC-V控制核像小伙计负责调度递料;路由器和SRAM控制器都是配套部件,不直接参与运算。
Q3. Grayskull与传统GPU在存储架构上最本质的区别是?
- A.完全不使用任何内存
- B.没有统一大容量显存← 正确答案
- C.使用DDR4替代HBM
- D.内存带宽高出十倍
答案:B。Grayskull采用分布式SRAM,每个Tensix核心自带“备菜区”,数据就近切块处理,没有GPU那种统一大显存。DDR4/HBM只是接口差异,Grayskull并非不用内存,也不是靠带宽取胜。
Q4. BUDA在Tenstorrent软件栈中的角色是?
- A.底层设备驱动程序
- B.编译器与自动映射层← 正确答案
- C.用户态编程语言
- D.分布式文件系统
答案:B。BUDA(Big Unified Device Architecture)是编译栈,读入高层模型后自动完成算子切块、融合、数据布局与核心调度,像总谱系统把点菜分发到各班组。它不是驱动、不是编程语言,也不是文件系统。
Q5. 一个Tensix核心包含以下哪些组件?
- A.精简指令集控制核← 正确答案
- B.专用矩阵计算引擎← 正确答案
- C.本地SRAM缓存← 正确答案
- D.大容量HBM显存
答案:ABC。Tensix是三件套:RISC-V控制核(调度)、矩阵引擎(计算)、本地SRAM(备菜区)。HBM是GPU和部分加速卡使用的统一高带宽显存,Grayskull的分布式SRAM架构中并没有HBM。
Q6. 峰值算力公式 P = N×M×f×2 中,因子"2"代表?
- A.双芯片并行计算倍数
- B.一次乘加算两个操作← 正确答案
- C.双精度浮点模式
- D.核心频率翻倍系数
答案:B。乘加操作(FMA)包含一次乘法和一次加法,统计算力时两个操作都要计入,所以乘以2。这个因子与双芯片、双精度、频率翻倍没有任何关系,是乘加运算本身的语义。
Q7. 关于Grayskull的双缓冲机制,下列说法正确的是?
- A.计算与数据搬运可以重叠← 正确答案
- B.能隐藏一部分访存延迟← 正确答案
- C.会增大统一显存容量
- D.提高每个核心的时钟频率
答案:AB。双缓冲让备菜区A被大厨使用时,备菜区B同步预载下一份食材,计算与搬运重叠、访存延迟被隐藏。它不改变存储容量,也完全不涉及时钟频率,纯属调度层面的优化。
Q8. 多芯片网格互联扩展的主要瓶颈是?
- A.芯片内核心数不足
- B.片间通信带宽有限← 正确答案
- C.编译器不支持多卡
- D.电压无法继续提升
答案:B。多芯片扩展时,数据跨芯片搬运必须经过有限的直连通道,管道带宽是硬瓶颈。核心数、编译器、电压都不是扩展时的首要限制,BUDA本身已支持多卡编译。
Q9. Grayskull实现低功耗推理的关键设计是?
- A.大幅降低核心工作频率
- B.专用矩阵单元加数据流设计← 正确答案
- C.牺牲所有数值计算精度
- D.大幅减少核心数量
答案:B。Grayskull靠专用矩阵引擎和数据流驱动的就近计算实现高能效,数据少走动、算力更聚焦。降频、降精度、减核心都是“牺牲换功耗”的做法,并非设计精髓。
Q10. BUDA编译器自动映射带来的价值包括?
- A.降低AI开发者的上手门槛← 正确答案
- B.自动完成切块与核心分配← 正确答案
- C.需要手工编写DMA搬运码
- D.让开发者无需关心核心布局← 正确答案
答案:ABD。BUDA自动完成算子切块、数据布局、任务分配和调度优化,开发者既不需要手写DMA搬运,也不需要知道120个核心的物理布局,上手门槛自然大幅降低。C选项与自动映射正好相反。