|
|
|
@@ -451,10 +451,8 @@ void Somas::UnReuseNodeProcess(const session::KernelGraph *graph) { |
|
|
|
SomasTensorPtr Somas::CreateGapTensor(size_t gap_tensor_id) { |
|
|
|
// real size 512 and lifelong_ |
|
|
|
const size_t gap_size = 512; |
|
|
|
auto gap_tensor = std::make_shared<SomasTensor>(gap_tensor_id++, nullptr, nullptr, gap_size, kLifeLongGraphAll); |
|
|
|
auto gap_tensor = std::make_shared<SomasTensor>(gap_tensor_id++, nullptr, nullptr, gap_size, kLifeLongNone); |
|
|
|
gap_tensor->type_ = kGap; |
|
|
|
gap_tensor->lifetime_.start_ = 0; |
|
|
|
gap_tensor->lifetime_.end_ = 0xffff; |
|
|
|
gap_tensor->aligned_size_ = gap_size; |
|
|
|
tensors_map_[gap_tensor->GetId()] = gap_tensor; |
|
|
|
tensors_list_.push_back(gap_tensor); |
|
|
|
@@ -939,7 +937,45 @@ bool Somas::Assign(const session::KernelGraph *graph) { |
|
|
|
tensor1->num_constraints_ = count_constraints; |
|
|
|
} |
|
|
|
|
|
|
|
// Solver info -- moved here because we set sizes to zero in ref node preprocessing (was before in GetSomasTensors()) |
|
|
|
// Preprocessing contiguous gaps |
|
|
|
MS_LOG(INFO) << "Start Contiguous Gaps Preprocessing"; |
|
|
|
for (auto contiguous_list : contiguous_tensors_list_) { |
|
|
|
if (contiguous_list.size() < 3) { |
|
|
|
MS_LOG(ERROR) << "contiguous_list should has at least one input and two gap, now it is " |
|
|
|
<< contiguous_list.size(); |
|
|
|
} |
|
|
|
size_t front_gap_id = contiguous_list[0]; |
|
|
|
size_t back_gap_id = contiguous_list[contiguous_list.size() - 1]; |
|
|
|
|
|
|
|
SomasTensorPtr front_gap = tensors_map_[front_gap_id]; |
|
|
|
SomasTensorPtr back_gap = tensors_map_[back_gap_id]; |
|
|
|
MS_EXCEPTION_IF_NULL(front_gap); |
|
|
|
MS_EXCEPTION_IF_NULL(back_gap); |
|
|
|
|
|
|
|
// Update conflicts to conflicts of neighbour |
|
|
|
size_t front_neighbour_id = contiguous_list[1]; |
|
|
|
size_t back_neighbour_id = contiguous_list[contiguous_list.size() - 2]; |
|
|
|
for (SomasTensorPtr tensor : tensors_list_) { |
|
|
|
MS_EXCEPTION_IF_NULL(tensor); |
|
|
|
(*cannot_reuse_)(tensor->GetId(), front_gap_id) = (*cannot_reuse_)(tensor->GetId(), front_neighbour_id); |
|
|
|
(*cannot_reuse_)(front_gap_id, tensor->GetId()) = (*cannot_reuse_)(front_neighbour_id, tensor->GetId()); |
|
|
|
(*cannot_reuse_)(tensor->GetId(), back_gap_id) = (*cannot_reuse_)(tensor->GetId(), back_neighbour_id); |
|
|
|
(*cannot_reuse_)(back_gap_id, tensor->GetId()) = (*cannot_reuse_)(back_neighbour_id, tensor->GetId()); |
|
|
|
} |
|
|
|
SomasTensorPtr front_neighbour = tensors_map_[front_neighbour_id]; |
|
|
|
SomasTensorPtr back_neighbour = tensors_map_[back_neighbour_id]; |
|
|
|
MS_EXCEPTION_IF_NULL(front_neighbour); |
|
|
|
MS_EXCEPTION_IF_NULL(back_neighbour); |
|
|
|
front_gap->num_constraints_ = front_neighbour->num_constraints_; |
|
|
|
front_gap->lifetime_.start_ = front_neighbour->lifetime_.end_; |
|
|
|
front_gap->lifetime_.end_ = front_neighbour->lifetime_.end_; |
|
|
|
back_gap->num_constraints_ = back_neighbour->num_constraints_; |
|
|
|
back_gap->lifetime_.start_ = back_neighbour->lifetime_.end_; |
|
|
|
back_gap->lifetime_.end_ = back_neighbour->lifetime_.end_; |
|
|
|
} |
|
|
|
MS_LOG(INFO) << "End Contiguous Gaps Preprocessing"; |
|
|
|
|
|
|
|
// Prepare solver info |
|
|
|
MS_LOG(INFO) << "Start Loop to create solver info"; |
|
|
|
for (auto tensor : tensors_list_) { |
|
|
|
if (tensor->GetSolverTensorDesc() != nullptr) { |
|
|
|
|