diff --git a/src/main.cpp b/src/main.cpp index 7f05cba..1dea0f6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,7 @@ #include "record.hpp" #include "day_stats.hpp" #include "aggregation.hpp" +#include "utils.hpp" int main(int argc, char** argv) { MPI_Init(&argc, &argv); @@ -37,6 +38,15 @@ int main(int argc, char** argv) { << " in " << std::fixed << std::setprecision(3) << agg_time << " sec" << std::endl; + // Удаляем крайние дни (могут быть неполными из-за параллельного чтения) + trim_edge_days(days, rank, size); + + std::cout << "Rank " << rank + << ": after trim " << days.size() << " days" + << " [" << (days.empty() ? 0 : days.front().day) + << ".." << (days.empty() ? 0 : days.back().day) << "]" + << std::endl; + MPI_Finalize(); return 0; } diff --git a/src/utils.cpp b/src/utils.cpp index b19cc30..ba62b76 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -112,3 +112,16 @@ ByteRange calculate_byte_range(int rank, int size, int64_t file_size, return range; } + +void trim_edge_days(std::vector& days, int rank, int size) { + if (days.empty()) return; + + if (rank == 0) { + days.pop_back(); + } else if (rank == size - 1) { + days.erase(days.begin()); + } else { + days.pop_back(); + days.erase(days.begin()); + } +} diff --git a/src/utils.hpp b/src/utils.hpp index 710c6a5..56b4b05 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -30,3 +30,9 @@ ByteRange calculate_byte_range(int rank, int size, int64_t file_size, // Получение размера файла int64_t get_file_size(const std::string& path); + +// Удаляет крайние дни, которые могут быть неполными из-за параллельного чтения +// rank 0: удаляет последний день +// последний rank: удаляет первый день +// промежуточные: удаляют первый и последний дни +void trim_edge_days(std::vector& days, int rank, int size);