Merged
【unfold_grad】修复issue问题 aclnn接口输入为空指针时使用ACLNN_ERR_PARAM_NULLPTR错误码 & 修正正确的dim值域 #6650
tangkaidiAdd on 18 days ago
【unfold_grad】修复issue问题 aclnn接口输入为空指针时使用ACLNN_ERR_PARAM_NULLPTR错误码 & 修正正确的dim值域 #6650
Merged
Merged fromtangkaidi/ops-math-solve-issuemasterintocann/ops-mathmaster
Total: 4 files changed+38-11
| @@ -46,7 +46,7 @@ | |||
| 46 | | ---------- | -------------- | ------------------------------------------------------------ | ------------------------ | -------- | | 46 | | ---------- | -------------- | ------------------------------------------------------------ | ------------------------ | -------- | |
| 47 | | gradOutput | 输入张量 | 表示梯度更新系数,shape为(..., (sizedim-size)/step+1, size),要求满足gradOutput的第dim维等于$(inputSizes[dim]-size)/step+1$和gradOut的size等于inputSizes的size+1。 | FLOAT、FLOAT16、BFLOAT16 | ND | | 47 | | gradOutput | 输入张量 | 表示梯度更新系数,shape为(..., (sizedim-size)/step+1, size),要求满足gradOutput的第dim维等于$(inputSizes[dim]-size)/step+1$和gradOut的size等于inputSizes的size+1。 | FLOAT、FLOAT16、BFLOAT16 | ND | |
| 48 | | inputSizes | 输入数组 | 表示输出张量的形状,值为(..., sizedim),inputSizes的size小于等于8。 | INT64 | ND | | 48 | | inputSizes | 输入数组 | 表示输出张量的形状,值为(..., sizedim),inputSizes的size小于等于8。 | INT64 | ND | |
| 49 | -| dim | 输入 | 公式中的$dim$。表示展开发生的维度。$dim$仅支持len($inputSizes$)-1或者len($inputSizes$)-2。 | INT64 | - | | 49 | +| dim | 输入 | 公式中的$dim$。表示展开发生的维度。$dim$大于等于0且小于len($inputSizes$)。 | INT64 | - | |
| 50 | | size | 输入 | 公式中的$size$。表示展开的每个切片的大小。$size$需要满足$size$大于0且$size$小于等于$inputSizes$的第$dim$维。 | INT64 | - | | 50 | | size | 输入 | 公式中的$size$。表示展开的每个切片的大小。$size$需要满足$size$大于0且$size$小于等于$inputSizes$的第$dim$维。 | INT64 | - | |
| 51 | | step | 输入 | 公式中的$step$。表示每个切片之间的步长。$step$需要满足$step$大于0。 | INT64 | | | 51 | | step | 输入 | 公式中的$step$。表示每个切片之间的步长。$step$需要满足$step$大于0。 | INT64 | | |
| 52 | | gradIn | 输出 | 表示Unfold的对应梯度,数据类型必须和gradOut一致。 | FLOAT、FLOAT16、BFLOAT16 | | | 52 | | gradIn | 输出 | 表示Unfold的对应梯度,数据类型必须和gradOut一致。 | FLOAT、FLOAT16、BFLOAT16 | | |
| @@ -59,7 +59,7 @@ | |||
| 59 | 2. dim、size、step的要求: | 59 | 2. dim、size、step的要求: |
| 60 | - size大于0且size小于等于inputSizes的第dim维。 | 60 | - size大于0且size小于等于inputSizes的第dim维。 |
| 61 | - step大于0。 | 61 | - step大于0。 |
| 62 | - - dim等于len(inputSizes)-1或者dim等于len(inputSizes)-2轴。 | 62 | + - dim大于等于0且小于len(inputSizes)。 |
| 63 | 63 | ||
| 64 | ## 调用说明 | 64 | ## 调用说明 |
| 65 | 65 | ||
| @@ -124,7 +124,7 @@ aclnnStatus aclnnUnfoldGrad( | |||
| 124 | <td>dim(int64_t)</td> | 124 | <td>dim(int64_t)</td> |
| 125 | <td>输入</td> | 125 | <td>输入</td> |
| 126 | <td>表示展开发生的维度,公式中的dim。</td> | 126 | <td>表示展开发生的维度,公式中的dim。</td> |
| 127 | - <td>dim仅支持len(inputSizes)-1或者len(inputSizes)-2。</td> | 127 | + <td>dim大于等于0且小于len(inputSizes)。</td> |
| 128 | <td>INT64</td> | 128 | <td>INT64</td> |
| 129 | <td>-</td> | 129 | <td>-</td> |
| 130 | <td>-</td> | 130 | <td>-</td> |
| @@ -207,11 +207,11 @@ aclnnStatus aclnnUnfoldGrad( | |||
| 207 | <tr> | 207 | <tr> |
| 208 | <td>ACLNN_ERR_PARAM_INVALID</td> | 208 | <td>ACLNN_ERR_PARAM_INVALID</td> |
| 209 | <td>161002</td> | 209 | <td>161002</td> |
| 210 | - <td>输入和输出的数据类型和数据格式不在支持的范围之内。</td> | 210 | + <td>输入和输出的数据类型和数据格式不在支持的范围之内,或dim小于0或大于等于len(inputSizes)。</td> |
| 211 | </tr> | 211 | </tr> |
| 212 | <tr> | 212 | <tr> |
| 213 | - <td rowspan="5">ACLNN_ERR_INNER_TILING_ERROR</td> | 213 | + <td rowspan="4">ACLNN_ERR_INNER_TILING_ERROR</td> |
| 214 | - <td rowspan="5">561002</td> | 214 | + <td rowspan="4">561002</td> |
| 215 | <td>gradOut的第dim维不等于(inputSizes[dim]-size)/step+1。</td> | 215 | <td>gradOut的第dim维不等于(inputSizes[dim]-size)/step+1。</td> |
| 216 | </tr> | 216 | </tr> |
| 217 | <tr> | 217 | <tr> |
| @@ -223,9 +223,6 @@ aclnnStatus aclnnUnfoldGrad( | |||
| 223 | <tr> | 223 | <tr> |
| 224 | <td>step小于等于0。</td> | 224 | <td>step小于等于0。</td> |
| 225 | </tr> | 225 | </tr> |
| 226 | - <tr> | ||
| 227 | - <td>dim不等于len(inputSizes)-1且dim不等于len(inputSizes)-2轴。</td> | ||
| 228 | - </tr> | ||
| 229 | </tbody> | 226 | </tbody> |
| 230 | </table> | 227 | </table> |
| 231 | 228 | ||
| @@ -282,7 +279,7 @@ aclnnStatus aclnnUnfoldGrad( | |||
| 282 | 2. dim、size、step的要求: | 279 | 2. dim、size、step的要求: |
| 283 | - size大于0且size小于等于inputSizes的第dim维。 | 280 | - size大于0且size小于等于inputSizes的第dim维。 |
| 284 | - step大于0。 | 281 | - step大于0。 |
| 285 | - - dim等于len(inputSizes)-1或者dim等于len(inputSizes)-2轴。 | 282 | + - dim大于等于0且小于len(inputSizes)。 |
| 286 | 283 | ||
| 287 | ## 调用示例 | 284 | ## 调用示例 |
| 288 | 285 | ||
| @@ -118,7 +118,7 @@ static bool CheckFormat(const aclTensor* gradOut) | |||
| 118 | static aclnnStatus CheckParams(const aclTensor* gradOut, const aclIntArray* inputSizes, int64_t dim, int64_t size, | 118 | static aclnnStatus CheckParams(const aclTensor* gradOut, const aclIntArray* inputSizes, int64_t dim, int64_t size, |
| 119 | int64_t step, const aclTensor* gradIn) | 119 | int64_t step, const aclTensor* gradIn) |
| 120 | { | 120 | { |
| 121 | - CHECK_RET(CheckNotNull(gradOut, inputSizes, gradIn), ACLNN_ERR_INNER_NULLPTR); | 121 | + CHECK_RET(CheckNotNull(gradOut, inputSizes, gradIn), ACLNN_ERR_PARAM_NULLPTR); |
| 122 | 122 | ||
| 123 | CHECK_RET(CheckDtypeValid(gradOut, gradIn), ACLNN_ERR_PARAM_INVALID); | 123 | CHECK_RET(CheckDtypeValid(gradOut, gradIn), ACLNN_ERR_PARAM_INVALID); |
| 124 | 124 | ||
| @@ -78,3 +78,33 @@ TEST_F(l2_unfold_grad_test, case_empty_grad_out_nonzero_grad_in) | |||
| 78 | aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | 78 | aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); |
| 79 | EXPECT_EQ(aclRet, ACLNN_SUCCESS); | 79 | EXPECT_EQ(aclRet, ACLNN_SUCCESS); |
| 80 | } | 80 | } |
| 81 | + | ||
| 82 | +TEST_F(l2_unfold_grad_test, case_null_grad_out) | ||
| 83 | +{ | ||
| 84 | + auto input_sizes_desc = IntArrayDesc(vector<int64_t>{2, 3, 4}); | ||
| 85 | + auto out_desc = TensorDesc({2, 3, 4}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 86 | + auto ut = OP_API_UT(aclnnUnfoldGrad, INPUT(nullptr, input_sizes_desc, 2, 2, 1), OUTPUT(out_desc)); | ||
| 87 | + uint64_t workspace_size = 0; | ||
| 88 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 89 | + EXPECT_EQ(aclRet, ACLNN_ERR_PARAM_NULLPTR); | ||
| 90 | +} | ||
| 91 | + | ||
| 92 | +TEST_F(l2_unfold_grad_test, case_null_input_sizes) | ||
| 93 | +{ | ||
| 94 | + auto grad_out_desc = TensorDesc({2, 3, 3, 2}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 95 | + auto out_desc = TensorDesc({2, 3, 4}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 96 | + auto ut = OP_API_UT(aclnnUnfoldGrad, INPUT(grad_out_desc, nullptr, 2, 2, 1), OUTPUT(out_desc)); | ||
| 97 | + uint64_t workspace_size = 0; | ||
| 98 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 99 | + EXPECT_EQ(aclRet, ACLNN_ERR_PARAM_NULLPTR); | ||
| 100 | +} | ||
| 101 | + | ||
| 102 | +TEST_F(l2_unfold_grad_test, case_null_grad_in) | ||
| 103 | +{ | ||
| 104 | + auto grad_out_desc = TensorDesc({2, 3, 3, 2}, ACL_FLOAT, ACL_FORMAT_ND); | ||
| 105 | + auto input_sizes_desc = IntArrayDesc(vector<int64_t>{2, 3, 4}); | ||
| 106 | + auto ut = OP_API_UT(aclnnUnfoldGrad, INPUT(grad_out_desc, input_sizes_desc, 2, 2, 1), OUTPUT(nullptr)); | ||
| 107 | + uint64_t workspace_size = 0; | ||
| 108 | + aclnnStatus aclRet = ut.TestGetWorkspaceSize(&workspace_size); | ||
| 109 | + EXPECT_EQ(aclRet, ACLNN_ERR_PARAM_NULLPTR); | ||
| 110 | +} | ||