已合并
修复bfloat16_t → fp4x2_e1m2_t示例错误,完善bank读写相关描述 #5180
修复bfloat16_t → fp4x2_e1m2_t示例错误,完善bank读写相关描述 #5180
已合并
Cruiter创建于 8月18日
共 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。
Cruiter
CruiterCruiter8月19日

采用fp4x2_e1m2_t支持的数据范围

likedislike
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`参数控制的未选中的元素保持源操作数的值而非清零。
Cruiter
CruiterCruiter8月20日
已过期

这句约束的本质是功能说明,冗余

likedislike
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- 离散访存下,将数据分散到不同subbank257- 离散访存下,将数据分散到不同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单拍完成两次写操作。相关读写约束如下:
Cruiter
CruiterCruiter8月19日

UB和Unified Buffer格式统一

likedislike
154 154 
155- **读写冲突**:读操作和写操作同时尝试访问同一个bank。155- **读写冲突**:读操作和写操作同时尝试访问同一个bank。
156- **写写冲突**:多个写操作同时尝试访问同一个bank group。156- **写写冲突**:多个写操作同时尝试访问同一个bank group。