Skip to content

Commit

Permalink
Merge pull request #1 from Yancey1989/panxin_polish_sparse
Browse files Browse the repository at this point in the history
polish sparse update code
  • Loading branch information
panyx0718 authored Jun 8, 2018
2 parents e0895e4 + 1239fce commit f25abba
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
3 changes: 3 additions & 0 deletions paddle/fluid/operators/detail/request_handler_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ bool RequestSendHandler::Handle(const std::string& varname,
PADDLE_THROW("sync: Can not find server side var");
return false;
}
if (invar->IsType<framework::SelectedRows>()) {
rpc_server_->RecordSparseVar(invar);
}
}

return true;
Expand Down
13 changes: 13 additions & 0 deletions paddle/fluid/operators/detail/rpc_server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,19 @@ void RPCServer::ResetBarrierCounter() {
t.second = 0;
}
}
void RPCServer::RecordSparseVar(framework::Variable* sparse_var) {
std::unique_lock<std::mutex> lock(mutex_sparse_var_recorder_);
sparse_vars_.push_back(sparse_var);
}

void RPCServer::ResetSparseVarsRecorder() {
VLOG(3) << "RPCServer reset sparse vars recorder.";
std::unique_lock<std::mutex> lock(mutex_sparse_var_recorder_);
for (auto* var : sparse_vars_) {
var->GetMutable<framework::SelectedRows>()->mutable_rows()->clear();
}
sparse_vars_.clear();
}

void RPCServer::RegisterRPC(const std::string& rpc_name,
RequestHandler* handler, int thread_num) {
Expand Down
6 changes: 6 additions & 0 deletions paddle/fluid/operators/detail/rpc_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ class RPCServer {
void SetCond(const std::string& rpc_name);
void WaitCond(const std::string& rpc_name);
void IncreaseBatchBarrier(const std::string rpc_name);

void ResetBarrierCounter();
void RecordSparseVar(framework::Variable* sparse_var);
void ResetSparseVarsRecorder();

protected:
virtual void ShutDownImpl() = 0;
Expand All @@ -74,6 +77,9 @@ class RPCServer {
std::atomic<int> cur_cond_;
std::condition_variable rpc_cond_;

std::vector<framework::Variable*> sparse_vars_;
std::mutex mutex_sparse_var_recorder_;

protected:
std::string bind_address_;
std::atomic<int> exit_flag_;
Expand Down
1 change: 1 addition & 0 deletions paddle/fluid/operators/listen_and_serv_op.cc
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ void ListenAndServOp::RunSyncLoop(framework::Executor *executor,
rpc_service_->SetCond(detail::kRequestGet);
rpc_service_->WaitBarrier(detail::kRequestGet);
rpc_service_->ResetBarrierCounter();
rpc_service_->ResetSparseVarsRecorder();
} // while(true)
}

Expand Down

0 comments on commit f25abba

Please sign in to comment.