Bcp 1.4.4
Loading...
Searching...
No Matches
BCP_process.hpp
Go to the documentation of this file.
1// Copyright (C) 2000, International Business Machines
2// Corporation and others. All Rights Reserved.
3#ifndef _BCP_PROCESS_H
4#define _BCP_PROCESS_H
5
6#if 1
7 #define TMDBG
8 #define LPDBG
9#else
10 #define TMDBG printf("TMDBG: %s:%i\n", __FILE__, __LINE__)
11 #define LPDBG printf("LPDBG: %s:%i\n", __FILE__, __LINE__)
12#endif
13
14class BCP_buffer;
15
17private:
18 const int me;
19 const int parent;
20public:
21 BCP_process(int self, int my_parent) : me(self), parent(my_parent) {}
22 // default copy constructor & assignment operator are OK.
23 virtual ~BCP_process() {}
24 int get_process_id() const { return me; }
25 int get_parent() const { return parent; }
26
28 virtual void process_message() = 0;
29};
30
31//#############################################################################
32
33// (C) 2007 Copyright International Business Machines Corporation
34// All Rights Reserved.
35// This code is published under the Common Public License.
36//
37// Authors :
38// Pierre Bonami, International Business Machines Corporation
39// Andreas Waechter, International Business Machines Corporation
40// Laszlo Ladanyi, International Business Machines Corporation
41//
42// Date : 10/03/2007
43
44#include <map>
45#include <vector>
46#include <cmath>
48
50public:
53
63 void setParams(double OverEstimationStatic,
64 double SwitchToRateThreshold,
65 double TimeRootNodeSolve,
66 double FactorTimeHorizon,
67 double OverEstimationRate,
68 double MaxNodeIdRatio,
69 int MaxNodeIdNum,
70 int MaxSbIdNum,
71 int MinSbIdNum);
72
74 void add_free_ids(int numIds, const int* ids);
81 int request_sb_ids(int numIds, int* ids);
83 void release_sb_id(int id);
84
89 void release_node_id(int id);
91 inline bool has_free_node_id() const {
92 return (!freeIds_.empty() && maxNodeIds_ > numNodeIds_);
93 }
94
95 inline int numNodeIds() const {
96 return numNodeIds_;
97 }
98
99 inline int maxNodeIds() const {
100 return maxNodeIds_;
101 }
102
103 inline double node_idle(int p) {
104 return node_idle_time_[p];
105 }
106
107 inline double sb_idle(int p) {
108 return sb_idle_time_[p];
109 }
110
112
113private:
115 int max_id_allocation(int numIds);
117 void update_rates(int add_req, int add_rel);
118
119private:
121 std::map<int, double> sb_idle_time_;
123 std::map<int, double> node_idle_time_;
125 std::map<int, double> last_release_type_;
127 std::map<int, double> last_release_time_;
129 int totalNumberIds_;
131 std::vector<int> freeIds_;
133 int numNodeIds_;
135 int maxNodeIds_;
136
139 double maxNodeIdRatio_;
142 int maxNodeIdNum_;
145 int maxSbIds_;
148 int minSbIds_;
149
151 double rho_static_;
153 double switch_thresh_;
155 int numSecRateInterval_;
157 std::vector<int> request_counts_;
159 int request_counts_tot_;
161 std::vector<int> release_counts_;
163 int release_counts_tot_;
165 int counts_ptr_;
167 time_t time_last_action_;
169 double rho_rate_;
172 bool static_;
175 bool have_rates_;
176};
177
178#endif
This class describes the message buffer used for all processes of BCP.
virtual BCP_buffer & get_message_buffer()=0
BCP_process(int self, int my_parent)
virtual void process_message()=0
int get_process_id() const
int get_parent() const
virtual ~BCP_process()
double node_idle(int p)
Return how much time did process p spent idling as a node process.
int request_node_id()
Request an id for processing nodes.
bool has_free_node_id() const
Decide if there is an id that can be returned for processin a node.
int numNodeIds() const
Return the number of busy LP processes.
void release_sb_id(int id)
Gives back to scheduler an id used for strong branching.
int maxNodeIds() const
Return the maximum possible number of busy LP processes.
void release_node_id(int id)
Give back an id to scheduler used for processing a node.
void update_idle_times()
Update idle times with the last idle time.
void add_free_ids(int numIds, const int *ids)
Pass in a list of freeIds_ to add.
void setParams(double OverEstimationStatic, double SwitchToRateThreshold, double TimeRootNodeSolve, double FactorTimeHorizon, double OverEstimationRate, double MaxNodeIdRatio, int MaxNodeIdNum, int MaxSbIdNum, int MinSbIdNum)
Method for setting scheduler parameters.
int request_sb_ids(int numIds, int *ids)
Request for a number of id's to do some strong branching.
BCP_scheduler()
Default constructor.
double sb_idle(int p)
Return how much time did process p spent idling as a SB process.