| 399 | } |
| 400 | |
| 401 | void GraphMgr::RecvOutputsAsync(const int64 step_id, NamedTensors* out, |
| 402 | StatusCallback done) { |
| 403 | Rendezvous* rendezvous = worker_env_->rendezvous_mgr->Find(step_id); |
| 404 | std::vector<string> keys; |
| 405 | std::vector<Tensor>* received_keys = new std::vector<Tensor>; |
| 406 | keys.reserve(out->size()); |
| 407 | received_keys->reserve(out->size()); |
| 408 | for (const auto& p : *out) { |
| 409 | keys.push_back(p.first); |
| 410 | received_keys->push_back(p.second); |
| 411 | } |
| 412 | RecvOutputsFromRendezvousAsync( |
| 413 | rendezvous, nullptr, {}, keys, received_keys, |
| 414 | [done, rendezvous, received_keys, out, keys](const Status s) { |
| 415 | rendezvous->Unref(); |
| 416 | size_t output_size = 0; |
| 417 | for (int i = 0; i < keys.size(); ++i) { |
| 418 | (*out)[keys[i]] = (*received_keys)[i]; |
| 419 | output_size += (*out)[keys[i]].AllocatedBytes(); |
| 420 | } |
| 421 | metrics::RecordGraphOutputTensors(output_size); |
| 422 | delete received_keys; |
| 423 | done(s); |
| 424 | }); |
| 425 | } |
| 426 | |
| 427 | void GraphMgr::ExecuteAsync(const string& handle, const int64 step_id, |
| 428 | WorkerSession* session, const ExecutorOpts& opts, |
no test coverage detected