已合并
[perf]Svd l0 cancel alloc tensor when computeUV is false #1739
FengHaozhan创建于 3月18日
[perf]Svd l0 cancel alloc tensor when computeUV is false #1739
已合并
FengHaozhan创建于 3月18日
2 个文件变更+29-16
@@ -26,7 +26,8 @@ OP_TYPE_REGISTER(Svd);
26 26 
27static constexpr int32_t MIN_X_DIM = 2;27static constexpr int32_t MIN_X_DIM = 2;
28 28 
29-static std::tuple<aclTensor*, aclTensor*, aclTensor*> allocOutTensor(const aclTensor *x, const bool fullMatrices, aclOpExecutor *executor)29+static std::tuple<aclTensor*, aclTensor*, aclTensor*>
30+ allocOutTensor(const aclTensor *x, const bool fullMatrices, aclOpExecutor *executor, const bool computeUV)
30{31{
31 int64_t xDim = x->GetViewShape().GetDimNum();32 int64_t xDim = x->GetViewShape().GetDimNum();
32 op::Shape xShape = x->GetViewShape();33 op::Shape xShape = x->GetViewShape();
@@ -39,27 +40,30 @@ static std::tuple<aclTensor*, aclTensor*, aclTensor*> allocOutTensor(const aclTe
39 // sigma、u、v与x的前xDim-2维格式相同40 // sigma、u、v与x的前xDim-2维格式相同
40 for (int64_t i = 0; i < xDim - MIN_X_DIM; i++) {41 for (int64_t i = 0; i < xDim - MIN_X_DIM; i++) {
41 sigmaShape.AppendDim(xShape[i]);42 sigmaShape.AppendDim(xShape[i]);
42- uShape.AppendDim(xShape[i]);43+ if(computeUV) {
CANN-robot
CANN-robotCANN-robot3月18日
代码风格/格式规范: 代码风格不一致,if语句后缺少空格。在`if(computeUV)`中,关键字`if`与左括号之间没有空格,这与常见的C++编码规范(如Google C++ Style Guide)不符,后者要求`if`后应有空格。
问题类型: 代码风格/格式规范
文件路径: math/svd/op_host/op_api/svd.cpp
行号: 43
问题代码:
    if(computeUV) {
修改建议:
在`if`关键字和左括号之间添加一个空格,修改为:`if (computeUV) {`。
---
此评论由代码审查工具自动生成
likedislike
43- vShape.AppendDim(xShape[i]);44+ uShape.AppendDim(xShape[i]);
45+ vShape.AppendDim(xShape[i]);
46+ }
44 }47 }
45 /*48 /*
46 * x:[..., m, n] k = min(m, n)49 * x:[..., m, n] k = min(m, n)
47 * fullMatrices == true --> u:[..., m, m],(sigma):[..., k],v:[..., n, n],diag(sigma):[..., m, n]50 * fullMatrices == true --> u:[..., m, m],(sigma):[..., k],v:[..., n, n],diag(sigma):[..., m, n]
48 * fullMatrices == false --> u:[..., m, k],(sigma):[..., k],v:[..., n, k],diag(sigma):[..., k, k]51 * fullMatrices == false --> u:[..., m, k],(sigma):[..., k],v:[..., n, k],diag(sigma):[..., k, k]
49 */52 */
50- if (fullMatrices) {53+ if (computeUV) {
51- uShape.AppendDim(m);54+ if (fullMatrices) {
52- uShape.AppendDim(m);55+ uShape.AppendDim(m);
53- sigmaShape.AppendDim(k);56+ uShape.AppendDim(m);
54- vShape.AppendDim(n);57+ vShape.AppendDim(n);
55- vShape.AppendDim(n);58+ vShape.AppendDim(n);
56- } else {59+ } else {
57- uShape.AppendDim(m);60+ uShape.AppendDim(m);
58- uShape.AppendDim(k);61+ uShape.AppendDim(k);
59- sigmaShape.AppendDim(k);62+ vShape.AppendDim(n);
60- vShape.AppendDim(n);63+ vShape.AppendDim(k);
61- vShape.AppendDim(k);64+ }
62 }65 }
66+ sigmaShape.AppendDim(k);
63 auto u = executor->AllocTensor(uShape, x->GetDataType());67 auto u = executor->AllocTensor(uShape, x->GetDataType());
64 auto sigma = executor->AllocTensor(sigmaShape, x->GetDataType());68 auto sigma = executor->AllocTensor(sigmaShape, x->GetDataType());
65 auto v = executor->AllocTensor(vShape, x->GetDataType());69 auto v = executor->AllocTensor(vShape, x->GetDataType());
@@ -70,7 +74,7 @@ static std::tuple<aclTensor*, aclTensor*, aclTensor*> allocOutTensor(const aclTe
70const std::tuple<aclTensor*, aclTensor*, aclTensor*> Svd(74const std::tuple<aclTensor*, aclTensor*, aclTensor*> Svd(
71 const aclTensor *x, const bool fullMatrices, const bool computeUV, aclOpExecutor *executor)75 const aclTensor *x, const bool fullMatrices, const bool computeUV, aclOpExecutor *executor)
72{76{
73- std::tuple<aclTensor*, aclTensor*, aclTensor*> outTensor = allocOutTensor(x, fullMatrices, executor);77+ std::tuple<aclTensor*, aclTensor*, aclTensor*> outTensor = allocOutTensor(x, fullMatrices, executor, computeUV);
74 aclTensor *sigma = get<0>(outTensor);78 aclTensor *sigma = get<0>(outTensor);
75 aclTensor *u = get<1>(outTensor);79 aclTensor *u = get<1>(outTensor);
76 aclTensor *v = get<2>(outTensor);80 aclTensor *v = get<2>(outTensor);
@@ -67,3 +67,12 @@ TEST_F(SvdTest, SvdTest_fullMatrices_false_SUCC) {
67 ASSERT_NE(v, nullptr);67 ASSERT_NE(v, nullptr);
68}68}
69 69 
70+TEST_F(SvdTest, SvdTest_ComputeUV_false_SUCC) {
71+ auto x = CreateAclTensor({2, 3}, ACL_FLOAT);
72+ bool fullMatrices = false;
73+ bool computeUV= false;
74+ auto [sigma, u, v] = l0op::Svd(x, fullMatrices, computeUV, exe);
75+ ASSERT_NE(sigma, nullptr);
76+ ASSERT_NE(u, nullptr);
77+ ASSERT_NE(v, nullptr);
78+}