diff --git a/mindspore/ccsrc/backend/optimizer/somas/somas.cc b/mindspore/ccsrc/backend/optimizer/somas/somas.cc index cded3c47b6..40f7a07fa8 100644 --- a/mindspore/ccsrc/backend/optimizer/somas/somas.cc +++ b/mindspore/ccsrc/backend/optimizer/somas/somas.cc @@ -470,41 +470,45 @@ void Somas::GenContiguousList(const session::KernelGraph *graph) { if (node->GetType() != kCommunicationNode) { continue; } - std::vector inputs; - auto input_before_gap = CreateGapTensor(gap_tensor_id); - input_before_gap->contiguous_ = true; - gap_tensor_id++; - inputs.push_back(input_before_gap->GetId()); - - for (const auto &input_tensor : node->input_tensors_) { - comm_input_total_size_ += input_tensor->aligned_size_; - input_tensor->contiguous_ = true; - inputs.push_back(input_tensor->GetId()); - } - - auto input_after_gap = CreateGapTensor(gap_tensor_id); - gap_tensor_id++; - input_after_gap->contiguous_ = true; - inputs.push_back(input_after_gap->GetId()); - contiguous_tensors_list_.push_back(inputs); - - std::vector outputs; - auto output_before_gap = CreateGapTensor(gap_tensor_id); - gap_tensor_id++; - output_before_gap->contiguous_ = true; - outputs.push_back(output_before_gap->GetId()); - - for (const auto &output_tensor : node->output_tensors_) { - comm_output_total_size_ += output_tensor->aligned_size_; - output_tensor->contiguous_ = true; - outputs.push_back(output_tensor->GetId()); - } - - auto output_after_gap = CreateGapTensor(gap_tensor_id); - gap_tensor_id++; - output_after_gap->contiguous_ = true; - outputs.push_back(output_after_gap->GetId()); - contiguous_tensors_list_.push_back(outputs); + if ((!node->input_tensors_.empty()) && (!node->input_tensors_[0]->contiguous_)) { + std::vector inputs; + auto input_before_gap = CreateGapTensor(gap_tensor_id); + input_before_gap->contiguous_ = true; + gap_tensor_id++; + inputs.push_back(input_before_gap->GetId()); + + for (const auto &input_tensor : node->input_tensors_) { + comm_input_total_size_ += input_tensor->aligned_size_; + input_tensor->contiguous_ = true; + inputs.push_back(input_tensor->GetId()); + } + + auto input_after_gap = CreateGapTensor(gap_tensor_id); + gap_tensor_id++; + input_after_gap->contiguous_ = true; + inputs.push_back(input_after_gap->GetId()); + contiguous_tensors_list_.push_back(inputs); + } + + if ((!node->output_tensors_.empty()) && (!node->output_tensors_[0]->contiguous_)) { + std::vector outputs; + auto output_before_gap = CreateGapTensor(gap_tensor_id); + gap_tensor_id++; + output_before_gap->contiguous_ = true; + outputs.push_back(output_before_gap->GetId()); + + for (const auto &output_tensor : node->output_tensors_) { + comm_output_total_size_ += output_tensor->aligned_size_; + output_tensor->contiguous_ = true; + outputs.push_back(output_tensor->GetId()); + } + + auto output_after_gap = CreateGapTensor(gap_tensor_id); + gap_tensor_id++; + output_after_gap->contiguous_ = true; + outputs.push_back(output_after_gap->GetId()); + contiguous_tensors_list_.push_back(outputs); + } } }