概念解释:
Predicate(谓词):本质上是一个bool判断,用于判断矩阵元素坐标是否在范围内,如果是则对应的谓词位置为1,否则置为0。最终,predicates_数组将包含所有元素的谓词信息指定位置是否超过范围,因此通过精细控制谓词的计算和设置,来优化矩阵运算中的数据访问,提高计算效率。
更通俗的解释就是:“为每个线程在访问张量(如矩阵)时预计算一组“访问合法性标志”(predicates),防止越界访问,并通过位压缩减少存储开销“
PredicatedTileAccessIteratorPredicates模板类定义
模板参数包括Shape_, Element_, Layout_, AdvanceRank, ThreadMap_, 和AccessType_。该类包含一些类型定义、静态常量以及用于控制迭代和访问模式的成员变量。
类型定义:
Shape: 使用模板参数Shape_定义的类型。
Element: 使用模板参数Element_定义的类型。
Layout: 使用模板参数Layout_定义的类型。
Index: 使用Layout中的Index类型。
LongIndex: 使用Layout中的LongIndex类型。
TensorCoord: 使用Layout中的TensorCoord类型。
静态常量:
kAdvanceRank: 模板参数AdvanceRank的值。
kAccessesPerVector: 计算为ThreadMap::kElementsPerAccess / AccessType::kElements, 表示一个线程一次大访问”需要拆成多少个“小向量访问。
ThreadMap::kElementsPerAccess :每个线程一次能加载的元素数
AccessType::kElements:每次实际访问的元素数(如 4 个 half)
kPredicatesPerByte = 4: 每个字节的谓词数量,固定为4,因此2个bit表示一个predicate
kPredicatesPerWord = 16: 每个字的谓词数量,计算为4 * kPredicatesPerByte。
&nb

最低0.47元/天 解锁文章
1203

被折叠的 条评论
为什么被折叠?



