← Cerebras 专题与八个进阶单元

CEREBRAS / LAB 05 OF 08

多个PE先各算一份:打包顺序必须可见

从同任务复制过渡到不同输入,验证PE矩形、每PE元素数和回读顺序。

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

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

先备与马上可用的例子

先完成:cerebras-04 →

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

PREDICT FIRST

具体问题与独立预期

输入与约定

程序矩形width=3,height=1,每PE算M=2,N=3的GEMV。A在每PE都是[[1,2,3],[4,5,6]]、b=[0,0]。先三份x都为[1,2,1];再令PE0/1/2的x分别[1,2,1]/[0,1,0]/[1,0,0]。

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

对照参考结果与原因

同输入回读按PE顺序为[8,20,8,20,8,20];不同输入为[8,20,2,5,1,4]。第二轮host x打包为[1,2,1,0,1,0,1,0,0],共9项;每PE仍只收3项。

公开Multiple PEs教程复制同一任务,不是自动将一次GEMV并行切分。不同输入的变体可以验证谁收到了哪份数据。

机制怎样连接起来

三个PE都执行相同代码,但每个有自己的局部数组。layout需要给三个坐标分配PE代码,并把各列的memcpy参数传过去;只改width却没有配置全部tile并不完整。

先将相同A/x/b复制为三份payload,再改变x来识别PE。ROW_MAJOR描述传输穿过PE矩形的顺序;本题单行PE很直观,内层每PE元素数仍单独指定。程序相对坐标(0,0)/(1,0)/(2,0)与放入更大fabric后的物理偏移要分开。

只有一份y_expected后再检查第一个PE,会漏掉后两个PE的配置或传输错误。为每个PE保存自己的expected并核对全部6个回读项。下一单元才把一个GEMV按列拆成两个部分,不从本次复制推断计算加速。

CHOOSE ONE EXECUTION PATH

按手头环境推进

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

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

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

本分支做什么:验证相同/不同/交换块三组6项输出,检查每PE输入归属。

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

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

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

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

本分支做什么:编译三个tile配置,记录program矩形与fabric大小。

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

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

官方 simulator · 本单元尚未验收

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

本分支做什么:执行三PE独立GEMV并读取全部6项;没有环境则保留未执行。

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

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

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

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

本分支做什么:按可用系统模式另核,不根据多PE复制声称单任务加速。

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

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

READ → BUILD → BREAK → EXPLAIN

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

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

1. 给三个PE分配身份 · 35 分钟

  1. 画3×1程序矩形,标每PE的A6/x3/b2/y2项。
  2. 写两个阶段各自6项结果;说明第二轮x的9项顺序。

这一段的产出:PE坐标与payload表

2. 扩展layout和host · 50 分钟

  1. 按公开Multiple PEs段配置width=3及每个tile的memcpy参数。
  2. host读取本次M/N/width元数据,构造三份A/b及有意不同的x;回读缓冲应为width×M=6项。

这一段的产出:三PE源码与长度检查

3. 执行并逐PE核对 · 85 分钟

  1. 先在CPU模拟三份独立GEMV,验证所有输出;SDK可用才编译并执行对应simulator。
  2. 先同输入后不同输入,逐PE打印ID、x、expected、actual,拒绝只看第一个结果。

这一段的产出:两轮逐PE记录

4. 设计一个可抓住的错位 · 40 分钟

  1. 在CPU打包副本交换PE1和PE2的x块,预测并核对输出变为[8,20,1,4,2,5]。
  2. 恢复打包,并用block下标公式验证每个PE取得恰好3项;不在未检查长度时传短payload。

这一段的产出:错位定位与修复

5. 解释复制与分解的区别 · 30 分钟

  1. 用英文说明此处三份任务相互独立,没有跨PE求和。
  2. 保留可复用的pack/unpack检查,下一单元沿用同一个主练习目录。

这一段的产出:90秒PE映射说明

EXPLICIT ENVIRONMENT / EXPLICIT STATUS

命令与可保存的起点

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

1. 本人layout已声明M/N/width;三PE程序矩形

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

bash · 按说明保存到自己的练习目录
cslc layout.csl --arch=wse2 --fabric-dims=10,3 --fabric-offsets=4,1 --params=M:2,N:3,width:3 --memcpy --channels=1 -o out-c05
2. 本次CSL编译通过且host准备好才运行

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

bash · 按说明保存到自己的练习目录
cs_python run.py --name out-c05

一个必须能解释的错误

错误情境:看到多个PE便把本例叫成“把同一矩阵切开并行”。

为什么会错:本例每个PE拥有完整A并独立生成完整y,没有局部结果合并;工作总量也随副本数变化。

怎样修复:分别列一份输入/三个副本和一次输入/两个分片的数据量,说明真正分解还需要什么。

EVIDENCE BEFORE ADVANCING

验收与面试追问

  • 三PE六项结果全部检查,非第一PE抽样。
  • x总长度9与每PE长度3都核对;交换块后能定位错到哪个PE。
  • 没有把复制任务的总量变化当单任务速度提升。

最后留下这几项

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

1. ROW_MAJOR是否告诉runtime我的A矩阵含几行?

对照中文要点与英文回答

它规定PE矩形的搬运顺序;数学矩阵shape和每PE数组布局仍由程序/host合同决定。

Transfer order does not infer the mathematical shape of A. The host must pack each PE’s local data correctly.

2. 为什么加入不同x?

对照中文要点与英文回答

相同数据会让PE块交换不可见;不同x为每PE输出提供可辨别特征。

Different inputs make a misplaced PE block visible in the output.

3. 这与两个PE共同计算一个GEMV有什么区别?

对照中文要点与英文回答

这里每PE完成一个完整任务;共同GEMV需要切分输入并按数学合同合并局部贡献。

This duplicates independent work. A distributed GEMV partitions one problem and combines partial contributions.

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

资料与版本核验

  • 5. Multiple PEs ↗

    Example Overview; per-tile code; np.tile and ROI copies

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

  • 4. Parameters ↗

    Host reads width/M/N from output metadata

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

  • SdkRuntime API Reference ↗

    memcpy ROI and ordering

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

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