已合并
add ut opapi #4426
liuyun_nj创建于 4月29日
add ut opapi #4426
已合并
共 16 个文件变更+1194-59
| @@ -288,7 +288,7 @@ static bool CheckInputOutputShape(const gert::TilingContext* context) | |||
| 288 | } else if (norm_key == PRE_RMS_NORM || norm_key == POST_RMS_NORM) { | 288 | } else if (norm_key == PRE_RMS_NORM || norm_key == POST_RMS_NORM) { |
| 289 | OP_CHECK_IF( | 289 | OP_CHECK_IF( |
| 290 | (gamma_shape->GetStorageShape().GetDim(0) != 1 || | 290 | (gamma_shape->GetStorageShape().GetDim(0) != 1 || |
| 291 | - gamma_shape->GetStorageShape().GetDim(-1) != x1_shape->GetStorageShape().GetDim(-1)), | 291 | + gamma_shape->GetStorageShape().GetDim(gammaDimNum - 1) != x1_shape->GetStorageShape().GetDim(x1DimNum - 1)), |
| 292 | OP_LOGE_FOR_INVALID_SHAPES_WITH_REASON( | 292 | OP_LOGE_FOR_INVALID_SHAPES_WITH_REASON( |
| 293 | context->GetNodeName(), "gamma and x1", | 293 | context->GetNodeName(), "gamma and x1", |
| 294 | (Ops::Base::ToString(gamma_shape->GetStorageShape()) + " and " + | 294 | (Ops::Base::ToString(gamma_shape->GetStorageShape()) + " and " + |
| @@ -549,4 +549,4 @@ IMPL_OP_OPTILING(InplaceAddRmsNorm) | |||
| 549 | .Tiling(Tiling4AddRmsNorm) | 549 | .Tiling(Tiling4AddRmsNorm) |
| 550 | .TilingParse<AddRmsNormCompileInfo>(TilingPrepare4AddRmsNorm); | 550 | .TilingParse<AddRmsNormCompileInfo>(TilingPrepare4AddRmsNorm); |
| 551 | 551 | ||
| 552 | -} // namespace optiling | 552 | +} // namespace optiling |
| @@ -1,18 +1,19 @@ | |||
| 1 | -# This program is free software, you can redistribute it and/or modify. | ||
| 2 | # Copyright (c) 2025 Huawei Technologies Co., Ltd. | 1 | # Copyright (c) 2025 Huawei Technologies Co., Ltd. |
| 3 | -# This file is a part of the CANN Open Software. | 2 | +# This program is free software, you can redistribute it and/or modify it under the terms and conditions of |
| 4 | -# Licensed under CANN Open Software License Agreement Version 2.0 (the "License"). | 3 | +# CANN Open Software License Agreement Version 2.0 (the "License"). |
| 5 | # Please refer to the License for details. You may not use this file except in compliance with the License. | 4 | # Please refer to the License for details. You may not use this file except in compliance with the License. |
| 6 | -# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | 5 | +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, |
| 6 | +# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 7 | # See LICENSE in the root of the software repository for the full text of the License. | 7 | # See LICENSE in the root of the software repository for the full text of the License. |
| 8 | #/ | 8 | #/ |
| 9 | 9 | ||
| 10 | -file(GLOB CURRENT_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*) | 10 | +file(GLOB CURRENT_SOURCE_DIRS LIST_DIRECTORIES true ${CMAKE_CURRENT_SOURCE_DIR}/*) |
| 11 | +foreach(SUB_DIR ${CURRENT_SOURCE_DIRS}) | ||
| 12 | + if(EXISTS "${SUB_DIR}/CMakeLists.txt") | ||
| 13 | + add_subdirectory(${SUB_DIR}) | ||
| 14 | + endif() | ||
| 15 | +endforeach() | ||
| 11 | if(UT_TEST_ALL OR OP_HOST_UT) | 16 | if(UT_TEST_ALL OR OP_HOST_UT) |
| 12 | add_modules_ut_sources(HOSTNAME ${OP_TILING_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 17 | add_modules_ut_sources(HOSTNAME ${OP_TILING_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 13 | - add_modules_ut_sources(HOSTNAME ${OP_INFERSHAPE_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 18 | + #add_modules_ut_sources(HOSTNAME ${OP_INFERSHAPE_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 14 | endif() | 19 | endif() |
| 15 | -if(UT_TEST_ALL OR OP_API_UT) | ||
| 16 | - add_modules_ut_sources(HOSTNAME ${OP_API_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | ||
| 17 | -endif() | ||
| 18 | - | ||
| @@ -0,0 +1,12 @@ | |||
| 1 | +# Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 2 | +# This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 3 | +# CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 4 | +# Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 5 | +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 6 | +# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 7 | +# See LICENSE in the root of the software repository for the full text of the License. | ||
| 8 | +#/ | ||
| 9 | + | ||
| 10 | +if(UT_TEST_ALL OR OP_API_UT) | ||
| 11 | + add_modules_ut_sources(HOSTNAME ${OP_API_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | ||
| 12 | +endif() | ||
| @@ -0,0 +1,62 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | +using namespace std; | ||
| 19 | + | ||
| 20 | +class l2_add_rms_norm_test : public testing::Test | ||
| 21 | +{ | ||
| 22 | +protected: | ||
| 23 | + static void SetUpTestCase() | ||
| 24 | + { | ||
| 25 | + cout << "l2_add_rms_norm_test SetUp" << endl; | ||
| 26 | + } | ||
| 27 | + static void TearDownTestCase() | ||
| 28 | + { | ||
| 29 | + cout << "l2_add_rms_norm_test TearDown" << endl; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | +public: | ||
| 33 | + void CommonTest( | ||
| 34 | + const vector<int64_t>& xShape, const vector<int64_t>& weightShape, const vector<int64_t>& rstdShape, aclDataType dtype, aclnnStatus expectRet) | ||
| 35 | + { | ||
| 36 | + auto x1 = TensorDesc(xShape, dtype, ACL_FORMAT_ND); | ||
| 37 | + auto x2 = TensorDesc(xShape, dtype, ACL_FORMAT_ND); | ||
| 38 | + auto weight = TensorDesc(weightShape, dtype, ACL_FORMAT_ND); | ||
| 39 | + auto yOut = TensorDesc(xShape, dtype, ACL_FORMAT_ND); | ||
| 40 | + auto rstdOut = TensorDesc(rstdShape, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 41 | + auto xOut = TensorDesc(xShape, dtype, ACL_FORMAT_ND); | ||
| 42 | + uint64_t workspace_size = 0; | ||
| 43 | + auto ut = OP_API_UT(aclnnAddRmsNorm, INPUT(x1, x2, weight, 0.00001), OUTPUT(yOut, rstdOut, xOut)); | ||
| 44 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 45 | + EXPECT_EQ(aclRet, expectRet); | ||
| 46 | + } | ||
| 47 | +}; | ||
| 48 | + | ||
| 49 | +TEST_F(l2_add_rms_norm_test, ascend910B2_success) | ||
| 50 | +{ | ||
| 51 | + // data type cases | ||
| 52 | + CommonTest({4, 16, 128}, {128}, {4, 16, 1}, ACL_FLOAT, ACLNN_SUCCESS); | ||
| 53 | + CommonTest({4, 4, 128}, {128}, {4, 4, 1}, ACL_FLOAT16, ACLNN_SUCCESS); | ||
| 54 | + CommonTest({4, 16, 12288}, {12288}, {4, 16, 1}, ACL_FLOAT16, ACLNN_SUCCESS); | ||
| 55 | + CommonTest({4, 0, 128}, {128}, {4, 0, 1}, ACL_FLOAT, ACLNN_SUCCESS); | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +TEST_F(l2_add_rms_norm_test, ascend910B2_param_invalid) | ||
| 59 | +{ | ||
| 60 | + // invalid dtype | ||
| 61 | + CommonTest({4, 4, 128}, {128}, {4, 4, 1}, ACL_DOUBLE, ACLNN_ERR_PARAM_INVALID); | ||
| 62 | +} | ||
| @@ -1,17 +1,19 @@ | |||
| 1 | -# This program is free software, you can redistribute it and/or modify. | ||
| 2 | # Copyright (c) 2025 Huawei Technologies Co., Ltd. | 1 | # Copyright (c) 2025 Huawei Technologies Co., Ltd. |
| 3 | -# This file is a part of the CANN Open Software. | 2 | +# This program is free software, you can redistribute it and/or modify it under the terms and conditions of |
| 4 | -# Licensed under CANN Open Software License Agreement Version 2.0 (the "License"). | 3 | +# CANN Open Software License Agreement Version 2.0 (the "License"). |
| 5 | # Please refer to the License for details. You may not use this file except in compliance with the License. | 4 | # Please refer to the License for details. You may not use this file except in compliance with the License. |
| 6 | -# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | 5 | +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, |
| 6 | +# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 7 | # See LICENSE in the root of the software repository for the full text of the License. | 7 | # See LICENSE in the root of the software repository for the full text of the License. |
| 8 | #/ | 8 | #/ |
| 9 | 9 | ||
| 10 | -file(GLOB CURRENT_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*) | 10 | +file(GLOB CURRENT_SOURCE_DIRS LIST_DIRECTORIES true ${CMAKE_CURRENT_SOURCE_DIR}/*) |
| 11 | +foreach(SUB_DIR ${CURRENT_SOURCE_DIRS}) | ||
| 12 | + if(EXISTS "${SUB_DIR}/CMakeLists.txt") | ||
| 13 | + add_subdirectory(${SUB_DIR}) | ||
| 14 | + endif() | ||
| 15 | +endforeach() | ||
| 11 | if(UT_TEST_ALL OR OP_HOST_UT) | 16 | if(UT_TEST_ALL OR OP_HOST_UT) |
| 12 | add_modules_ut_sources(HOSTNAME ${OP_TILING_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 17 | add_modules_ut_sources(HOSTNAME ${OP_TILING_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 13 | - add_modules_ut_sources(HOSTNAME ${OP_INFERSHAPE_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 18 | + #add_modules_ut_sources(HOSTNAME ${OP_INFERSHAPE_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 14 | -endif() | ||
| 15 | -if(UT_TEST_ALL OR OP_API_UT) | ||
| 16 | - add_modules_ut_sources(HOSTNAME ${OP_API_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | ||
| 17 | endif() | 19 | endif() |
| @@ -0,0 +1,12 @@ | |||
| 1 | +# Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 2 | +# This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 3 | +# CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 4 | +# Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 5 | +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 6 | +# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 7 | +# See LICENSE in the root of the software repository for the full text of the License. | ||
| 8 | +#/ | ||
| 9 | + | ||
| 10 | +if(UT_TEST_ALL OR OP_API_UT) | ||
| 11 | + add_modules_ut_sources(HOSTNAME ${OP_API_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | ||
| 12 | +endif() | ||
Anorm/add_rms_norm_dynamic_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_dynamic_quant.cpp+188-0
| @@ -0,0 +1,188 @@ | |||
| 1 | +/** | ||
| 2 | + * This program is free software, you can redistribute it and/or modify. | ||
| 3 | + * Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 4 | + * This file is a part of the CANN Open Software. | ||
| 5 | + * Licensed under CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 6 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 7 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | +using namespace std; | ||
| 22 | + | ||
| 23 | +class l2_add_rms_norm_dynamic_quant_test : public testing::Test | ||
| 24 | +{ | ||
| 25 | +protected: | ||
| 26 | + static void SetUpTestCase() | ||
| 27 | + { | ||
| 28 | + cout << "add_rms_norm_dynamic_quant_test SetUp" << endl; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + static void TearDownTestCase() | ||
| 32 | + { | ||
| 33 | + cout << "add_rms_norm_dynamic_quant_test TearDown" << endl; | ||
| 34 | + } | ||
| 35 | +}; | ||
| 36 | + | ||
| 37 | +TEST_F(l2_add_rms_norm_dynamic_quant_test, ascend910B_case_001) | ||
| 38 | +{ | ||
| 39 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 40 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 41 | + auto tensor_desc_gamma = TensorDesc({64,}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 42 | + auto tensor_desc_s1 = TensorDesc({64,}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 43 | + auto tensor_desc_s2 = TensorDesc({64,}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 44 | + | ||
| 45 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 46 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 47 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 48 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 49 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 50 | + | ||
| 51 | + double eps = 1e-5; | ||
| 52 | + | ||
| 53 | + auto ut = OP_API_UT(aclnnAddRmsNormDynamicQuant, | ||
| 54 | + INPUT(tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, | ||
| 55 | + tensor_desc_s1, tensor_desc_s2, eps), | ||
| 56 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2) | ||
| 57 | + ); | ||
| 58 | + | ||
| 59 | + uint64_t workspace_size = 0; | ||
| 60 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 61 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 62 | +} | ||
| 63 | + | ||
| 64 | +TEST_F(l2_add_rms_norm_dynamic_quant_test, ascend910B_case_002) | ||
| 65 | +{ | ||
| 66 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 67 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 68 | + auto tensor_desc_gamma = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 69 | + auto tensor_desc_s1 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 70 | + auto tensor_desc_s2 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 71 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 72 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 73 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 74 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 75 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 76 | + | ||
| 77 | + double eps = 1e-5; | ||
| 78 | + auto ut = OP_API_UT(aclnnAddRmsNormDynamicQuant, | ||
| 79 | + INPUT(tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, | ||
| 80 | + tensor_desc_s2, eps), | ||
| 81 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2) | ||
| 82 | + ); | ||
| 83 | + | ||
| 84 | + uint64_t workspace_size = 0; | ||
| 85 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 86 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 87 | +} | ||
| 88 | + | ||
| 89 | +//*************************************************************************************************************** | ||
| 90 | +TEST_F(l2_add_rms_norm_dynamic_quant_test, ascend950_case_001) | ||
| 91 | +{ | ||
| 92 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 93 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 94 | + auto tensor_desc_gamma = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 95 | + auto tensor_desc_s1 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 96 | + auto tensor_desc_s2 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 97 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 98 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 99 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 100 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 101 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 102 | + | ||
| 103 | + double eps = 1e-5; | ||
| 104 | + auto ut = OP_API_UT(aclnnAddRmsNormDynamicQuant, | ||
| 105 | + INPUT(tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, | ||
| 106 | + tensor_desc_s2, eps), | ||
| 107 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2) | ||
| 108 | + ); | ||
| 109 | + | ||
| 110 | + uint64_t workspace_size = 0; | ||
| 111 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 112 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 113 | +} | ||
| 114 | + | ||
| 115 | +TEST_F(l2_add_rms_norm_dynamic_quant_test, ascend950_case_002) | ||
| 116 | +{ | ||
| 117 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 118 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 119 | + auto tensor_desc_gamma = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 120 | + auto tensor_desc_s1 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 121 | + auto tensor_desc_s2 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 122 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 123 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 124 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_HIFLOAT8, ACL_FORMAT_ND); | ||
| 125 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_HIFLOAT8, ACL_FORMAT_ND); | ||
| 126 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 127 | + | ||
| 128 | + double eps = 1e-5; | ||
| 129 | + auto ut = OP_API_UT(aclnnAddRmsNormDynamicQuant, | ||
| 130 | + INPUT(tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, | ||
| 131 | + tensor_desc_s2, eps), | ||
| 132 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2) | ||
| 133 | + ); | ||
| 134 | + | ||
| 135 | + uint64_t workspace_size = 0; | ||
| 136 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 137 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +TEST_F(l2_add_rms_norm_dynamic_quant_test, ascend950_case_003) | ||
| 141 | +{ | ||
| 142 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 143 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 144 | + auto tensor_desc_gamma = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 145 | + auto tensor_desc_s1 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 146 | + auto tensor_desc_s2 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 147 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 148 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 149 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_FLOAT8_E5M2, ACL_FORMAT_ND); | ||
| 150 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_FLOAT8_E5M2, ACL_FORMAT_ND); | ||
| 151 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 152 | + | ||
| 153 | + double eps = 1e-5; | ||
| 154 | + auto ut = OP_API_UT(aclnnAddRmsNormDynamicQuant, | ||
| 155 | + INPUT(tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, | ||
| 156 | + tensor_desc_s2, eps), | ||
| 157 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2) | ||
| 158 | + ); | ||
| 159 | + | ||
| 160 | + uint64_t workspace_size = 0; | ||
| 161 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 162 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 163 | +} | ||
| 164 | + | ||
| 165 | +TEST_F(l2_add_rms_norm_dynamic_quant_test, ascend950_case_004) | ||
| 166 | +{ | ||
| 167 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 168 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 169 | + auto tensor_desc_gamma = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 170 | + auto tensor_desc_s1 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 171 | + auto tensor_desc_s2 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 172 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 173 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 174 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_FLOAT8_E4M3FN, ACL_FORMAT_ND); | ||
| 175 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_FLOAT8_E4M3FN, ACL_FORMAT_ND); | ||
| 176 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 177 | + | ||
| 178 | + double eps = 1e-5; | ||
| 179 | + auto ut = OP_API_UT(aclnnAddRmsNormDynamicQuant, | ||
| 180 | + INPUT(tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, | ||
| 181 | + tensor_desc_s2, eps), | ||
| 182 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2) | ||
| 183 | + ); | ||
| 184 | + | ||
| 185 | + uint64_t workspace_size = 0; | ||
| 186 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 187 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 188 | +} | ||
Anorm/add_rms_norm_dynamic_quant/tests/ut/op_host/op_api/test_aclnn_add_rms_norm_dynamic_quant_v2.cpp+264-0
| @@ -0,0 +1,264 @@ | |||
| 1 | +/** | ||
| 2 | + * This program is free software, you can redistribute it and/or modify. | ||
| 3 | + * Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 4 | + * This file is a part of the CANN Open Software. | ||
| 5 | + * Licensed under CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 6 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 7 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | + | ||
| 23 | +using namespace std; | ||
| 24 | + | ||
| 25 | +class l2_add_rms_norm_dynamic_quant_v2_test : public testing::Test { | ||
| 26 | +protected: | ||
| 27 | + static void SetUpTestCase() | ||
| 28 | + { | ||
| 29 | + cout << "add_rms_norm_dynamic_quant_v2_test SetUp" << endl; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + static void TearDownTestCase() | ||
| 33 | + { | ||
| 34 | + cout << "add_rms_norm_dynamic_quant_v2_test TearDown" << endl; | ||
| 35 | + } | ||
| 36 | +}; | ||
| 37 | + | ||
| 38 | +TEST_F(l2_add_rms_norm_dynamic_quant_v2_test, ascend910B_case_001) | ||
| 39 | +{ | ||
| 40 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 41 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 42 | + auto tensor_desc_gamma = TensorDesc( | ||
| 43 | + { | ||
| 44 | + 64, | ||
| 45 | + }, | ||
| 46 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 47 | + auto tensor_desc_s1 = TensorDesc( | ||
| 48 | + { | ||
| 49 | + 64, | ||
| 50 | + }, | ||
| 51 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 52 | + auto tensor_desc_s2 = TensorDesc( | ||
| 53 | + { | ||
| 54 | + 64, | ||
| 55 | + }, | ||
| 56 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 57 | + auto tensor_desc_beta = TensorDesc( | ||
| 58 | + { | ||
| 59 | + 64, | ||
| 60 | + }, | ||
| 61 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 62 | + | ||
| 63 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 64 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 65 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 66 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 67 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 68 | + | ||
| 69 | + double eps = 1e-5; | ||
| 70 | + | ||
| 71 | + auto ut = OP_API_UT( | ||
| 72 | + aclnnAddRmsNormDynamicQuantV2, | ||
| 73 | + INPUT( | ||
| 74 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_beta, eps, | ||
| 75 | + nullptr), | ||
| 76 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2)); | ||
| 77 | + | ||
| 78 | + uint64_t workspace_size = 0; | ||
| 79 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 80 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +TEST_F(l2_add_rms_norm_dynamic_quant_v2_test, ascend910B_case_002) | ||
| 84 | +{ | ||
| 85 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 86 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 87 | + auto tensor_desc_gamma = TensorDesc( | ||
| 88 | + { | ||
| 89 | + 64, | ||
| 90 | + }, | ||
| 91 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 92 | + auto tensor_desc_s1 = TensorDesc( | ||
| 93 | + { | ||
| 94 | + 64, | ||
| 95 | + }, | ||
| 96 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 97 | + auto tensor_desc_s2 = TensorDesc( | ||
| 98 | + { | ||
| 99 | + 64, | ||
| 100 | + }, | ||
| 101 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 102 | + auto tensor_desc_beta = TensorDesc( | ||
| 103 | + { | ||
| 104 | + 64, | ||
| 105 | + }, | ||
| 106 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 107 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 108 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 109 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 110 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 111 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 112 | + double eps = 1e-5; | ||
| 113 | + | ||
| 114 | + auto ut = OP_API_UT( | ||
| 115 | + aclnnAddRmsNormDynamicQuantV2, | ||
| 116 | + INPUT( | ||
| 117 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_beta, eps, | ||
| 118 | + nullptr), | ||
| 119 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2)); | ||
| 120 | + | ||
| 121 | + uint64_t workspace_size = 0; | ||
| 122 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 123 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +TEST_F(l2_add_rms_norm_dynamic_quant_v2_test, ascend910B_case_003) | ||
| 127 | +{ | ||
| 128 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 129 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 130 | + auto tensor_desc_gamma = TensorDesc( | ||
| 131 | + { | ||
| 132 | + 64, | ||
| 133 | + }, | ||
| 134 | + ACL_BF16, ACL_FORMAT_ND); | ||
| 135 | + auto tensor_desc_s1 = TensorDesc( | ||
| 136 | + { | ||
| 137 | + 64, | ||
| 138 | + }, | ||
| 139 | + ACL_BF16, ACL_FORMAT_ND); | ||
| 140 | + auto tensor_desc_s2 = TensorDesc( | ||
| 141 | + { | ||
| 142 | + 64, | ||
| 143 | + }, | ||
| 144 | + ACL_BF16, ACL_FORMAT_ND); | ||
| 145 | + auto tensor_desc_beta = TensorDesc( | ||
| 146 | + { | ||
| 147 | + 64, | ||
| 148 | + }, | ||
| 149 | + ACL_BF16, ACL_FORMAT_ND); | ||
| 150 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 151 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 152 | + auto tensor_desc_y1 = TensorDesc({8, 8}, ACL_INT32, ACL_FORMAT_ND); | ||
| 153 | + auto tensor_desc_y2 = TensorDesc({8, 8}, ACL_INT32, ACL_FORMAT_ND); | ||
| 154 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 155 | + double eps = 1e-5; | ||
| 156 | + | ||
| 157 | + auto ut = OP_API_UT( | ||
| 158 | + aclnnAddRmsNormDynamicQuantV2, | ||
| 159 | + INPUT( | ||
| 160 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_beta, eps, | ||
| 161 | + nullptr), | ||
| 162 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2)); | ||
| 163 | + | ||
| 164 | + uint64_t workspace_size = 0; | ||
| 165 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 166 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +TEST_F(l2_add_rms_norm_dynamic_quant_v2_test, ascend910B_case_004) | ||
| 170 | +{ | ||
| 171 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 172 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 173 | + auto tensor_desc_gamma = TensorDesc( | ||
| 174 | + { | ||
| 175 | + 64, | ||
| 176 | + }, | ||
| 177 | + ACL_BF16, ACL_FORMAT_ND); | ||
| 178 | + auto tensor_desc_s1 = TensorDesc( | ||
| 179 | + { | ||
| 180 | + 64, | ||
| 181 | + }, | ||
| 182 | + ACL_BF16, ACL_FORMAT_ND); | ||
| 183 | + auto tensor_desc_s2 = TensorDesc( | ||
| 184 | + { | ||
| 185 | + 64, | ||
| 186 | + }, | ||
| 187 | + ACL_BF16, ACL_FORMAT_ND); | ||
| 188 | + auto tensor_desc_beta = TensorDesc( | ||
| 189 | + { | ||
| 190 | + 64, | ||
| 191 | + }, | ||
| 192 | + ACL_BF16, ACL_FORMAT_ND); | ||
| 193 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 194 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 195 | + auto tensor_desc_y1 = TensorDesc({8, 8}, ACL_INT32, ACL_FORMAT_ND); | ||
| 196 | + auto tensor_desc_y2 = TensorDesc({8, 8}, ACL_INT32, ACL_FORMAT_ND); | ||
| 197 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 198 | + double eps = 1e-5; | ||
| 199 | + | ||
| 200 | + auto ut = OP_API_UT( | ||
| 201 | + aclnnAddRmsNormDynamicQuantV2, | ||
| 202 | + INPUT( | ||
| 203 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_beta, eps, | ||
| 204 | + nullptr), | ||
| 205 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2)); | ||
| 206 | + | ||
| 207 | + uint64_t workspace_size = 0; | ||
| 208 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 209 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 210 | +} | ||
| 211 | + | ||
| 212 | +TEST_F(l2_add_rms_norm_dynamic_quant_v2_test, ascend950_case_001) | ||
| 213 | +{ | ||
| 214 | + op::SocVersionManager versionManager(op::SocVersion::ASCEND950); | ||
| 215 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 216 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 217 | + auto tensor_desc_gamma = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 218 | + auto tensor_desc_s1 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 219 | + auto tensor_desc_s2 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 220 | + auto tensor_desc_beta = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 221 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 222 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 223 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 224 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 225 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 226 | + | ||
| 227 | + double eps = 1e-5; | ||
| 228 | + auto ut = OP_API_UT(aclnnAddRmsNormDynamicQuantV2, | ||
| 229 | + INPUT(tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_beta, eps, | ||
| 230 | + nullptr), | ||
| 231 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2) | ||
| 232 | + ); | ||
| 233 | + | ||
| 234 | + uint64_t workspace_size = 0; | ||
| 235 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 236 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 237 | +} | ||
| 238 | + | ||
| 239 | +TEST_F(l2_add_rms_norm_dynamic_quant_v2_test, ascend950_case_002) | ||
| 240 | +{ | ||
| 241 | + op::SocVersionManager versionManager(op::SocVersion::ASCEND950); | ||
| 242 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 243 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 244 | + auto tensor_desc_gamma = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 245 | + auto tensor_desc_s1 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 246 | + auto tensor_desc_s2 = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 247 | + auto tensor_desc_beta = TensorDesc({64,}, ACL_BF16, ACL_FORMAT_ND); | ||
| 248 | + auto tensor_desc_scale1 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 249 | + auto tensor_desc_scale2 = TensorDesc({8}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 250 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_HIFLOAT8, ACL_FORMAT_ND); | ||
| 251 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_HIFLOAT8, ACL_FORMAT_ND); | ||
| 252 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_BF16, ACL_FORMAT_ND); | ||
| 253 | + | ||
| 254 | + double eps = 1e-5; | ||
| 255 | + auto ut = OP_API_UT(aclnnAddRmsNormDynamicQuantV2, | ||
| 256 | + INPUT(tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_beta, eps, | ||
| 257 | + nullptr), | ||
| 258 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, tensor_desc_scale1, tensor_desc_scale2) | ||
| 259 | + ); | ||
| 260 | + | ||
| 261 | + uint64_t workspace_size = 0; | ||
| 262 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 263 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 264 | +} | ||
| @@ -1,18 +1,19 @@ | |||
| 1 | -# This program is free software, you can redistribute it and/or modify. | ||
| 2 | # Copyright (c) 2025 Huawei Technologies Co., Ltd. | 1 | # Copyright (c) 2025 Huawei Technologies Co., Ltd. |
| 3 | -# This file is a part of the CANN Open Software. | 2 | +# This program is free software, you can redistribute it and/or modify it under the terms and conditions of |
| 4 | -# Licensed under CANN Open Software License Agreement Version 2.0 (the "License"). | 3 | +# CANN Open Software License Agreement Version 2.0 (the "License"). |
| 5 | # Please refer to the License for details. You may not use this file except in compliance with the License. | 4 | # Please refer to the License for details. You may not use this file except in compliance with the License. |
| 6 | -# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | 5 | +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, |
| 6 | +# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 7 | # See LICENSE in the root of the software repository for the full text of the License. | 7 | # See LICENSE in the root of the software repository for the full text of the License. |
| 8 | #/ | 8 | #/ |
| 9 | 9 | ||
| 10 | -file(GLOB CURRENT_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*) | 10 | +file(GLOB CURRENT_SOURCE_DIRS LIST_DIRECTORIES true ${CMAKE_CURRENT_SOURCE_DIR}/*) |
| 11 | +foreach(SUB_DIR ${CURRENT_SOURCE_DIRS}) | ||
| 12 | + if(EXISTS "${SUB_DIR}/CMakeLists.txt") | ||
| 13 | + add_subdirectory(${SUB_DIR}) | ||
| 14 | + endif() | ||
| 15 | +endforeach() | ||
| 11 | if(UT_TEST_ALL OR OP_HOST_UT) | 16 | if(UT_TEST_ALL OR OP_HOST_UT) |
| 12 | add_modules_ut_sources(HOSTNAME ${OP_TILING_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 17 | add_modules_ut_sources(HOSTNAME ${OP_TILING_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 13 | - add_modules_ut_sources(HOSTNAME ${OP_INFERSHAPE_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 18 | + #add_modules_ut_sources(HOSTNAME ${OP_INFERSHAPE_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 14 | endif() | 19 | endif() |
| 15 | -if(UT_TEST_ALL OR OP_API_UT) | ||
| 16 | - add_modules_ut_sources(HOSTNAME ${OP_API_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | ||
| 17 | -endif() | ||
| 18 | - | ||
| @@ -0,0 +1,12 @@ | |||
| 1 | +# Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 2 | +# This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 3 | +# CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 4 | +# Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 5 | +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 6 | +# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 7 | +# See LICENSE in the root of the software repository for the full text of the License. | ||
| 8 | +#/ | ||
| 9 | + | ||
| 10 | +if(UT_TEST_ALL OR OP_API_UT) | ||
| 11 | + add_modules_ut_sources(HOSTNAME ${OP_API_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | ||
| 12 | +endif() | ||
| @@ -0,0 +1,434 @@ | |||
| 1 | +/** | ||
| 2 | + * This program is free software, you can redistribute it and/or modify. | ||
| 3 | + * Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 4 | + * This file is a part of the CANN Open Software. | ||
| 5 | + * Licensed under CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 6 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 7 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | +using namespace std; | ||
| 22 | + | ||
| 23 | +class l2_add_rms_norm_quant_test : public testing::Test | ||
| 24 | +{ | ||
| 25 | +protected: | ||
| 26 | + static void SetUpTestCase() | ||
| 27 | + { | ||
| 28 | + cout << "add_rms_norm_quant_test SetUp" << endl; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + static void TearDownTestCase() | ||
| 32 | + { | ||
| 33 | + cout << "add_rms_norm_quant_test TearDown" << endl; | ||
| 34 | + } | ||
| 35 | +}; | ||
| 36 | + | ||
| 37 | +TEST_F(l2_add_rms_norm_quant_test, ascend950PR_9589_case_dyn_001) | ||
| 38 | +{ | ||
| 39 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 40 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 41 | + auto tensor_desc_gamma = TensorDesc( | ||
| 42 | + { | ||
| 43 | + 64, | ||
| 44 | + }, | ||
| 45 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 46 | + auto tensor_desc_s1 = TensorDesc( | ||
| 47 | + { | ||
| 48 | + 64, | ||
| 49 | + }, | ||
| 50 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 51 | + auto tensor_desc_s2 = TensorDesc( | ||
| 52 | + { | ||
| 53 | + 64, | ||
| 54 | + }, | ||
| 55 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 56 | + | ||
| 57 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 58 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 59 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 60 | + | ||
| 61 | + int64_t axis = -1L; | ||
| 62 | + double eps = 1e-5; | ||
| 63 | + bool divMode = true; | ||
| 64 | + | ||
| 65 | + auto ut = OP_API_UT( | ||
| 66 | + aclnnAddRmsNormQuant, | ||
| 67 | + INPUT( | ||
| 68 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, (aclTensor*)nullptr, | ||
| 69 | + (aclTensor*)nullptr, axis, eps, divMode), | ||
| 70 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x)); | ||
| 71 | + | ||
| 72 | + // SAMPLE: only test GetWorkspaceSize | ||
| 73 | + uint64_t workspace_size = 0; | ||
| 74 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 75 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +TEST_F(l2_add_rms_norm_quant_test, ascend950PR_9589_case_stc_001) | ||
| 79 | +{ | ||
| 80 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 81 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 82 | + auto tensor_desc_gamma = TensorDesc( | ||
| 83 | + { | ||
| 84 | + 64, | ||
| 85 | + }, | ||
| 86 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 87 | + auto tensor_desc_s1 = TensorDesc( | ||
| 88 | + { | ||
| 89 | + 64, | ||
| 90 | + }, | ||
| 91 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 92 | + auto tensor_desc_s2 = TensorDesc( | ||
| 93 | + { | ||
| 94 | + 64, | ||
| 95 | + }, | ||
| 96 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 97 | + auto tensor_desc_z1 = TensorDesc( | ||
| 98 | + { | ||
| 99 | + 64, | ||
| 100 | + }, | ||
| 101 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 102 | + auto tensor_desc_z2 = TensorDesc( | ||
| 103 | + { | ||
| 104 | + 64, | ||
| 105 | + }, | ||
| 106 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 107 | + | ||
| 108 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 109 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 110 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 111 | + | ||
| 112 | + int64_t axis = -1; | ||
| 113 | + double eps = 1e-5; | ||
| 114 | + bool divMode = true; | ||
| 115 | + | ||
| 116 | + auto ut = OP_API_UT( | ||
| 117 | + aclnnAddRmsNormQuant, | ||
| 118 | + INPUT( | ||
| 119 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_z1, | ||
| 120 | + tensor_desc_z2, axis, eps, divMode), | ||
| 121 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x)); | ||
| 122 | + | ||
| 123 | + // SAMPLE: only test GetWorkspaceSize | ||
| 124 | + uint64_t workspace_size = 0; | ||
| 125 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 126 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 127 | +} | ||
| 128 | + | ||
| 129 | +//********************************************************************************************************************** | ||
| 130 | +TEST_F(l2_add_rms_norm_quant_test, ascend950PR_9589_case_dyn_002) | ||
| 131 | +{ | ||
| 132 | + auto tensor_desc_x1 = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 133 | + auto tensor_desc_x2 = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 134 | + auto tensor_desc_gamma = TensorDesc( | ||
| 135 | + { | ||
| 136 | + 16, | ||
| 137 | + }, | ||
| 138 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 139 | + auto tensor_desc_s1 = TensorDesc( | ||
| 140 | + { | ||
| 141 | + 16, | ||
| 142 | + }, | ||
| 143 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 144 | + auto tensor_desc_s2 = TensorDesc( | ||
| 145 | + { | ||
| 146 | + 16, | ||
| 147 | + }, | ||
| 148 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 149 | + auto tensor_desc_z1 = TensorDesc( | ||
| 150 | + { | ||
| 151 | + 16, | ||
| 152 | + }, | ||
| 153 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 154 | + auto tensor_desc_z2 = TensorDesc( | ||
| 155 | + { | ||
| 156 | + 16, | ||
| 157 | + }, | ||
| 158 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 159 | + | ||
| 160 | + auto tensor_desc_y1 = TensorDesc({8, 16}, ACL_FLOAT8_E5M2, ACL_FORMAT_ND); | ||
| 161 | + auto tensor_desc_y2 = TensorDesc({8, 16}, ACL_FLOAT8_E5M2, ACL_FORMAT_ND); | ||
| 162 | + auto tensor_desc_x = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 163 | + | ||
| 164 | + int64_t axis = -1; | ||
| 165 | + double eps = 1e-5; | ||
| 166 | + bool divMode = true; | ||
| 167 | + | ||
| 168 | + auto ut = OP_API_UT( | ||
| 169 | + aclnnAddRmsNormQuant, | ||
| 170 | + INPUT( | ||
| 171 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_z1, | ||
| 172 | + tensor_desc_z2, axis, eps, divMode), | ||
| 173 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x)); | ||
| 174 | + | ||
| 175 | + // SAMPLE: only test GetWorkspaceSize | ||
| 176 | + uint64_t workspace_size = 0; | ||
| 177 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 178 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 179 | +} | ||
| 180 | + | ||
| 181 | +TEST_F(l2_add_rms_norm_quant_test, ascend950PR_9589_case_stc_002) | ||
| 182 | +{ | ||
| 183 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 184 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 185 | + auto tensor_desc_gamma = TensorDesc( | ||
| 186 | + { | ||
| 187 | + 64, | ||
| 188 | + }, | ||
| 189 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 190 | + auto tensor_desc_s1 = TensorDesc( | ||
| 191 | + { | ||
| 192 | + 64, | ||
| 193 | + }, | ||
| 194 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 195 | + auto tensor_desc_s2 = TensorDesc( | ||
| 196 | + { | ||
| 197 | + 64, | ||
| 198 | + }, | ||
| 199 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 200 | + auto tensor_desc_z1 = TensorDesc( | ||
| 201 | + { | ||
| 202 | + 64, | ||
| 203 | + }, | ||
| 204 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 205 | + auto tensor_desc_z2 = TensorDesc( | ||
| 206 | + { | ||
| 207 | + 64, | ||
| 208 | + }, | ||
| 209 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 210 | + | ||
| 211 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_FLOAT8_E5M2, ACL_FORMAT_ND); | ||
| 212 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_FLOAT8_E5M2, ACL_FORMAT_ND); | ||
| 213 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 214 | + | ||
| 215 | + int64_t axis = -1; | ||
| 216 | + double eps = 1e-5; | ||
| 217 | + bool divMode = true; | ||
| 218 | + | ||
| 219 | + auto ut = OP_API_UT( | ||
| 220 | + aclnnAddRmsNormQuant, | ||
| 221 | + INPUT( | ||
| 222 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_z1, | ||
| 223 | + tensor_desc_z2, axis, eps, divMode), | ||
| 224 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x)); | ||
| 225 | + | ||
| 226 | + // SAMPLE: only test GetWorkspaceSize | ||
| 227 | + uint64_t workspace_size = 0; | ||
| 228 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 229 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 230 | +} | ||
| 231 | + | ||
| 232 | +TEST_F(l2_add_rms_norm_quant_test, ascend950PR_9589_case_dyn_003) | ||
| 233 | +{ | ||
| 234 | + auto tensor_desc_x1 = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 235 | + auto tensor_desc_x2 = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 236 | + auto tensor_desc_gamma = TensorDesc( | ||
| 237 | + { | ||
| 238 | + 16, | ||
| 239 | + }, | ||
| 240 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 241 | + auto tensor_desc_s1 = TensorDesc( | ||
| 242 | + { | ||
| 243 | + 16, | ||
| 244 | + }, | ||
| 245 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 246 | + auto tensor_desc_s2 = TensorDesc( | ||
| 247 | + { | ||
| 248 | + 16, | ||
| 249 | + }, | ||
| 250 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 251 | + auto tensor_desc_z1 = TensorDesc( | ||
| 252 | + { | ||
| 253 | + 16, | ||
| 254 | + }, | ||
| 255 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 256 | + auto tensor_desc_z2 = TensorDesc( | ||
| 257 | + { | ||
| 258 | + 16, | ||
| 259 | + }, | ||
| 260 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 261 | + | ||
| 262 | + auto tensor_desc_y1 = TensorDesc({8, 16}, ACL_FLOAT8_E4M3FN, ACL_FORMAT_ND); | ||
| 263 | + auto tensor_desc_y2 = TensorDesc({8, 16}, ACL_FLOAT8_E4M3FN, ACL_FORMAT_ND); | ||
| 264 | + auto tensor_desc_x = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 265 | + | ||
| 266 | + int64_t axis = -1; | ||
| 267 | + double eps = 1e-5; | ||
| 268 | + bool divMode = true; | ||
| 269 | + | ||
| 270 | + auto ut = OP_API_UT( | ||
| 271 | + aclnnAddRmsNormQuant, | ||
| 272 | + INPUT( | ||
| 273 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_z1, | ||
| 274 | + tensor_desc_z2, axis, eps, divMode), | ||
| 275 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x)); | ||
| 276 | + | ||
| 277 | + // SAMPLE: only test GetWorkspaceSize | ||
| 278 | + uint64_t workspace_size = 0; | ||
| 279 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 280 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 281 | +} | ||
| 282 | + | ||
| 283 | +TEST_F(l2_add_rms_norm_quant_test, ascend950PR_9589_case_stc_003) | ||
| 284 | +{ | ||
| 285 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 286 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 287 | + auto tensor_desc_gamma = TensorDesc( | ||
| 288 | + { | ||
| 289 | + 64, | ||
| 290 | + }, | ||
| 291 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 292 | + auto tensor_desc_s1 = TensorDesc( | ||
| 293 | + { | ||
| 294 | + 64, | ||
| 295 | + }, | ||
| 296 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 297 | + auto tensor_desc_s2 = TensorDesc( | ||
| 298 | + { | ||
| 299 | + 64, | ||
| 300 | + }, | ||
| 301 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 302 | + auto tensor_desc_z1 = TensorDesc( | ||
| 303 | + { | ||
| 304 | + 64, | ||
| 305 | + }, | ||
| 306 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 307 | + auto tensor_desc_z2 = TensorDesc( | ||
| 308 | + { | ||
| 309 | + 64, | ||
| 310 | + }, | ||
| 311 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 312 | + | ||
| 313 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_FLOAT8_E4M3FN, ACL_FORMAT_ND); | ||
| 314 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_FLOAT8_E4M3FN, ACL_FORMAT_ND); | ||
| 315 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 316 | + | ||
| 317 | + int64_t axis = -1; | ||
| 318 | + double eps = 1e-5; | ||
| 319 | + bool divMode = true; | ||
| 320 | + | ||
| 321 | + auto ut = OP_API_UT( | ||
| 322 | + aclnnAddRmsNormQuant, | ||
| 323 | + INPUT( | ||
| 324 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_z1, | ||
| 325 | + tensor_desc_z2, axis, eps, divMode), | ||
| 326 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x)); | ||
| 327 | + | ||
| 328 | + // SAMPLE: only test GetWorkspaceSize | ||
| 329 | + uint64_t workspace_size = 0; | ||
| 330 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 331 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 332 | +} | ||
| 333 | + | ||
| 334 | +TEST_F(l2_add_rms_norm_quant_test, ascend950PR_9589_case_dyn_004) | ||
| 335 | +{ | ||
| 336 | + auto tensor_desc_x1 = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 337 | + auto tensor_desc_x2 = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 338 | + auto tensor_desc_gamma = TensorDesc( | ||
| 339 | + { | ||
| 340 | + 16, | ||
| 341 | + }, | ||
| 342 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 343 | + auto tensor_desc_s1 = TensorDesc( | ||
| 344 | + { | ||
| 345 | + 16, | ||
| 346 | + }, | ||
| 347 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 348 | + auto tensor_desc_s2 = TensorDesc( | ||
| 349 | + { | ||
| 350 | + 16, | ||
| 351 | + }, | ||
| 352 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 353 | + auto tensor_desc_z1 = TensorDesc( | ||
| 354 | + { | ||
| 355 | + 16, | ||
| 356 | + }, | ||
| 357 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 358 | + auto tensor_desc_z2 = TensorDesc( | ||
| 359 | + { | ||
| 360 | + 16, | ||
| 361 | + }, | ||
| 362 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 363 | + | ||
| 364 | + auto tensor_desc_y1 = TensorDesc({8, 16}, ACL_HIFLOAT8, ACL_FORMAT_ND); | ||
| 365 | + auto tensor_desc_y2 = TensorDesc({8, 16}, ACL_HIFLOAT8, ACL_FORMAT_ND); | ||
| 366 | + auto tensor_desc_x = TensorDesc({8, 16}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 367 | + | ||
| 368 | + int64_t axis = -1; | ||
| 369 | + double eps = 1e-5; | ||
| 370 | + bool divMode = true; | ||
| 371 | + | ||
| 372 | + auto ut = OP_API_UT( | ||
| 373 | + aclnnAddRmsNormQuant, | ||
| 374 | + INPUT( | ||
| 375 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_z1, | ||
| 376 | + tensor_desc_z2, axis, eps, divMode), | ||
| 377 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x)); | ||
| 378 | + | ||
| 379 | + // SAMPLE: only test GetWorkspaceSize | ||
| 380 | + uint64_t workspace_size = 0; | ||
| 381 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 382 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 383 | +} | ||
| 384 | + | ||
| 385 | +TEST_F(l2_add_rms_norm_quant_test, ascend950PR_9589_case_stc_004) | ||
| 386 | +{ | ||
| 387 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 388 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 389 | + auto tensor_desc_gamma = TensorDesc( | ||
| 390 | + { | ||
| 391 | + 64, | ||
| 392 | + }, | ||
| 393 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 394 | + auto tensor_desc_s1 = TensorDesc( | ||
| 395 | + { | ||
| 396 | + 64, | ||
| 397 | + }, | ||
| 398 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 399 | + auto tensor_desc_s2 = TensorDesc( | ||
| 400 | + { | ||
| 401 | + 64, | ||
| 402 | + }, | ||
| 403 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 404 | + auto tensor_desc_z1 = TensorDesc( | ||
| 405 | + { | ||
| 406 | + 64, | ||
| 407 | + }, | ||
| 408 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 409 | + auto tensor_desc_z2 = TensorDesc( | ||
| 410 | + { | ||
| 411 | + 64, | ||
| 412 | + }, | ||
| 413 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 414 | + | ||
| 415 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_HIFLOAT8, ACL_FORMAT_ND); | ||
| 416 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_HIFLOAT8, ACL_FORMAT_ND); | ||
| 417 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 418 | + | ||
| 419 | + int64_t axis = -1; | ||
| 420 | + double eps = 1e-5; | ||
| 421 | + bool divMode = true; | ||
| 422 | + | ||
| 423 | + auto ut = OP_API_UT( | ||
| 424 | + aclnnAddRmsNormQuant, | ||
| 425 | + INPUT( | ||
| 426 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_z1, | ||
| 427 | + tensor_desc_z2, axis, eps, divMode), | ||
| 428 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x)); | ||
| 429 | + | ||
| 430 | + // SAMPLE: only test GetWorkspaceSize | ||
| 431 | + uint64_t workspace_size = 0; | ||
| 432 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 433 | + EXPECT_EQ(aclRet, ACL_SUCCESS); | ||
| 434 | +} | ||
| @@ -7,12 +7,13 @@ | |||
| 7 | # See LICENSE in the root of the software repository for the full text of the License. | 7 | # See LICENSE in the root of the software repository for the full text of the License. |
| 8 | #/ | 8 | #/ |
| 9 | 9 | ||
| 10 | -file(GLOB CURRENT_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*) | 10 | +file(GLOB CURRENT_SOURCE_DIRS LIST_DIRECTORIES true ${CMAKE_CURRENT_SOURCE_DIR}/*) |
| 11 | +foreach(SUB_DIR ${CURRENT_SOURCE_DIRS}) | ||
| 12 | + if(EXISTS "${SUB_DIR}/CMakeLists.txt") | ||
| 13 | + add_subdirectory(${SUB_DIR}) | ||
| 14 | + endif() | ||
| 15 | +endforeach() | ||
| 11 | if(UT_TEST_ALL OR OP_HOST_UT) | 16 | if(UT_TEST_ALL OR OP_HOST_UT) |
| 12 | - #add_modules_ut_sources(HOSTNAME ${OP_TILING_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 17 | + add_modules_ut_sources(HOSTNAME ${OP_TILING_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 13 | #add_modules_ut_sources(HOSTNAME ${OP_INFERSHAPE_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 18 | #add_modules_ut_sources(HOSTNAME ${OP_INFERSHAPE_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 14 | endif() | 19 | endif() |
| 15 | -if(UT_TEST_ALL OR OP_API_UT) | ||
| 16 | - add_modules_ut_sources(HOSTNAME ${OP_API_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | ||
| 17 | -endif() | ||
| 18 | - | ||
| @@ -0,0 +1,12 @@ | |||
| 1 | +# Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 2 | +# This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 3 | +# CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 4 | +# Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 5 | +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 6 | +# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 7 | +# See LICENSE in the root of the software repository for the full text of the License. | ||
| 8 | +#/ | ||
| 9 | + | ||
| 10 | +if(UT_TEST_ALL OR OP_API_UT) | ||
| 11 | + add_modules_ut_sources(HOSTNAME ${OP_API_MODULE_NAME} MODE PRIVATE DIR ${CMAKE_CURRENT_SOURCE_DIR}) | ||
| 12 | +endif() | ||
| @@ -0,0 +1,138 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | +using namespace std; | ||
| 22 | + | ||
| 23 | +class l2_add_rms_norm_quant_v2_test : public testing::Test | ||
| 24 | +{ | ||
| 25 | +protected: | ||
| 26 | + static void SetUpTestCase() | ||
| 27 | + { | ||
| 28 | + cout << "add_rms_norm_quant_v2_test SetUp" << endl; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + static void TearDownTestCase() | ||
| 32 | + { | ||
| 33 | + cout << "add_rms_norm_quant_v2_test TearDown" << endl; | ||
| 34 | + } | ||
| 35 | +}; | ||
| 36 | + | ||
| 37 | +TEST_F(l2_add_rms_norm_quant_v2_test, ascend950PR_9589_case_dyn_001) | ||
| 38 | +{ | ||
| 39 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 40 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 41 | + auto tensor_desc_gamma = TensorDesc( | ||
| 42 | + { | ||
| 43 | + 64, | ||
| 44 | + }, | ||
| 45 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 46 | + auto tensor_desc_beta = TensorDesc( | ||
| 47 | + { | ||
| 48 | + 64, | ||
| 49 | + }, | ||
| 50 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 51 | + auto tensor_desc_s1 = TensorDesc( | ||
| 52 | + { | ||
| 53 | + 64, | ||
| 54 | + }, | ||
| 55 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 56 | + auto tensor_desc_s2 = TensorDesc( | ||
| 57 | + { | ||
| 58 | + 64, | ||
| 59 | + }, | ||
| 60 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 61 | + | ||
| 62 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 63 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 64 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 65 | + | ||
| 66 | + int64_t axis = -1L; | ||
| 67 | + double eps = 1e-5; | ||
| 68 | + bool divMode = true; | ||
| 69 | + | ||
| 70 | + auto ut = OP_API_UT( | ||
| 71 | + aclnnAddRmsNormQuantV2, | ||
| 72 | + INPUT( | ||
| 73 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, (aclTensor*)nullptr, | ||
| 74 | + (aclTensor*)nullptr, tensor_desc_beta, axis, eps, divMode), | ||
| 75 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, (aclTensor*)nullptr)); | ||
| 76 | + | ||
| 77 | + // SAMPLE: only test GetWorkspaceSize | ||
| 78 | + uint64_t workspace_size = 0; | ||
| 79 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 80 | + // EXPECT_EQ(aclRet, ACLNN_ERR_PARAM_INVALID); | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +TEST_F(l2_add_rms_norm_quant_v2_test, ascend950PR_9589_case_stc_001) | ||
| 84 | +{ | ||
| 85 | + auto tensor_desc_x1 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 86 | + auto tensor_desc_x2 = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 87 | + auto tensor_desc_gamma = TensorDesc( | ||
| 88 | + { | ||
| 89 | + 64, | ||
| 90 | + }, | ||
| 91 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 92 | + auto tensor_desc_beta = TensorDesc( | ||
| 93 | + { | ||
| 94 | + 64, | ||
| 95 | + }, | ||
| 96 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 97 | + | ||
| 98 | + auto tensor_desc_y1 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 99 | + auto tensor_desc_x = TensorDesc({8, 64}, ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 100 | + auto tensor_desc_y2 = TensorDesc({8, 64}, ACL_INT8, ACL_FORMAT_ND); | ||
| 101 | + | ||
| 102 | + auto tensor_desc_z2 = TensorDesc( | ||
| 103 | + { | ||
| 104 | + 64, | ||
| 105 | + }, | ||
| 106 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 107 | + auto tensor_desc_s1 = TensorDesc( | ||
| 108 | + { | ||
| 109 | + 64, | ||
| 110 | + }, | ||
| 111 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 112 | + auto tensor_desc_s2 = TensorDesc( | ||
| 113 | + { | ||
| 114 | + 64, | ||
| 115 | + }, | ||
| 116 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 117 | + auto tensor_desc_z1 = TensorDesc( | ||
| 118 | + { | ||
| 119 | + 64, | ||
| 120 | + }, | ||
| 121 | + ACL_FLOAT16, ACL_FORMAT_ND); | ||
| 122 | + | ||
| 123 | + bool divMode = true; | ||
| 124 | + double eps = 1e-5; | ||
| 125 | + int64_t axis = -1L; | ||
| 126 | + | ||
| 127 | + auto ut = OP_API_UT( | ||
| 128 | + aclnnAddRmsNormQuantV2, | ||
| 129 | + INPUT( | ||
| 130 | + tensor_desc_x1, tensor_desc_x2, tensor_desc_gamma, tensor_desc_s1, tensor_desc_s2, tensor_desc_z1, | ||
| 131 | + tensor_desc_z2, tensor_desc_beta, axis, eps, divMode), | ||
| 132 | + OUTPUT(tensor_desc_y1, tensor_desc_y2, tensor_desc_x, (aclTensor*)nullptr)); | ||
| 133 | + | ||
| 134 | + // SAMPLE: only test GetWorkspaceSize | ||
| 135 | + uint64_t workspace_size = 0; | ||
| 136 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 137 | + // EXPECT_EQ(aclRet, ACLNN_ERR_PARAM_INVALID); | ||
| 138 | +} | ||
| @@ -219,29 +219,28 @@ __aicore__ inline void dCopyIn(int64_t colIndex, int64_t colSize, int64_t rowSiz | |||
| 219 | rightPad = FLOAT_ALIGN - colSizeMod; | 219 | rightPad = FLOAT_ALIGN - colSizeMod; |
| 220 | isPad = true; | 220 | isPad = true; |
| 221 | } | 221 | } |
| 222 | - | ||
| 223 | - if ASCEND_IS_AIV { | ||
| 224 | - | ||
| 225 | TEventID eventID = GetTPipePtr()->AllocEventID<HardEvent::V_MTE2>(); | 222 | TEventID eventID = GetTPipePtr()->AllocEventID<HardEvent::V_MTE2>(); |
| 226 | SetFlag<HardEvent::V_MTE2>(eventID); | 223 | SetFlag<HardEvent::V_MTE2>(eventID); |
| 227 | WaitFlag<HardEvent::V_MTE2>(eventID); | 224 | WaitFlag<HardEvent::V_MTE2>(eventID); |
| 228 | GetTPipePtr()->ReleaseEventID<HardEvent::V_MTE2>(eventID); | 225 | GetTPipePtr()->ReleaseEventID<HardEvent::V_MTE2>(eventID); |
| 229 | int64_t offset = colIndex * COL_TEMPLATE; | 226 | int64_t offset = colIndex * COL_TEMPLATE; |
| 230 | -#if __CCE_AICORE__ == 220 | 227 | +#if __CCE_AICORE__ == 220 |
| 231 | - DataCopyExtParams copyInParams{ | 228 | + if ASCEND_IS_AIV { |
| 232 | - static_cast<uint16_t>(rowSize), | 229 | + DataCopyExtParams copyInParams{ |
| 233 | - (uint32_t)(colSize * sizeof(float)), | 230 | + static_cast<uint16_t>(rowSize), |
| 234 | - (uint32_t)((chunkSize - colSize) * sizeof(float)), | 231 | + (uint32_t)(colSize * sizeof(float)), |
| 235 | - static_cast<uint32_t>((COL_TEMPLATE - colSize) / FLOAT_ALIGN), | 232 | + (uint32_t)((chunkSize - colSize) * sizeof(float)), |
| 236 | - 0 | 233 | + static_cast<uint32_t>((COL_TEMPLATE - colSize) / FLOAT_ALIGN), |
| 237 | - }; | 234 | + 0 |
| 238 | - DataCopyPadExtParams<float> padParams{ | 235 | + }; |
| 239 | - false, | 236 | + DataCopyPadExtParams<float> padParams{ |
| 240 | - 0, | 237 | + false, |
| 241 | - static_cast<uint8_t>(rightPad), | 238 | + 0, |
| 242 | - 0 | 239 | + static_cast<uint8_t>(rightPad), |
| 243 | - }; | 240 | + 0 |
| 244 | - DataCopyPad(deterministicStruct.buffer1_, deterministicStruct.workspaceGmOri_[offset], copyInParams, padParams); | 241 | + }; |
| 242 | + DataCopyPad(deterministicStruct.buffer1_, deterministicStruct.workspaceGmOri_[offset], copyInParams, padParams); | ||
| 243 | + } | ||
| 245 | 244 | ||
| 246 | DataCopyParams intriParams; | 245 | DataCopyParams intriParams; |
| 247 | intriParams.blockCount = rowSize; | 246 | intriParams.blockCount = rowSize; |
| @@ -250,9 +249,6 @@ __aicore__ inline void dCopyIn(int64_t colIndex, int64_t colSize, int64_t rowSiz | |||
| 250 | intriParams.dstStride = (COL_TEMPLATE - (colSize + rightPad)) / FLOAT_ALIGN; | 249 | intriParams.dstStride = (COL_TEMPLATE - (colSize + rightPad)) / FLOAT_ALIGN; |
| 251 | DataCopy(deterministicStruct.buffer1_, deterministicStruct.workspaceGmOri_[offset], intriParams); | 250 | DataCopy(deterministicStruct.buffer1_, deterministicStruct.workspaceGmOri_[offset], intriParams); |
| 252 | 251 | ||
| 253 | - | ||
| 254 | - } | ||
| 255 | - | ||
| 256 | } | 252 | } |
| 257 | 253 | ||
| 258 | __aicore__ inline void dCompute(int64_t colIndex, int64_t rowIndex, int64_t colSize, int64_t rowSize, deterministic_struct& deterministicStruct) { | 254 | __aicore__ inline void dCompute(int64_t colIndex, int64_t rowIndex, int64_t colSize, int64_t rowSize, deterministic_struct& deterministicStruct) { |
| @@ -124,7 +124,7 @@ public: | |||
| 124 | 124 | ||
| 125 | __aicore__ inline void InitInputQue() | 125 | __aicore__ inline void InitInputQue() |
| 126 | { | 126 | { |
| 127 | - ubFactorAlign_ = (ubFactor_ * colValAlign_) > (blockDim_ * 64) ? (ubFactor_ * colValAlign_) : (blockDim_ * 64); | 127 | + ubFactorAlign_ = (ubFactor_ * colValAlign_) > (blockDim_ * COL_TEMPLATE) ? (ubFactor_ * colValAlign_) : (blockDim_ * COL_TEMPLATE); |
| 128 | rstdLen_ = (ubFactor_ + alignLen_ - 1) / alignLen_ * alignLen_; | 128 | rstdLen_ = (ubFactor_ + alignLen_ - 1) / alignLen_ * alignLen_; |
| 129 | bufferLenSize_ = ubFactorAlign_ * sizeof(float); | 129 | bufferLenSize_ = ubFactorAlign_ * sizeof(float); |
| 130 | bufferNum_ = BUFFER_NUM_DB; | 130 | bufferNum_ = BUFFER_NUM_DB; |