← Cerebras 专题与八个进阶单元

CEREBRAS / LAB 06 OF 08

两PE列分块:从局部贡献到fabric完成

把一个2×4 GEMV拆到左右两PE,连接路由、队列和异步完成任务。

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

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

先备与马上可用的例子

先完成:cerebras-05 →

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

PREDICT FIRST

具体问题与独立预期

输入与约定

A=[[1,2,3,4],[5,6,7,8]], x=[1,0,2,-1], b=[1,-2]。左PE拿前2列和x前2项,右PE拿后2列和x后2项。此版本要求N为正偶数、M≥1,输入有限且小范围。

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

对照参考结果与原因

左局部Ax=[1,5],加一次b后为[2,3];右局部Ax=[2,6];右PE收到左值后得到完整y=[4,9]。左列主序payload=[1,5,2,6],右为[3,7,4,8]。N=3版本在host/编译参数检查中拒绝,不默默截掉一列。

正确结果同时取决于数学分解、每PE列主序打包,以及消息完成后才对host开放结果。

机制怎样连接起来

先把同一行点积拆成前半与后半:偏置只能加一次。本单元在每次调用前把b写入左y、把右y清零,再各自累加本地乘积;重复调用也必须重建DSD起点。若两边都加b,结果会多一个b,属于可定位的数学错误。

公开Routes教程将A转为按列存储。每列有M项,所以本地列DSD访问连续M项,下一列offset前进M。本题host整个打包为[1,5,2,6,3,7,4,8],前4项归左、后4项归右;不要沿用上一单元行主序stride=N的描述符。

路由从router视角描述:左侧RAMP接收来自本CE的数据并向EAST发送,右侧从WEST接收再向RAMP送给CE。fabric DSD传M=2项;异步builtin完成后激活本地task,task恢复命令流。输入队列需要关联color;当前公开例在WSE-3还显式将输出queue关联color,DSD字段也随架构分支。使用与目标架构匹配的公开版本,不删掉分支硬套。

CHOOSE ONE EXECUTION PATH

按手头环境推进

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

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

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

本分支做什么:验证两个局部数组、打包、偏置一次与完成状态机。

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

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

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

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

本分支做什么:编译目标架构对应的queue/color/task配置,保存命令和源码。

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

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

官方 simulator · 本单元尚未验收

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

本分支做什么:回读右PE结果并重复一次调用;同时保留左侧局部推导,不把同步host调用等同于内部正确。

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

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

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

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

本分支做什么:只在已有系统和相应模式中独立补验证;simulator时间不是设备时间。

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

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

READ → BUILD → BREAK → EXPLAIN

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

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

1. 算局部与全局结果 · 40 分钟

  1. 独立算左右部分、偏置和最终[4,9];列出两个列主序payload。
  2. 写三条前置检查:N正偶数、M正、长度匹配;N=3不能只做整数除2。

这一段的产出:数学与布局合同

2. 配置路由与完成链 · 60 分钟

  1. 逐段读公开Routes示例的color配置、fabout/fabin DSD、queue初始化和exit task绑定。
  2. 在自己的图上标左RAMP→EAST、右WEST→RAMP,以及发送/接收完成各自激活的任务。

这一段的产出:路由和完成事件图

3. 实现与对应环境验证 · 80 分钟

  1. 先在CPU对左右局部乘积与合并逐项检查,加入非零b和N=3拒绝。
  2. SDK可用时独立改造本人两PE源码,host回读右PE(1,0)的2项;每次调用重新设置左右y和DSD。没有SDK就完成地址与事件状态模型,不填simulator通过。

这一段的产出:[4,9]及后端明确的记录

4. 给完成顺序一个反例 · 35 分钟

  1. CPU状态机故意在右接收完成前发布可读,要求判为early-read拒绝。
  2. 再只在CPU副本给两边都加b,预测[5,7]并确认被oracle拒绝;恢复偏置一次。

这一段的产出:控制流/数学两类失败

5. 口述和边界 · 25 分钟

  1. 解释为什么host读取右PE,以及它可读的最早事件。
  2. 说明WSE-2/3队列配置不同,未运行的架构保持未验证。

这一段的产出:英文消息生命周期回答

EXPLICIT ENVIRONMENT / EXPLICIT STATUS

命令与可保存的起点

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

1. 本人两PE layout声明M/N,目标固定WSE-2;先做参数检查

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

bash · 按说明保存到自己的练习目录
cslc layout.csl --arch=wse2 --fabric-dims=9,3 --fabric-offsets=4,1 --params=M:2,N:4 --memcpy --channels=1 -o out-c06
2. 本次CSL产物与host版本匹配,才运行官方simulator

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

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

一个必须能解释的错误

错误情境:提交异步fabric操作后就立即unblock_cmd_stream。

为什么会错:提交尚未证明发送/接收完成,host可能在局部结果还没合并时继续回读。

怎样修复:把恢复命令流接到完成激活的本地task,并确保两PE各自结束;CPU事件模型先拒绝早读。

EVIDENCE BEFORE ADVANCING

验收与面试追问

  • 局部[2,3]与[2,6]合并成[4,9],非零b仅出现一次。
  • 列主序payload与每PE长度4可逐项核对,奇数N明确拒绝。
  • 队列/颜色与目标架构对应,完成前不可回读,重复调用重置持久状态。

最后留下这几项

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

1. 为什么结果读取右PE?

对照中文要点与英文回答

右PE在接收并相加后才拥有两边贡献和一次b;左PE只保存局部结果。

Only the right PE owns the combined result after receiving the left contribution.

2. 为什么这一版offset增量从1变成M?

对照中文要点与英文回答

本地A已改列主序,一整列占M个连续元素,下一列起点相差M。

In column-major storage, the next column begins M elements later.

3. 异步是不是意味着可以更早释放y?

对照中文要点与英文回答

不是。y是发送源或累加目标,必须保留到相应fabric操作和最后消费者完成。

Asynchronous submission extends the lifetime obligation; it does not remove it.

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

资料与版本核验

  • 6. Routes and Fabric DSDs ↗

    Column-major packing; WSE-2/WSE-3 queues; async activation; right-PE readback

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

  • SdkRuntime API Reference ↗

    Launch and completion; memcpy_d2h ROI

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

  • CSL Compiler ↗

    --arch and compile-time parameters

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

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