MCPcopy Create free account
hub / github.com/TileDB-Inc/TileDB / compute_current_start_end

Method compute_current_start_end

tiledb/sm/subarray/subarray_partitioner.cc:791–899  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

789}
790
791Status SubarrayPartitioner::compute_current_start_end(bool* found) {
792 // Compute the tile overlap. Note that the ranges in `tile_overlap` may have
793 // been truncated the ending bound due to memory constraints.
794 subarray_.precompute_tile_overlap(
795 state_.start_, state_.end_, config_, compute_tp_);
796 const SubarrayTileOverlap* const tile_overlap =
797 subarray_.subarray_tile_overlap();
798 iassert(tile_overlap->range_idx_start() == state_.start_);
799 iassert(tile_overlap->range_idx_end() <= state_.end_);
800
801 // Preparation
802 auto array = subarray_.array();
803 auto meta = array->fragment_metadata();
804 std::vector<Subarray::ResultSize> cur_sizes;
805 std::vector<Subarray::MemorySize> mem_sizes;
806 std::vector<std::string> names;
807 std::vector<ResultBudget> budgets;
808 names.reserve(budget_.size());
809 budgets.reserve(budget_.size());
810 cur_sizes.resize(budget_.size(), Subarray::ResultSize({0.0, 0.0, 0.0}));
811 mem_sizes.resize(budget_.size(), Subarray::MemorySize({0, 0, 0}));
812 for (const auto& budget_it : budget_) {
813 names.emplace_back(budget_it.first);
814 budgets.emplace_back(budget_it.second);
815 }
816
817 // Compute the estimated result sizes
818 std::vector<std::vector<Subarray::ResultSize>> result_sizes;
819 std::vector<std::vector<Subarray::MemorySize>> memory_sizes;
820 subarray_.compute_relevant_fragment_est_result_sizes(
821 names,
822 tile_overlap->range_idx_start(),
823 tile_overlap->range_idx_end(),
824 &result_sizes,
825 &memory_sizes,
826 compute_tp_);
827
828 bool done = false;
829 current_.start_ = tile_overlap->range_idx_start();
830 for (current_.end_ = tile_overlap->range_idx_start();
831 current_.end_ <= tile_overlap->range_idx_end();
832 ++current_.end_) {
833 size_t r = current_.end_ - tile_overlap->range_idx_start();
834 for (size_t i = 0; i < names.size(); ++i) {
835 auto& cur_size = cur_sizes[i];
836 auto& mem_size = mem_sizes[i];
837 const auto& budget = budgets[i];
838 cur_size.size_fixed_ += result_sizes[r][i].size_fixed_;
839 cur_size.size_var_ += result_sizes[r][i].size_var_;
840 cur_size.size_validity_ += result_sizes[r][i].size_validity_;
841 mem_size.size_fixed_ += memory_sizes[r][i].size_fixed_;
842 mem_size.size_var_ += memory_sizes[r][i].size_var_;
843 mem_size.size_validity_ += memory_sizes[r][i].size_validity_;
844 if ((!skip_split_on_est_size_ &&
845 (cur_size.size_fixed_ > budget.size_fixed_ ||
846 cur_size.size_var_ > budget.size_var_ ||
847 cur_size.size_validity_ > budget.size_validity_)) ||
848 mem_size.size_fixed_ > memory_budget_ ||

Callers

nothing calls this directly

Calls 12

subarray_tile_overlapMethod · 0.80
range_idx_startMethod · 0.80
range_idx_endMethod · 0.80
add_counterMethod · 0.80
ResultSizeClass · 0.70
MemorySizeClass · 0.70
arrayMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected