GCC Code Coverage Report


Directory: ./
File: tasks/olesnitskiy_v_dijkstra_crs/mpi/include/ops_mpi.hpp
Date: 2026-01-27 01:59:34
Exec Total Coverage
Lines: 1 1 100.0%
Functions: 0 0 -%
Branches: 1 2 50.0%

Line Branch Exec Source
1 #pragma once
2
3 #include <functional>
4 #include <queue>
5 #include <utility>
6 #include <vector>
7
8 #include "olesnitskiy_v_dijkstra_crs/common/include/common.hpp"
9 #include "task/include/task.hpp"
10
11 namespace olesnitskiy_v_dijkstra_crs {
12
13 class OlesnitskiyVDijkstraCrsMPI : public BaseTask {
14 public:
15 static constexpr ppc::task::TypeOfTask GetStaticTypeOfTask() {
16 return ppc::task::TypeOfTask::kMPI;
17 }
18 explicit OlesnitskiyVDijkstraCrsMPI(const InType &in);
19
20 bool ValidationImpl() override;
21 bool PreProcessingImpl() override;
22 bool RunImpl() override;
23 bool PostProcessingImpl() override;
24
25 private:
26 struct Update {
27 int vertex{0};
28 int distance{0};
29 };
30
31 struct DistVertexPair {
32 int dist{0};
33 int vertex{0};
34 };
35
36 struct GraphData {
37 int vertices{0};
38 int source{0};
39 std::vector<int> offsets;
40 std::vector<int> edges;
41 std::vector<int> weights;
42 };
43
44
1/2
✓ Branch 1 taken 28 times.
✗ Branch 2 not taken.
28 struct DijkstraContext {
45 int start_idx{0};
46 int end_idx{0};
47 int local_vertices{0};
48 int active{1};
49 std::vector<int> counts;
50 std::vector<int> displs;
51 std::vector<int> local_distances;
52 std::vector<bool> local_visited;
53 std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, std::greater<>> pq;
54 std::vector<std::vector<Update>> send_bufs;
55 };
56
57 static bool IsVertexLocal(int vertex, int start_idx, int end_idx);
58 static int FindOwner(int vertex, const std::vector<int> &displs, const std::vector<int> &counts, int size);
59 static void ProcessLocalVertex(int vertex, int distance, const std::vector<int> &offsets,
60 const std::vector<int> &edges, const std::vector<int> &weights, DijkstraContext &ctx,
61 int rank, int size);
62 static void ProcessReceivedData(const std::vector<int> &recv_data, int total_recv, DijkstraContext &ctx);
63 static void PrepareSendData(const std::vector<std::vector<Update>> &send_bufs, std::vector<int> &send_data);
64 static void CalculateDisplacements(const std::vector<int> &sizes, std::vector<int> &displs, int &total);
65 static void PrepareByteArrays(const std::vector<int> &sizes, const std::vector<int> &displs,
66 std::vector<int> &counts_bytes, std::vector<int> &displs_bytes);
67 static GraphData BroadcastGraphData(int rank, int /*size*/, const InType &input);
68 static DistVertexPair FindGlobalBestVertex(const DistVertexPair &local_best);
69 static bool ShouldStopAlgorithm(const DistVertexPair &global_best);
70 static void ExchangeUpdates(DijkstraContext &ctx);
71 static DijkstraContext InitializeLocalData(int vertices, int size, int rank, int source);
72 static bool FindLocalBestVertex(DijkstraContext &ctx, DistVertexPair &local_best);
73 static void ProcessGlobalVertex(const DistVertexPair &global_best, const GraphData &graph, DijkstraContext &ctx,
74 int rank, int size);
75 static bool PerformDijkstraIteration(const GraphData &graph, DijkstraContext &ctx, int rank, int size);
76 static void RunDijkstraAlgorithm(const GraphData &graph, DijkstraContext &ctx, int rank, int size);
77 void CollectResults(const GraphData &graph, const DijkstraContext &ctx, int rank, int size);
78 };
79 } // namespace olesnitskiy_v_dijkstra_crs
80