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

daisytuner / sdfglib / 18161405012

01 Oct 2025 11:59AM UTC coverage: 61.063% (-0.008%) from 61.071%
18161405012

push

github

web-flow
Merge pull request #256 from daisytuner/features-file

Adds features file to rtl metadata

0 of 2 new or added lines in 1 file covered. (0.0%)

9568 of 15669 relevant lines covered (61.06%)

111.22 hits per line

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

7.14
/src/codegen/instrumentation/instrumentation_plan.cpp
1
#include "sdfg/codegen/instrumentation/instrumentation_plan.h"
2

3
#include "sdfg/analysis/loop_analysis.h"
4

5
namespace sdfg {
6
namespace codegen {
7

8
void InstrumentationPlan::update(const structured_control_flow::ControlFlowNode& node, InstrumentationEventType event_type) {
×
9
    this->nodes_[&node] = event_type;
×
10
}
×
11

12
bool InstrumentationPlan::should_instrument(const structured_control_flow::ControlFlowNode& node) const {
46✔
13
    return this->nodes_.count(&node);
46✔
14
}
15

16
void InstrumentationPlan::begin_instrumentation(const structured_control_flow::ControlFlowNode& node, PrettyPrinter& stream)
×
17
    const {
18
    auto& metadata = sdfg_.metadata();
×
19
    std::string sdfg_name = sdfg_.name();
×
20
    std::string sdfg_file = metadata.at("sdfg_file");
×
21
    std::string arg_capture_path = metadata.at("arg_capture_path");
×
NEW
22
    std::string features_file = metadata.at("features_file");
×
23

24
    std::string region_uuid = sdfg_name + "_" + std::to_string(node.element_id());
×
25

26
    // Create region id variable
27
    std::string region_id_var = sdfg_name + "_" + std::to_string(node.element_id()) + "_id";
×
28

29
    // Create metadata variable
30
    std::string metadata_var = sdfg_name + "_" + std::to_string(node.element_id()) + "_md";
×
31
    stream << "__daisy_metadata_t " << metadata_var << ";" << std::endl;
×
32

33
    // Source metadata
34
    auto& dbg_info = node.debug_info();
×
35
    stream << metadata_var << ".file_name = \"" << dbg_info.filename() << "\";" << std::endl;
×
36
    stream << metadata_var << ".function_name = \"" << dbg_info.function() << "\";" << std::endl;
×
37
    stream << metadata_var << ".line_begin = " << dbg_info.start_line() << ";" << std::endl;
×
38
    stream << metadata_var << ".line_end = " << dbg_info.end_line() << ";" << std::endl;
×
39
    stream << metadata_var << ".column_begin = " << dbg_info.start_column() << ";" << std::endl;
×
40
    stream << metadata_var << ".column_end = " << dbg_info.end_column() << ";" << std::endl;
×
41

42
    // Docc metadata
43
    stream << metadata_var << ".sdfg_name = \"" << sdfg_name << "\";" << std::endl;
×
44
    stream << metadata_var << ".sdfg_file = \"" << sdfg_file << "\";" << std::endl;
×
45
    stream << metadata_var << ".arg_capture_path = \"" << arg_capture_path << "\";" << std::endl;
×
NEW
46
    stream << metadata_var << ".features_file = \"" << features_file << "\";" << std::endl;
×
47
    stream << metadata_var << ".element_id = " << node.element_id() << ";" << std::endl;
×
48
    if (!this->loopnest_indices_.empty()) {
×
49
        stream << metadata_var << ".loopnest_index = " << this->loopnest_indices_.at(&node) << ";" << std::endl;
×
50
    } else {
×
51
        stream << metadata_var << ".loopnest_index = -1;" << std::endl;
×
52
    }
53
    stream << metadata_var << ".region_uuid = \"" << region_uuid << "\";" << std::endl;
×
54

55
    // Initialize region
56
    if (this->nodes_.at(&node) == InstrumentationEventType::CPU) {
×
57
        stream << "long long " << region_id_var << " = __daisy_instrumentation_init(&" << metadata_var
×
58
               << ", __DAISY_EVENT_SET_CPU);" << std::endl;
×
59
    } else {
×
60
        stream << "long long " << region_id_var << " = __daisy_instrumentation_init(&" << metadata_var
×
61
               << ", __DAISY_EVENT_SET_CUDA);" << std::endl;
×
62
    }
63

64
    // Enter region
65
    stream << "__daisy_instrumentation_enter(" << region_id_var << ");" << std::endl;
×
66
}
×
67

68
void InstrumentationPlan::end_instrumentation(const structured_control_flow::ControlFlowNode& node, PrettyPrinter& stream)
×
69
    const {
70
    std::string region_id_var = sdfg_.name() + "_" + std::to_string(node.element_id()) + "_id";
×
71

72
    // Exit region
73
    if (this->nodes_.at(&node) == InstrumentationEventType::CPU) {
×
74
        stream << "__daisy_instrumentation_exit(" << region_id_var << ");" << std::endl;
×
75
    } else {
×
76
        stream << "__daisy_instrumentation_exit(" << region_id_var << ");" << std::endl;
×
77
    }
78

79
    // Finalize region
80
    stream << "__daisy_instrumentation_finalize(" << region_id_var << ");" << std::endl;
×
81
}
×
82

83
std::unique_ptr<InstrumentationPlan> InstrumentationPlan::none(StructuredSDFG& sdfg) {
41✔
84
    return std::make_unique<InstrumentationPlan>(
41✔
85
        sdfg, std::unordered_map<const structured_control_flow::ControlFlowNode*, InstrumentationEventType>{}
41✔
86
    );
87
}
×
88

89
std::unique_ptr<InstrumentationPlan> InstrumentationPlan::outermost_loops_plan(StructuredSDFG& sdfg) {
×
90
    analysis::AnalysisManager analysis_manager(sdfg);
×
91
    auto& loop_tree_analysis = analysis_manager.get<analysis::LoopAnalysis>();
×
92
    auto ols = loop_tree_analysis.outermost_loops();
×
93

94
    std::unordered_map<const structured_control_flow::ControlFlowNode*, InstrumentationEventType> nodes;
×
95
    std::unordered_map<const structured_control_flow::ControlFlowNode*, size_t> loopnest_indices;
×
96
    for (size_t i = 0; i < ols.size(); i++) {
×
97
        auto& loop = ols[i];
×
98
        loopnest_indices[loop] = i;
×
99
        if (auto map_node = dynamic_cast<const structured_control_flow::Map*>(loop)) {
×
100
            if (map_node->schedule_type().value() == "CUDA") {
×
101
                nodes.insert({loop, InstrumentationEventType::CUDA});
×
102
                continue;
×
103
            }
104
        }
×
105
        nodes.insert({loop, InstrumentationEventType::CPU}); // Default to CPU if not CUDA
×
106
    }
×
107
    return std::make_unique<InstrumentationPlan>(sdfg, nodes, loopnest_indices);
×
108
}
×
109

110
} // namespace codegen
111
} // 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