UNIT 55 / 78 · W08-3
每个有效索引恰好被处理一次
本单元预计 4 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。
时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。
先知道自己在观察什么
Kernel 索引、边界与 grid-stride loop →
先算block与thread组成的索引,再读grid-stride如何跨步以及避免下标加法回绕。
先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。
本单元另列的补授
以下时间加在原单元预算之外;完成对应读法后再进入依赖它的任务。
- leading dimension读法 → · 15min
先留下自己的预测或独立尝试
写出六线程处理17项时每个线程的序列,再运行现有覆盖检查。
六个逻辑线程跨步覆盖十七项 →源码下载与编译入口
下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →
30-b.cpp先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。
通过一个变动看清原因
在副本观察n=10、threads=4,并打印thread0的合法序列;保留0到100的覆盖验证。
修改后应观察到什么
thread0处理0、4、8,十项访问计数全为1。
换一组条件,独立解决
独立实现逻辑grid-stride访问计数,n=0、1、5、17,threads=1、4、20;这仍是CPU模型。
用这些条件检查自己的实现
- 每项计数为1;空输入无访问;线程多于元素时部分序列为空。
- threads=0明确拒绝;不产生尾后解引用,也不把逻辑线程称实际GPU线程实测。
用证据决定是否进入下一单元
- 向下取整block数量为什么可能漏掉尾部?
- grid-stride与普通分区的覆盖证明有哪些相同点?
本单元的验收依据
所有边界覆盖检查通过,能独立推导任一线程的下标序列。
留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。