Skip to content
Snippets Groups Projects
Commit 96b18fba authored by Mael Madon's avatar Mael Madon
Browse files

changed formatting, remove profiles from user json files, prepare template ReplayUserReconfig

parent 08327b1d
Branches
Tags
1 merge request!1User aware schedulers and cloud broker done
...@@ -42,7 +42,7 @@ BreakConstructorInitializersBeforeComma: false ...@@ -42,7 +42,7 @@ BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeComma BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true BreakStringLiterals: true
ColumnLimit: 120 ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:' CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false ConstructorInitializerAllOnOneLineOrOnePerLine: false
......
...@@ -15,8 +15,8 @@ double User::next_submission() ...@@ -15,8 +15,8 @@ double User::next_submission()
return date_of_next_submission; return date_of_next_submission;
} }
DichoIntersubmitTimeUser::DichoIntersubmitTimeUser( DichoIntersubmitTimeUser::DichoIntersubmitTimeUser(std::string name,
std::string name, double first_submit, double date_end_submit, double initial_delay) double first_submit, double date_end_submit, double initial_delay)
{ {
user_name = name; user_name = name;
date_of_next_submission = first_submit; date_of_next_submission = first_submit;
...@@ -24,14 +24,19 @@ DichoIntersubmitTimeUser::DichoIntersubmitTimeUser( ...@@ -24,14 +24,19 @@ DichoIntersubmitTimeUser::DichoIntersubmitTimeUser(
delay_sup = initial_delay; delay_sup = initial_delay;
} }
DichoIntersubmitTimeUser::DichoIntersubmitTimeUser(std::string name, const rapidjson::Value &param) DichoIntersubmitTimeUser::DichoIntersubmitTimeUser(
std::string name, const rapidjson::Value &param)
{ {
PPK_ASSERT_ERROR( PPK_ASSERT_ERROR(param.HasMember("first_sumbit")
param.HasMember("first_sumbit") && param.HasMember("end_submit") && param.HasMember("initial_delay"), && param.HasMember("end_submit")
"Invalid user_description file: wrong 'param' for user %s", name.c_str()); && param.HasMember("initial_delay"),
PPK_ASSERT_ERROR( "Invalid user_description file: wrong 'param' for user %s",
param["first_sumbit"].IsDouble() && param["end_submit"].IsDouble() && param["initial_delay"].IsDouble(), name.c_str());
"Invalid user_description file: wrong type in 'param' for user %s", name.c_str()); PPK_ASSERT_ERROR(param["first_sumbit"].IsDouble()
&& param["end_submit"].IsDouble()
&& param["initial_delay"].IsDouble(),
"Invalid user_description file: wrong type in 'param' for user %s",
name.c_str());
user_name = name; user_name = name;
date_of_next_submission = param["first_sumbit"].GetDouble(); date_of_next_submission = param["first_sumbit"].GetDouble();
...@@ -43,13 +48,15 @@ DichoIntersubmitTimeUser::~DichoIntersubmitTimeUser() ...@@ -43,13 +48,15 @@ DichoIntersubmitTimeUser::~DichoIntersubmitTimeUser()
{ {
} }
void DichoIntersubmitTimeUser::jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles) void DichoIntersubmitTimeUser::jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles)
{ {
jobs = std::list<Job *>(); jobs = std::list<Job *>();
/* The last job is still running */ /* The last job is still running */
if (last_job_submitted != nullptr if (last_job_submitted != nullptr
&& (last_job_submitted->status == WAITING || last_job_submitted->status == RUNNING)) && (last_job_submitted->status == WAITING
|| last_job_submitted->status == RUNNING))
{ {
delay_inf = date - last_job_submitted->submission_time; delay_inf = date - last_job_submitted->submission_time;
// let's wait a big longer // let's wait a big longer
...@@ -97,7 +104,8 @@ std::list<Profile *> DichoIntersubmitTimeUser::job_profiles_used() ...@@ -97,7 +104,8 @@ std::list<Profile *> DichoIntersubmitTimeUser::job_profiles_used()
Profile *profile0 = new Profile(); Profile *profile0 = new Profile();
profile0->workload_name = user_name; profile0->workload_name = user_name;
profile0->name = "100_sec"; profile0->name = "100_sec";
profile0->description = "{\"com\": 0.0, \"cpu\": " + std::to_string(100 * platform_computing_speed) profile0->description = "{\"com\": 0.0, \"cpu\": "
+ std::to_string(100 * platform_computing_speed)
+ ", \"type\": \"parallel_homogeneous\"}"; + ", \"type\": \"parallel_homogeneous\"}";
profiles.push_back(profile0); profiles.push_back(profile0);
...@@ -105,8 +113,8 @@ std::list<Profile *> DichoIntersubmitTimeUser::job_profiles_used() ...@@ -105,8 +113,8 @@ std::list<Profile *> DichoIntersubmitTimeUser::job_profiles_used()
return profiles; return profiles;
} }
RoutineGreedyUser::RoutineGreedyUser( RoutineGreedyUser::RoutineGreedyUser(std::string name, double date_first_submit,
std::string name, double date_first_submit, double date_end_submit, double delay_between_sumbit, int initial_nb_job) double date_end_submit, double delay_between_sumbit, int initial_nb_job)
{ {
user_name = name; user_name = name;
date_of_next_submission = date_first_submit; date_of_next_submission = date_first_submit;
...@@ -115,14 +123,21 @@ RoutineGreedyUser::RoutineGreedyUser( ...@@ -115,14 +123,21 @@ RoutineGreedyUser::RoutineGreedyUser(
nb_jobs_to_submit = initial_nb_job; nb_jobs_to_submit = initial_nb_job;
} }
RoutineGreedyUser::RoutineGreedyUser(std::string name, const rapidjson::Value &param) RoutineGreedyUser::RoutineGreedyUser(
std::string name, const rapidjson::Value &param)
{ {
PPK_ASSERT_ERROR(param.HasMember("first_sumbit") && param.HasMember("end_submit") PPK_ASSERT_ERROR(param.HasMember("first_sumbit")
&& param.HasMember("delay_between_sumbit") && param.HasMember("initial_nb_job"), && param.HasMember("end_submit")
"Invalid user_description file: wrong 'param' for user %s", name.c_str()); && param.HasMember("delay_between_sumbit")
PPK_ASSERT_ERROR(param["first_sumbit"].IsDouble() && param["end_submit"].IsDouble() && param.HasMember("initial_nb_job"),
&& param["delay_between_sumbit"].IsDouble() && param["initial_nb_job"].IsInt(), "Invalid user_description file: wrong 'param' for user %s",
"Invalid user_description file: wrong type in 'param' for user %s", name.c_str()); name.c_str());
PPK_ASSERT_ERROR(param["first_sumbit"].IsDouble()
&& param["end_submit"].IsDouble()
&& param["delay_between_sumbit"].IsDouble()
&& param["initial_nb_job"].IsInt(),
"Invalid user_description file: wrong type in 'param' for user %s",
name.c_str());
user_name = name; user_name = name;
date_of_next_submission = param["first_sumbit"].GetDouble(); date_of_next_submission = param["first_sumbit"].GetDouble();
...@@ -139,13 +154,15 @@ bool RoutineGreedyUser::all_jobs_finished() ...@@ -139,13 +154,15 @@ bool RoutineGreedyUser::all_jobs_finished()
{ {
for (Job *job : last_jobs_submitted) for (Job *job : last_jobs_submitted)
{ {
if (job->status == WAITING || job->status == RUNNING || job->status == KILLED) if (job->status == WAITING || job->status == RUNNING
|| job->status == KILLED)
return false; return false;
} }
return true; return true;
} }
void RoutineGreedyUser::jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles) void RoutineGreedyUser::jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles)
{ {
jobs = std::list<Job *>(); jobs = std::list<Job *>();
profiles = std::list<Profile *>(); profiles = std::list<Profile *>();
...@@ -159,7 +176,8 @@ void RoutineGreedyUser::jobs_to_submit(double date, std::list<Job *> &jobs, std: ...@@ -159,7 +176,8 @@ void RoutineGreedyUser::jobs_to_submit(double date, std::list<Job *> &jobs, std:
/* All job finished: submit twice as many jobs */ /* All job finished: submit twice as many jobs */
else if (all_jobs_finished()) else if (all_jobs_finished())
nb_jobs_to_submit = (nb_jobs_to_submit == 0) ? 1 : nb_jobs_to_submit * 2; nb_jobs_to_submit
= (nb_jobs_to_submit == 0) ? 1 : nb_jobs_to_submit * 2;
/* Otherwise sumbit half as many jobs (rounded down) */ /* Otherwise sumbit half as many jobs (rounded down) */
else else
...@@ -194,7 +212,8 @@ std::list<Profile *> RoutineGreedyUser::job_profiles_used() ...@@ -194,7 +212,8 @@ std::list<Profile *> RoutineGreedyUser::job_profiles_used()
Profile *profile0 = new Profile(); Profile *profile0 = new Profile();
profile0->workload_name = user_name; profile0->workload_name = user_name;
profile0->name = "100_sec"; profile0->name = "100_sec";
profile0->description = "{\"com\": 0.0, \"cpu\": " + std::to_string(100 * platform_computing_speed) profile0->description = "{\"com\": 0.0, \"cpu\": "
+ std::to_string(100 * platform_computing_speed)
+ ", \"type\": \"parallel_homogeneous\"}"; + ", \"type\": \"parallel_homogeneous\"}";
profiles.push_back(profile0); profiles.push_back(profile0);
...@@ -202,13 +221,17 @@ std::list<Profile *> RoutineGreedyUser::job_profiles_used() ...@@ -202,13 +221,17 @@ std::list<Profile *> RoutineGreedyUser::job_profiles_used()
return profiles; return profiles;
} }
ReplayUserRigid::ReplayUserRigid(std::string name, const rapidjson::Value &param) ReplayUserRigid::ReplayUserRigid(
std::string name, const rapidjson::Value &param)
{ {
PPK_ASSERT_ERROR(param.HasMember("input_json"), PPK_ASSERT_ERROR(param.HasMember("input_json"),
"Invalid user_description file: wrong 'param' for user %s, there should be an 'input_json' field", "Invalid user_description file: wrong 'param' for user %s, there "
"should be an 'input_json' field",
name.c_str()); name.c_str());
PPK_ASSERT_ERROR(param["input_json"].IsString(), PPK_ASSERT_ERROR(param["input_json"].IsString(),
"Invalid user_description file: 'input_json' should be a string for user %s", name.c_str()); "Invalid user_description file: 'input_json' should be a string for "
"user %s",
name.c_str());
user_name = name; user_name = name;
input_json = param["input_json"].GetString(); input_json = param["input_json"].GetString();
...@@ -226,18 +249,23 @@ ReplayUserRigid::~ReplayUserRigid() ...@@ -226,18 +249,23 @@ ReplayUserRigid::~ReplayUserRigid()
delete original_trace; delete original_trace;
} }
void ReplayUserRigid::jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles) void ReplayUserRigid::jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles)
{ {
jobs = std::list<Job *>(); jobs = std::list<Job *>();
profiles = std::list<Profile *>(); profiles = std::list<Profile *>();
PPK_ASSERT_ERROR( PPK_ASSERT_ERROR(!original_trace->is_empty(),
!original_trace->is_empty(), "User %s has been called to sumbit but her job queue is empty", user_name.c_str()); "User %s has been called to sumbit but her job queue is empty",
user_name.c_str());
PPK_ASSERT_ERROR(original_trace->first_job()->submission_time <= date, PPK_ASSERT_ERROR(original_trace->first_job()->submission_time <= date,
"First job in user %s's queue has greater sumbmission time than current date", user_name.c_str()); "First job in user %s's queue has greater sumbmission time than "
"current date",
user_name.c_str());
/* Submit all jobs that have same submit time */ /* Submit all jobs that have same submit time */
while (!original_trace->is_empty() && original_trace->first_job()->submission_time <= date) while (!original_trace->is_empty()
&& original_trace->first_job()->submission_time <= date)
{ {
/* Cast const Job * into Job * */ /* Cast const Job * into Job * */
Job *job = new Job(*original_trace->first_job()); Job *job = new Job(*original_trace->first_job());
...@@ -265,22 +293,45 @@ Profile *ReplayUserRigid::build_profile(std::string profile_name) ...@@ -265,22 +293,45 @@ Profile *ReplayUserRigid::build_profile(std::string profile_name)
profile->workload_name = user_name; profile->workload_name = user_name;
profile->name = profile_name; profile->name = profile_name;
double duration = std::stod(profile_name); double duration = std::stod(profile_name);
profile->description = "{\"com\": 0.0, \"cpu\": " + std::to_string(duration * platform_computing_speed) profile->description = "{\"com\": 0.0, \"cpu\": "
+ std::to_string(duration * platform_computing_speed)
+ ", \"type\": \"parallel_homogeneous\"}"; + ", \"type\": \"parallel_homogeneous\"}";
return profile; return profile;
} }
ReplayUserReconfig::ReplayUserReconfig(std::string name, const rapidjson::Value &param) ReplayUserReconfig::ReplayUserReconfig(
std::string name, const rapidjson::Value &param)
{ {
PPK_ASSERT_ERROR(param.HasMember("input_json"), PPK_ASSERT_ERROR(param.HasMember("input_json"),
"Invalid user_description file: wrong 'param' for user %s, there should be an 'input_json' field", "Invalid user_description file: wrong 'param' for user %s, there "
"should be an 'input_json' field",
name.c_str()); name.c_str());
PPK_ASSERT_ERROR(param["input_json"].IsString(), PPK_ASSERT_ERROR(param["input_json"].IsString(),
"Invalid user_description file: 'input_json' should be a string for user %s", name.c_str()); "Invalid user_description file: 'input_json' should be a string for "
"user %s",
name.c_str());
PPK_ASSERT_ERROR(param.HasMember("big_medium_little"),
"Invalid user_description file: wrong 'param' for user %s, there "
"should be an 'big_medium_little' field",
name.c_str());
PPK_ASSERT_ERROR(param["big_medium_little"].IsArray()
&& param["big_medium_little"].GetArray().Size() == 3,
"Invalid user_description file for user %s: 'big_medium_little' should "
"be an array of size 3",
name.c_str());
user_name = name; user_name = name;
input_json = param["input_json"].GetString(); input_json = param["input_json"].GetString();
auto bml = param["big_medium_little"].GetArray().begin();
big = (bml++)->GetDouble();
medium = (bml++)->GetDouble();
little = bml->GetDouble();
PPK_ASSERT_ERROR(big + medium + little == 1.0,
"Invalid user_description file for user %s: the sum of "
"'big_medium_little' should be 1.0.",
name.c_str());
/* open the input file and import the workload */ /* open the input file and import the workload */
original_trace = Parser::job_queue_from_input_json(user_name, input_json); original_trace = Parser::job_queue_from_input_json(user_name, input_json);
...@@ -288,8 +339,6 @@ ReplayUserReconfig::ReplayUserReconfig(std::string name, const rapidjson::Value ...@@ -288,8 +339,6 @@ ReplayUserReconfig::ReplayUserReconfig(std::string name, const rapidjson::Value
date_of_next_submission = -1; date_of_next_submission = -1;
else else
date_of_next_submission = original_trace->first_job()->submission_time; date_of_next_submission = original_trace->first_job()->submission_time;
// TODO : initialize other stuff...
} }
ReplayUserReconfig::~ReplayUserReconfig() ReplayUserReconfig::~ReplayUserReconfig()
...@@ -303,7 +352,8 @@ ReplayUserReconfig::~ReplayUserReconfig() ...@@ -303,7 +352,8 @@ ReplayUserReconfig::~ReplayUserReconfig()
// return Parser::profile_list_from_input_json(user_name, input_json); // return Parser::profile_list_from_input_json(user_name, input_json);
// } // }
void ReplayUserReconfig::jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles) void ReplayUserReconfig::jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles)
{ {
// TBD... // TBD...
} }
...@@ -26,7 +26,9 @@ public: ...@@ -26,7 +26,9 @@ public:
* containing a field to check their status. * containing a field to check their status.
* @param[out] profiles The list of profiles used by the jobs, if new. * @param[out] profiles The list of profiles used by the jobs, if new.
*/ */
virtual void jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles) = 0; virtual void jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles)
= 0;
public: public:
std::string user_name; std::string user_name;
...@@ -34,7 +36,7 @@ public: ...@@ -34,7 +36,7 @@ public:
protected: protected:
double date_of_next_submission; double date_of_next_submission;
double end_submit; double end_submit;
//TODO retrieve that info from the platform (wait batsim5.0) // TODO retrieve that info from the platform (wait batsim5.0)
double platform_computing_speed = 11.77e9; double platform_computing_speed = 11.77e9;
}; };
...@@ -64,11 +66,13 @@ public: ...@@ -64,11 +66,13 @@ public:
class DichoIntersubmitTimeUser : public User class DichoIntersubmitTimeUser : public User
{ {
public: public:
DichoIntersubmitTimeUser(std::string name, double date_first_submit, double date_end_submit, double initial_delay); DichoIntersubmitTimeUser(std::string name, double date_first_submit,
double date_end_submit, double initial_delay);
DichoIntersubmitTimeUser(std::string name, const rapidjson::Value &param); DichoIntersubmitTimeUser(std::string name, const rapidjson::Value &param);
~DichoIntersubmitTimeUser(); ~DichoIntersubmitTimeUser();
double next_submission(); double next_submission();
void jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles); void jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles);
protected: protected:
std::list<Profile *> job_profiles_used(); std::list<Profile *> job_profiles_used();
...@@ -89,12 +93,14 @@ private: ...@@ -89,12 +93,14 @@ private:
class RoutineGreedyUser : public User class RoutineGreedyUser : public User
{ {
public: public:
RoutineGreedyUser(std::string name, double date_first_submit, double date_end_submit, double delay_between_sumbit, RoutineGreedyUser(std::string name, double date_first_submit,
double date_end_submit, double delay_between_sumbit,
int initial_nb_job); int initial_nb_job);
RoutineGreedyUser(std::string name, const rapidjson::Value &param); RoutineGreedyUser(std::string name, const rapidjson::Value &param);
~RoutineGreedyUser(); ~RoutineGreedyUser();
double next_submission(); double next_submission();
void jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles); void jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles);
protected: protected:
std::list<Profile *> job_profiles_used(); std::list<Profile *> job_profiles_used();
...@@ -120,18 +126,23 @@ public: ...@@ -120,18 +126,23 @@ public:
ReplayUserRigid(std::string name, const rapidjson::Value &param); ReplayUserRigid(std::string name, const rapidjson::Value &param);
~ReplayUserRigid(); ~ReplayUserRigid();
double next_submission(); double next_submission();
void jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles); void jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles);
private: private:
std::string input_json; std::string input_json;
Queue *original_trace; Queue *original_trace;
/* Keep track of already sent profiles */ /* Keep track of already sent profiles */
std::set<std::string> sent_profiles; std::set<std::string> sent_profiles;
Profile * build_profile(std::string profile_name); Profile *build_profile(std::string profile_name);
}; };
/** /**
* * @brief The user follows the same submission times as in the input trace but
* sometimes resizing the jobs (ie changing the number of cores allocated).
* @details The user is given as input a tuple big_medium_little representing
* the proportion of jobs to run with original size (big), with half (medium)
* and a quarter (little) of the original size. Achieved by random drawing.
*/ */
class ReplayUserReconfig : public User class ReplayUserReconfig : public User
{ {
...@@ -139,10 +150,17 @@ public: ...@@ -139,10 +150,17 @@ public:
ReplayUserReconfig(std::string name, const rapidjson::Value &param); ReplayUserReconfig(std::string name, const rapidjson::Value &param);
~ReplayUserReconfig(); ~ReplayUserReconfig();
double next_submission(); double next_submission();
void jobs_to_submit(double date, std::list<Job *> &jobs, std::list<Profile *> &profiles); void jobs_to_submit(
double date, std::list<Job *> &jobs, std::list<Profile *> &profiles);
private: private:
std::string input_json; std::string input_json;
Queue *original_trace; Queue *original_trace;
double big, medium, little;
std::set<std::string> sent_profiles; std::set<std::string> sent_profiles;
}; Profile *build_profile(std::string profile_name);
\ No newline at end of file };
/**
* hey test loooooooooooooooooooooooooooooooooooooooooooooong comment what
* happened when we go over */
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"core_limit_per_user": 100, // optional, default: infinite "core_limit_per_user": 100, // optional, default: infinite
"users": [ "users": [
{ {
"name": "user1", "name": "bob",
"category": "routine_greedy", "category": "routine_greedy",
"param": { "param": {
"first_sumbit": 0, "first_sumbit": 0,
...@@ -12,13 +12,28 @@ ...@@ -12,13 +12,28 @@
} }
}, },
{ {
"name": "user2", "name": "alice",
"category": "dicho_intersubmission_time", "category": "dicho_intersubmission_time",
"param": { "param": {
"first_sumbit": 0, "first_sumbit": 0,
"end_submit": 10000, "end_submit": 10000,
"initial_delay": 1000 "initial_delay": 1000
} }
},
{
"name": "charly",
"category": "replay_user_rigid",
"param": {
"input_json": "charly.json"
}
},
{
"name": "donella",
"category": "replay_user_reconfig",
"param": {
"input_json": "donella.json",
"big_medium_little": [0.4, 0.4, 0.2]
}
} }
] ]
} }
\ No newline at end of file
...@@ -208,92 +208,5 @@ ...@@ -208,92 +208,5 @@
} }
], ],
"nb_res": 4, "nb_res": 4,
"profiles": {
"210": {
"com": 0.0,
"cpu": 2471700000000.0,
"type": "parallel_homogeneous"
},
"2410": {
"com": 0.0,
"cpu": 28365700000000.0,
"type": "parallel_homogeneous"
},
"290": {
"com": 0.0,
"cpu": 3413300000000.0,
"type": "parallel_homogeneous"
},
"38530": {
"com": 0.0,
"cpu": 453498100000000.0,
"type": "parallel_homogeneous"
},
"38730": {
"com": 0.0,
"cpu": 455852100000000.0,
"type": "parallel_homogeneous"
},
"420": {
"com": 0.0,
"cpu": 4943400000000.0,
"type": "parallel_homogeneous"
},
"450": {
"com": 0.0,
"cpu": 5296500000000.0,
"type": "parallel_homogeneous"
},
"5300": {
"com": 0.0,
"cpu": 62381000000000.0,
"type": "parallel_homogeneous"
},
"550": {
"com": 0.0,
"cpu": 6473500000000.0,
"type": "parallel_homogeneous"
},
"78610": {
"com": 0.0,
"cpu": 925239700000000.0,
"type": "parallel_homogeneous"
},
"79440": {
"com": 0.0,
"cpu": 935008800000000.0,
"type": "parallel_homogeneous"
},
"79590": {
"com": 0.0,
"cpu": 936774300000000.0,
"type": "parallel_homogeneous"
},
"81540": {
"com": 0.0,
"cpu": 959725800000000.0,
"type": "parallel_homogeneous"
},
"86120": {
"com": 0.0,
"cpu": 1013632400000000.0,
"type": "parallel_homogeneous"
},
"86130": {
"com": 0.0,
"cpu": 1013750100000000.0,
"type": "parallel_homogeneous"
},
"86140": {
"com": 0.0,
"cpu": 1013867800000000.0,
"type": "parallel_homogeneous"
},
"920": {
"com": 0.0,
"cpu": 10828400000000.0,
"type": "parallel_homogeneous"
}
},
"version": 0 "version": 0
} }
\ No newline at end of file
...@@ -54,42 +54,5 @@ ...@@ -54,42 +54,5 @@
} }
], ],
"nb_res": 4, "nb_res": 4,
"profiles": {
"18080": {
"com": 0.0,
"cpu": 212801600000000.0,
"type": "parallel_homogeneous"
},
"19250": {
"com": 0.0,
"cpu": 226572500000000.0,
"type": "parallel_homogeneous"
},
"19990": {
"com": 0.0,
"cpu": 235282300000000.0,
"type": "parallel_homogeneous"
},
"20310": {
"com": 0.0,
"cpu": 239048700000000.0,
"type": "parallel_homogeneous"
},
"22450": {
"com": 0.0,
"cpu": 264236500000000.0,
"type": "parallel_homogeneous"
},
"22700": {
"com": 0.0,
"cpu": 267179000000000.0,
"type": "parallel_homogeneous"
},
"23550": {
"com": 0.0,
"cpu": 277183500000000.0,
"type": "parallel_homogeneous"
}
},
"version": 0 "version": 0
} }
\ No newline at end of file
This diff is collapsed.
...@@ -40,27 +40,5 @@ ...@@ -40,27 +40,5 @@
} }
], ],
"nb_res": 4, "nb_res": 4,
"profiles": {
"10": {
"com": 0.0,
"cpu": 117700000000.0,
"type": "parallel_homogeneous"
},
"520": {
"com": 0.0,
"cpu": 6120400000000.0,
"type": "parallel_homogeneous"
},
"580": {
"com": 0.0,
"cpu": 6826600000000.0,
"type": "parallel_homogeneous"
},
"60": {
"com": 0.0,
"cpu": 706200000000.0,
"type": "parallel_homogeneous"
}
},
"version": 0 "version": 0
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment