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

daisytuner / docc / 30661007288

31 Jul 2026 07:56PM UTC coverage: 64.808% (+0.002%) from 64.806%
30661007288

Pull #926

github

web-flow
Merge cf1e45cc7 into 60edac6b5
Pull Request #926: Adds optional session management to remote tuning

6 of 7 new or added lines in 1 file covered. (85.71%)

45599 of 70360 relevant lines covered (64.81%)

723.21 hits per line

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

86.21
/sdfg/src/codegen/instrumentation/instrumentation_plan.cpp
1
#include "sdfg/codegen/instrumentation/instrumentation_plan.h"
2
#include <iostream>
3
#include <memory>
4
#include <string>
5
#include <utility>
6

7
#include "sdfg/analysis/analysis.h"
8
#include "sdfg/analysis/loop_analysis.h"
9
#include "sdfg/codegen/language_extension.h"
10
#include "sdfg/element.h"
11
#include "sdfg/symbolic/symbolic.h"
12

13
namespace sdfg {
14
namespace codegen {
15

16
bool InstrumentationPlan::should_instrument(const Element& node) const { return this->nodes_.count(&node); }
74✔
17

18
void InstrumentationPlan::begin_instrumentation(
19
    const Element& node, PrettyPrinter& stream, LanguageExtension& language_extension, const InstrumentationInfo& info
20
) const {
1✔
21
    auto& metadata = sdfg_.metadata();
1✔
22
    std::string sdfg_name = sdfg_.name();
1✔
23

24
    std::string sdfg_file;
1✔
25
    if (auto it = metadata.find("sdfg_file"); it != metadata.end()) {
1✔
26
        sdfg_file = it->second;
×
27
    } else {
1✔
28
        sdfg_file = "";
1✔
29
    }
1✔
30

31
    std::string arg_capture_path;
1✔
32
    if (auto it = metadata.find("arg_capture_path"); it != metadata.end()) {
1✔
33
        arg_capture_path = it->second;
×
34
    } else {
1✔
35
        arg_capture_path = "";
1✔
36
    }
1✔
37

38
    std::string features_file;
1✔
39
    if (auto it = metadata.find("features_file"); it != metadata.end()) {
1✔
40
        features_file = it->second;
×
41
    } else {
1✔
42
        features_file = "";
1✔
43
    }
1✔
44

45
    std::string opt_report_file;
1✔
46
    if (auto it = metadata.find("opt_report_file"); it != metadata.end()) {
1✔
47
        opt_report_file = it->second;
×
48
    } else {
1✔
49
        opt_report_file = "";
1✔
50
    }
1✔
51

52
    std::string transfer_tuning_session_id;
1✔
53
    if (auto it = metadata.find("transfer_tuning_session_id"); it != metadata.end()) {
1✔
NEW
54
        transfer_tuning_session_id = it->second;
×
55
    } else {
1✔
56
        transfer_tuning_session_id = "";
1✔
57
    }
1✔
58

59

60
    std::string region_uuid = sdfg_name + "_" + std::to_string(node.element_id());
1✔
61

62
    // Create region id variable
63
    std::string region_id_var = sdfg_name + "_" + std::to_string(node.element_id()) + "_id";
1✔
64

65
    // Create metadata variable
66
    std::string metadata_var = sdfg_name + "_" + std::to_string(node.element_id()) + "_md";
1✔
67
    stream << "__daisy_metadata_t " << metadata_var << ";" << std::endl;
1✔
68

69
    // Source metadata
70
    auto& dbg_info = node.debug_info();
1✔
71
    stream << metadata_var << ".file_name = \"" << dbg_info.filename() << "\";" << std::endl;
1✔
72
    stream << metadata_var << ".function_name = \"" << dbg_info.function() << "\";" << std::endl;
1✔
73
    stream << metadata_var << ".line_begin = " << dbg_info.start_line() << ";" << std::endl;
1✔
74
    stream << metadata_var << ".line_end = " << dbg_info.end_line() << ";" << std::endl;
1✔
75
    stream << metadata_var << ".column_begin = " << dbg_info.start_column() << ";" << std::endl;
1✔
76
    stream << metadata_var << ".column_end = " << dbg_info.end_column() << ";" << std::endl;
1✔
77

78
    // DOCC Metadata
79
    stream << metadata_var << ".sdfg_name = \"" << sdfg_name << "\";" << std::endl;
1✔
80
    stream << metadata_var << ".sdfg_file = \"" << sdfg_file << "\";" << std::endl;
1✔
81
    stream << metadata_var << ".arg_capture_path = \"" << arg_capture_path << "\";" << std::endl;
1✔
82
    stream << metadata_var << ".features_file = \"" << features_file << "\";" << std::endl;
1✔
83
    stream << metadata_var << ".opt_report_file = \"" << opt_report_file << "\";" << std::endl;
1✔
84

85
    // Element metadata
86
    stream << metadata_var << ".element_id = " << info.element_id() << ";" << std::endl;
1✔
87
    stream << metadata_var << ".element_type = \"" << info.element_desc() << "\";" << std::endl;
1✔
88
    stream << metadata_var << ".target_type = \"" << info.target_type().value() << "\";" << std::endl;
1✔
89

90
    // Loop info metadata
91
    stream << metadata_var << ".loopnest_index = " << info.loop_info().loopnest_index << ";" << std::endl;
1✔
92
    stream << metadata_var << ".num_loops = " << info.loop_info().num_loops << ";" << std::endl;
1✔
93
    stream << metadata_var << ".num_maps = " << info.loop_info().num_maps << ";" << std::endl;
1✔
94
    stream << metadata_var << ".num_fors = " << info.loop_info().num_fors << ";" << std::endl;
1✔
95
    stream << metadata_var << ".num_whiles = " << info.loop_info().num_whiles << ";" << std::endl;
1✔
96
    stream << metadata_var << ".max_depth = " << info.loop_info().max_depth << ";" << std::endl;
1✔
97
    stream << metadata_var << ".is_perfectly_nested = " << (info.loop_info().is_perfectly_nested ? "1" : "0") << ";"
1✔
98
           << std::endl;
1✔
99
    stream << metadata_var << ".is_perfectly_parallel = " << (info.loop_info().is_perfectly_parallel ? "1" : "0") << ";"
1✔
100
           << std::endl;
1✔
101
    stream << metadata_var << ".is_elementwise = " << (info.loop_info().is_elementwise ? "1" : "0") << ";" << std::endl;
1✔
102
    stream << metadata_var << ".has_side_effects = " << (info.loop_info().has_side_effects ? "1" : "0") << ";"
1✔
103
           << std::endl;
1✔
104

105
    stream << metadata_var << ".region_uuid = \"" << region_uuid << "\";" << std::endl;
1✔
106

107
    stream << metadata_var << ".transfer_tuning_session_id = \"" << transfer_tuning_session_id << "\";" << std::endl;
1✔
108

109
    // Initialize region
110
    switch (info.event_type()) {
1✔
111
        case InstrumentationEventType::CPU: {
1✔
112
            stream << "long long " << region_id_var << " = __daisy_instrumentation_init(&" << metadata_var
1✔
113
                   << ", __DAISY_EVENT_SET_CPU);" << std::endl;
1✔
114
            break;
1✔
115
        }
×
116
        case InstrumentationEventType::CUDA: {
×
117
            stream << "long long " << region_id_var << " = __daisy_instrumentation_init(&" << metadata_var
×
118
                   << ", __DAISY_EVENT_SET_CUDA);" << std::endl;
×
119
            break;
×
120
        }
×
121
        case InstrumentationEventType::NONE: {
×
122
            stream << "long long " << region_id_var << " = __daisy_instrumentation_init(&" << metadata_var
×
123
                   << ", __DAISY_EVENT_SET_NONE);" << std::endl;
×
124
            break;
×
125
        }
×
126
    }
1✔
127

128
    // Enter region
129
    stream << "__daisy_instrumentation_enter(" << region_id_var << ");" << std::endl;
1✔
130
}
1✔
131

132
void InstrumentationPlan::end_instrumentation(
133
    const Element& node, PrettyPrinter& stream, LanguageExtension& language_extension, const InstrumentationInfo& info
134
) const {
1✔
135
    std::string region_id_var = sdfg_.name() + "_" + std::to_string(node.element_id()) + "_id";
1✔
136

137
    // Exit region
138
    switch (info.event_type()) {
1✔
139
        case InstrumentationEventType::CPU:
1✔
140
        case InstrumentationEventType::CUDA:
1✔
141
        case InstrumentationEventType::NONE:
1✔
142
            stream << "__daisy_instrumentation_exit(" << region_id_var << ");" << std::endl;
1✔
143
            break;
1✔
144
    }
1✔
145

146
    for (auto entry : info.metrics()) {
1✔
147
        stream << "__daisy_instrumentation_metric(" << region_id_var << ", \"" << entry.first << "\", " << entry.second
1✔
148
               << ");" << std::endl;
1✔
149
    }
1✔
150

151
    // Finalize region
152
    stream << "__daisy_instrumentation_finalize(" << region_id_var << ");" << std::endl;
1✔
153
}
1✔
154

155
std::unique_ptr<InstrumentationPlan> InstrumentationPlan::none(StructuredSDFG& sdfg) {
63✔
156
    return std::make_unique<InstrumentationPlan>(sdfg, std::unordered_set<const Element*>{});
63✔
157
}
63✔
158

159
std::unique_ptr<InstrumentationPlan> InstrumentationPlan::outermost_loops_plan(StructuredSDFG& sdfg) {
1✔
160
    analysis::AnalysisManager analysis_manager(sdfg);
1✔
161
    auto& loop_tree_analysis = analysis_manager.get<analysis::LoopAnalysis>();
1✔
162
    auto ols = loop_tree_analysis.outermost_loops();
1✔
163

164
    std::unordered_set<const Element*> nodes;
1✔
165
    for (size_t i = 0; i < ols.size(); i++) {
2✔
166
        nodes.insert(ols[i]);
1✔
167
    }
1✔
168

169
    DEBUG_PRINTLN("Created instrumentation plan for " << nodes.size() << " nodes.");
1✔
170
    return std::make_unique<InstrumentationPlan>(sdfg, nodes);
1✔
171
}
1✔
172

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

© 2026 Coveralls, Inc