已合并
docs(index): scatter Mul/Div/Max/Min 资料与 UT 注释同步 int64 直排后的支持面 #10794
docs(index): scatter Mul/Div/Max/Min 资料与 UT 注释同步 int64 直排后的支持面 #10794
已合并
zl_hw创建于 9月20日
共 12 个文件变更+19-27
@@ -77,7 +77,6 @@
77## 约束说明77## 约束说明
78 78 
79- 确定性计算:默认确定性实现。79- 确定性计算:默认确定性实现。
80-- var的首维大小不超过INT32_MAX。
81- updates值域:数据类型为整数(INT32、INT8、UINT8)时,updates中的元素不能为0。80- updates值域:数据类型为整数(INT32、INT8、UINT8)时,updates中的元素不能为0。
82 81 
83## 调用说明82## 调用说明
@@ -225,7 +225,6 @@ aclnnStatus aclnnScatterDiv(
225 225 
226- varRef与updates的数据类型需一致。226- varRef与updates的数据类型需一致。
227- 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。227- 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。
228-- varRef的首维大小不超过INT32_MAX。
229- updates值域:数据类型为整数(INT32、INT8、UINT8)时,updates中的元素不能为0。228- updates值域:数据类型为整数(INT32、INT8、UINT8)时,updates中的元素不能为0。
230- 确定性计算:229- 确定性计算:
231 - aclnnScatterDiv默认确定性实现。230 - aclnnScatterDiv默认确定性实现。
@@ -177,9 +177,9 @@ TEST_F(ScatterDivTiling, test_tiling_big_slice)
177 EXPECT_EQ(key, 0);177 EXPECT_EQ(key, 0);
178}178}
179 179 
180-// 桶数上限: 宽档按 2^30 一桶分区, kernel 侧计数数组只有 64 桶(+1 溢出桶), 故 host 必须在180+// 超大首维(2^37 量级): 直排 int64 key 后不分桶, host 不设任何上限。只能在 host UT 覆盖 ——
181-// 桶数 > 64 时拒收, 否则 kernel 里会越界写计数数组。这两条只能在 host UT 覆盖 ——181+// 对应 var 真机上要 500GB 以上, 物理上无法造真机用例。
182-// 64 桶对应 var 首维 2^36, 真机上 var 本身就要 68GB, 物理上无法造用例。182+// 注: 用例名 wide_buckets_* 是旧分桶实现留下的历史命名, 该机制已下线, 保留名字仅为对齐历史基线。
183TEST_F(ScatterDivTiling, test_tiling_wide_buckets_single_window)183TEST_F(ScatterDivTiling, test_tiling_wide_buckets_single_window)
184{184{
185 uint64_t key = 0xFFFF;185 uint64_t key = 0xFFFF;
@@ -205,7 +205,7 @@ TEST_F(ScatterDivTiling, test_tiling_wide_buckets_multi_window)
205 EXPECT_EQ(st, ge::GRAPH_SUCCESS);205 EXPECT_EQ(st, ge::GRAPH_SUCCESS);
206}206}
207 207 
208-// 首维 2^40 = 1024 个桶, 需要 16 个窗口: 桶数无上限, tiling 不拦, 与 A2 支持面一致。208+// 首维 2^40: 排序 key 为索引真值, 不分桶不开窗, tiling 不设上限, 与 A2 支持面一致。
209TEST_F(ScatterDivTiling, test_tiling_huge_first_dim_no_cap)209TEST_F(ScatterDivTiling, test_tiling_huge_first_dim_no_cap)
210{210{
211 uint64_t key = 0xFFFF;211 uint64_t key = 0xFFFF;
@@ -77,7 +77,6 @@
77## 约束说明77## 约束说明
78 78 
79- 确定性计算:默认确定性实现。79- 确定性计算:默认确定性实现。
80-- var的首维大小不超过INT32_MAX。
81 80 
82## 调用说明81## 调用说明
83 82 
@@ -225,7 +225,6 @@ aclnnStatus aclnnScatterMax(
225 225 
226- varRef与updates的数据类型需一致。226- varRef与updates的数据类型需一致。
227- 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。227- 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。
228-- varRef的首维大小不超过INT32_MAX。
229- 确定性计算:228- 确定性计算:
230 - aclnnScatterMax默认确定性实现。229 - aclnnScatterMax默认确定性实现。
231 230 
@@ -235,9 +235,9 @@ TEST_F(ScatterMaxTiling, test_tiling_var_dim0_at_int32max)
235 EXPECT_EQ(key, 0);235 EXPECT_EQ(key, 0);
236}236}
237 237 
238-// 桶数上限: 宽档按 2^30 一桶分区, kernel 侧计数数组只有 64 桶(+1 溢出桶), 故 host 必须在238+// 超大首维(2^37 量级): 直排 int64 key 后不分桶, host 不设任何上限。只能在 host UT 覆盖 ——
239-// 桶数 > 64 时拒收, 否则 kernel 里会越界写计数数组。这两条只能在 host UT 覆盖 ——239+// 对应 var 真机上要 500GB 以上, 物理上无法造真机用例。
240-// 64 桶对应 var 首维 2^36, 真机上 var 本身就要 68GB, 物理上无法造用例。240+// 注: 用例名 wide_buckets_* 是旧分桶实现留下的历史命名, 该机制已下线, 保留名字仅为对齐历史基线。
241TEST_F(ScatterMaxTiling, test_tiling_wide_buckets_single_window)241TEST_F(ScatterMaxTiling, test_tiling_wide_buckets_single_window)
242{242{
243 uint64_t key = 0xFFFF;243 uint64_t key = 0xFFFF;
@@ -263,7 +263,7 @@ TEST_F(ScatterMaxTiling, test_tiling_wide_buckets_multi_window)
263 EXPECT_EQ(st, ge::GRAPH_SUCCESS);263 EXPECT_EQ(st, ge::GRAPH_SUCCESS);
264}264}
265 265 
266-// 首维 2^40 = 1024 个桶, 需要 16 个窗口: 桶数无上限, tiling 不拦, 与 A2 支持面一致。266+// 首维 2^40: 排序 key 为索引真值, 不分桶不开窗, tiling 不设上限, 与 A2 支持面一致。
267TEST_F(ScatterMaxTiling, test_tiling_huge_first_dim_no_cap)267TEST_F(ScatterMaxTiling, test_tiling_huge_first_dim_no_cap)
268{268{
269 uint64_t key = 0xFFFF;269 uint64_t key = 0xFFFF;
@@ -77,7 +77,6 @@
77## 约束说明77## 约束说明
78 78 
79- 确定性计算:默认确定性实现。79- 确定性计算:默认确定性实现。
80-- var的首维大小不超过INT32_MAX。
81 80 
82## 调用说明81## 调用说明
83 82 
@@ -223,7 +223,6 @@ aclnnStatus aclnnScatterMin(
223 223 
224- varRef与updates的数据类型需一致。224- varRef与updates的数据类型需一致。
225- 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。225- 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。
226-- varRef的首维大小不超过INT32_MAX。
227- 确定性计算:226- 确定性计算:
228 - aclnnScatterMin默认确定性实现。227 - aclnnScatterMin默认确定性实现。
229 228 
@@ -188,9 +188,9 @@ TEST_F(ScatterMinTiling, test_tiling_var_dim0_eq_int32max)
188 EXPECT_EQ(key, 0);188 EXPECT_EQ(key, 0);
189}189}
190 190 
191-// var first axis == INT32_MAX + 1 -> rejected. An in-bound index may then equal INT32_MAX, which is191+// var 首维 == INT32_MAX + 1 -> **接受**。排序 key 直接取索引真值(AscendC::Sort 支持 int64 key),
192-// indistinguishable from the sort padding key. Matches the declared constraint in README.192+// 不再折算低位、不再分桶, 首维不存在 int32 上限。历史上此处曾因 32 位 key 装不下 in-bound index
193-// 见 scatter_max 同名用例的说明: 首维 > INT32_MAX 由拒收改为走两趟基数排序, 断言随之反转。193+// 而拒收, 使 A5 支持面窄于 A2; 该上限已随 int64 直排消除, README/aclnn 资料的对应约束亦已删除。
194// 共享 tiling 的四个算子(div/max/min/mul)各有独立 UT 上下文, 故每个算子都要单独核对。194// 共享 tiling 的四个算子(div/max/min/mul)各有独立 UT 上下文, 故每个算子都要单独核对。
195TEST_F(ScatterMinTiling, test_tiling_var_dim0_over_int32max)195TEST_F(ScatterMinTiling, test_tiling_var_dim0_over_int32max)
196{196{
@@ -200,9 +200,9 @@ TEST_F(ScatterMinTiling, test_tiling_var_dim0_over_int32max)
200 EXPECT_EQ(st, ge::GRAPH_SUCCESS);200 EXPECT_EQ(st, ge::GRAPH_SUCCESS);
201}201}
202 202 
203-// 桶数上限: 宽档按 2^30 一桶分区, kernel 侧计数数组只有 64 桶(+1 溢出桶), 故 host 必须在203+// 超大首维(2^37 量级): 直排 int64 key 后不分桶, host 不设任何上限。只能在 host UT 覆盖 ——
204-// 桶数 > 64 时拒收, 否则 kernel 里会越界写计数数组。这两条只能在 host UT 覆盖 ——204+// 对应 var 真机上要 500GB 以上, 物理上无法造真机用例。
205-// 64 桶对应 var 首维 2^36, 真机上 var 本身就要 68GB, 物理上无法造用例。205+// 注: 用例名 wide_buckets_* 是旧分桶实现留下的历史命名, 该机制已下线, 保留名字仅为对齐历史基线。
206TEST_F(ScatterMinTiling, test_tiling_wide_buckets_single_window)206TEST_F(ScatterMinTiling, test_tiling_wide_buckets_single_window)
207{207{
208 uint64_t key = 0xFFFF;208 uint64_t key = 0xFFFF;
@@ -228,7 +228,7 @@ TEST_F(ScatterMinTiling, test_tiling_wide_buckets_multi_window)
228 EXPECT_EQ(st, ge::GRAPH_SUCCESS);228 EXPECT_EQ(st, ge::GRAPH_SUCCESS);
229}229}
230 230 
231-// 首维 2^40 = 1024 个桶, 需要 16 个窗口: 桶数无上限, tiling 不拦, 与 A2 支持面一致。231+// 首维 2^40: 排序 key 为索引真值, 不分桶不开窗, tiling 不设上限, 与 A2 支持面一致。
232TEST_F(ScatterMinTiling, test_tiling_huge_first_dim_no_cap)232TEST_F(ScatterMinTiling, test_tiling_huge_first_dim_no_cap)
233{233{
234 uint64_t key = 0xFFFF;234 uint64_t key = 0xFFFF;
@@ -77,7 +77,6 @@
77## 约束说明77## 约束说明
78 78 
79- 确定性计算:默认确定性实现。79- 确定性计算:默认确定性实现。
80-- var的首维大小不超过INT32_MAX。
81 80 
82## 调用说明81## 调用说明
83 82 
@@ -225,7 +225,6 @@ aclnnStatus aclnnScatterMul(
225 225 
226- varRef与updates的数据类型需一致。226- varRef与updates的数据类型需一致。
227- 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。227- 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。
228-- varRef的首维大小不超过INT32_MAX。
229- 确定性计算:228- 确定性计算:
230 - aclnnScatterMul默认确定性实现。229 - aclnnScatterMul默认确定性实现。
231 230 
@@ -177,9 +177,9 @@ TEST_F(ScatterMulTiling, test_tiling_big_slice)
177 EXPECT_EQ(key, 0);177 EXPECT_EQ(key, 0);
178}178}
179 179 
180-// 桶数上限: 宽档按 2^30 一桶分区, kernel 侧计数数组只有 64 桶(+1 溢出桶), 故 host 必须在180+// 超大首维(2^37 量级): 直排 int64 key 后不分桶, host 不设任何上限。只能在 host UT 覆盖 ——
181-// 桶数 > 64 时拒收, 否则 kernel 里会越界写计数数组。这两条只能在 host UT 覆盖 ——181+// 对应 var 真机上要 500GB 以上, 物理上无法造真机用例。
182-// 64 桶对应 var 首维 2^36, 真机上 var 本身就要 68GB, 物理上无法造用例。182+// 注: 用例名 wide_buckets_* 是旧分桶实现留下的历史命名, 该机制已下线, 保留名字仅为对齐历史基线。
183TEST_F(ScatterMulTiling, test_tiling_wide_buckets_single_window)183TEST_F(ScatterMulTiling, test_tiling_wide_buckets_single_window)
184{184{
185 uint64_t key = 0xFFFF;185 uint64_t key = 0xFFFF;
@@ -205,7 +205,7 @@ TEST_F(ScatterMulTiling, test_tiling_wide_buckets_multi_window)
205 EXPECT_EQ(st, ge::GRAPH_SUCCESS);205 EXPECT_EQ(st, ge::GRAPH_SUCCESS);
206}206}
207 207 
208-// 首维 2^40 = 1024 个桶, 需要 16 个窗口: 桶数无上限, tiling 不拦, 与 A2 支持面一致。208+// 首维 2^40: 排序 key 为索引真值, 不分桶不开窗, tiling 不设上限, 与 A2 支持面一致。
209TEST_F(ScatterMulTiling, test_tiling_huge_first_dim_no_cap)209TEST_F(ScatterMulTiling, test_tiling_huge_first_dim_no_cap)
210{210{
211 uint64_t key = 0xFFFF;211 uint64_t key = 0xFFFF;