MCPcopy Create free account
hub / github.com/OAID/Tengine / SyncRun

Method SyncRun

executor/lib/graph_task.cpp:249–312  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

247}
248
249bool GraphTask::SyncRun(void)
250{
251 if(status_ != EXEC_STATUS_INITED && status_ != EXEC_STATUS_READY)
252
253 {
254 XLOG_ERROR() << "bad status: " << dev_engine_->GetStatusStr(status_) << "\n";
255 return false;
256 }
257
258 status_ = EXEC_STATUS_RUN;
259 output_wait_count_ = output_task_number_ * 2; // never signal graph task done
260 active_sub_task_count_ = 0;
261
262 std::set<SubgraphTask*> working_set;
263
264 for(unsigned int i = 0; i < sub_task_list_.size(); i++)
265 working_set.insert(sub_task_list_[i]);
266
267 // first try: sequentially execution
268 for(unsigned int j = 0; j < sub_task_list_.size(); j++)
269 {
270 SubgraphTask* sub_task = sub_task_list_[j];
271
272 if(!sub_task->input_wait_count_)
273 {
274 bool ret = SyncRunSubgraphTask(sub_task);
275 if(ret)
276 working_set.erase(sub_task);
277 else
278 {
279 status_ = EXEC_STATUS_BAD;
280 return false;
281 }
282 }
283 }
284
285 // second round: repeatly try the tasks in working_set
286
287 while(!working_set.empty())
288 {
289 for(auto ir = working_set.begin(); ir != working_set.end();)
290 {
291 SubgraphTask* sub_task = *ir;
292
293 if(sub_task->input_wait_count_)
294 ir++;
295 else
296 {
297 if(SyncRunSubgraphTask(sub_task))
298 {
299 ir = working_set.erase(ir);
300 }
301 else
302 {
303 status_ = EXEC_STATUS_BAD;
304 return false;
305 }
306 }

Callers 1

DevSyncRunMethod · 0.45

Calls 4

emptyMethod · 0.80
beginMethod · 0.80
endMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected