已合并
docs(index): scatter Mul/Div/Max/Min 资料与 UT 注释同步 int64 直排后的支持面 #10794
zl_hw创建于 9月20日
docs(index): scatter Mul/Div/Max/Min 资料与 UT 注释同步 int64 直排后的支持面 #10794
已合并
共 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_* 是旧分桶实现留下的历史命名, 该机制已下线, 保留名字仅为对齐历史基线。 |
| 183 | TEST_F(ScatterDivTiling, test_tiling_wide_buckets_single_window) | 183 | TEST_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 支持面一致。 |
| 209 | TEST_F(ScatterDivTiling, test_tiling_huge_first_dim_no_cap) | 209 | TEST_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_* 是旧分桶实现留下的历史命名, 该机制已下线, 保留名字仅为对齐历史基线。 |
| 241 | TEST_F(ScatterMaxTiling, test_tiling_wide_buckets_single_window) | 241 | TEST_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 支持面一致。 |
| 267 | TEST_F(ScatterMaxTiling, test_tiling_huge_first_dim_no_cap) | 267 | TEST_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 is | 191 | +// 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 上下文, 故每个算子都要单独核对。 |
| 195 | TEST_F(ScatterMinTiling, test_tiling_var_dim0_over_int32max) | 195 | TEST_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_* 是旧分桶实现留下的历史命名, 该机制已下线, 保留名字仅为对齐历史基线。 |
| 206 | TEST_F(ScatterMinTiling, test_tiling_wide_buckets_single_window) | 206 | TEST_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 支持面一致。 |
| 232 | TEST_F(ScatterMinTiling, test_tiling_huge_first_dim_no_cap) | 232 | TEST_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_* 是旧分桶实现留下的历史命名, 该机制已下线, 保留名字仅为对齐历史基线。 |
| 183 | TEST_F(ScatterMulTiling, test_tiling_wide_buckets_single_window) | 183 | TEST_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 支持面一致。 |
| 209 | TEST_F(ScatterMulTiling, test_tiling_huge_first_dim_no_cap) | 209 | TEST_F(ScatterMulTiling, test_tiling_huge_first_dim_no_cap) |
| 210 | { | 210 | { |
| 211 | uint64_t key = 0xFFFF; | 211 | uint64_t key = 0xFFFF; |