已合并
修复bfloat16_t → fp4x2_e1m2_t示例错误,完善bank读写相关描述 #5180
Cruiter创建于 8月18日
修复bfloat16_t → fp4x2_e1m2_t示例错误,完善bank读写相关描述 #5180
已合并
共 5 个文件变更+10-12
| @@ -346,13 +346,13 @@ | |||
| 346 | 346 | ||
| 347 | 将源值按照精度舍入模式取整,以fp4x2_e1m2_t格式存入目的操作数中。 | 347 | 将源值按照精度舍入模式取整,以fp4x2_e1m2_t格式存入目的操作数中。 |
| 348 | 348 | ||
| 349 | -**示例**:输入:2.5。 | 349 | +**示例**:输入:1.375。 |
| 350 | 350 | ||
| 351 | -- **CAST_RINT模式**输出:2。 | 351 | +- **CAST_RINT模式**输出:1.5。 |
| 352 | -- **CAST_FLOOR模式**输出:2。 | 352 | +- **CAST_FLOOR模式**输出:1.25。 |
| 353 | -- **CAST_CEIL模式**输出:3。 | 353 | +- **CAST_CEIL模式**输出:1.5。 |
| 354 | -- **CAST_ROUND模式**输出:3。 | 354 | +- **CAST_ROUND模式**输出:1.5。 |
| 355 | -- **CAST_TRUNC模式**输出:2。 | 355 | +- **CAST_TRUNC模式**输出:1.25。 |
| 356 | 356 | ||
| 357 | --- | 357 | --- |
| 358 | 358 | ||
| @@ -79,7 +79,6 @@ __simd_callee__ inline void asc_select(vector_half& dst, | |||
| 79 | 79 | ||
| 80 | ## 约束说明 | 80 | ## 约束说明 |
| 81 | 81 | ||
| 82 | -- 通过`mask`参数控制的未选中的元素保持源操作数的值而非清零。 | ||
已过期 这句约束的本质是功能说明,冗余 ![]() ![]() | |||
| 83 | - `src0`、`src1`和`dst`的数据类型需要保持一致。 | 82 | - `src0`、`src1`和`dst`的数据类型需要保持一致。 |
| 84 | 83 | ||
| 85 | ## 调用示例 | 84 | ## 调用示例 |
| @@ -33,7 +33,7 @@ UB_ADDR[18:0] = {BANK_DEPTH[8:0], BANK[0], BG[2:0], BANK_WIDTH[4:0]} | |||
| 33 | 33 | ||
| 34 | ## bank冲突的典型场景<a name="section9689957379"></a> | 34 | ## bank冲突的典型场景<a name="section9689957379"></a> |
| 35 | 35 | ||
| 36 | -每个bank一拍只能完成一读或者一写,每个bank group最多只允许2读0写或者1读1写。根据内存结构,bank冲突主要可以分为以下三种类型: | 36 | +同一个bank group单拍支持两次读操作,或者一次读操作和一次写操作;不支持同一个bank group单拍完成两次写操作。根据内存结构,bank冲突主要可以分为以下三种类型: |
| 37 | 37 | ||
| 38 | - **读写冲突**:读操作和写操作同时尝试访问同一个bank,或者两个读操作和一个写操作同时尝试访问同一个bank group。 | 38 | - **读写冲突**:读操作和写操作同时尝试访问同一个bank,或者两个读操作和一个写操作同时尝试访问同一个bank group。 |
| 39 | - **写写冲突**:多个写操作同时尝试访问同一个bank group。 | 39 | - **写写冲突**:多个写操作同时尝试访问同一个bank group。 |
| @@ -252,7 +252,7 @@ UB_ADDR[18:0] = {BANK_DEPTH[8:0], BANK[0], BG[2:0], BANK_WIDTH[4:0]} | |||
| 252 | 252 | ||
| 253 | - 通过地址重叠减少读指令 | 253 | - 通过地址重叠减少读指令 |
| 254 | 254 | ||
| 255 | - 由于一个bank group最多支持两读或者一读一写,在两读一写时会因为读/写口不足而引发bank冲突,当读指令的起始地址重叠时,硬件会将指令优化为一条。 | 255 | + 同一个bank group单拍仅支持两次读操作,或者一次读操作和一次写操作。两读一写会超出支持的并行访问组合而引发bank冲突;当两条读指令的起始地址重叠时,硬件会将其优化为一条。 |
| 256 | 256 | ||
| 257 | - 离散访存下,将数据分散到不同subbank | 257 | - 离散访存下,将数据分散到不同subbank |
| 258 | 258 | ||
| @@ -28,8 +28,7 @@ | |||
| 28 | 28 | ||
| 29 | 可以看出bank冲突的场景与UB的规格密切相关,规格的变化通常会导致bank冲突场景的变化。 | 29 | 可以看出bank冲突的场景与UB的规格密切相关,规格的变化通常会导致bank冲突场景的变化。 |
| 30 | 30 | ||
| 31 | -- 由于NPU架构版本3510的bank group上有两组读口和写口,因此两次读操作访问同一个bank group的不同bank时,不会引起冲突。 | 31 | +- NPU架构版本3510中,同一个bank group单拍支持两次读操作。因此,两次读操作访问同一个bank group的不同bank时,不会引起冲突;若两次读操作访问同一个bank,或者同一个bank group内发生两次以上读操作,则会引起冲突。 |
| 32 | - 假设读指令操作的地址为0x0000(bank0),写指令操作的地址为0x10000 ,在NPU架构版本2201中,地址0x10000(bank16)不会发生读写冲突,而在NPU架构版本3510中,这个地址0x10000(bank0)会引发读写冲突。 | 32 | - 假设读指令操作的地址为0x0000(bank0),写指令操作的地址为0x10000 ,在NPU架构版本2201中,地址0x10000(bank16)不会发生读写冲突,而在NPU架构版本3510中,这个地址0x10000(bank0)会引发读写冲突。 |
| 33 | 33 | ||
| 34 | 下文介绍不同硬件架构下如何避免bank冲突。 | 34 | 下文介绍不同硬件架构下如何避免bank冲突。 |
| 35 | - | ||
| @@ -150,7 +150,7 @@ | |||
| 150 | 150 | ||
| 151 | **存储单元的访问冲突** | 151 | **存储单元的访问冲突** |
| 152 | 152 | ||
| 153 | -本NPU架构版本UB结构如下图所示,当多个操作尝试同时访问UB同一个bank或者bank group时,可能会发生bank冲突,包括读写冲突、写写冲突、读读冲突,这种冲突会导致访问排队,降低性能。在NPU架构版本2201中,同一个bank group只有一组读口和写口,最多一拍完成一读或者一写,在本NPU架构版本中每个bank group有两组读口和写口,最多同时允许2读0写或者1读1写。相关读写约束如下: | 153 | +本NPU架构版本UB结构如下图所示,当多个操作尝试同时访问UB同一个bank或者bank group时,可能会发生bank冲突,包括读写冲突、写写冲突、读读冲突,这种冲突会导致访问排队,降低性能。相比NPU架构版本2201,本架构版本中同一个bank group单拍支持两次读操作,或者一次读操作和一次写操作;不支持同一个bank group单拍完成两次写操作。相关读写约束如下: |
UB和Unified Buffer格式统一 ![]() ![]() | |||
| 154 | 154 | ||
| 155 | - **读写冲突**:读操作和写操作同时尝试访问同一个bank。 | 155 | - **读写冲突**:读操作和写操作同时尝试访问同一个bank。 |
| 156 | - **写写冲突**:多个写操作同时尝试访问同一个bank group。 | 156 | - **写写冲突**:多个写操作同时尝试访问同一个bank group。 |


采用fp4x2_e1m2_t支持的数据范围