in analysis/fct_analysis.cpp [73:135]
int main(int argc, char* argv[]){
parse_opt(argc, argv);
vector<vector<double> > res;
if (steps.size() > 0){
for (auto p : steps)
res.push_back(vector<double> (1, p.second / 100.));
}else{
for (int p = 0; p < 100; p += step)
res.push_back(vector<double> (1, (p+step) / 100.));
}
for (int i = 0; i < cc.size(); i++){
string c = cc[i];
vector<pair<uint32_t, float> > tuples;
FILE* file = fopen(("../simulation/mix/"+prefix+"_"+c+".txt").c_str(), "r");
uint16_t port;
uint32_t size;
uint64_t start_time, fct, standalone_fct;
while (fscanf(file, "%*s%*s%*s%hu%u%lu%lu%lu", &port, &size, &start_time, &fct, &standalone_fct) != EOF){
if (((port == 100 && !(type & 1)) || (port == 200 && type > 0)) && start_time + fct < time_limit){
float slowdown = double(fct) / standalone_fct;
tuples.push_back(make_pair(size, slowdown < 1 ? 1.0 : slowdown));
}
}
fclose(file);
sort(tuples.begin(), tuples.end(), compare);
if (steps.size() > 0){
uint64_t l = 0, r = 0;
int i = 0;
for (auto p : steps){
while (r < tuples.size() && tuples[r].first <= p.first)
r++;
sort(tuples.begin() + l, tuples.begin() + r, compare_second);
res[i].push_back(p.first);
res[i].push_back(tuples[l + uint64_t((r-l)*0.5)].second);
res[i].push_back(tuples[l + uint64_t((r-l)*0.95)].second);
res[i].push_back(tuples[l + uint64_t((r-l)*0.99)].second);
l = r;
i++;
}
}else{
for (int p = 0; p < 100; p += step){
uint64_t l = p * tuples.size() / 100;
uint64_t r = (p + step) * tuples.size() / 100;
uint32_t largest_size = tuples[r-1].first;
sort(tuples.begin() + l, tuples.begin() + r, compare_second);
res[p / step].push_back(largest_size);
res[p / step].push_back(tuples[l + uint64_t((r-l)*0.5)].second);
res[p / step].push_back(tuples[l + uint64_t((r-l)*0.95)].second);
res[p / step].push_back(tuples[l + uint64_t((r-l)*0.99)].second);
}
}
}
for (int i = 0; i < res.size(); i++){
printf("%.6lf %.0lf", res[i][0], res[i][1]);
for (int j = 0; j < cc.size(); j++)
printf("\t%.3f %.3f %.3f", res[i][j*4 + 2], res[i][j*4+3], res[i][j*4+4]);
printf("\n");
}
return 0;
}