|
|
|
@ -39,19 +39,6 @@ bool RequestSendHandler::Handle(const std::string& varname,
|
|
|
|
|
const std::string& out_var_name) {
|
|
|
|
|
VLOG(4) << "RequestSendHandler:" << varname;
|
|
|
|
|
|
|
|
|
|
// Async
|
|
|
|
|
if (!sync_mode_) {
|
|
|
|
|
rpc_server_->Profiler().OneStep();
|
|
|
|
|
try {
|
|
|
|
|
executor_->RunPreparedContext((*grad_to_prepared_ctx_)[varname].get(),
|
|
|
|
|
scope);
|
|
|
|
|
} catch (std::exception& e) {
|
|
|
|
|
LOG(ERROR) << "async: run sub program error " << e.what();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Sync
|
|
|
|
|
if (varname == BATCH_BARRIER_MESSAGE) {
|
|
|
|
|
VLOG(3) << "sync: recv BATCH_BARRIER_MESSAGE";
|
|
|
|
@ -60,17 +47,31 @@ bool RequestSendHandler::Handle(const std::string& varname,
|
|
|
|
|
VLOG(3) << "sync: recv complete message";
|
|
|
|
|
rpc_server_->Complete();
|
|
|
|
|
} else {
|
|
|
|
|
VLOG(3) << "sync: received var_name: " << varname;
|
|
|
|
|
rpc_server_->WaitCond(kRequestSend);
|
|
|
|
|
VLOG(3) << "sync: processing received var: " << varname;
|
|
|
|
|
|
|
|
|
|
if (invar == nullptr) {
|
|
|
|
|
LOG(FATAL) << "sync: Can not find server side var: " << varname;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (invar->IsType<framework::SelectedRows>()) {
|
|
|
|
|
std::unique_lock<std::mutex> lock(mutex_sparse_vars_);
|
|
|
|
|
sparse_vars_.push_back(invar);
|
|
|
|
|
// Async
|
|
|
|
|
if (!sync_mode_) {
|
|
|
|
|
VLOG(3) << "async process var: " << varname;
|
|
|
|
|
rpc_server_->Profiler().OneStep();
|
|
|
|
|
try {
|
|
|
|
|
executor_->RunPreparedContext((*grad_to_prepared_ctx_)[varname].get(),
|
|
|
|
|
scope);
|
|
|
|
|
} catch (std::exception& e) {
|
|
|
|
|
LOG(ERROR) << "async: run sub program error " << e.what();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
} else { // sync
|
|
|
|
|
rpc_server_->WaitCond(kRequestSend);
|
|
|
|
|
VLOG(3) << "sync: processing received var: " << varname;
|
|
|
|
|
|
|
|
|
|
if (invar == nullptr) {
|
|
|
|
|
LOG(FATAL) << "sync: Can not find server side var: " << varname;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (invar->IsType<framework::SelectedRows>()) {
|
|
|
|
|
std::unique_lock<std::mutex> lock(mutex_sparse_vars_);
|
|
|
|
|
sparse_vars_.push_back(invar);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|