已合并
【PR】: aclGraph optimize #3457
houyanbao创建于 7月7日
【PR】: aclGraph optimize #3457
已合并
houyanbao创建于 7月7日
15 个文件变更+72-70
@@ -870,7 +870,7 @@ public:
870 void SetSoftwareSqEnable(void);870 void SetSoftwareSqEnable(void);
871 rtError_t BuildSqCq(Stream * const exeStream);871 rtError_t BuildSqCq(Stream * const exeStream);
872 void DeconstructSqCq(void);872 void DeconstructSqCq(void);
873- rtError_t ReleaseSqCq(uint32_t &releaseNum);873+ rtError_t ReleaseSqCqAndNotifyId(uint32_t &releaseSqNum, uint32_t &releaseNtyNum);
874 874 
875 // Notify 管理875 // Notify 管理
876 rtError_t SetNotifyBeforeExecute(Stream * const exeStm, CaptureModel* const captureMdl);876 rtError_t SetNotifyBeforeExecute(Stream * const exeStm, CaptureModel* const captureMdl);
@@ -1328,7 +1328,7 @@ if ((curCaptureStream->GetCaptureSqeNum() + reserved) >= curCaptureStream->GetSq
1328### 5.3 Software SQ 动态绑定1328### 5.3 Software SQ 动态绑定
1329 1329 
1330- 支持 SQ/CQ 的动态分配和绑定1330- 支持 SQ/CQ 的动态分配和绑定
1331-- 执行时 BuildSqCq,完成后 ReleaseSqCq1331+- 执行时 BuildSqCq,完成后 ReleaseSqCqAndNotifyId
1332- 通过 SqSwitchStreamBatch 实现批量流切换1332- 通过 SqSwitchStreamBatch 实现批量流切换
1333 1333 
1334### 5.4 Notify 同步机制1334### 5.4 Notify 同步机制
@@ -345,7 +345,7 @@ public:
345 // endGraph + alloc sq cq + Send sqe + bind sq cq + load complete + update task345 // endGraph + alloc sq cq + Send sqe + bind sq cq + load complete + update task
346 rtError_t BuildSqCq(Stream * const exeStream);346 rtError_t BuildSqCq(Stream * const exeStream);
347 void DeconstructSqCq(void);347 void DeconstructSqCq(void);
348- rtError_t ReleaseSqCq(uint32_t &releaseNum);348+ rtError_t ReleaseSqCqAndNotifyId(uint32_t &releaseSqNum, uint32_t &releaseNtyNum);
349 void CaptureModelExecuteFinish(const uint32_t errCode);349 void CaptureModelExecuteFinish(const uint32_t errCode);
350 350 
351 // 子模型资源管理相关方法351 // 子模型资源管理相关方法
@@ -3305,6 +3305,13 @@ rtError_t Stream::StarsAddTaskToStream(TaskInfo * const tsk, const uint32_t send
3305 "Pack task group failed, stream_id=%d, task_id=%hu.", streamId_, tsk->id);3305 "Pack task group failed, stream_id=%d, task_id=%hu.", streamId_, tsk->id);
3306 taskPersistentTail_.Set(newPosTail);3306 taskPersistentTail_.Set(newPosTail);
3307 delayRecycleTaskid_.push_back(tsk->id);3307 delayRecycleTaskid_.push_back(tsk->id);
3308+ 
3309+ Model *model = tsk->stream->Model_();
3310+ if ((model != nullptr) && (model->GetModelType() == RT_MODEL_CAPTURE_MODEL)) {
3311+ tsk->modelSeqId = dynamic_cast<CaptureModel *>(model)->GenerateSeqId();
3312+ RT_LOG(RT_LOG_INFO, "device_id=%u, stream_id=%d, task_id=%hu, sequence id=%u.",
3313+ tsk->stream->Device_()->Id_(), streamId_, tsk->id, tsk->modelSeqId);
3314+ }
3308 } else {3315 } else {
3309 const uint32_t posHead = bind ? taskPersistentHead_.Value() : taskPosHead_.Value();3316 const uint32_t posHead = bind ? taskPersistentHead_.Value() : taskPosHead_.Value();
3310 const bool stmFullFlag = IsStreamFull(posHead, posTail, rtsqDepth, sendSqeNum);3317 const bool stmFullFlag = IsStreamFull(posHead, posTail, rtsqDepth, sendSqeNum);
@@ -702,6 +702,13 @@ rtError_t DavidStream::StarsAddTaskToStream(TaskInfo * const tsk, const uint32_t
702 this->Model_()->SetKernelTaskId(tsk->taskSn, GetExposedStreamId());702 this->Model_()->SetKernelTaskId(tsk->taskSn, GetExposedStreamId());
703 }703 }
704 delayRecycleTaskid_.push_back(tsk->id);704 delayRecycleTaskid_.push_back(tsk->id);
705+ 
706+ Model *model = tsk->stream->Model_();
707+ if ((model != nullptr) && (model->GetModelType() == RT_MODEL_CAPTURE_MODEL)) {
708+ tsk->modelSeqId = dynamic_cast<CaptureModel *>(model)->GenerateSeqId();
709+ RT_LOG(RT_LOG_INFO, "device_id=%u, stream_id=%d, task_id=%hu, sequence id=%u.",
710+ tsk->stream->Device_()->Id_(), streamId_, tsk->id, tsk->modelSeqId);
711+ }
705 }712 }
706 RT_LOG(RT_LOG_INFO, "%s stream, stream_id=%d, task_id=%hu, task_sn=%u, type=%d(%s), "713 RT_LOG(RT_LOG_INFO, "%s stream, stream_id=%d, task_id=%hu, task_sn=%u, type=%d(%s), "
707 "sqe_num=%u, device_id=%u", GetBindFlag() ? "model" : "single-operator", streamId_, tsk->id,714 "sqe_num=%u, device_id=%u", GetBindFlag() ? "model" : "single-operator", streamId_, tsk->id,
@@ -316,14 +316,6 @@ static rtError_t AllocCaptureTaskInfo(TaskInfo **taskInfo, Stream * const stm, u
316 taskResMang = RtPtrToPtr<TaskResManageDavid *, TaskResManage *>(curCaptureStream->taskResMang_);316 taskResMang = RtPtrToPtr<TaskResManageDavid *, TaskResManage *>(curCaptureStream->taskResMang_);
317 if (taskResMang->AllocTaskInfoAndPos(sqeNum, pos, taskInfo) == RT_ERROR_NONE) {317 if (taskResMang->AllocTaskInfoAndPos(sqeNum, pos, taskInfo) == RT_ERROR_NONE) {
318 Runtime::Instance()->AllocTaskSn((*taskInfo)->taskSn);318 Runtime::Instance()->AllocTaskSn((*taskInfo)->taskSn);
319- Model *m = curCaptureStream->Model_();
320- if ((m != nullptr) && (m->GetModelType() == RT_MODEL_CAPTURE_MODEL)) {
321- (*taskInfo)->modelSeqId = dynamic_cast<CaptureModel *>(m)->GenerateSeqId();
322- RT_LOG(RT_LOG_DEBUG, "Alloc capture task, device_id=%u, origin stream_id=%d, "
323- "capture stream_id=%d, task_id=%hu, task_sn=%u, sequence id=%u.",
324- stm->Device_()->Id_(), stm->Id_(), curCaptureStream->Id_(),
325- (*taskInfo)->id, (*taskInfo)->taskSn, (*taskInfo)->modelSeqId);
326- }
327 } else {319 } else {
328 stm->SingleStreamTerminateCapture();320 stm->SingleStreamTerminateCapture();
329 }321 }
@@ -580,11 +580,12 @@ rtError_t CaptureModel::UpdateNotifyId(Stream * const exeStream)
580 "Origin capture stream and end graph notify cannot be NULL pointers, model_id=%u.", Id_());580 "Origin capture stream and end graph notify cannot be NULL pointers, model_id=%u.", Id_());
581 581 
582 rtError_t error = RT_ERROR_NONE;582 rtError_t error = RT_ERROR_NONE;
583+ rtError_t errorTmp = RT_ERROR_NONE;
583 do {584 do {
584 COND_PROC(ntf->GetNotifyId() != MAX_UINT32_NUM, break;); // 所有子模型共用一个notify,其中一个申请,其他的就不用再申请了585 COND_PROC(ntf->GetNotifyId() != MAX_UINT32_NUM, break;); // 所有子模型共用一个notify,其中一个申请,其他的就不用再申请了
585 error = ntf->AllocId();586 error = ntf->AllocId();
586- COND_PROC(error != RT_ERROR_NONE, error = Context_()->TryRecycleCaptureModelResource(0U, 1U, this));587+ COND_PROC(error != RT_ERROR_NONE, errorTmp = Context_()->TryRecycleCaptureModelResource(0U, 1U, this));
587- COND_PROC(error != RT_ERROR_NONE, mmSleep(1U));588+ COND_PROC(errorTmp != RT_ERROR_NONE, mmSleep(1U));
588 } while (error != RT_ERROR_NONE);589 } while (error != RT_ERROR_NONE);
589 590 
590 if (!this->IsSubCaptureModel()) { // 只有根模型才刷新,其他各层级子模型发给ts的notify id均为根模型的id,异常时直接解执行流的endgraph wait591 if (!this->IsSubCaptureModel()) { // 只有根模型才刷新,其他各层级子模型发给ts的notify id均为根模型的id,异常时直接解执行流的endgraph wait
@@ -682,16 +683,18 @@ rtError_t CaptureModel::BuildSqCq(Stream * const exeStream)
682 683 
683void CaptureModel::DeconstructSqCq(void)684void CaptureModel::DeconstructSqCq(void)
684{685{
685- uint32_t releaseNum = 0U;686+ uint32_t releaseSqNum = 0U;
687+ uint32_t releaseNtyNum = 0U;
686 const std::unique_lock<std::mutex> lk(sqBindMutex_);688 const std::unique_lock<std::mutex> lk(sqBindMutex_);
687 689 
688- (void)ReleaseSqCq(releaseNum);690+ (void)ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
689 return;691 return;
690}692}
691 693 
692-rtError_t CaptureModel::ReleaseSqCq(uint32_t &releaseNum)694+rtError_t CaptureModel::ReleaseSqCqAndNotifyId(uint32_t &releaseSqNum, uint32_t &releaseNtyNum)
693{695{
694- releaseNum = 0U;696+ releaseSqNum = 0U;
697+ releaseNtyNum = 0U;
695 if ((sqCqNum_ == 0U) || (refCount_ != 0U)) {698 if ((sqCqNum_ == 0U) || (refCount_ != 0U)) {
696 RT_LOG(RT_LOG_DEBUG, "model cannot be released, model_id=%u, sqCqNum=%u, refCount=%u.",699 RT_LOG(RT_LOG_DEBUG, "model cannot be released, model_id=%u, sqCqNum=%u, refCount=%u.",
697 Id_(), sqCqNum_, refCount_);700 Id_(), sqCqNum_, refCount_);
@@ -699,7 +702,7 @@ rtError_t CaptureModel::ReleaseSqCq(uint32_t &releaseNum)
699 }702 }
atomgit-bot
atomgit-botatomgit-bot7月7日

🟡 Medium Priority

变更行:capture_model.cc 第 698-702 行(ReleaseSqCqAndNotifyId 的提前返回条件)。

受影响的合约/行为:旧代码中 ReleaseSqCqReleaseNotifyId 是两次独立调用,各自有独立的执行条件。新代码将二者合并为 ReleaseSqCqAndNotifyId,但在 sqCqNum_ == 0U 时直接 return RT_ERROR_NONE,此时 Notify 释放代码(第 724 行的 (void)ReleaseNotifyId(releaseNtyNum))被跳过。

失败模式:

  1. TryRecycleCaptureModelResource 首次调用时,ReleaseSqCqAndNotifyId 成功释放 SQ(sqCqNum_ 变为 0),但 ReleaseNotifyId 内部的 Notify::FreeId() 失败 → releaseNtyNum 保持为 0。
  2. 后续再次调用 TryRecycleCaptureModelResource 需要释放 Notify 时,进入同一 model,但 sqCqNum_ == 0U 触发提前返回,Notify 永远不会被释放。
  3. 类似情况同样影响 DeconstructSqCqUpdate 两个调用点。

建议:修改 ReleaseSqCqAndNotifyId 的早期返回逻辑:即使在 sqCqNum_ == 0U 时,也应尝试释放 Notify(ReleaseNotifyId 自身有 refCount_ == 0U 保护,不会误释放)。可将第 698-702 行改为仅当 refCount_ != 0U 时提前返回;当仅 sqCqNum_ == 0U 时,仍调用 (void)ReleaseNotifyId(releaseNtyNum) 后再返回。

likedislike
不准确?
700 703 
701 // 先递归释放子模型资源704 // 先递归释放子模型资源
702- rtError_t error = ReleaseAllSubModelSqCq(releaseNum);705+ rtError_t error = ReleaseAllSubModelSqCq(releaseSqNum);
703 if (error != RT_ERROR_NONE) {706 if (error != RT_ERROR_NONE) {
704 RT_LOG(RT_LOG_ERROR, "release all sub models sqcq failed, model_id=%u, retCode=%#x.",707 RT_LOG(RT_LOG_ERROR, "release all sub models sqcq failed, model_id=%u, retCode=%#x.",
705 Id_(), static_cast<uint32_t>(error));708 Id_(), static_cast<uint32_t>(error));
@@ -714,12 +717,11 @@ rtError_t CaptureModel::ReleaseSqCq(uint32_t &releaseNum)
714 COND_RETURN_ERROR((error != RT_ERROR_NONE), error,717 COND_RETURN_ERROR((error != RT_ERROR_NONE), error,
715 "free sq cq failed, model_id=%u, retCode=%#x.", Id_(), static_cast<uint32_t>(error));718 "free sq cq failed, model_id=%u, retCode=%#x.", Id_(), static_cast<uint32_t>(error));
716 719 
717- releaseNum += sqCqNum_;720+ releaseSqNum += sqCqNum_;
718 DELETE_A(sqCqArray_);721 DELETE_A(sqCqArray_);
719 sqCqNum_ = 0U;722 sqCqNum_ = 0U;
720 723 
721- uint32_t notifReleaseNum = 0;724+ (void)ReleaseNotifyId(releaseNtyNum);
722- (void)ReleaseNotifyId(notifReleaseNum);
723 725 
724 return RT_ERROR_NONE;726 return RT_ERROR_NONE;
725}727}
@@ -944,8 +946,9 @@ void CaptureModel::BackupArgHandle(const uint16_t streamId, const uint16_t taskI
944 946 
945rtError_t CaptureModel::Update(void)947rtError_t CaptureModel::Update(void)
946{948{
947- uint32_t releaseNum = 0U;949+ uint32_t releaseSqNum = 0U;
948- rtError_t error = ReleaseSqCq(releaseNum);950+ uint32_t releaseNtyNum = 0U;
951+ rtError_t error = ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
949 ERROR_RETURN(error, "release sq cq failed, model_id=%d.", Id_());952 ERROR_RETURN(error, "release sq cq failed, model_id=%d.", Id_());
950 for (Stream* stm : StreamList_()) {953 for (Stream* stm : StreamList_()) {
951 const int32_t streamId = stm->Id_();954 const int32_t streamId = stm->Id_();
@@ -962,7 +965,8 @@ rtError_t CaptureModel::Update(void)
962 }965 }
963 966 
964 SetIsSendSqe(false);967 SetIsSendSqe(false);
965- RT_LOG(RT_LOG_INFO, "update finish, model_id=%u, releaseNum=%u.", Id_(), releaseNum);968+ RT_LOG(RT_LOG_INFO, "update finish, model_id=%u, releaseSqNum=%u, releaseNtyNum=%u.", Id_(),
969+ releaseSqNum, releaseNtyNum);
966 return RT_ERROR_NONE;970 return RT_ERROR_NONE;
967}971}
968void CaptureModel::SetModelCacheOpInfoSwitch(const uint32_t status) const {972void CaptureModel::SetModelCacheOpInfoSwitch(const uint32_t status) const {
@@ -1322,9 +1326,6 @@ rtError_t CaptureModel::ReleaseSqCqInternal(uint32_t &releaseNum)
1322 DELETE_A(sqCqArray_);1326 DELETE_A(sqCqArray_);
1323 sqCqNum_ = 0U;1327 sqCqNum_ = 0U;
1324 1328 
1325- uint32_t notifReleaseNum = 0;
1326- ReleaseNotifyId(notifReleaseNum);
1327-
1328 return RT_ERROR_NONE;1329 return RT_ERROR_NONE;
1329}1330}
1330 1331 
@@ -405,12 +405,6 @@ rtError_t Context::AddNotifyToAddedCaptureStream(Stream * const oriSingleStm, Ca
405 "capture model_id=%u, stream_id=%d, notify_id=%u, retCode=%#x",405 "capture model_id=%u, stream_id=%d, notify_id=%u, retCode=%#x",
406 device_->Id_(), oriSingleStm->Id_(), captureMdl->Id_(),406 device_->Id_(), oriSingleStm->Id_(), captureMdl->Id_(),
407 streamObj.second.back()->Id_(), notify->GetNotifyId(), error);407 streamObj.second.back()->Id_(), notify->GetNotifyId(), error);
408- TaskInfo *task = device_->GetTaskFactory()->GetTask(lastStm->Id_(), lastStm->GetLastTaskId());
409- if (task != nullptr) {
410- task->modelSeqId = captureMdl->GenerateSeqId();
411- RT_LOG(RT_LOG_INFO, "Alloc task sequence id=%u, device id=%u, stream_id=%d, task_id=%u",
412- task->modelSeqId, device_->Id_(), lastStm->Id_(), lastStm->GetLastTaskId());
413- }
414 error = apiObj->NotifyWait(notify, oriSingleStm, MAX_UINT32_NUM);408 error = apiObj->NotifyWait(notify, oriSingleStm, MAX_UINT32_NUM);
415 ERROR_RETURN(error,409 ERROR_RETURN(error,
416 "Notify wait failed, device_id=%u, original stream_id=%d, "410 "Notify wait failed, device_id=%u, original stream_id=%d, "
@@ -18,6 +18,7 @@ rtError_t Context::TryRecycleCaptureModelResource(const uint32_t allocSqNum, con
18 UNUSED(excludeMdl);18 UNUSED(excludeMdl);
19 rtError_t error = RT_ERROR_NONE;19 rtError_t error = RT_ERROR_NONE;
20 uint32_t releaseSqNum = 0U;20 uint32_t releaseSqNum = 0U;
21+ uint32_t releaseNtyNum = 0U;
21 uint32_t totalReleaseSqNum = 0U;22 uint32_t totalReleaseSqNum = 0U;
22 uint32_t totalReleaseNtfNum = 0U;23 uint32_t totalReleaseNtfNum = 0U;
23 24 
@@ -32,23 +33,15 @@ rtError_t Context::TryRecycleCaptureModelResource(const uint32_t allocSqNum, con
32 continue;33 continue;
33 }34 }
34 35 
35- if (allocSqNum > totalReleaseSqNum) {36+ if ((allocSqNum > totalReleaseSqNum) || (ntfCnt > totalReleaseNtfNum)) {
36 if (captureMdl->ModelSqOperTryLock()) {37 if (captureMdl->ModelSqOperTryLock()) {
37 releaseSqNum = 0U;38 releaseSqNum = 0U;
38- error = captureMdl->ReleaseSqCq(releaseSqNum);39+ releaseNtyNum = 0U;
40+ error = captureMdl->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
39 captureMdl->ModelSqOperUnLock();41 captureMdl->ModelSqOperUnLock();
40 COND_PROC(error != RT_ERROR_NONE, break);42 COND_PROC(error != RT_ERROR_NONE, break);
41 totalReleaseSqNum += releaseSqNum;43 totalReleaseSqNum += releaseSqNum;
42- }44+ totalReleaseNtfNum += releaseNtyNum;
43- }
44- 
45- if (ntfCnt > totalReleaseNtfNum) {
46- if (captureMdl->ModelSqOperTryLock()) {
47- releaseSqNum = 0U;
48- error = captureMdl->ReleaseNotifyId(releaseSqNum);
49- captureMdl->ModelSqOperUnLock();
50- COND_PROC(error != RT_ERROR_NONE, continue);
51- totalReleaseNtfNum += releaseSqNum;
52 }45 }
53 }46 }
54 }47 }
@@ -115,10 +115,6 @@ rtError_t Stream::AllocCaptureTaskWithoutLock(tsTaskType_t taskType, uint32_t sq
115 curCaptureStream->AddCaptureSqeNum(sqeNum);115 curCaptureStream->AddCaptureSqeNum(sqeNum);
116 (*task)->stream = curCaptureStream;116 (*task)->stream = curCaptureStream;
117 Runtime::Instance()->AllocTaskSn((*task)->taskSn); // 只有A5用了这个字段,其他形态的分配了不用117 Runtime::Instance()->AllocTaskSn((*task)->taskSn); // 只有A5用了这个字段,其他形态的分配了不用
118- Model *m = curCaptureStream->Model_();
119- if ((m != nullptr) && (m->GetModelType() == RT_MODEL_CAPTURE_MODEL)) {
120- (*task)->modelSeqId = dynamic_cast<CaptureModel *>(m)->GenerateSeqId();
121- }
122 } else {118 } else {
123 SingleStreamTerminateCapture();119 SingleStreamTerminateCapture();
124 return errCode;120 return errCode;
@@ -68,7 +68,7 @@ rtError_t CaptureModel::BuildSqCq(Stream * const exeStream) { UNUSED(exeStream);
68 68 
69void CaptureModel::DeconstructSqCq(void) {}69void CaptureModel::DeconstructSqCq(void) {}
70 70 
71-rtError_t CaptureModel::ReleaseSqCq(uint32_t &releaseNum) { UNUSED(releaseNum); return RT_ERROR_FEATURE_NOT_SUPPORT; }71+rtError_t CaptureModel::ReleaseSqCqAndNotifyId(uint32_t &releaseSqNum, uint32_t &releaseNtyNum) { UNUSED(releaseSqNum); UNUSED(releaseNtyNum); return RT_ERROR_FEATURE_NOT_SUPPORT; }
72 72 
73void CaptureModel::CaptureModelExecuteFinish(const uint32_t errCode) { UNUSED(errCode); }73void CaptureModel::CaptureModelExecuteFinish(const uint32_t errCode) { UNUSED(errCode); }
74 74 
@@ -181,9 +181,10 @@ TEST_F(CloudV2CaptureModelTest, PRINT_DFX_INFO)
181 notify.Setup();181 notify.Setup();
182 notify.FreeId();182 notify.FreeId();
183 notify.AllocId();183 notify.AllocId();
184- uint32_t releaseNum = 0U;184+ uint32_t releaseSqNum = 0U;
185+ uint32_t releaseNtyNum = 0;
185 captureModel->UpdateNotifyId(stm);186 captureModel->UpdateNotifyId(stm);
186- captureModel->ReleaseSqCq(releaseNum);187+ captureModel->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
187 188 
188 captureModel->BuildSqCq(stm);189 captureModel->BuildSqCq(stm);
189 190 
@@ -1069,8 +1070,9 @@ TEST_F(CloudV2CaptureModelTest, capture_mode_api_normal)
1069 1070 
1070 CaptureModel *captureMdl1 = static_cast<CaptureModel *>(rt_ut::UnwrapOrNull<Model>(model1));1071 CaptureModel *captureMdl1 = static_cast<CaptureModel *>(rt_ut::UnwrapOrNull<Model>(model1));
1071 captureMdl1->CaptureModelExecuteFinish(RT_ERROR_NONE);1072 captureMdl1->CaptureModelExecuteFinish(RT_ERROR_NONE);
1072- uint32_t releaseNum;1073+ uint32_t releaseSqNum = 0U;
1073- captureMdl1->ReleaseSqCq(releaseNum);1074+ uint32_t releaseNtyNum = 0;
1075+ captureMdl1->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
1074 captureMdl1->BuildSqCq(rt_ut::UnwrapOrNull<Stream>(streamExe));1076 captureMdl1->BuildSqCq(rt_ut::UnwrapOrNull<Stream>(streamExe));
1075 1077 
1076 error = rtModelDestroy(model1);1078 error = rtModelDestroy(model1);
@@ -1241,8 +1243,9 @@ TEST_F(CloudV2CondHandleTest, CondHandleWhileE2E)
1241 EXPECT_EQ(ret, RT_ERROR_NONE);1243 EXPECT_EQ(ret, RT_ERROR_NONE);
1242 1244 
1243 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);1245 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);
1244- uint32_t releaseNum;1246+ uint32_t releaseSqNum = 0U;
1245- captureMdl->ReleaseSqCq(releaseNum);1247+ uint32_t releaseNtyNum = 0;
1248+ captureMdl->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
1246 1249 
1247 delete rawDrv;1250 delete rawDrv;
1248 ret = rtModelDestroy(parentModelResult);1251 ret = rtModelDestroy(parentModelResult);
@@ -1338,8 +1341,9 @@ TEST_F(CloudV2CondHandleTest, CondHandleWhileWithAssignDefault)
1338 EXPECT_EQ(ret, RT_ERROR_NONE);1341 EXPECT_EQ(ret, RT_ERROR_NONE);
1339 1342 
1340 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);1343 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);
1341- uint32_t releaseNum;1344+ uint32_t releaseSqNum = 0U;
1342- captureMdl->ReleaseSqCq(releaseNum);1345+ uint32_t releaseNtyNum = 0;
1346+ captureMdl->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
1343 1347 
1344 delete rawDrv;1348 delete rawDrv;
1345 ret = rtModelDestroy(parentModelResult);1349 ret = rtModelDestroy(parentModelResult);
@@ -1444,8 +1448,9 @@ TEST_F(CloudV2CondHandleTest, CondHandleIfE2E)
1444 EXPECT_EQ(ret, RT_ERROR_NONE);1448 EXPECT_EQ(ret, RT_ERROR_NONE);
1445 1449 
1446 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);1450 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);
1447- uint32_t releaseNum;1451+ uint32_t releaseSqNum = 0U;
1448- captureMdl->ReleaseSqCq(releaseNum);1452+ uint32_t releaseNtyNum = 0;
1453+ captureMdl->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
1449 1454 
1450 delete rawDrv;1455 delete rawDrv;
1451 ret = rtModelDestroy(parentModelResult);1456 ret = rtModelDestroy(parentModelResult);
@@ -1542,8 +1547,9 @@ TEST_F(CloudV2CondHandleTest, CondHandleIfSizeOneE2E)
1542 EXPECT_EQ(ret, RT_ERROR_NONE);1547 EXPECT_EQ(ret, RT_ERROR_NONE);
1543 1548 
1544 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);1549 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);
1545- uint32_t releaseNum;1550+ uint32_t releaseSqNum = 0U;
1546- captureMdl->ReleaseSqCq(releaseNum);1551+ uint32_t releaseNtyNum = 0;
1552+ captureMdl->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
1547 1553 
1548 delete rawDrv;1554 delete rawDrv;
1549 ret = rtModelDestroy(parentModelResult);1555 ret = rtModelDestroy(parentModelResult);
@@ -1643,8 +1649,9 @@ TEST_F(CloudV2CondHandleTest, CondHandleSwitchE2E)
1643 EXPECT_EQ(ret, RT_ERROR_NONE);1649 EXPECT_EQ(ret, RT_ERROR_NONE);
1644 1650 
1645 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);1651 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);
1646- uint32_t releaseNum;1652+ uint32_t releaseSqNum = 0U;
1647- captureMdl->ReleaseSqCq(releaseNum);1653+ uint32_t releaseNtyNum = 0;
1654+ captureMdl->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
1648 1655 
1649 delete rawDrv;1656 delete rawDrv;
1650 ret = rtModelDestroy(parentModelResult);1657 ret = rtModelDestroy(parentModelResult);
@@ -1786,8 +1793,9 @@ MOCKER_CPP_VIRTUAL(rawDrv, &NpuDriver::DevMemFree)
1786 EXPECT_EQ(ret, RT_ERROR_NONE);1793 EXPECT_EQ(ret, RT_ERROR_NONE);
1787 1794 
1788 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);1795 captureMdl->CaptureModelExecuteFinish(RT_ERROR_NONE);
1789- uint32_t releaseNum;1796+ uint32_t releaseSqNum = 0U;
1790- captureMdl->ReleaseSqCq(releaseNum);1797+ uint32_t releaseNtyNum = 0;
1798+ captureMdl->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
1791 1799 
1792 delete rawDrv;1800 delete rawDrv;
1793 ret = rtModelDestroy(parentModelResult);1801 ret = rtModelDestroy(parentModelResult);
@@ -1037,6 +1037,7 @@ TEST_F(ApiCloudV2DisableThreadTest, ModelDebugJsonPrint_AicpuTask)
1037 1037 
1038 // aicpu task;1038 // aicpu task;
1039 TaskInfo task = {};1039 TaskInfo task = {};
1040+ InitByStream(&task, (rt_ut::UnwrapOrNull<Stream>(stream1)));
1040 task.type = TS_TASK_TYPE_KERNEL_AICPU;1041 task.type = TS_TASK_TYPE_KERNEL_AICPU;
1041 AicpuTaskInfo *aicpuTask = &(task.u.aicpuTaskInfo);1042 AicpuTaskInfo *aicpuTask = &(task.u.aicpuTaskInfo);
1042 aicpuTask->kernel = nullptr;1043 aicpuTask->kernel = nullptr;
@@ -1710,8 +1710,9 @@ TEST_F(TaskTestDavid, CaptureModeExecute)
1710 1710 
1711 CaptureModel *captureMdl1 = static_cast<CaptureModel *>(rt_ut::UnwrapOrNull<Model>(model1));1711 CaptureModel *captureMdl1 = static_cast<CaptureModel *>(rt_ut::UnwrapOrNull<Model>(model1));
1712 captureMdl1->CaptureModelExecuteFinish(RT_ERROR_NONE);1712 captureMdl1->CaptureModelExecuteFinish(RT_ERROR_NONE);
1713- uint32_t releaseNum;1713+ uint32_t releaseSqNum = 0U;
1714- captureMdl1->ReleaseSqCq(releaseNum);1714+ uint32_t releaseNtyNum = 0;
1715+ captureMdl1->ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum);
1715 captureMdl1->BuildSqCq(rt_ut::UnwrapOrNull<Stream>(streamExe));1716 captureMdl1->BuildSqCq(rt_ut::UnwrapOrNull<Stream>(streamExe));
1716 1717 
1717 error = rtModelDestroy(model1);1718 error = rtModelDestroy(model1);
@@ -1066,6 +1066,7 @@ TEST_F(ApiCloudV2DisableThreadTest, ModelDebugJsonPrint_AicpuTask)
1066 1066 
1067 // aicpu task;1067 // aicpu task;
1068 TaskInfo task = {};1068 TaskInfo task = {};
1069+ InitByStream(&task, (rt_ut::UnwrapOrNull<Stream>(stream1)));
1069 task.type = TS_TASK_TYPE_KERNEL_AICPU;1070 task.type = TS_TASK_TYPE_KERNEL_AICPU;
1070 AicpuTaskInfo *aicpuTask = &(task.u.aicpuTaskInfo);1071 AicpuTaskInfo *aicpuTask = &(task.u.aicpuTaskInfo);
1071 aicpuTask->kernel = nullptr;1072 aicpuTask->kernel = nullptr;
@@ -933,8 +933,9 @@ TEST_F(TinyStubTest, capture_model_sqcq_stub)
933 CaptureModel captureModel(RT_MODEL_NORMAL);933 CaptureModel captureModel(RT_MODEL_NORMAL);
934 EXPECT_EQ(captureModel.BuildSqCq(nullptr), RT_ERROR_FEATURE_NOT_SUPPORT);934 EXPECT_EQ(captureModel.BuildSqCq(nullptr), RT_ERROR_FEATURE_NOT_SUPPORT);
935 captureModel.DeconstructSqCq();935 captureModel.DeconstructSqCq();
936- uint32_t releaseNum = 0;936+ uint32_t releaseSqNum = 0;
937- EXPECT_EQ(captureModel.ReleaseSqCq(releaseNum), RT_ERROR_FEATURE_NOT_SUPPORT);937+ uint32_t releaseNtyNum = 0;
938+ EXPECT_EQ(captureModel.ReleaseSqCqAndNotifyId(releaseSqNum, releaseNtyNum), RT_ERROR_FEATURE_NOT_SUPPORT);
938 captureModel.CaptureModelExecuteFinish(RT_ERROR_NONE);939 captureModel.CaptureModelExecuteFinish(RT_ERROR_NONE);
939 EXPECT_EQ(captureModel.MarkStreamActiveTask(nullptr), RT_ERROR_FEATURE_NOT_SUPPORT);940 EXPECT_EQ(captureModel.MarkStreamActiveTask(nullptr), RT_ERROR_FEATURE_NOT_SUPPORT);
940 EXPECT_EQ(captureModel.RestoreForSoftwareSq(nullptr), RT_ERROR_FEATURE_NOT_SUPPORT);941 EXPECT_EQ(captureModel.RestoreForSoftwareSq(nullptr), RT_ERROR_FEATURE_NOT_SUPPORT);