Удаляем крайние дни
This commit is contained in:
10
src/main.cpp
10
src/main.cpp
@@ -7,6 +7,7 @@
|
|||||||
#include "record.hpp"
|
#include "record.hpp"
|
||||||
#include "day_stats.hpp"
|
#include "day_stats.hpp"
|
||||||
#include "aggregation.hpp"
|
#include "aggregation.hpp"
|
||||||
|
#include "utils.hpp"
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
MPI_Init(&argc, &argv);
|
MPI_Init(&argc, &argv);
|
||||||
@@ -37,6 +38,15 @@ int main(int argc, char** argv) {
|
|||||||
<< " in " << std::fixed << std::setprecision(3) << agg_time << " sec"
|
<< " in " << std::fixed << std::setprecision(3) << agg_time << " sec"
|
||||||
<< std::endl;
|
<< 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();
|
MPI_Finalize();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,3 +112,16 @@ ByteRange calculate_byte_range(int rank, int size, int64_t file_size,
|
|||||||
|
|
||||||
return range;
|
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);
|
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