已合并
修复topkv2算子的oom问题 #3960
修复topkv2算子的oom问题 #3960
已合并
cy_hw创建于 7月9日
2 个文件变更+55-47
@@ -1395,9 +1395,10 @@ void ComputeWorkSpace(gert::TilingContext* context, topkV2DataInfo::SortTileInfo
1395 Ops::Base::CeilAlign(static_cast<uint64_t>(xB8GmWkSize), static_cast<uint64_t>(sortTileInfo.blockUbSize)));1395 Ops::Base::CeilAlign(static_cast<uint64_t>(xB8GmWkSize), static_cast<uint64_t>(sortTileInfo.blockUbSize)));
1396 1396 
1397 size_t outValueDbWKSize = static_cast<size_t>(sortTileInfo.sortAxisNum) * sortTileInfo.unsortedDimParallel *1397 size_t outValueDbWKSize = static_cast<size_t>(sortTileInfo.sortAxisNum) * sortTileInfo.unsortedDimParallel *
1398- sortTileInfo.dtypeSize * topkV2DataInfo::CONST_2;1398+ sortTileInfo.dtypeSize;
1399 outValueDbWKSize = static_cast<size_t>(1399 outValueDbWKSize = static_cast<size_t>(
1400 Ops::Base::CeilAlign(static_cast<uint64_t>(outValueDbWKSize), static_cast<uint64_t>(sortTileInfo.blockUbSize)));1400 Ops::Base::CeilAlign(static_cast<uint64_t>(outValueDbWKSize), static_cast<uint64_t>(sortTileInfo.blockUbSize)));
1401+ outValueDbWKSize *= topkV2DataInfo::CONST_2;
1401 1402 
1402 OP_LOGI("RadixSortTiling",1403 OP_LOGI("RadixSortTiling",
1403 "excusiveBinsGmWkSize %lu, globalHistGmWkSize %lu, outIdxDbWK %lu, sortOutIdxGMWK %lu, histTileGmWk %lu,"1404 "excusiveBinsGmWkSize %lu, globalHistGmWkSize %lu, outIdxDbWK %lu, sortOutIdxGMWK %lu, histTileGmWk %lu,"
@@ -19,34 +19,30 @@ using namespace std;
19using namespace ge;19using namespace ge;
20 20 
21class TopKV2Tiling : public testing::Test {21class TopKV2Tiling : public testing::Test {
22- protected:22+protected:
23- static void SetUpTestCase() {23+ static void SetUpTestCase() { std::cout << "AscendTopKV2Test SetUp" << std::endl; }
24- std::cout << "AscendTopKV2Test SetUp" << std::endl;
25- }
26 24 
27- static void TearDownTestCase() {25+ static void TearDownTestCase() { std::cout << "AscendTopKV2Test TearDown" << std::endl; }
28- std::cout << "AscendTopKV2Test TearDown" << std::endl;
29- }
30};26};
31 27 
32- 
33/**28/**
34 * @brief 测试TopK V2算子的小规模归并排序模式29 * @brief 测试TopK V2算子的小规模归并排序模式
35- * 30+ *
36 * 测试场景:31 * 测试场景:
37 * - 输入shape: [10, 32],最后轴长度为32(小规模数据)32 * - 输入shape: [10, 32],最后轴长度为32(小规模数据)
38 * - K值: 8(取前8个最大值)33 * - K值: 8(取前8个最大值)
39 * - 数据类型: FLOAT3234 * - 数据类型: FLOAT32
40 * - 排序要求: sorted=true,需要输出排序结果35 * - 排序要求: sorted=true,需要输出排序结果
41 * - 输出索引类型: INT6436 * - 输出索引类型: INT64
42- * 37+ *
43 * 测试目的:38 * 测试目的:
44 * - 验证小规模数据(lastAxisNum <= 1024)场景下,算子选择归并排序模式39 * - 验证小规模数据(lastAxisNum <= 1024)场景下,算子选择归并排序模式
45 * - 验证TilingKey为13003(小规模归并排序模式标识)40 * - 验证TilingKey为13003(小规模归并排序模式标识)
46 * - 验证UB空间分配和tile切分策略的正确性41 * - 验证UB空间分配和tile切分策略的正确性
47 * - 验证workspace大小计算正确42 * - 验证workspace大小计算正确
48 */43 */
49-TEST_F(TopKV2Tiling, test_tiling_small_merge_sort_mode) {44+TEST_F(TopKV2Tiling, test_tiling_small_merge_sort_mode)
45+{
50 optiling::TopKV2CompileInfo compileInfo = {64};46 optiling::TopKV2CompileInfo compileInfo = {64};
51 vector<int64_t> k = {8};47 vector<int64_t> k = {8};
52 48 
@@ -68,28 +64,30 @@ TEST_F(TopKV2Tiling, test_tiling_small_merge_sort_mode) {
68 },64 },
69 &compileInfo);65 &compileInfo);
70 uint64_t expectTilingKey = 13003;66 uint64_t expectTilingKey = 13003;
71- string expectTilingData = "4294967297 1 10 10 137438953473 64 0 1 1 0 4294967296 32 8 1 8 1 0 0 0 0 0 0 0 0 0 0 0 8589934592 0 0 0 ";67+ string expectTilingData = "4294967297 1 10 10 137438953473 64 0 1 1 0 4294967296 32 8 1 8 1 0 0 0 0 0 0 0 0 0 0 0 "
68+ "8589934592 0 0 0 ";
72 std::vector<size_t> expectWorkspaces = {16787584};69 std::vector<size_t> expectWorkspaces = {16787584};
73 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);70 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);
74}71}
75 72 
76/**73/**
77 * @brief 测试TopK V2算子的单块模式(Single Block Mode)74 * @brief 测试TopK V2算子的单块模式(Single Block Mode)
78- * 75+ *
79 * 测试场景:76 * 测试场景:
80 * - 输入shape: [10, 3234],最后轴长度为323477 * - 输入shape: [10, 3234],最后轴长度为3234
81 * - K值: 258(取前258个最大值)78 * - K值: 258(取前258个最大值)
82 * - 数据类型: FLOAT3279 * - 数据类型: FLOAT32
83 * - 排序要求: sorted=true80 * - 排序要求: sorted=true
84 * - 输出索引类型: INT6481 * - 输出索引类型: INT64
85- * 82+ *
86 * 测试目的:83 * 测试目的:
87 * - 验证当lastAxisNum能够一次性装入UB时(tileSize >= lastAxisNum),选择单块模式84 * - 验证当lastAxisNum能够一次性装入UB时(tileSize >= lastAxisNum),选择单块模式
88 * - 单块模式下,一个核可以处理多个batch(lastAxisNum),充分利用UB空间85 * - 单块模式下,一个核可以处理多个batch(lastAxisNum),充分利用UB空间
89 * - 验证TilingKey为3003(单块模式标识)86 * - 验证TilingKey为3003(单块模式标识)
90 * - 验证workspace大小为默认值+额外数据空间87 * - 验证workspace大小为默认值+额外数据空间
91 */88 */
92-TEST_F(TopKV2Tiling, test_tiling_top_k_single_block_mode) {89+TEST_F(TopKV2Tiling, test_tiling_top_k_single_block_mode)
90+{
93 optiling::TopKV2CompileInfo compileInfo = {64};91 optiling::TopKV2CompileInfo compileInfo = {64};
94 vector<int64_t> k = {258};92 vector<int64_t> k = {258};
95 93 
@@ -114,14 +112,15 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_single_block_mode) {
114 /**112 /**
115 * workspace = 16777216(默认) + 除了除了输入值、输出值、输出索引的worksape空间大小113 * workspace = 16777216(默认) + 除了除了输入值、输出值、输出索引的worksape空间大小
116 */114 */
117- string expectTilingData = "4294967297 1 64 10 13889924235265 64 0 1 4 10 4294967296 3234 258 1 258 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ";115+ string expectTilingData = "4294967297 1 64 10 13889924235265 64 0 1 4 10 4294967296 3234 258 1 258 1 0 0 0 0 0 0 0 "
116+ "0 0 0 0 0 0 0 0 ";
118 std::vector<size_t> expectWorkspaces = {16843264};117 std::vector<size_t> expectWorkspaces = {16843264};
119 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);118 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);
120}119}
121 120 
122/**121/**
123 * @brief 测试TopK V2算子的FP32多核归并排序模式122 * @brief 测试TopK V2算子的FP32多核归并排序模式
124- * 123+ *
125 * 测试场景:124 * 测试场景:
126 * - 输入shape: [1, 22340],最后轴长度为22340(大规模数据)125 * - 输入shape: [1, 22340],最后轴长度为22340(大规模数据)
127 * - K值: 5258(取前5258个最大值)126 * - K值: 5258(取前5258个最大值)
@@ -129,7 +128,7 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_single_block_mode) {
129 * - 排序要求: sorted=true,需要输出排序结果128 * - 排序要求: sorted=true,需要输出排序结果
130 * - 输出索引类型: INT64129 * - 输出索引类型: INT64
131 * - 非尾轴维度: 1(单batch场景)130 * - 非尾轴维度: 1(单batch场景)
132- * 131+ *
133 * 测试目的:132 * 测试目的:
134 * - 验证大规模数据场景下,选择FP32多核归并排序模式133 * - 验证大规模数据场景下,选择FP32多核归并排序模式
135 * - 验证splitCoreNum计算:ceil(22340/2048) = 11134 * - 验证splitCoreNum计算:ceil(22340/2048) = 11
@@ -137,7 +136,8 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_single_block_mode) {
137 * - 验证workspace大小包含输入数据、输出数据和索引的空间136 * - 验证workspace大小包含输入数据、输出数据和索引的空间
138 * - 验证核心参数:onceMaxElementsAlign、lastDimTileNumTimes等137 * - 验证核心参数:onceMaxElementsAlign、lastDimTileNumTimes等
139 */138 */
140-TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_more_core_mode) {139+TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_more_core_mode)
140+{
141 optiling::TopKV2CompileInfo compileInfo = {64};141 optiling::TopKV2CompileInfo compileInfo = {64};
142 vector<int64_t> k = {6258};142 vector<int64_t> k = {6258};
143 143 
@@ -159,15 +159,15 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_more_core_mode) {
159 },159 },
160 &compileInfo);160 &compileInfo);
161 uint64_t expectTilingKey = 23003;161 uint64_t expectTilingKey = 23003;
162- string expectTilingData = "4294967297 1 1 1 8718783610891 64 0 1 0 0 4294967302 22340 6258 11 6258 1 0 0 0 0 0 0 0 0 0 1792 0 0 0 0 0 ";162+ string expectTilingData = "4294967297 1 1 1 8718783610891 64 0 1 0 0 4294967302 22340 6258 11 6258 1 0 0 0 0 0 0 0 "
163+ "0 0 1792 0 0 0 0 0 ";
163 std::vector<size_t> expectWorkspaces = {17134656};164 std::vector<size_t> expectWorkspaces = {17134656};
164 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);165 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);
165}166}
166 167 
167- 
168/**168/**
169 * @brief 测试TopK V2算子的FP32核内归并排序模式169 * @brief 测试TopK V2算子的FP32核内归并排序模式
170- * 170+ *
171 * 测试场景:171 * 测试场景:
172 * - 输入shape: [35, 52340],最后轴长度为52340(超大规模数据)172 * - 输入shape: [35, 52340],最后轴长度为52340(超大规模数据)
173 * - K值: 21321(取前21321个最大值)173 * - K值: 21321(取前21321个最大值)
@@ -175,7 +175,7 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_more_core_mode) {
175 * - 排序要求: sorted=true,需要输出排序结果175 * - 排序要求: sorted=true,需要输出排序结果
176 * - 输出索引类型: INT64176 * - 输出索引类型: INT64
177 * - 非尾轴维度: 35(多batch场景)177 * - 非尾轴维度: 35(多batch场景)
178- * 178+ *
179 * 测试目的:179 * 测试目的:
180 * - 验证超大规模数据场景下,选择FP32核内归并排序模式180 * - 验证超大规模数据场景下,选择FP32核内归并排序模式
181 * - 该模式适用于:splitCoreNum > 1 且 非尾轴数量 * splitCoreNum <= maxCoreNum 且 K > 0181 * - 该模式适用于:splitCoreNum > 1 且 非尾轴数量 * splitCoreNum <= maxCoreNum 且 K > 0
@@ -186,7 +186,8 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_more_core_mode) {
186 * - 验证核心参数:blocksPerRow=15、blockSortSize、extractChunkSize等核内排序参数186 * - 验证核心参数:blocksPerRow=15、blockSortSize、extractChunkSize等核内排序参数
187 * - 核内归并排序通过block级别排序后进行核内归并,充分利用单核资源187 * - 核内归并排序通过block级别排序后进行核内归并,充分利用单核资源
188 */188 */
189-TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_intra_core_mode) {189+TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_intra_core_mode)
190+{
190 optiling::TopKV2CompileInfo compileInfo = {64};191 optiling::TopKV2CompileInfo compileInfo = {64};
191 vector<int64_t> k = {21321};192 vector<int64_t> k = {21321};
192 193 
@@ -208,15 +209,15 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_intra_core_mode) {
208 },209 },
209 &compileInfo);210 &compileInfo);
210 uint64_t expectTilingKey = 33003;211 uint64_t expectTilingKey = 33003;
211- string expectTilingData = "4294967297 1 35 35 15393162788899 64 0 1 0 0 4294967303 52340 21321 15 21321 1 0 0 0 0 0 0 0 0 0 1 461794883673088 20478404121088 599186 0 0 ";212+ string expectTilingData = "4294967297 1 35 35 15393162788899 64 0 1 0 0 4294967303 52340 21321 15 21321 1 0 0 0 0 "
213+ "0 0 0 0 0 1 461794883673088 20478404121088 599186 0 0 ";
212 std::vector<size_t> expectWorkspaces = {46882816};214 std::vector<size_t> expectWorkspaces = {46882816};
213 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);215 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);
214}216}
215 217 
216- 
217/**218/**
218 * @brief 测试TopK V2算子的基数排序多核优化模式219 * @brief 测试TopK V2算子的基数排序多核优化模式
219- * 220+ *
220 * 测试场景:221 * 测试场景:
221 * - 输入shape: [10, 22340],最后轴长度为22340222 * - 输入shape: [10, 22340],最后轴长度为22340
222 * - K值: 2(取前2个最大值,K值较小)223 * - K值: 2(取前2个最大值,K值较小)
@@ -224,7 +225,7 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_intra_core_mode) {
224 * - 排序要求: sorted=true225 * - 排序要求: sorted=true
225 * - 输出索引类型: INT64226 * - 输出索引类型: INT64
226 * - 非尾轴维度: 10(多batch场景)227 * - 非尾轴维度: 10(多batch场景)
227- * 228+ *
228 * 测试目的:229 * 测试目的:
229 * - 验证多核优化模式的选择条件:K * (lastAxisNum / nowTileSize) <= nowTileSize230 * - 验证多核优化模式的选择条件:K * (lastAxisNum / nowTileSize) <= nowTileSize
230 * - 该模式适用场景:假设lastAxisNum需要N个核处理,每个核计算出Topk的值后,231 * - 该模式适用场景:假设lastAxisNum需要N个核处理,每个核计算出Topk的值后,
@@ -235,7 +236,8 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_fp32_intra_core_mode) {
235 * - 验证workspace大小为16777728,相对较小因为K值小236 * - 验证workspace大小为16777728,相对较小因为K值小
236 * - 多核优化模式在小K值场景下性能优于普通多核模式,避免过多核间数据搬运237 * - 多核优化模式在小K值场景下性能优于普通多核模式,避免过多核间数据搬运
237 */238 */
238-TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_optim_mode) {239+TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_optim_mode)
240+{
239 optiling::TopKV2CompileInfo compileInfo = {64};241 optiling::TopKV2CompileInfo compileInfo = {64};
240 vector<int64_t> k = {2};242 vector<int64_t> k = {2};
241 243 
@@ -257,22 +259,22 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_optim_mode) {
257 },259 },
258 &compileInfo);260 &compileInfo);
259 uint64_t expectTilingKey = 3003;261 uint64_t expectTilingKey = 3003;
260- string expectTilingData = "4294967297 1 10 10 32985348833283 64 0 1 1 0 4294967300 22340 2 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ";262+ string expectTilingData = "4294967297 1 10 10 32985348833283 64 0 1 1 0 4294967300 22340 2 3 2 1 0 0 0 0 0 0 0 0 0 "
263+ "0 0 0 0 0 0 ";
261 std::vector<size_t> expectWorkspaces = {16777728};264 std::vector<size_t> expectWorkspaces = {16777728};
262 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);265 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);
263}266}
264 267 
265- 
266/**268/**
267 * @brief 测试TopK V2算子的基数排序多核中等规模模式269 * @brief 测试TopK V2算子的基数排序多核中等规模模式
268- * 270+ *
269 * 测试场景:271 * 测试场景:
270 * - 输入shape: [10, 22340],最后轴长度为22340,非尾轴维度为10272 * - 输入shape: [10, 22340],最后轴长度为22340,非尾轴维度为10
271 * - K值: 1258(取前1258个最大值)273 * - K值: 1258(取前1258个最大值)
272 * - 数据类型: FLOAT32274 * - 数据类型: FLOAT32
273 * - 排序要求: sorted=true275 * - 排序要求: sorted=true
274 * - 输出索引类型: INT64276 * - 输出索引类型: INT64
275- * 277+ *
276 * 测试目的:278 * 测试目的:
277 * - 验证中等规模数据场景,lastAxisNum <= sortedDimParallelData时选择多核中等模式279 * - 验证中等规模数据场景,lastAxisNum <= sortedDimParallelData时选择多核中等模式
278 * - sortedDimParallelData = (tileSize * maxCoreNum) / 2280 * - sortedDimParallelData = (tileSize * maxCoreNum) / 2
@@ -281,7 +283,8 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_optim_mode) {
281 * - 验证workspace大小和tiling数据的正确性283 * - 验证workspace大小和tiling数据的正确性
282 * - 验证核心参数:tileNum=3,表示需要3个tile块处理数据284 * - 验证核心参数:tileNum=3,表示需要3个tile块处理数据
283 */285 */
284-TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_medium_mode) {286+TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_medium_mode)
287+{
285 optiling::TopKV2CompileInfo compileInfo = {64};288 optiling::TopKV2CompileInfo compileInfo = {64};
286 vector<int64_t> k = {1258};289 vector<int64_t> k = {1258};
287 290 
@@ -303,15 +306,15 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_medium_mode) {
303 },306 },
304 &compileInfo);307 &compileInfo);
305 uint64_t expectTilingKey = 3003;308 uint64_t expectTilingKey = 3003;
306- string expectTilingData = "4294967297 1 10 10 32985348833283 64 0 1 1 0 4294967300 22340 1258 3 1258 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ";309+ string expectTilingData = "4294967297 1 10 10 32985348833283 64 0 1 1 0 4294967300 22340 1258 3 1258 1 0 0 0 0 0 0 "
310+ "0 0 0 0 0 0 0 0 0 ";
307 std::vector<size_t> expectWorkspaces = {17079168};311 std::vector<size_t> expectWorkspaces = {17079168};
308 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);312 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);
309}313}
310 314 
311- 
312/**315/**
313 * @brief 测试TopK V2算子的基数排序多核大规模模式316 * @brief 测试TopK V2算子的基数排序多核大规模模式
314- * 317+ *
315 * 测试场景:318 * 测试场景:
316 * - 输入shape: [10, 3222340],最后轴长度为3222340(超大规模数据)319 * - 输入shape: [10, 3222340],最后轴长度为3222340(超大规模数据)
317 * - K值: 1258(取前1258个最大值)320 * - K值: 1258(取前1258个最大值)
@@ -319,7 +322,7 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_medium_mode) {
319 * - 排序要求: sorted=true322 * - 排序要求: sorted=true
320 * - 输出索引类型: INT64323 * - 输出索引类型: INT64
321 * - 非尾轴维度: 10(多batch场景)324 * - 非尾轴维度: 10(多batch场景)
322- * 325+ *
323 * 测试目的:326 * 测试目的:
324 * - 验证超大规模数据场景下(lastAxisNum > sortedDimParallelData),选择多核大规模模式327 * - 验证超大规模数据场景下(lastAxisNum > sortedDimParallelData),选择多核大规模模式
325 * - sortedDimParallelData = (tileSize * maxCoreNum) / 2,当lastAxisNum超过此阈值时进入大规模模式328 * - sortedDimParallelData = (tileSize * maxCoreNum) / 2,当lastAxisNum超过此阈值时进入大规模模式
@@ -331,7 +334,8 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_medium_mode) {
331 * - 验证modeType为多核模式(MULT_CORE_MODE),unsortedDimParallel=1表示每个核独立处理一个batch334 * - 验证modeType为多核模式(MULT_CORE_MODE),unsortedDimParallel=1表示每个核独立处理一个batch
332 * - 大规模模式下,每个核处理完整的lastAxisNum数据,充分利用核并行能力335 * - 大规模模式下,每个核处理完整的lastAxisNum数据,充分利用核并行能力
333 */336 */
334-TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_big_mode) {337+TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_big_mode)
338+{
335 optiling::TopKV2CompileInfo compileInfo = {64};339 optiling::TopKV2CompileInfo compileInfo = {64};
336 vector<int64_t> k = {1258};340 vector<int64_t> k = {1258};
337 341 
@@ -353,14 +357,15 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_big_mode) {
353 },357 },
354 &compileInfo);358 &compileInfo);
355 uint64_t expectTilingKey = 3003;359 uint64_t expectTilingKey = 3003;
356- string expectTilingData = "4294967297 10 1 10 32985348833344 64 0 1 1 0 4294967298 3222340 1258 420 1258 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ";360+ string expectTilingData = "4294967297 10 1 10 32985348833344 64 0 1 1 0 4294967298 3222340 1258 420 1258 7 0 0 0 0 "
361+ "0 0 0 0 0 0 0 0 0 0 0 ";
357 std::vector<size_t> expectWorkspaces = {16781632};362 std::vector<size_t> expectWorkspaces = {16781632};
358 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);363 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);
359}364}
360 365 
361/**366/**
362 * @brief 测试TopK V2算子的基数排序与TopK组合模式(SortAndTopK)367 * @brief 测试TopK V2算子的基数排序与TopK组合模式(SortAndTopK)
363- * 368+ *
364 * 测试场景:369 * 测试场景:
365 * - 输入shape: [10, 13222340],最后轴长度为13222340(超大规模数据,超过1000万阈值)370 * - 输入shape: [10, 13222340],最后轴长度为13222340(超大规模数据,超过1000万阈值)
366 * - K值: 11258(取前11258个最大值)371 * - K值: 11258(取前11258个最大值)
@@ -368,13 +373,14 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_radix_multi_core_big_mode) {
368 * - 排序要求: sorted=true,需要输出排序结果373 * - 排序要求: sorted=true,需要输出排序结果
369 * - 输出索引类型: INT64374 * - 输出索引类型: INT64
370 * - 非尾轴维度: 10(多batch场景)375 * - 非尾轴维度: 10(多batch场景)
371- * 376+ *
372 * 测试目的:377 * 测试目的:
373 * - 验证超大规模数据场景(lastAxisNum >= 10000000),选择SortAndTopK组合模式378 * - 验证超大规模数据场景(lastAxisNum >= 10000000),选择SortAndTopK组合模式
374 * - SortAndTopK模式的阈值:SORT_AND_TOP_K_THRESHOLD = 100000001000万)379 * - SortAndTopK模式的阈值:SORT_AND_TOP_K_THRESHOLD = 100000001000万)
375 * - 该模式策略:先进行基数排序对全部数据排序,然后从排序结果中取前K个380 * - 该模式策略:先进行基数排序对全部数据排序,然后从排序结果中取前K个
376 */381 */
377-TEST_F(TopKV2Tiling, test_tiling_top_k_radix_sort_and_topk) {382+TEST_F(TopKV2Tiling, test_tiling_top_k_radix_sort_and_topk)
383+{
378 optiling::TopKV2CompileInfo compileInfo = {64};384 optiling::TopKV2CompileInfo compileInfo = {64};
379 vector<int64_t> k = {11258};385 vector<int64_t> k = {11258};
380 386 
@@ -396,7 +402,8 @@ TEST_F(TopKV2Tiling, test_tiling_top_k_radix_sort_and_topk) {
396 },402 },
397 &compileInfo);403 &compileInfo);
398 uint64_t expectTilingKey = 3003;404 uint64_t expectTilingKey = 3003;
399- string expectTilingData = "2 10 1 10 63771674411072 0 0 0 0 0 4294967301 13222340 11258 891 0 0 0 0 0 0 0 0 0 0 0 64 18657337933856 137438953476 74629351749552 28668 1 ";405+ string expectTilingData = "2 10 1 10 63771674411072 0 0 0 0 0 4294967301 13222340 11258 891 0 0 0 0 0 0 0 0 0 0 0 "
400- std::vector<size_t> expectWorkspaces = {299818336};406+ "64 18657337933856 137438953476 74629351749552 28668 1 ";
407+ std::vector<size_t> expectWorkspaces = {299818368};
401 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);408 ExecuteTestCase(tilingContextPara, ge::GRAPH_SUCCESS, expectTilingKey, expectTilingData, expectWorkspaces);
402-}409+}