diff --git a/mindspore/ccsrc/ps/core/server_node.cc b/mindspore/ccsrc/ps/core/server_node.cc index 26f39d1b96..40a117435f 100644 --- a/mindspore/ccsrc/ps/core/server_node.cc +++ b/mindspore/ccsrc/ps/core/server_node.cc @@ -46,7 +46,7 @@ bool ServerNode::Start(const uint32_t &timeout) { void ServerNode::set_handler(const RequestHandler &handler) { request_handler_ = handler; } -void ServerNode::Response(std::shared_ptr conn, std::shared_ptr meta, DataPtr data, +void ServerNode::Response(std::shared_ptr conn, std::shared_ptr meta, void *data, size_t size) { MS_EXCEPTION_IF_NULL(conn); MS_EXCEPTION_IF_NULL(meta); @@ -55,7 +55,7 @@ void ServerNode::Response(std::shared_ptr conn, std::shared_ptrset_rank_id(node_info_.rank_id_); MS_LOG(DEBUG) << "The node role is:" << CommUtil::NodeRoleToString(node_info_.node_role_) << ", the node id is:" << node_info_.node_id_ << " send the request id is:" << meta->request_id(); - server_->SendMessage(conn, meta, Protos::RAW, data.get(), size); + server_->SendMessage(conn, meta, Protos::RAW, data, size); } void ServerNode::CreateTcpServer() { diff --git a/mindspore/ccsrc/ps/core/server_node.h b/mindspore/ccsrc/ps/core/server_node.h index 5515b5f611..4efca95794 100644 --- a/mindspore/ccsrc/ps/core/server_node.h +++ b/mindspore/ccsrc/ps/core/server_node.h @@ -46,7 +46,7 @@ class ServerNode : public AbstractNode { DataPtr data, size_t size)>; void set_handler(const RequestHandler &handler); - void Response(std::shared_ptr conn, std::shared_ptr meta, DataPtr data, size_t size); + void Response(std::shared_ptr conn, std::shared_ptr meta, void *data, size_t size); private: void CreateTcpServer(); diff --git a/mindspore/ccsrc/ps/parameter_server.cc b/mindspore/ccsrc/ps/parameter_server.cc index 4a7256bd8e..0cd510b53a 100644 --- a/mindspore/ccsrc/ps/parameter_server.cc +++ b/mindspore/ccsrc/ps/parameter_server.cc @@ -505,16 +505,16 @@ void ParameterServer::ServerHandler::operator()(std::shared_ptruser_cmd()]; (this->*handler_ptr)(data, size, output); - std::shared_ptr res(new unsigned char[output->size()]); MS_LOG(DEBUG) << "The output size is:" << output->size(); + if (output->size() > 0) { - int ret = memcpy_s(res.get(), output->size(), output->data(), output->size()); - if (ret != 0) { - MS_LOG(EXCEPTION) << "The memcpy_s error, errorno(" << ret << ")"; - } + ps_->server_node_->Response(conn, meta, output->data(), output->size()); + } else { + // If the size of the output is 0, then constructed an empty string, Because the Response function is a synchronous, + // the res variable will be automatically recycled after calling the Response function + std::string res; + ps_->server_node_->Response(conn, meta, res.data(), res.length()); } - - ps_->server_node_->Response(conn, meta, res, output->size()); MS_LOG(DEBUG) << "The request id is:" << meta->request_id() << " the current time is:" << std::chrono::time_point_cast(std::chrono::high_resolution_clock::now()) .time_since_epoch() diff --git a/mindspore/ccsrc/ps/worker.cc b/mindspore/ccsrc/ps/worker.cc index 360975c5c2..675e01856c 100644 --- a/mindspore/ccsrc/ps/worker.cc +++ b/mindspore/ccsrc/ps/worker.cc @@ -313,7 +313,6 @@ void Worker::DoPSEmbeddingLookup(const Key &key, const std::vector &lookup_ for (auto j = 0; j < message.values_size(); j++) { values->push_back(message.values(j)); } - MS_LOG(DEBUG) << "The embedding resp:" << *values; for (auto k = 0; k < message.keys_size(); k++) { const Key &key = message.keys(k); float *addr = values->data() + value_offset;