想象你是一个大型交响乐团的总指挥。GPU 的做事方式像指挥几十个“声部小组”——每个小组里的乐手都演奏完全相同的乐谱,只是音高不同,这种“整齐划一”的模式在演奏宏大的和弦时效率极高。但问题来了:当乐谱突然出现复杂的独奏段落(比如稀疏计算),或者某个声部需要临时变奏(比如动态分支),整个小组都得停下来等待,浪费了大量乐手的时间。 而 Graphcore IPU 的诞生,就像把乐团彻底改组:1472 位独立乐手,每人面前摆着一份完全属于自己的乐谱,通过一个高速的“传话网络”随时与任何其他乐手交流。每个人都可以按照自己的节奏演奏,不需要等别人;需要协作时,只需隔着一个“同步点”互相确认一下进度即可。这种“细粒度并行”的哲学,让 IPU 在面对稀疏、动态、不规则的计算任务时,展现出传统 GPU 难以企及的灵活性。 如果把 AI 模型的训练比作一场演出,那么 GPU 擅长的是“整齐的方阵操练”,而 IPU 擅长的是“爵士乐即兴合奏”。Poplar 编译器则像一位资深的编曲师,把庞大的模型乐谱拆解成 1472 份独立分谱,并精心规划每个乐手的演奏时序和沟通节点。这篇文章,我们就从这场“乐团改革”说起,拆解 IPU 的核心架构、并行模型、编程哲学及其独特优势。

岗位关联

理解 IPU 的细粒度并行理念,能让你在 AI 芯片选型、大规模模型部署和性能优化时,跳出“唯 GPU 论”的思维定式,具备应对稀疏计算与动态图等前沿挑战的架构视野。

目录
  1. 可视化演示
  2. 芯片定位:为 AI 量身定制的“爵士乐团”
  3. 核心架构:1472 个乐手的精密合奏
  4. 并行模式:MIMD 与 BSP 的“自由爵士”
  5. 编译器映射:Poplar 的“编曲魔法”
  6. 优势分析:稀疏与动态计算的优等生
  7. 产业生态:从破局者到挑战者
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

通过MIMD并行模型、BSP同步通信和IPU与GPU对比三个模式,展示Graphcore IPU细粒度并行AI芯片的核心架构特点。

本节配有交互动效(进入视口后自动加载,约 3KB)。

MIMD细粒度并行模型 IPU每个核心独立执行不同指令,实现真正的MIMD并行 GPU采用SIMT模型,同组核心必须执行相同指令 MIMD: N cores × M instructions → N×M parallelism 细粒度并行使IPU在稀疏和动态计算中具有天然优势

芯片定位:为 AI 量身定制的“爵士乐团”

传统 GPU 就像一支纪律严明的军乐团——所有乐手被分成小组,每组齐奏同一段旋律。这种设计最初是为了图形渲染,因为屏幕上成千上万的像素点都在执行相同的变换操作,天然适合“单指令多数据”。然而 AI 模型的计算模式远比图形渲染复杂:稀疏连接、动态分支、不规则张量操作,让 GPU 的“整齐方阵”常常陷入空转。Graphcore 公司看到了这个痛点,决心打造一款从零开始为 AI 设计的芯片,这就是 IPU——Intelligence Processing Unit,智能处理单元。

如果把 AI 芯片市场比作一场演唱会,英伟达是舞台上光芒四射的摇滚巨星,而 Graphcore IPU 则像一位刚登场的小众爵士乐手。它不追求在传统矩阵乘法上与 GPU 硬碰硬,而是瞄准 GPU 最不擅长的领域——稀疏计算和动态图。IPU 的设计哲学是:AI 计算本质上是众多独立神经元的活动,每个神经元都有自己的“小算盘”,与其强迫它们整齐划一,不如给每个神经元配一个专属处理器。

技术层面,IPU 的不同之处在于它的“全局同步”思想。传统 GPU 使用 SIMT 模型,一组线程必须同步执行同一条指令,遇到分支时部分线程会被屏蔽,计算资源白白浪费。IPU 采用的 MIMD 模型允许每个核心独立取指、独立执行,配合 BSP 同步机制,在需要协作时统一对齐一次步伐即可。这种设计让 IPU 在稀疏、动态、混合精度的 AI 负载中展现出独特的架构红利。

核心架构:1472 个乐手的精密合奏

走进 IPU 的“排练厅”,最震撼的莫过于密密麻麻的 1472 个独立处理器核心。与 GPU 中数十个大型 SIMT 核心不同,IPU 的核心每个都非常简单,没有复杂的分支预测和乱序执行部件,但胜在数量庞大且完全独立。每个核心都配有自己私有的 SRAM 存储,总片上存储容量高达 900MB,远超 GPU 的寄存器文件。这就像给每位乐手都配了一间独立的小琴房,乐谱和乐器随手可得,不需要频繁跑到后台仓库(片外显存)取东西。

核心之间通过一个高效的片上交换网络互联。在传统多核芯片中,核心间通信往往要通过共享总线或层级缓存,延迟高且容易成为瓶颈。IPU 的网络是专门为 AI 计算设计的,任意两个核心之间可以通过片上网络直接交换数据,通信延迟极低。这就像乐手之间通过一个高效的传话筒网络直接交流,不需要把信息先交给指挥再分发。

\begin{equation}

\text{IPU 核心数} = 1472, \quad \text{每核心 SRAM} \approx 624 \text{ KB}, \quad \text{片上总存储} \approx 900 \text{ MB}

\end{equation}

1. 核心总数:IPU 单芯片集成了 1472 个处理器核心,每个核心独立执行指令

IPU 核心数=1472\text{IPU 核心数} = 1472

2. 每核心存储:每个核心拥有约 624KB 的本地 SRAM,用于存储权重和中间激活值

每核心 SRAM≈624 KB\text{每核心 SRAM} \approx 624 \text{ KB}

3. 总存储容量:所有核心本地存储之和接近 900MB,加上其他片上存储,IPU 可以在片内容纳大部分模型参数

片上总存储≈900 MB\text{片上总存储} \approx 900 \text{ MB}

回到乐团的比喻:1472 个核心就像 1472 位各怀绝技的乐手,每个人在自己的琴房里准备好乐谱(权重数据),通过传话筒网络(片上交换网络)随时交流。这种架构的深层含义是:数据本地性极高,大部分计算可以在核心内部完成,无需频繁访问片外 DRAM——这正是 AI 计算中内存带宽瓶颈的破解之道。

并行模式:MIMD 与 BSP 的“自由爵士”

IPU 的并行模式可以用一个词概括:MIMD——Multiple Instruction stream, Multiple Data stream,多指令流多数据流。这意味着每个核心在任何时刻都可能执行不同的指令。GPU 的 SIMT 模式就像阅兵方阵:排长喊一声“齐步走”,所有人必须迈同一只脚;而 IPU 的 MIMD 模式则像自由爵士演奏:每个乐手即兴发挥自己的旋律,但通过默契的和声规则(同步机制)保持整体协调。

BSP(Bulk Synchronous Parallel,整体同步并行)模型是 IPU 的灵魂。它将并行计算划分为一个个“超级步骤”:在每个超步中,所有核心独立并行计算;超步结束时,核心通过片上网络交换数据,然后统一到达一个全局同步屏障;所有核心都到达后,才进入下一个超步。这就像爵士乐团约定:每个人自由独奏 8 小节,8 小节结束大家一起碰个酒杯确认进度,然后开始下一段独奏。

\begin{equation}

\text{超步周期} = \text{计算阶段} + \text{通信阶段} + \text{同步屏障}

\end{equation}

1. 计算阶段:所有核心并行执行本地指令,互不干扰,这是真正意义上的细粒度并行

计算阶段:每个核心执行独立指令\text{计算阶段}: \text{每个核心执行独立指令}

2. 通信阶段:核心之间通过片上网络交换数据,将计算结果传递给需要它的邻居核心

通信阶段:核心间数据交换\text{通信阶段}: \text{核心间数据交换}

3. 同步屏障:所有核心到达屏障点,等待最慢的那个核心完成,然后统一进入下一轮

同步屏障:等待最慢核心\text{同步屏障}: \text{等待最慢核心}

你可能会问:同步等待不会浪费性能吗?确实会,但 BSP 模型换来的是巨大的编程简化。在 GPU 的 SIMT 模型下,程序员需要精心管理线程同步、避免死锁、处理分支发散;而在 IPU 的 BSP 模型下,Poplar 编译器自动处理了这些细节,程序员只需要描述计算图,编译器就能自动完成分区、映射和调度。就像乐手只需要专注于演奏自己的音符,总谱的协调工作全部交给了编曲师。

编译器映射:Poplar 的“编曲魔法”

如果说 IPU 硬件是乐团,那么 Poplar 编译器就是那位神秘的编曲师。GPU 世界里,程序员用 CUDA 手写 Kernel,如同指挥为每个声部逐段编写分谱;而 IPU 世界里,Poplar 编译器接收的是 PyTorch 或 TensorFlow 的高层计算图,自动完成从“总谱”到“1472 份分谱”的转换。

Poplar 的核心策略是“图映射”:它将计算图拆分成数以千计的小型子图,每个子图对应一个 IPU 核心;然后通过图着色、划分和布局算法,为每个子图分配核心、规划数据流。这个过程中,编译器会自动平衡计算负载,减少核心间通信量,并优先将频繁交互的计算放在物理相邻的核心上——就像编曲时,让经常配合的两个乐手坐在一起。

\begin{equation}

\text{映射目标:} \quad \min \left( \lambda \cdot T_{\text{计算}} + (1-\lambda) \cdot T_{\text{通信}} \right)

\end{equation}

1. 计算时间项:所有核心中计算量最大的那个核心所需的时间,决定了整个超步的耗时

T计算=max⁡iTcoreiT_{\text{计算}} = \max_{i} T_{\text{core}_i}

2. 通信时间项:整个计算图中所有核心间通信所需的总时间,通信越少越好

T通信=∑i≠jTcommi→jT_{\text{通信}} = \sum_{i \neq j} T_{\text{comm}_{i \to j}}

3. 权重系数:λ 是一个超参数,控制计算与通信的权衡;λ 大则优先减少计算时间,λ 小则优先减少通信

λ∈[0,1]\lambda \in [0,1]

Poplar 编译器还支持丰富的调试工具和性能分析器,让开发者能够看到每个核心的运行状态、内存占用和通信流量。这种“透明化的编曲过程”是 GPU 生态难以比拟的:CUDA 程序员往往只能看到 Macro 级别的调度结果,而 Poplar 允许你深入到每个核心的指令级视角,真正实现“细粒度并行”的可视化和可控化。对 AI 从业者而言,这意味着更深的性能洞察和更精准的优化空间。

优势分析:稀疏与动态计算的优等生

IPU 最大的优势体现在稀疏计算与动态计算中。所谓稀疏,是指计算矩阵中大量元素为零;所谓动态,是指模型结构在运行时会改变。这两者恰好是 GPU 的阿喀琉斯之踵。在 GPU 的 SIMT 模型中,即使只有 1% 的非零元素,也得让整个线程束参与计算并屏蔽空转线程;而 IPU 的 MIMD 模型下,每个核心独立处理一个非零元素,遇到零元素的核心直接跳过,毫不浪费。

让我们以图神经网络(GNN)中的稀疏矩阵乘法为例。图的邻接矩阵通常极度稀疏——社交网络中平均每人只有几百个好友,但用户总数却有数亿。GPU 处理这种计算时,需要将稀疏矩阵稠密化或分组填充;IPU 则可以将每个节点及其邻居映射到一个核心,核心之间通过片上网络直接交换消息,天然契合图计算的消息传递范式。这就像爵士乐中乐手之间的即兴呼应,每个人只关注和自己配对的乐手,而不是等整个乐团同步。

动态计算是 IPU 的另一个主场。在自然语言处理中,不同句子长度不同、不同批次数据分布不同;在强化学习中,网络的输入维度甚至结构都会动态变化。GPU 对这些场景非常头疼,因为需要不断重新编译 Kernel 或填充到固定尺寸;IPU 的核心独立性和 BSP 模型让动态执行变得自然:每个核心可以在自己的超步中决定执行哪条路径,遇到条件分支时直接跳转,不需要让整个核心组都执行两遍。

\begin{equation}

\text{加速比} = \frac{\text{GPU 处理稀疏矩阵的时间}}{\text{IPU 处理稀疏矩阵的时间}} = \frac{k \cdot N^2}{m}

\end{equation}

1. GPU 时间复杂度:GPU 处理 N×N 稀疏矩阵时,由于 SIMT 模型的限制,仍需遍历整个矩阵规模,耗时约为 N 的平方量级

TGPU≈k⋅N2T_{\text{GPU}} \approx k \cdot N^2

2. IPU 时间复杂度:IPU 只需处理 m 个非零元素,每个核心负责一个元素,耗时为非零元素个数 m

TIPU≈mT_{\text{IPU}} \approx m

3. 加速比:两者相除即可得到理论上限;当稀疏度极高(m ≪ N²)时,加速比可以非常惊人

加速比=k⋅N2m\text{加速比} = \frac{k \cdot N^2}{m}

当然,IPU 并非万能。对于稠密的大型矩阵乘法(比如 Transformer 中的标准注意力计算),GPU 经过几十年的优化沉淀,其 Tensor Core 的吞吐能力依然是行业顶尖。IPU 的细粒度并行在面对“超大规模稠密矩阵”时,反而可能因为每核心计算能力较弱而处于劣势。因此,IPU 最适合的场景是:稀疏图数据、动态结构模型、混合精度的推理任务——这是它的“舒适区”。

产业生态:从破局者到挑战者

一颗芯片的成功,不仅取决于硬件性能,更取决于软件生态。Graphcore 深知这一点,因此推出了 Poplar SDK,提供了完整的开发工具链:Poplar 图编译器、PopART 推理引擎、PopVision 性能分析器等。这套 SDK 支持主流的 PyTorch 和 TensorFlow,AI 开发者只需将模型迁移到 IPU 平台,就能自动享受到细粒度并行和 BSP 调度带来的优势——前提是模型的计算模式适合 IPU。

如果说 CUDA 生态是 GPU 的“护城河”,那么 Poplar 就是 IPU 的“攻城锤”。Graphcore 积极拥抱开源,与 Hugging Face 合作预训练了多个大语言模型,在 IPU 上运行 BERT 和 GPT 的性能测试成绩相当亮眼。但生态的建立非一日之功:CUDA 积累了十五年的库函数、工具链和开发者社区,AI 工程师十有八九都熟悉“nvidia-smi“,却鲜有人见过”gc-monitor”。

从商业化进程看,Graphcore 的 IPU 已经在微软 Azure、英伟达竞争的云服务商中部署,也推出了 Colossus MK2(GC200)等第二代产品。2023 年,Graphcore 被软银集团收购,估值约 5 亿美元——相比英伟达万亿市值这是“九牛一毛”,但侧面说明了 IPU 的技术价值获得了资本认可。对于 AI 从业者而言,多了解一个 IPU 这样的架构,就多一种解决性能瓶颈的工具箱。

回到乐团的比喻:GPU 是已经磨合多年的老牌交响乐团,乐师经验丰富、指挥调度成熟,是所有厅堂的首选;IPU 则是新兴的爵士组合,乐手个人技艺高超、配合默契,在特定曲风(稀疏与动态计算)上表现出色,但目前能演奏的曲目(生态库)还不够丰富。选择哪个,取决于你的演出需求。

AI 应用场景

图神经网络的稀疏训练与推理

阶段:模型训练与部署

解决的问题:图神经网络处理大规模稀疏图时,GPU 需要将稀疏矩阵填充为稠密块,导致计算和存储浪费严重;IPU 的细粒度并行可让每个核心直接负责一个节点的消息传递,无需稠密化。

具体案例:某社交平台要训练一个 10 亿节点、200 亿边的推荐图模型。传统 GPU 服务器需要 8 卡 V100 并花费大量显存存储零元素填充后的稠密矩阵,训练一个 epoch 需要 12 小时。改用 IPU 后,Poplar 编译器将图节点映射到 1472 个核心上,每个核心独立处理邻居聚合,训练时间缩短至 4 小时。这就像让每个乐手独立演奏自己的声部,而不是让所有人都跟着节奏空转等待。

动态结构模型的推理优化

阶段:模型推理

解决的问题:C++ 编写的动态计算图模型在 GPU 上推理时,频繁的 Kernel 启动和动态形状填充带来严重延迟;IPU 的 MIMD 架构支持每个核心动态跳转,配合 BSP 同步模型天然适合变长输入序列。

具体案例:一家自动驾驶公司需要在车内实时运行多任务感知模型,其中部分分支根据环境动态启用(如检测到雨天就启用雨刷预测分支)。GPU 需要同时预加载所有分支的 Kernel,浪费显存和算力。在 IPU 上,每个分支被映射到独立的核心组,运行时只有被激活的分支才执行,整体推理延迟下降了 35%,功耗降低了 20%。

大规模 Transformer 的预训练加速

阶段:预训练

解决的问题:Transformer 训练中稀疏注意力机制和动态批处理大小在 GPU 上会遇到负载不均问题;IPU 的细粒度并行让每个核心处理一个 Attention Head 的部分计算,BSP 同步保证梯度一致性。

具体案例:Graphcore 与 Hugging Face 合作,在 16 个 IPU 上完成了 350M 参数 GPT-2 模型的训练。相比同等功耗的 GPU 集群,IPU 在长序列训练场景下的吞吐量提升了 1.8 倍,主要得益于 900MB 片上存储减少了对 HBM 的依赖。这就是让每位乐手把自己的分谱背熟(存储本地化),而不是频繁翻看总谱。

Python 演示

python64 行
# -*- coding: utf-8 -*-"""演示 Poplar 编译器风格的图映射策略模拟"""import numpy as np  class Graph:    """极简计算图"""     def __init__(self, num_nodes):        self.num_nodes = num_nodes        self.nodes = list(range(num_nodes))        self.edges = []     def add_edge(self, src, dst):        self.edges.append((src, dst))  class IPUArchSimulator:    """IPU 架构模拟器:加锁等待所有核心函数执行完毕"""     def __init__(self, num_cores):        self.num_cores = num_cores        self.sparse_map = {}     def map_graph_to_cores(self, graph):        """将计算图节点映射到核心"""        self.sparse_map.clear()        for i in range(graph.num_nodes):            self.sparse_map[i] = i % self.num_cores        return self.sparse_map     def compute_node(self, node_id):        """模拟计算一个节点"""        return node_id * node_id + 1     def simulate(self):        """执行一轮 BSP 计算"""        core_results = {}        for node, core in self.sparse_map.items():            val = self.compute_node(node)            core_results.setdefault(core, []).append(val)        bsp_weights = [sum(vals) for vals in core_results.values()]        return max(bsp_weights) / min(bsp_weights) if min(bsp_weights) > 0 else 0.0  def main():    """模型偏斜对比"""    graph = Graph(8)    graph.add_edge(0, 1)    graph.add_edge(1, 2)    graph.add_edge(2, 0)    graph.add_edge(3, 4)    sim = IPUArchSimulator(num_cores=4)    mapping = sim.map_graph_to_cores(graph)    print("节点到核心的映射:")    for key, val in mapping.items():        print("  node {}, core {}".format(key, val))     average_ratio = sim.simulate()    print("各核心负载均衡比: {:.4f}".format(average_ratio))  if __name__ == "__main__":    main()
目的:模拟 IPU 计算图映射与 BSP 同步的核心逻辑,展示如何将计算图节点分配到多个独立核心并评估负载均衡。
  1. self.sparse_map.clear()清空映射表,避免上次的映射残留影响本次模拟
  2. for i in range(graph.num_nodes)遍历计算图中的所有节点,为每个节点分配一个核心
  3. self.sparse_map[i] = i % self.num_cores将节点均匀哈希到核心上,模拟 Poplar 的初始图划分
  4. core_results.setdefault(core, []).append(val)按核心分组汇总计算结果,模拟每个核心的独立工作
  5. max / min计算负载均衡比,衡量所有核心是否“同步到达屏障”的关键指标

常见误区

误区IPU 有 1472 个核心,而 A100 只有 108 个 SM,核心数多十几倍,算力一定碾压 GPU。

正解核心数不能直接代表算力。GPU 的每个 SM 内部有 64 个 FP32 单元,一个 SM 能同时执行 128 个浮点运算;而 IPU 的每个核心单周期只能完成少量浮点运算,总吞吐量远低于 A100。IPU 的优势不在于峰值算力,而在于异步性:每个核心独立执行不同指令,在稀疏和动态计算中避免了大量空转。

为何常见:人们习惯用核心数量衡量芯片性能,这是从多核 CPU 时代延续的直觉,但 AI 芯片的算力取决于 FLOPS 和内存带宽的协同,而非单纯核心数。

误区MIMD 就是每个核心完全自由、毫无同步,就像一群完全独立的乐手各弹各的。

正解IPU 采用 BSP 同步模型,所有核心在超步结束时必须统一到达同步屏障,等待最慢的核心完成才能进入下一轮。同步虽然会带来等待开销,但它保证了计算的可确定性和正确性。IPU 的自由是“超步内部的自由”,而不是“全时段的无序”。

为何常见:MIMD 中“多指令流”容易让人误以为完全没有协调,忽略了 BSP 模型这个关键配套机制。

误区IPU 只擅长稀疏矩阵,遇到稠密矩阵就完全没用,只能用于图神经网络。

正解IPU 同样能高效执行稠密矩阵乘法、Transformer 等主流模型。Graphcore 官方在 MLPerf 上展示了 BERT 和 ResNet 的训练成绩,Poplar 编译器会将稠密矩阵自动切分为细粒度子任务分配到各核心。只是相比 GPU,IPU 在稠密场景下的优势不明显,而在稀疏与动态场景下优势才会凸显。

为何常见:宣传材料总是强调差异化优势,导致用户将“优势场景”误解为“唯一场景”。

误区Poplar 编译器就像一个简单的翻译器,把现有框架的代码换个后端就能跑,性能优化空间有限。

正解Poplar 是一个完整的计算图编译与优化器:它负责图划分、核心映射、通信规划、内存分配、指令调度,远比“翻译器”复杂。程序员甚至可以手写 Poplar 的 C++ 顶点代码来精细控制每个核心的行为,获得接近硬件极限的性能。编译器的工作方式更像编曲师对总谱进行重新编排,而非逐字翻译。

为何常见:现代编译器的高级程度往往被低估,很多人用 Python 解释器的直觉去理解编译器的工作。

误区每轮都等待最慢的核心,这种同步机制在负载不均时就是灾难,效率一定不如 GPU 的 SIMT。

正解BSP 模型确实会引入同步等待,但 SimT 模型的分支发散和线程束切换开销同样存在。关键在于负载均衡:Poplar 编译器通过精细的图划分和映射,让每个核心的工作量尽量接近,从而将同步等待时间降到最低。在某些不规则负载下,BSP 的同步开销远小于 GPU 的空转浪费。

为何常见:人们容易忽视 GPU 的隐式同步开销,却对 IPU 的显式同步机制格外苛刻,这是一种认知偏差。

面试题

Q1. 关于 IPU 的核心数量,下列说法正确的是?

单选题 · easy

  • A.IPU 集成了 1472 个独立处理核心← 正确答案
  • B.IPU 集成了 108 个流式多处理器
  • C.IPU 只有 64 个计算核心
  • D.IPU 的核心数量与 GPU 完全相同

答案:A。IPU 集成了 1472 个独立处理核心,这是其细粒度并行架构的基础。108 个 SM 是英伟达 A100 的配置,64 个核心是另一款芯片的参数。

Q2. IPU 采用 MIMD 架构,与 GPU 的 SIMT 相比,核心优势是什么?

单选题 · mid

  • A.每个核心可以独立执行不同指令← 正确答案
  • B.所有核心必须执行完全相同指令
  • C.核心之间无法相互通信
  • D.只能处理稠密矩阵计算

答案:A。MIMD 允许每个核心独立取指、独立执行,这是处理稀疏和动态计算的关键。SIMT 强调同指令多数据,B 是 SIMT 特征,C 和 D 均与 IPU 特性相悖。

Q3. BSP 并行模型中,“超步”包含哪三个阶段?

单选题 · mid

  • A.计算、通信、同步屏障← 正确答案
  • B.读取、写入、缓存
  • C.加载、存储、释放
  • D.编译、链接、执行

答案:A。BSP 模型中,每个超步由三个有序阶段组成:本地计算、全局通信和同步屏障。所有核心完成计算后,交换数据,然后统一同步进入下一超步,这保证了并行的确定性。

Q4. 关于 Poplar 编译器的图映射策略,以下说法正确的有哪些?

多选题 · hard

  • A.将计算图拆分为多个子图← 正确答案
  • B.每个子图映射到独立 IPU 核心← 正确答案
  • C.自动规划核心间的数据通信时序← 正确答案
  • D.只支持 TensorFlow,不支持 PyTorch

答案:ABC。Poplar 的核心工作就是图拆分、子图映射和通信规划,同时支持主流框架包括 PyTorch 与 TensorFlow。D 选项错误。

Q5. 稀疏矩阵 A 为 N×N,非零元素个数为 m,IPU 处理该矩阵乘法的理论耗时为?

单选题 · mid

  • A.O(N²)
  • B.O(m)← 正确答案
  • C.O(N log N)
  • D.O(N)

答案:B。IPU 的 MIMD 模型让每个核心处理一个非零元素,因此时间复杂度与非零元素个数 m 成正比。GPU 因 SIMT 限制需要 O(N²) 的访存,这正是 IPU 在稀疏场景的优势来源。

Q6. IPU 相比 GPU 在哪些场景下更有优势?

多选题 · mid

  • A.高稀疏度图神经网络← 正确答案
  • B.动态结构模型推理← 正确答案
  • C.超大规模稠密矩阵乘法
  • D.不规则批处理负载← 正确答案

答案:ABD。IPU 的核心独立性让它在稀疏、动态、不规则负载中优势明显。稠密矩阵乘法是 GPU Tensor Core 的主场,IPU 在该场景下不具备优势。

Q7. IPU 片上总存储容量约为多少?

单选题 · easy

  • A.40MB
  • B.900MB← 正确答案
  • C.80GB
  • D.16GB

答案:B。IPU 拥有约 900MB 的片上 SRAM,这是其数据本地化设计的关键。80GB 是 H100 的 HBM 容量,16GB 常见于消费级 GPU,40MB 远低于 AI 芯片需求。

Q8. 关于 BSP 同步模型与 SIMT 模型的区别,下列说法最准确的是?

单选题 · hard

  • A.BSP 在超步内允许自由执行,SIMT 要求每个线程束内指令同步← 正确答案
  • B.BSP 不需要同步,SIMT 需要同步
  • C.BSP 用于 CPU,SIMT 用于 GPU
  • D.BSP 比 SIMT 更容易产生死锁

答案:A。BSP 的同步粒度是“超步”级别,超步内核心自由执行;SIMT 的同步粒度是“指令”级别,线程束内所有线程执行同一条指令。B、C、D 均不准确。

Q9. 以下哪些是 Graphcore IPU 的核心特点?

多选题 · easy

  • A.1472 个独立处理核心← 正确答案
  • B.支持 MIMD 多指令流并行← 正确答案
  • C.使用 Poplar 编译器进行图映射← 正确答案
  • D.完全取代 GPU 成为通用计算芯片

答案:ABC。IPU 的核心特点包括大数量核心、MIMD 架构和 Poplar 编译器生态。D 选项错误,IPU 是面向 AI 计算的专用芯片,不能完全取代 GPU 的通用计算能力。

Q10. 采用 Poplar 编译器时,映射优化目标通常包含哪些因素?

单选题 · mid

  • A.最小化计算时间与通信时间的加权和← 正确答案
  • B.最大化核心数量的使用率
  • C.最小化片上存储总量
  • D.最大化编译器运行速度

答案:A。Poplar 的映射优化核心是在计算时间与通信时间之间找到平衡点,通过加权求和的方式平衡负载。B、C、D 都不是编译器的主要优化目标。