fix bug when add atomic clean for getnext's output

This commit is contained in:
laiyongqiang 2020-10-28 09:37:09 +08:00
parent 4b5ed8dc86
commit dbc6147e9b
2 changed files with 15 additions and 4 deletions

View File

@ -234,10 +234,15 @@ std::map<AnfNodePtr, std::vector<size_t>> GetCommunicationOpInputInfo(
for (size_t i = 0; i < input_num; i++) {
auto input_node = kernel->input(i + 1);
auto kernel_input = AnfAlgo::VisitKernelWithReturnType(input_node, 0, true);
if (AnfAlgo::IsCommunicationOp(kernel_input.first)) {
// no need to add atomic for communication op's output
MS_LOG(INFO) << "No need to add atomic clean for communication op "
<< kernel_input.first->fullname_with_scope() << "'s output";
if (!kernel_input.first->isa<CNode>()) {
continue;
}
auto cnode = kernel_input.first->cast<CNodePtr>();
if (AnfAlgo::IsCommunicationOp(cnode) || AnfAlgo::IsIndependentNode(cnode) ||
AnfAlgo::GetCNodeName(cnode) == kGetNextOpName) {
// no need to add atomic for communication/independent/getnext op 's output
MS_LOG(INFO) << "No need to add atomic clean for op " << kernel_input.first->fullname_with_scope()
<< "'s output";
continue;
}
MS_LOG(INFO) << "Add atomic clean for single communication op input, comm:" << kernel->fullname_with_scope()

View File

@ -280,6 +280,12 @@ void KernelAdjust::InsertSwitchLoop(const std::shared_ptr<session::KernelGraph>
for (size_t idx = i + 1; idx < orders.size(); idx++) {
cur_cnode = orders[idx];
if (AnfAlgo::HasNodeAttr(kAttrLabelForInsertStreamActive, cur_cnode)) {
auto pre_node = orders[idx - 1];
auto pre_kernel_name = AnfAlgo::GetCNodeName(pre_node);
if (pre_kernel_name == kAtomicAddrCleanOpName) {
other_list.pop_back();
memcpy_list.push_back(pre_node);
}
memcpy_list.emplace_back(cur_cnode);
} else {
other_list.emplace_back(cur_cnode);