← Cerebras 专题与八个进阶单元

CEREBRAS / LAB 07 OF 08

把消息传下去:三PE scan与空分区

从两PE发送/接收扩展成一条链;用空分区与缺失消息验证协议进度。

本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。

本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。

先备与马上可用的例子

先完成:cerebras-06 →

直接打开机制图,边看边手推

PREDICT FIRST

具体问题与独立预期

输入与约定

三PE按顺序持有P0=[2,-1]、P1=[]、P2=[3,4]。每PE存储容量CAP=2,有效长度分别2/0/2。局部计算inclusive scan,再沿东向传累计total,让各节点得到自己前面的offset。每项限定为整数[-1000,1000],总有效长度至多6;任何前缀绝对值不超过6000,可由f32精确表示。长度超CAP或值域不符先拒绝。

先根据输入写下自己的结果与理由,再展开参考推演;随后运行或检查实现。

对照参考结果与原因

local scans=[[2,1],[],[3,7]];totals=[1,0,7];offsets=[0,1,1];拼接有效输出=[2,1,4,8]。两条链路累计消息均为1;P1必须接收并继续发送,不能因为空数据跳过。

从加法前缀合同独立推导通信协议;“没有输出元素”与“无需推进消息”是两件事。公开两PE路由是API阅读起点,不是已经完成的三PE scan实现。

机制怎样连接起来

先算每个分区local total,再用前面所有total形成offset。P0没有前驱,以offset=0开始;P1接到1后加本地0,继续发1;P2接到1后把[3,7]改为[4,8]。数值可以为0或负数,不能拿payload==0判断“没收到消息”。

CPU协议模型分别存payload、received标记、sent标记与done。每一条边只发送一个累计标量,extent=1,即使中间有效长度0也如此。固定CAP缓冲中的padding不属于输出,host按同一有效长度表截取,不能用删除零值的方法去padding。

本题host固定容量打包为[2,-1,0,0,3,4],共6项;每PE传入、回读CAP=2项。回读后按lengths=[2,0,2]分别取各PE的有效前缀,再拼成4项输出。不能把紧凑的4项输入直接用于总共6项的传输;长度不足必须在host先拒绝。

SDK设计在已完成的两PE机制上新增中间节点:左链和右链使用各自明确的color/queue绑定;中间接收完成任务再更新并发送,发送完成后才结束;末节点只接收并完成,不向不存在的东邻发送。layout传每PE有效长度,host从本次编译参数读同一表。没有SDK时完成CPU模型、路由表和公开API映射,不能把它标成CSL运行。

CHOOSE ONE EXECUTION PATH

按手头环境推进

CPU 路径可以先完成。额外的 SDK 或设备验证要有自己的运行记录;本单元的四小时不同时要求完成四个分支。安装等待超过本页预算时,留下阻塞条件,继续可做的数学、代码与协议工作。

CPU · 现有机器 · 本单元尚未验收

条件:现有macOS或Linux与C++20编译器;不需要加速卡、VM或SDK。

本分支做什么:执行三PE状态模型及空/缺消息/容量超界检查,保留明确等待链。

保存什么证据:保存本人源码、输入、实际输出、退出码与修复记录;仅标CPU逻辑验证,不称官方simulator。

教材初始执行状态:not-executed。这不是对你个人学习进度的判断。

SDK · 编译与环境 · 本单元尚未验收

条件:已获官方SDK访问并具备匹配版本环境;Linux使用官方Apptainer/SingularityCE等前置,Apple Silicon按第01单元核对并自行准备Lima路径。没有环境时仍可先完成CPU分支。

本分支做什么:独立实现3PE扩展并检查参数、queue/color、任务绑定;没有SDK时只保留设计未执行。

保存什么证据:保存实际build_id、编译命令、退出码、产物元数据与源码摘要;只编译不能标运行成功。

教材初始执行状态:not-executed。这不是对你个人学习进度的判断。

官方 simulator · 本单元尚未验收

条件:已经可用的对应官方fabric simulator和同版编译产物;standalone/legacy路径与appliance路径按官方入口区分。

本分支做什么:验证有效输出与参与者完成,使用本人运行trace诊断;不读取其他私有SDK项目产物。

保存什么证据:实际host检查、输入、日志、完成状态与版本分开留在自己的记录;这里没有运行结果。

教材初始执行状态:not-executed。这不是对你个人学习进度的判断。

真实设备 · 本单元尚未验收

条件:用户已经有权使用的Cerebras系统及其管理员支持的版本/运行模式;本课程不要求花钱、租机器或提交集群作业。

本分支做什么:真实系统模式与资源另行核实;没有硬件则不报告路由实机正确性或吞吐。

保存什么证据:设备正确性与性能分别记录;simulator耗时不作为硬件时间,硬件未执行保持未通过。

教材初始执行状态:not-executed。这不是对你个人学习进度的判断。

READ → BUILD → BREAK → EXPLAIN

四小时,留下一个完整产出

可拆成多个时段。每次停下时保存代码、输入、实际结果和下一步,不用重新读整篇。没有通过当前检查时继续修正,不靠翻页推进。

1. 推导有效长度和offset · 35 分钟

  1. 手算本题local/totals/offsets/global四张表,另算[[],[],[]]输出为空但仍有3个参与者。
  2. 写CAP=2以及每PE0..CAP的有效长度检查,固定缓冲padding不算有效数据。

这一段的产出:四表与边界合同

2. 写有状态的CPU协议 · 55 分钟

  1. 给P0/P1/P2分别维护数据、received、sent、done,按合法事件驱动;消息体为累计total,收/发状态另存。
  2. 记录P0 send1→P1 receive1→P1 send1→P2 receive1;检查所有参与者done后才能host完成。

这一段的产出:带事件号的协议oracle

3. 映射到三PE公开API结构 · 85 分钟

  1. 在自己的scan_layout.csl声明P=3、CAP及L0/L1/L2;每个PE文件接收local_count,host读取同一次元数据并检查长度。
  2. 画两种color的路由,写前驱接收完成→本地修正→后继发送完成→结束;无后继不发送。已有SDK才按当前公开queue/task语法实现并编译/运行,否则保留源码设计和CPU实际记录。

这一段的产出:CPU结果与条件性SDK源码/记录

4. 缺失消息诊断 · 40 分钟

  1. CPU模型故意让P1不转发,运行至无可推进事件;应报告P2等待前驱和pending节点,不凭空完成或无限循环。
  2. 已有simulator时只对本人安全的小程序做受控诊断并设限时;打开SDK GUI看所选color、PE和波形/指令轨迹。没有trace则画预期事件,不冒充截图。

这一段的产出:缺消息的等待链与定位依据

5. 英文说明空分区 · 25 分钟

  1. 解释为什么全零total也可能有非空数据,例如[2,-2]。
  2. 给每个后端记录执行范围,下一单元汇总复现材料。

这一段的产出:两分钟协议答辩

EXPLICIT ENVIRONMENT / EXPLICIT STATUS

命令与可保存的起点

以下代码按各自环境使用,运行前完成对应步骤并核对版本。编译失败后停止,不运行目录中的旧二进制;每次采集日志使用新的运行目录。设备程序仅运行在你已有且可使用的环境中。

1. 仅本人三PE源码已声明这些参数;P仅支持3

环境:SDK · 编译与环境 · 状态:not-executed。核对官方 API / 工具说明 ↗

bash · 按说明保存到自己的练习目录
cslc scan_layout.csl --arch=wse2 --fabric-dims=10,3 --fabric-offsets=4,1 --params=P:3,CAP:2,L0:2,L1:0,L2:2 --memcpy --channels=1 -o out-c07
2. 本人scan_host.py已实现有效长度与oracle检查

环境:官方 simulator · 状态:not-executed。核对官方 API / 工具说明 ↗

bash · 按说明保存到自己的练习目录
cs_python scan_host.py --name out-c07
3. 仅已有本人simulator运行产物时,在对应工作目录查看

环境:官方 simulator · 状态:not-executed。核对官方 API / 工具说明 ↗

bash · 按说明保存到自己的练习目录
sdk_debug_shell visualize

一个必须能解释的错误

错误情境:P1长度0就跳过整个节点,或者看到累计值0便认为没有消息。

为什么会错:下游仍依赖P1的进度;零是合法数据,不是传输完成状态。

怎样修复:为长度、数值和received/done分别存字段;空节点发送累计total并走正常完成链。

EVIDENCE BEFORE ADVANCING

验收与面试追问

  • [2,1,4,8]与展平输入的串行scan一致,padding不混入结果。
  • 全空分区仍有完成协议,超CAP先拒绝。
  • P1漏发时模型报告等待链;记录的GUI内容只来自本人实际运行,否则明确是纸上预期。
  • 输入payload有6项,每PE传/读2项;按[2,0,2]提取有效输出,不过滤值0。整数值域与CAP检查先于传输。

最后留下这几项

输入和预期、自己的源码或明确标为推演的状态表、实际命令/输出/退出码、一个失败与修复、后端与版本、尚未执行的部分。运行已有教学例子与独立完成修改分别记录。

1. P2为何加1而不是直接前驱total0?

对照中文要点与英文回答

offset包含所有前驱节点的总和,P1转发的是累计1,不是仅自己的0。

The offset includes every earlier partition, so the middle PE forwards the accumulated total.

2. 两个链路能随意共用同一接收/发送配置吗?

对照中文要点与英文回答

不能。必须分析中间router的来源、去向和queue绑定,防止把接收消息又错误广播;本练习先用明确的两链路合同。

I give each link an explicit route and queue contract instead of assuming a shared configuration is safe.

3. 没有可推进事件就一定证明实机死锁吗?

对照中文要点与英文回答

只能说明给定CPU状态模型在其假设下无法推进;真实系统还需实际task/queue/route状态和trace验证。

A stalled model identifies a protocol issue under its assumptions, not a proven hardware trace.

这些是依照本单元机制设计的追问,不是公司真题。个人验收仍依据实际代码、测试、测量与口述。

资料与版本核验

  • 6. Routes and Fabric DSDs ↗

    Receive/send async operations; local completion tasks; per-PE routes

    核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。

  • SDK GUI ↗

    Routes and Colors; Wavelet Traces; pre/post-execution artifacts

    核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。

  • CSL Compiler ↗

    Compile-time parameters and target fabric

    核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。

  • SdkRuntime API Reference ↗

    Result transfer and host completion

    核验日期:2026-09-05。官方公开文档于2026-09-05核验;安装页所列下载包为SDK 2.10.0-{build_id}。这不是本机安装事实。执行时记录实际tarball/build_id、目标WSE架构和对应文档版本。

正文、问题和实践设计依据公开资料独立撰写。官方页面的示例输出是资料中的结果,不是本机运行证据。latest 链接可能变化,请在自己的复现说明中保留实际版本。