Browse Source

!13465 fix executor wait pendingtask

From: @kisnwang
Reviewed-by: @zhoufeng54,@jjfeing
Signed-off-by: @jjfeing
tags/v1.2.0-rc1
mindspore-ci-bot Gitee 4 years ago
parent
commit
9295280bbe
2 changed files with 8 additions and 6 deletions
  1. +7
    -5
      mindspore/ccsrc/backend/session/executor.cc
  2. +1
    -1
      mindspore/ccsrc/backend/session/executor.h

+ 7
- 5
mindspore/ccsrc/backend/session/executor.cc View File

@@ -336,7 +336,7 @@ void Executor::RunGraph(const SessionPtr &session, const GraphId &graph_id,
RunTask(task, true, true); RunTask(task, true, true);
} }


void Executor::WaitTaskGraphAvailable(const SessionPtr &session, const std::shared_ptr<RunGraphTask> &task) {
void Executor::WaitLockedInputs(const SessionPtr &session, const std::shared_ptr<RunGraphTask> &task) {
bool need_lock = false; bool need_lock = false;
for (auto &tensor : task->input_tensors_) { for (auto &tensor : task->input_tensors_) {
if (tensor->NeedWait()) { if (tensor->NeedWait()) {
@@ -388,11 +388,13 @@ void Executor::RunGraphAsync(const SessionPtr &session, const GraphId &graph_id,
RunTask(task, true, true); RunTask(task, true, true);
return; return;
} }
WaitTaskGraphAvailable(session, task);
if (!IsTaskReady(task)) {
WaitLockedInputs(session, task);
{
std::lock_guard<std::mutex> lock(pending_task_mutex_); std::lock_guard<std::mutex> lock(pending_task_mutex_);
pending_tasks_.push_back(task);
return;
if (!IsTaskReady(task)) {
pending_tasks_.push_back(task);
return;
}
} }
RunTask(task, false); RunTask(task, false);
} }


+ 1
- 1
mindspore/ccsrc/backend/session/executor.h View File

@@ -174,7 +174,7 @@ class Executor {
void RunTask(const std::shared_ptr<Task> &task, bool sync, bool long_run = false); void RunTask(const std::shared_ptr<Task> &task, bool sync, bool long_run = false);
std::vector<std::shared_ptr<RunGraphTask>> GetNewReadyTasks(); std::vector<std::shared_ptr<RunGraphTask>> GetNewReadyTasks();
bool IsTaskReady(const std::shared_ptr<RunGraphTask> &task); bool IsTaskReady(const std::shared_ptr<RunGraphTask> &task);
void WaitTaskGraphAvailable(const SessionPtr &session, const std::shared_ptr<RunGraphTask> &task);
void WaitLockedInputs(const SessionPtr &session, const std::shared_ptr<RunGraphTask> &task);
void OnWorkerExit(); void OnWorkerExit();
void OnRunGraphFinished(); void OnRunGraphFinished();
void OnException(); void OnException();


Loading…
Cancel
Save