Удаляем крайние дни
This commit is contained in:
10
src/main.cpp
10
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;
|
||||
}
|
||||
|
||||
@@ -112,3 +112,16 @@ ByteRange calculate_byte_range(int rank, int size, int64_t file_size,
|
||||
|
||||
return range;
|
||||
}
|
||||
|
||||
void trim_edge_days(std::vector<DayStats>& 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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<DayStats>& days, int rank, int size);
|
||||
|
||||
Reference in New Issue
Block a user