Skip to content

Commit db8276a

Browse files
committed
Unified sync_param method for HBOS and sstd, implementation now in base class
Fixed error HbosParam::update where internal params were not being correctly updated
1 parent 8614909 commit db8276a

4 files changed

Lines changed: 40 additions & 70 deletions

File tree

include/chimbuko/ad/ADOutlier.hpp

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,12 @@ namespace chimbuko {
9292
const unsigned long func_id, std::vector<CallListIterator_t>& data) = 0;
9393

9494
/**
95-
* @brief abstract method to update local parameters and get global ones
95+
* @brief synchronize local parameters with global parameters
9696
*
9797
* @param[in] param local parameters
9898
* @return std::pair<size_t, size_t> [sent, recv] message size
9999
*/
100-
virtual std::pair<size_t, size_t> sync_param(ParamInterface const* param) = 0;
100+
virtual std::pair<size_t, size_t> sync_param(ParamInterface const* param);
101101

102102

103103
/**
@@ -170,13 +170,6 @@ namespace chimbuko {
170170
unsigned long compute_outliers(Anomalies &outliers,
171171
const unsigned long func_id, std::vector<CallListIterator_t>& data) override;
172172

173-
174-
/**
175-
* @brief Send the local statistics to the parameter server and update the stored global parameters with the resulting updated statistics
176-
* @param param The local statistics
177-
*/
178-
std::pair<size_t, size_t> sync_param(ParamInterface const* param) override;
179-
180173
/**
181174
* @brief Compute the anomaly score (probability) for an event assuming a Gaussian distribution
182175
*/
@@ -232,13 +225,6 @@ namespace chimbuko {
232225
unsigned long compute_outliers(Anomalies &outliers,
233226
const unsigned long func_id, std::vector<CallListIterator_t>& data) override;
234227

235-
236-
/**
237-
* @brief Send the local statistics to the parameter server and update the stored global parameters with the resulting updated statistics
238-
* @param param The local statistics
239-
*/
240-
std::pair<size_t, size_t> sync_param(ParamInterface const* param) override;
241-
242228
/**
243229
* @brief Scott's rule for bin_width estimation during histogram formation
244230
*/

src/ad/ADOutlier.cpp

Lines changed: 23 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,29 @@ double ADOutlier::getStatisticValue(const ExecData_t &e) const{
5454
}
5555
}
5656

57+
std::pair<size_t,size_t> ADOutlier::sync_param(ParamInterface const* param)
58+
{
59+
if (!m_use_ps) {
60+
verboseStream << "m_use_ps not USED!" << std::endl;
61+
m_param->update(param->serialize());
62+
return std::make_pair(0, 0);
63+
}
64+
else {
65+
Message msg;
66+
msg.set_info(m_net_client->get_client_rank(), m_net_client->get_server_rank(), MessageType::REQ_ADD, MessageKind::PARAMETERS);
67+
msg.set_msg(param->serialize(), false);
68+
size_t sent_sz = msg.size();
69+
70+
m_net_client->send_and_receive(msg, msg);
71+
size_t recv_sz = msg.size();
72+
m_param->assign(msg.buf());
73+
return std::make_pair(sent_sz, recv_sz);
74+
}
75+
}
76+
77+
78+
79+
5780
/* ---------------------------------------------------------------------------
5881
* Implementation of ADOutlierSSTD class
5982
* --------------------------------------------------------------------------- */
@@ -64,28 +87,6 @@ ADOutlierSSTD::ADOutlierSSTD(OutlierStatistic stat, double sigma) : ADOutlier(st
6487
ADOutlierSSTD::~ADOutlierSSTD() {
6588
}
6689

67-
std::pair<size_t,size_t> ADOutlierSSTD::sync_param(ParamInterface const* param)
68-
{
69-
SstdParam& g = *(SstdParam*)m_param; //global parameter set
70-
const SstdParam & l = *(SstdParam const*)param; //local parameter set
71-
72-
if (!m_use_ps) {
73-
g.update(l);
74-
return std::make_pair(0, 0);
75-
}
76-
else {
77-
Message msg;
78-
msg.set_info(m_net_client->get_client_rank(), m_net_client->get_server_rank(), MessageType::REQ_ADD, MessageKind::PARAMETERS);
79-
msg.set_msg(l.serialize(), false);
80-
size_t sent_sz = msg.size();
81-
82-
m_net_client->send_and_receive(msg, msg);
83-
size_t recv_sz = msg.size();
84-
g.assign(msg.buf());
85-
return std::make_pair(sent_sz, recv_sz);
86-
}
87-
}
88-
8990
Anomalies ADOutlierSSTD::run(int step) {
9091
Anomalies outliers;
9192
if (m_execDataMap == nullptr) return outliers;
@@ -217,29 +218,6 @@ ADOutlierHBOS::~ADOutlierHBOS() {
217218
m_param->clear();
218219
}
219220

220-
std::pair<size_t,size_t> ADOutlierHBOS::sync_param(ParamInterface const* param)
221-
{
222-
HbosParam& g = *(HbosParam*)m_param; //global parameter set
223-
const HbosParam & l = *(HbosParam const*)param; //local parameter set
224-
225-
if (!m_use_ps) {
226-
verboseStream << "m_use_ps not USED!" << std::endl;
227-
g.update(l);
228-
return std::make_pair(0, 0);
229-
}
230-
else {
231-
Message msg;
232-
msg.set_info(m_net_client->get_client_rank(), m_net_client->get_server_rank(), MessageType::REQ_ADD, MessageKind::PARAMETERS);
233-
msg.set_msg(l.serialize(), false);
234-
size_t sent_sz = msg.size();
235-
236-
m_net_client->send_and_receive(msg, msg);
237-
size_t recv_sz = msg.size();
238-
g.assign(msg.buf());
239-
return std::make_pair(sent_sz, recv_sz);
240-
}
241-
}
242-
243221
Anomalies ADOutlierHBOS::run(int step) {
244222
Anomalies outliers;
245223
if (m_execDataMap == nullptr) return outliers;

src/param/hbos_param.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,14 @@ using namespace chimbuko;
9494
std::string HbosParam::update(const std::string& parameters, bool return_update)
9595
{
9696
std::unordered_map<unsigned long, Histogram> hbosstats;
97-
9897
deserialize_cerealpb(parameters, hbosstats);
99-
update_and_return(hbosstats); //update hbosstats to reflect changes
100-
101-
return (return_update) ? serialize_cerealpb(hbosstats): "";
98+
if(return_update){
99+
update_and_return(hbosstats); //update hbosstats to reflect changes
100+
return serialize_cerealpb(hbosstats);
101+
}else{
102+
update(hbosstats);
103+
return "";
104+
}
102105
}
103106

104107
void HbosParam::update(const std::unordered_map<unsigned long, Histogram>& hbosstats)
@@ -113,7 +116,7 @@ using namespace chimbuko;
113116
{
114117
std::lock_guard<std::mutex> _(m_mutex);
115118
for (auto& pair: hbosstats) {
116-
hbosstats[pair.first] += pair.second;
119+
m_hbosstats[pair.first] += pair.second;
117120
pair.second = hbosstats[pair.first];
118121
}
119122

src/param/sstd_param.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,14 @@ void SstdParam::deserialize_cerealpb(const std::string& parameters, std::unorde
7676
std::string SstdParam::update(const std::string& parameters, bool return_update)
7777
{
7878
std::unordered_map<unsigned long, RunStats> runstats;
79-
8079
deserialize_cerealpb(parameters, runstats);
81-
update_and_return(runstats); //update runstats to reflect changes
82-
83-
return (return_update) ? serialize_cerealpb(runstats): "";
80+
if(return_update){
81+
update_and_return(runstats); //update runstats to reflect changes
82+
return serialize_cerealpb(runstats);
83+
}else{
84+
update(runstats);
85+
return "";
86+
}
8487
}
8588

8689
void SstdParam::assign(const std::unordered_map<unsigned long, RunStats>& runstats)

0 commit comments

Comments
 (0)