← Cerebras 专题与八个进阶单元

CEREBRAS / LAB 04 OF 08

Memory DSD:把地址序列写出来

从标量GEMV过渡到列访问DSD;用重复调用检查offset和累加器复位。

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

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

先备与马上可用的例子

先完成:cerebras-03 →

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

PREDICT FIRST

具体问题与独立预期

输入与约定

A行主序=[1,2,3,4,5,6],M=2,N=3。列0/1/2应分别访问下标[0,3]/[1,4]/[2,5]。沿用x=[1,2,1],b=[0,0]。 还须沿用上一单元非零bias回归:x=[0,1,0],b=[-1,1]。

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

对照参考结果与原因

列值依次[1,4]、[2,5]、[3,6];累加y经过[1,4]→[5,14]→[8,20]。第二次同输入仍[8,20]。extent=3,stride=3从0出发会访问[0,3,6],必须被模型边界检查拒绝。 非零bias回归必须得到[1,6]。

DSD描述访问模式,数学正确性取决于base、extent、stride与每轮offset变化,不由内建函数名字保证。

机制怎样连接起来

把DSD先当一个明确的地址生成合同:本题一列有M=2个元素,行间距N=3,所以extent=2、stride=3;换到下一列只前进1个f32元素。CPU模型枚举实际下标并在访问前检查0≤index<6,不越界运行来观察偶然结果。

公开Memory DSD教程用@get_dsd构造描述符,@fmacs把某列乘以x[col]加到y,@increment_dsd_offset把描述符移到下一列。这里内建承担向量操作,但你仍负责输入布局、边界与累加器初值。 每次清零y后,先完成全部列乘加,再用b对应的DSD把b加一次,维持y=Ax+b合同。

若DSD存为可变全局对象且每列向前移动,第二次调用不能从末尾继续。每次compute入口重建列0描述符并重置y,或使用不修改基准描述符的局部副本。单次教学程序通过不代表适合重复RPC;这个变体正是本单元要补的合同。

CHOOSE ONE EXECUTION PATH

按手头环境推进

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

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

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

本分支做什么:运行带边界检查的地址生成与重复计算模型,拒绝下标6。

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

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

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

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

本分支做什么:编译重建DSD/重置y的本版PE源码。

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

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

官方 simulator · 本单元尚未验收

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

本分支做什么:同一实例重复RPC两次,分别对照oracle;未做保持pending。

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

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

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

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

本分支做什么:可用硬件后独立验证,不从DSD使用推断自动加速。

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

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

READ → BUILD → BREAK → EXPLAIN

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

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

1. 枚举地址 · 30 分钟

  1. 不看答案写三列地址和数值,区分元素偏移与字节偏移。
  2. 说明extent是列元素数2,不是整个矩阵长度6。

这一段的产出:三列下标表

2. 写受检查的DSD模型 · 55 分钟

  1. 在现有CPU项目加base/extent/stride描述符与枚举函数,非法下标先拒绝。
  2. 测三列与故意extent=3错误;打印所有下标,不只打印总和。

这一段的产出:地址模型与拒绝记录

3. 连接公开向量操作 · 85 分钟

  1. 按官方DSD段把本人标量PE循环改为列DSD与fmacs;每次重建描述符并清零y,完成全部列乘加后用fadds加b一次。
  2. SDK不可用时用CPU向量操作模拟数学乘加;SDK可用时编译后重复同一RPC两次,分别检查[8,20]。 额外跑x=[0,1,0],b=[-1,1],结果须为[1,6],不能只测b=0。

这一段的产出:逐列累加与重复调用记录

4. 定位持久状态错误 · 40 分钟

  1. CPU模型故意保留上次y但重置地址,确认第二次会累加成[16,40];再恢复清零。
  2. 再单独保留旧offset并清零y,边界检查应拒绝;不要在真实内存上运行越界版本。

这一段的产出:两个不同根因的失败样本

5. 解释资源与范围 · 30 分钟

  1. 按输入、输出、临时buffer分别估算此小例元素数,解释程序/栈等开销并未包含。
  2. 口述DSD改变的是什么、没有自动解决什么。

这一段的产出:90秒DSD答辩

EXPLICIT ENVIRONMENT / EXPLICIT STATUS

命令与可保存的起点

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

1. 本人参数化DSD源码完成后编译

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

bash · 按说明保存到自己的练习目录
cslc layout.csl --arch=wse2 --fabric-dims=8,3 --fabric-offsets=4,1 --params=M:2,N:3 --memcpy --channels=1 -o out-c04
2. 仅已有simulator;run.py必须检查两次调用

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

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

一个必须能解释的错误

错误情境:第一遍成功,就保留全局移动后的DSD与y等待下次调用。

为什么会错:下次起点和累加器已不再对应原合同;可能越界或重复累加。

怎样修复:每次入口明确重建描述符、重置y;分别设计旧y与旧offset的受控模型反例。

EVIDENCE BEFORE ADVANCING

验收与面试追问

  • 三列地址/乘加步骤全部可核对。
  • 错误extent与旧offset在CPU模型中拒绝;不运行真实越界访问。
  • 重复输入两次结果相同,不能靠重新加载设备掩盖状态。
  • 每次保留完整y=Ax+b;非零bias[1,6]回归通过,避免清零后漏掉b。

最后留下这几项

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

1. 为什么下一列offset加1而非加M?

对照中文要点与英文回答

本单元A行主序,同列行间距为N,下一列起点只右移一项;列主序会有不同规则。

For row-major storage, the next column starts one element later, while rows within a column are separated by N.

2. @fmacs是否自动清零y?

对照中文要点与英文回答

它执行累加形式的运算,初始y是合同的一部分,必须按每次调用设置。

The accumulation uses the current destination value. Initialization remains my responsibility.

3. CPU地址模型通过能证明什么?

对照中文要点与英文回答

它证明给定布局参数枚举出合法地址与数学结果;不能证明真实DSD编码、目标架构或设备时序正确。

The model checks the address sequence and arithmetic, not the device encoding or execution timing.

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

资料与版本核验

  • 2. Memory DSDs ↗

    Define Memory DSDs; column accesses; fmacs and increment_dsd_offset

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

  • 4. Parameters ↗

    Row-major versus column-major exercise

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

  • SdkRuntime API Reference ↗

    Repeated host launch and result transfer

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

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