Halide 14.0.0
Halide compiler and libraries
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 "Weights.h"
6#include <string>
7
8namespace Halide {
9
11private:
12 Internal::Weights weights;
13 Runtime::Buffer<float> schedule_feat_queue, pipeline_feat_queue, costs;
15 int cursor, num_stages, num_cores;
16
17 const std::string weights_in_path, weights_out_path;
18 const bool randomize_weights;
19
21 head1_filter_update, head1_bias_update,
22 head2_filter_update, head2_bias_update,
23 conv1_filter_update, conv1_bias_update;
24 int timestep = 0;
25
26public:
27 DefaultCostModel(const std::string &weights_in_path,
28 const std::string &weights_out_path,
29 bool randomize_weights)
30 : weights_in_path(weights_in_path),
31 weights_out_path(weights_out_path),
32 randomize_weights(randomize_weights) {
33
35 }
36 ~DefaultCostModel() override = default;
37
38 // Configure the cost model for the algorithm to be scheduled.
40 const MachineParams &params) override;
42
43 // Enqueue a schedule to be evaluated. The second version of this method returns a buffer of
44 // schedule_features that should be filled in by the caller.
47 double *cost_ptr) override;
48 void enqueue(int ns, Runtime::Buffer<float> *schedule_feats, double *cost_ptr);
49
50 // Evaluate all schedules in the queue.
51 void evaluate_costs() override;
52
53 // Discard all schedules in the queue.
54 void reset() override;
55
56 // Update model weights using true measured runtimes.
57 float backprop(const Runtime::Buffer<const float> &true_runtimes, float learning_rate);
58
59 // Save/Load the model weights to/from disk.
62};
63
64std::unique_ptr<DefaultCostModel> make_default_cost_model(const std::string &weights_in_dir = "",
65 const std::string &weights_out_dir = "",
66 bool randomize_weights = false);
67} // namespace Halide
68
69#endif // DEFAULT_COST_MODEL_H
DefaultCostModel(const std::string &weights_in_path, const std::string &weights_out_path, bool randomize_weights)
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 enqueue(const Internal::Autoscheduler::FunctionDAG &dag, const Halide::Internal::Autoscheduler::StageMapOfScheduleFeatures &schedule_feats, double *cost_ptr) override
~DefaultCostModel() override=default
void enqueue(int ns, Runtime::Buffer< float > *schedule_feats, double *cost_ptr)
void evaluate_costs() override
void set_pipeline_features(const Internal::Autoscheduler::FunctionDAG &dag, const MachineParams &params) override
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)
A struct representing the machine parameters to generate the auto-scheduled code for.
Definition: Pipeline.h:33