GeTensor aligned addr & zero copy support

pull/689/head
chenyemeng 4 years ago
parent a3c8c05e0a
commit 1537a0d187

@ -47,8 +47,6 @@ namespace {
auto tensor_name = op_desc->GetOutputNameByIndex(i); \
GE_RETURN_WITH_LOG_IF_TRUE(tensor_name.empty(), "Failed to get output name. node = %s, index = %zu", \
op_desc->GetName().c_str(), i); \
GELOGD("Successfully inserted output tensor. node = %s, index = %zu, output name = %s, addr = %p, size = %zu", \
op_desc->GetName().c_str(), i, tensor_name.c_str(), tensor.GetData(), tensor.GetSize()); \
named_outputs.emplace(tensor_name, tensor); \
break; \
}

@ -24,7 +24,7 @@ const void *HostMemAllocator::Malloc(const std::shared_ptr<AlignedPtr> &aligned_
GELOGW("Insert a null aligned_ptr");
return nullptr;
}
GELOGD("allocate existed host memory succ, addr=%p, size=%zu", aligned_ptr->Get(), size);
GELOGD("allocate existed host memory succ, size=%zu", size);
allocated_blocks_[aligned_ptr->Get()] = { size, aligned_ptr };
return aligned_ptr->Get();
}
@ -38,12 +38,11 @@ uint8_t *HostMemAllocator::Malloc(size_t size) {
return nullptr;
}
allocated_blocks_[aligned_ptr->Get()] = { size, aligned_ptr };
GELOGD("allocate host memory succ, addr=%p, size=%zu", aligned_ptr->Get(), size);
GELOGD("allocate host memory succ, size=%zu", size);
return aligned_ptr->MutableGet();
}
Status HostMemAllocator::Free(const void *memory_addr) {
GELOGD("Free host memory, addr=%p", memory_addr);
if (memory_addr == nullptr) {
GELOGE(GE_GRAPH_FREE_FAILED, "Invalid memory pointer");
return GE_GRAPH_FREE_FAILED;

@ -44,13 +44,11 @@ Status SharedMemAllocator::Allocate(SharedMemInfo &mem_info) {
}
mem_info.fd = output_para.fd;
#ifndef ONLY_COMPILE_OPEN_SRC
mem_info.host_aligned_ptr = AlignedPtr::BuildAlignedPtr(mem_info.mem_size,
mem_info.host_aligned_ptr = AlignedPtr::BuildFromAllocFunc(mem_info.mem_size,
[&output_para](std::unique_ptr<uint8_t[], deleter> &ptr) {
GELOGD("set aligned_ptr, addr=%p", output_para.ptr);
ptr.reset(reinterpret_cast<uint8_t *>(output_para.ptr));
},
[](uint8_t *ptr) {
GELOGD("reset aligned_ptr in SharedMemAllocator, addr=%p", ptr);
ptr = nullptr;
}, 0);
#else

@ -9,7 +9,7 @@
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.l
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@ -20,9 +20,12 @@
#include "graph/debug/ge_attr_define.h"
namespace {
const uint32_t kValidInputNodeOutputNum = 1;
const int32_t kAssignRefInputIndex = 0;
const int32_t kAssignValueInputIndex = 1;
constexpr uint32_t kValidInputNodeOutputNum = 1;
constexpr int32_t kAssignRefInputIndex = 0;
constexpr int32_t kAssignValueInputIndex = 1;
static const std::set<std::string> kNoTaskNodeTypes = { ge::DATA, ge::ANN_DATA, ge::AIPPDATA,
ge::CONSTANT, ge::CONSTANTOP,
ge::VARIABLE, ge::VARIABLEV2 };
}
namespace ge {
@ -80,7 +83,6 @@ Status AssignPass::OptimizedAssignNode(NodePtr &assign_node) {
GELOGE(FAILED, "Isolate and delete assign_node %s failed.", assign_node->GetName().c_str());
return FAILED;
}
AddNodeDeleted(assign_node);
const auto &ref_input = ref_peer_anchor->GetOwnerNode()->GetOpDesc();
const auto &value_input = value_peer_anchor->GetOwnerNode()->GetOpDesc();
@ -221,9 +223,8 @@ bool AssignPass::IsCondMatch(const NodePtr &node, const OutDataAnchorPtr &ref_pe
node->GetName().c_str(), ref_peer_anchor->GetOwnerNode()->GetName().c_str(),
value_peer_anchor->GetOwnerNode()->GetName().c_str());
const std::string &value_type = value_peer_anchor->GetOwnerNode()->GetType();
if ((value_type == CONSTANTOP) || (value_type == CONSTANT)) {
GELOGD("value input is const");
if (kNoTaskNodeTypes.count(value_peer_anchor->GetOwnerNode()->GetType()) > 0) {
GELOGD("value input is not calculate node");
return false;
}

@ -20,9 +20,9 @@
#include "graph/debug/ge_attr_define.h"
namespace {
const uint32_t kInplaceSupportOutputIndex = 0;
const uint32_t kInplaceSupportOutputNum = 1;
static const std::set<std::string> src_node_types = { ge::DATA, ge::ANN_DATA, ge::AIPPDATA,
constexpr uint32_t kInplaceSupportOutputIndex = 0;
constexpr uint32_t kInplaceSupportOutputNum = 1;
static const std::set<std::string> kSrcNodeTypes = { ge::DATA, ge::ANN_DATA, ge::AIPPDATA,
ge::CONSTANT, ge::CONSTANTOP,
ge::VARIABLE, ge::VARIABLEV2 };
}
@ -30,10 +30,6 @@ static const std::set<std::string> src_node_types = { ge::DATA, ge::ANN_DATA, ge
namespace ge {
Status InplaceSupportCheckPass::Run(NodePtr &node) {
GELOGD("InplaceSupportCheckPass running");
if (src_node_types.count(node->GetType()) > 0) {
GELOGD("meet src_node %s, skip InplaceSupportCheckPass", node->GetName().c_str());
return SUCCESS;
}
if (node->GetAllOutDataAnchorsSize() != kInplaceSupportOutputNum) {
GELOGD("output num of node %s is not %u, skip InplaceSupportCheckPass",
node->GetName().c_str(), kInplaceSupportOutputNum);
@ -49,7 +45,7 @@ Status InplaceSupportCheckPass::Run(NodePtr &node) {
continue;
}
auto in_node = peer_data_anchor->GetOwnerNode();
if (src_node_types.count(in_node->GetType()) > 0) {
if (kSrcNodeTypes.count(in_node->GetType()) > 0) {
GELOGD("meet src_node %s", in_node->GetName().c_str());
continue;
}
@ -62,11 +58,11 @@ Status InplaceSupportCheckPass::Run(NodePtr &node) {
const DataType &input_type = node->GetOpDesc()->GetInputDesc(inplace_input_idx).GetDataType();
const GeShape &input_shape = node->GetOpDesc()->GetInputDesc(inplace_input_idx).GetShape();
if (input_type != output_type) {
GELOGD("DataType mismatch, in_idx=%d, input_type=%u, output_type=%u", inplace_input_idx, input_type, output_type);
GELOGW("DataType mismatch, in_idx=%d, input_type=%u, output_type=%u", inplace_input_idx, input_type, output_type);
continue;
}
if (input_shape.GetDims() != output_shape.GetDims()) {
GELOGD("Shape mismatch, in_idx=%d, input_shape=[%s], output_shape=[%s]",
GELOGW("Shape mismatch, in_idx=%d, input_shape=[%s], output_shape=[%s]",
inplace_input_idx, input_shape.ToString().c_str(), output_shape.ToString().c_str());
continue;
}

@ -932,8 +932,7 @@ Status HybridModelBuilder::InitVariableTensors() {
GELOGE(MEMALLOC_FAILED, "Malloc host memory for an existed GeTensor failed.");
return MEMALLOC_FAILED;
}
GELOGD("Host variable [%s] malloc success, host_addr=%p, dev_addr=%p, size=%lld.",
it.first.c_str(), mem_info.host_aligned_ptr->Get(), mem_info.device_address, tensor_size);
GELOGD("Host variable [%s] malloc success, size=%lld.", it.first.c_str(), tensor_size);
std::unique_ptr<TensorValue> tensor(new (std::nothrow) TensorValue(mem_info.host_aligned_ptr->MutableGet(),
tensor_size));

Loading…
Cancel
Save