Halide 19.0.0
Halide compiler and libraries
Loading...
Searching...
No Matches
DefaultCostModel.h
Go to the documentation of this file.
1#ifndef DEFAULT_COST_MODEL_H
2#define DEFAULT_COST_MODEL_H
3
4#include "CostModel.h"
5#include "Statistics.h"
6#include "Weights.h"
7#include <string>
8
9namespace Halide {
10
12private:
13 Internal::Weights weights;
14 Runtime::Buffer<float> schedule_feat_queue, pipeline_feat_queue, costs, costs_per_stage;
16 std::vector<std::vector<double> *> cost_per_stage_ptrs;
17 int cursor, num_stages, num_cores;
18 int batch_id{0};
19
20 const std::string weights_in_path, weights_out_path;
21 const bool randomize_weights;
22
24 head1_filter_update, head1_bias_update,
25 head2_filter_update, head2_bias_update,
26 conv1_filter_update, conv1_bias_update;
27 int timestep = 0;
28
30
31public:
32 DefaultCostModel(const std::string &weights_in_path,
33 const std::string &weights_out_path,
34 bool randomize_weights,
36 : weights_in_path(weights_in_path),
37 weights_out_path(weights_out_path),
38 randomize_weights(randomize_weights),
39 stats{stats} {
41 }
42
43 // Configure the cost model for the algorithm to be scheduled.
45 const Internal::Autoscheduler::Anderson2021Params &params) override;
47
48 // Enqueue a schedule to be evaluated. The second version of this method returns a buffer of
49 // schedule_features that should be filled in by the caller.
52 double *cost_ptr,
53 std::vector<double> *cost_per_stage_ptr) override;
54 void enqueue(int ns, Runtime::Buffer<float> *schedule_feats, double *cost_ptr, std::vector<double> *cost_per_stage_ptr);
55
56 // Evaluate all schedules in the queue.
57 void evaluate_costs() override;
58
59 // Discard all schedules in the queue.
60 void reset() override;
61
62 // Update model weights using true measured runtimes.
63 float backprop(const Runtime::Buffer<const float> &true_runtimes, float learning_rate);
64
65 // Save/Load the model weights to/from disk.
68};
69
70std::unique_ptr<DefaultCostModel> make_default_cost_model(Internal::Autoscheduler::Statistics &stats,
71 const std::string &weights_in_dir = "",
72 const std::string &weights_out_dir = "",
73 bool randomize_weights = false);
74} // namespace Halide
75
76#endif // DEFAULT_COST_MODEL_H
void enqueue(int ns, Runtime::Buffer< float > *schedule_feats, double *cost_ptr, std::vector< double > *cost_per_stage_ptr)
float backprop(const Runtime::Buffer< const float > &true_runtimes, float learning_rate)
void set_pipeline_features(const Runtime::Buffer< float > &, int n)
void reset() override
void evaluate_costs() override
void enqueue(const Internal::Autoscheduler::FunctionDAG &dag, const Halide::Internal::Autoscheduler::StageMapOfScheduleFeatures &schedule_feats, double *cost_ptr, std::vector< double > *cost_per_stage_ptr) override
void set_pipeline_features(const Internal::Autoscheduler::FunctionDAG &dag, const Internal::Autoscheduler::Anderson2021Params &params) override
DefaultCostModel(const std::string &weights_in_path, const std::string &weights_out_path, bool randomize_weights, Internal::Autoscheduler::Statistics &stats)
A templated Buffer class that wraps halide_buffer_t and adds functionality.
This file defines the class FunctionDAG, which is our representation of a Halide pipeline,...
std::unique_ptr< DefaultCostModel > make_default_cost_model(const std::string &weights_in_dir="", const std::string &weights_out_dir="", bool randomize_weights=false)