cann/asc-devkit L0C-UB双目标模式
L0C Buffer到UB双目标模式【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit特性说明同一AI Core内有一个Cube Core和两个Vector Core当启用双目标模式控制时L0C Buffer中的M×N矩阵将被分成两半并同时分别写入两个Vector Core各自的UB中其中前半部分写入SUB BLOCK0后半部分写入SUB BLOCK1。双目标模式M维度按M维度拆分成形状为M / 2 * N的两个矩阵分别写入两个UB。双目标模式N维度按N维度拆分成形状为M * N / 2的两个矩阵分别写入两个UB。特性约束双目标模式仅支持在L0C Buffer到UB通路普通搬运模式NZ2NZ或NZ2ND搬运场景下使用不支持随路功能场景。按M维度拆分时M必须为2的倍数。按N维度拆分时N须为32的倍数。使用示例在普通搬运模式模式下启用双目标模式如下图所示分为按M维度拆分和按N维度拆分按M维度拆分M必须为2的倍数按N维度拆分N必须为32的倍数N方向切分nSize 32表示源NZ矩阵中待搬运矩阵在N方向上的大小为32个元素。mSize 48表示源NZ矩阵中待搬运矩阵在M方向上的大小48个元素。srcStride 64表示源NZ矩阵中待搬运矩阵相邻Z排布的起始地址偏移即下图中第一个块Z排布矩阵的起始地址与第二个Z排布矩阵的起始地址之间的间隔为64 * C0_Size。dstStride 64 * C0表示目的NZ矩阵中相邻Z排布的起始地址偏移即下图中UB0中Z排布的起始地址与UB1中Z排布的起始地址之间的间隔为64 * 16个元素。M方向切分nSize 32表示源NZ矩阵中待搬运矩阵在N方向上的大小为32个元素。mSize 24表示源NZ矩阵中待搬运矩阵在M方向上的大小为24个元素。srcStride 64表示源NZ矩阵中待搬运矩阵相邻Z排布的起始地址偏移即下图中第一个块Z排布矩阵的起始地址与第二个Z排布矩阵的起始地址之间的间隔为64 * C0_Size。dstStride 40 * C0表示目的NZ矩阵中相邻Z排布的起始地址偏移即下图中UB0或UB1中第一个Z排布的起始地址与第二个Z排布的起始地址之间的间隔为40 * 16个元素。图1NZ2NZ双目标搬运模式设置示意图在NZ2ND模式下启用双目标模式如下图所示分为按M维度拆分和按N维度拆分按M维度拆分M必须为2的倍数按N维度拆分N必须为2的倍数ndNum 2表示源NZ矩阵的数目为2。图中红框区域为矩阵1蓝框区域为矩阵2。nSize 32表示源NZ矩阵图中红框区域或蓝框区域在N方向上的大小为32个元素。mSize 48表示源NZ矩阵在M方向上的大小为48个元素。srcStride 64表示源NZ矩阵中相邻Z排布的起始地址偏移即下图红框区域中左侧浅色Z排布矩阵的起始地址与右侧深色Z排布矩阵的起始地址之间的间隔为64 * C0_Size。dstStride 64表示目的ND矩阵每一行中的元素个数为64。ndNum 2, 表示源NZ矩阵的数目。srcNdStride 240 , 表示不同NZ矩阵起始地址之间的间隔为240 * C0_Size。dstNdStride 4096表示目的相邻ND矩阵起始地址之间的偏移为4096个元素。图2NZ2ND参数双搬入模式设置示意图完整样例可参考fixpipe_l0c2ub。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考