• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

daisytuner / docc / 23434578971

23 Mar 2026 11:14AM UTC coverage: 63.82% (-0.3%) from 64.115%
23434578971

Pull #503

github

web-flow
Merge 3b8191db4 into 3f0642c14
Pull Request #503: Added pass and pipeline statistics

16 of 217 new or added lines in 4 files covered. (7.37%)

1 existing line in 1 file now uncovered.

26420 of 41398 relevant lines covered (63.82%)

397.84 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/sdfg/src/passes/statistics.cpp
1
#include "sdfg/passes/statistics.h"
2

3
#include <algorithm>
4
#include <cstdint>
5
#include <sstream>
6
#include <string>
7
#include <tuple>
8
#include <vector>
9

10
namespace sdfg {
11
namespace passes {
12

NEW
13
void PassStatistics::add_sdfg_pass(const std::string& name, uint64_t milliseconds) {
×
NEW
14
    if (!sdfg_count_.contains(name)) {
×
NEW
15
        sdfg_count_.insert({name, 1});
×
NEW
16
    } else {
×
NEW
17
        sdfg_count_[name]++;
×
NEW
18
    }
×
NEW
19
    if (!sdfg_time_.contains(name)) {
×
NEW
20
        sdfg_time_.insert({name, milliseconds});
×
NEW
21
    } else {
×
NEW
22
        sdfg_time_[name] += milliseconds;
×
NEW
23
    }
×
NEW
24
}
×
25

NEW
26
void PassStatistics::add_structured_sdfg_pass(const std::string& name, uint64_t milliseconds) {
×
NEW
27
    if (!structured_sdfg_count_.contains(name)) {
×
NEW
28
        structured_sdfg_count_.insert({name, 1});
×
NEW
29
    } else {
×
NEW
30
        structured_sdfg_count_[name]++;
×
NEW
31
    }
×
NEW
32
    if (!structured_sdfg_time_.contains(name)) {
×
NEW
33
        structured_sdfg_time_.insert({name, milliseconds});
×
NEW
34
    } else {
×
NEW
35
        structured_sdfg_time_[name] += milliseconds;
×
NEW
36
    }
×
NEW
37
}
×
38

NEW
39
std::string PassStatistics::summary() {
×
NEW
40
    if (sdfg_count_.empty() && structured_sdfg_count_.empty()) {
×
NEW
41
        return "";
×
NEW
42
    }
×
43

NEW
44
    auto compare_data_fn = [](const std::tuple<std::string, uint64_t, uint64_t>& a,
×
NEW
45
                              const std::tuple<std::string, uint64_t, uint64_t>& b) {
×
NEW
46
        auto [a_name, a_count, a_milliseconds] = a;
×
NEW
47
        auto [b_name, b_count, b_milliseconds] = b;
×
NEW
48
        return a_milliseconds > b_milliseconds || (a_milliseconds == b_milliseconds && a_count > b_count) ||
×
NEW
49
               (a_milliseconds == b_milliseconds && a_count == b_count && a_name < b_name);
×
NEW
50
    };
×
NEW
51
    std::stringstream stream;
×
NEW
52
    stream << "Pass Statistics:" << std::endl;
×
53

NEW
54
    std::vector<std::tuple<std::string, uint64_t, uint64_t>> sdfg_data;
×
NEW
55
    uint64_t sdfg_time_sum = 0;
×
NEW
56
    for (auto [name, count] : sdfg_count_) {
×
NEW
57
        if (sdfg_time_.contains(name)) {
×
NEW
58
            auto milliseconds = sdfg_time_[name];
×
NEW
59
            sdfg_data.push_back({name, count, milliseconds});
×
NEW
60
            sdfg_time_sum += milliseconds;
×
NEW
61
        }
×
NEW
62
    }
×
NEW
63
    std::sort(sdfg_data.begin(), sdfg_data.end(), compare_data_fn);
×
64

NEW
65
    if (!sdfg_data.empty()) {
×
NEW
66
        stream << "  SDFG Passes: " << sdfg_time_sum << " ms" << std::endl;
×
NEW
67
        for (auto [name, count, milliseconds] : sdfg_data) {
×
NEW
68
            stream << "    " << milliseconds << " ms  " << count << "  " << name << std::endl;
×
NEW
69
        }
×
NEW
70
    }
×
71

NEW
72
    std::vector<std::tuple<std::string, uint64_t, uint64_t>> structured_sdfg_data;
×
NEW
73
    uint64_t structured_sdfg_time_sum = 0;
×
NEW
74
    for (auto [name, count] : structured_sdfg_count_) {
×
NEW
75
        if (structured_sdfg_time_.contains(name)) {
×
NEW
76
            auto milliseconds = structured_sdfg_time_[name];
×
NEW
77
            structured_sdfg_data.push_back({name, count, milliseconds});
×
NEW
78
            structured_sdfg_time_sum += milliseconds;
×
NEW
79
        }
×
NEW
80
    }
×
NEW
81
    std::sort(structured_sdfg_data.begin(), structured_sdfg_data.end(), compare_data_fn);
×
82

NEW
83
    if (!structured_sdfg_data.empty()) {
×
NEW
84
        stream << "  Structured SDFG Passes: " << structured_sdfg_time_sum << " ms" << std::endl;
×
NEW
85
        for (auto [name, count, milliseconds] : structured_sdfg_data) {
×
NEW
86
            stream << "    " << milliseconds << " ms  " << count << "  " << name << std::endl;
×
NEW
87
        }
×
NEW
88
    }
×
89

NEW
90
    return stream.str();
×
NEW
91
}
×
92

NEW
93
void PipelineStatistics::add_sdfg_pipeline(const std::string& name, uint64_t milliseconds) {
×
NEW
94
    if (!sdfg_count_.contains(name)) {
×
NEW
95
        sdfg_count_.insert({name, 1});
×
NEW
96
    } else {
×
NEW
97
        sdfg_count_[name]++;
×
NEW
98
    }
×
NEW
99
    if (!sdfg_time_.contains(name)) {
×
NEW
100
        sdfg_time_.insert({name, milliseconds});
×
NEW
101
    } else {
×
NEW
102
        sdfg_time_[name] += milliseconds;
×
NEW
103
    }
×
NEW
104
}
×
105

NEW
106
void PipelineStatistics::add_structured_sdfg_pipeline(const std::string& name, uint64_t milliseconds) {
×
NEW
107
    if (!structured_sdfg_count_.contains(name)) {
×
NEW
108
        structured_sdfg_count_.insert({name, 1});
×
NEW
109
    } else {
×
NEW
110
        structured_sdfg_count_[name]++;
×
NEW
111
    }
×
NEW
112
    if (!structured_sdfg_time_.contains(name)) {
×
NEW
113
        structured_sdfg_time_.insert({name, milliseconds});
×
NEW
114
    } else {
×
NEW
115
        structured_sdfg_time_[name] += milliseconds;
×
NEW
116
    }
×
NEW
117
}
×
118

NEW
119
std::string PipelineStatistics::summary() {
×
NEW
120
    if (sdfg_count_.empty() && structured_sdfg_count_.empty()) {
×
NEW
121
        return "";
×
NEW
122
    }
×
123

NEW
124
    auto compare_data_fn = [](const std::tuple<std::string, uint64_t, uint64_t>& a,
×
NEW
125
                              const std::tuple<std::string, uint64_t, uint64_t>& b) {
×
NEW
126
        auto [a_name, a_count, a_milliseconds] = a;
×
NEW
127
        auto [b_name, b_count, b_milliseconds] = b;
×
NEW
128
        return a_milliseconds > b_milliseconds || (a_milliseconds == b_milliseconds && a_count > b_count) ||
×
NEW
129
               (a_milliseconds == b_milliseconds && a_count == b_count && a_name < b_name);
×
NEW
130
    };
×
NEW
131
    std::stringstream stream;
×
NEW
132
    stream << "Pipeline Statistics:" << std::endl;
×
133

NEW
134
    std::vector<std::tuple<std::string, uint64_t, uint64_t>> sdfg_data;
×
NEW
135
    uint64_t sdfg_time_sum = 0;
×
NEW
136
    for (auto [name, count] : sdfg_count_) {
×
NEW
137
        if (sdfg_time_.contains(name)) {
×
NEW
138
            auto milliseconds = sdfg_time_[name];
×
NEW
139
            sdfg_data.push_back({name, count, milliseconds});
×
NEW
140
            sdfg_time_sum += milliseconds;
×
NEW
141
        }
×
NEW
142
    }
×
NEW
143
    std::sort(sdfg_data.begin(), sdfg_data.end(), compare_data_fn);
×
144

NEW
145
    if (!sdfg_data.empty()) {
×
NEW
146
        stream << "  SDFG Pipelines: " << sdfg_time_sum << " ms" << std::endl;
×
NEW
147
        for (auto [name, count, milliseconds] : sdfg_data) {
×
NEW
148
            stream << "    " << milliseconds << " ms  " << count << "  " << name << std::endl;
×
NEW
149
        }
×
NEW
150
    }
×
151

NEW
152
    std::vector<std::tuple<std::string, uint64_t, uint64_t>> structured_sdfg_data;
×
NEW
153
    uint64_t structured_sdfg_time_sum = 0;
×
NEW
154
    for (auto [name, count] : structured_sdfg_count_) {
×
NEW
155
        if (structured_sdfg_time_.contains(name)) {
×
NEW
156
            auto milliseconds = structured_sdfg_time_[name];
×
NEW
157
            structured_sdfg_data.push_back({name, count, milliseconds});
×
NEW
158
            structured_sdfg_time_sum += milliseconds;
×
NEW
159
        }
×
NEW
160
    }
×
NEW
161
    std::sort(structured_sdfg_data.begin(), structured_sdfg_data.end(), compare_data_fn);
×
162

NEW
163
    if (!structured_sdfg_data.empty()) {
×
NEW
164
        stream << "  Structured SDFG Pipelines: " << structured_sdfg_time_sum << " ms" << std::endl;
×
NEW
165
        for (auto [name, count, milliseconds] : structured_sdfg_data) {
×
NEW
166
            stream << "    " << milliseconds << " ms  " << count << "  " << name << std::endl;
×
NEW
167
        }
×
NEW
168
    }
×
169

NEW
170
    return stream.str();
×
NEW
171
}
×
172

173
} // namespace passes
174
} // namespace sdfg
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc