*
* \endrst
*/
-XBT_PUBLIC void parallel_execute(std::vector<s4u::Host*> hosts, std::vector<double> flops_amounts,
- std::vector<double> bytes_amounts);
+XBT_PUBLIC void parallel_execute(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
+ const std::vector<double>& bytes_amounts);
/** \rst
* Block the current actor until the built :ref:`parallel execution <API_s4u_parallel_execute>` completes, or until the
* timeout. \endrst
*/
-XBT_PUBLIC void parallel_execute(std::vector<s4u::Host*> hosts, std::vector<double> flops_amounts,
- std::vector<double> bytes_amounts, double timeout);
+XBT_PUBLIC void parallel_execute(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
+ const std::vector<double>& bytes_amounts, double timeout);
#ifndef DOXYGEN
XBT_ATTRIB_DEPRECATED_v325("Please use std::vectors as parameters") XBT_PUBLIC
- void parallel_execute(int host_nb, s4u::Host** host_list, double* flops_amount, double* bytes_amount);
+ void parallel_execute(int host_nb, s4u::Host* const* host_list, const double* flops_amount,
+ const double* bytes_amount);
XBT_ATTRIB_DEPRECATED_v325("Please use std::vectors as parameters") XBT_PUBLIC
- void parallel_execute(int host_nb, s4u::Host** host_list, double* flops_amount, double* bytes_amount,
- double timeout);
+ void parallel_execute(int host_nb, s4u::Host* const* host_list, const double* flops_amount,
+ const double* bytes_amount, double timeout);
#endif
XBT_PUBLIC ExecPtr exec_init(double flops_amounts);
/******************************* Host simcalls ********************************/
#ifdef __cplusplus
-XBT_PUBLIC smx_activity_t simcall_execution_parallel_start(std::string name, int host_nb, sg_host_t* host_list,
- double* flops_amount, double* bytes_amount, double rate,
- double timeout);
+XBT_PUBLIC smx_activity_t simcall_execution_parallel_start(const std::string& name, int host_nb,
+ const sg_host_t* host_list, const double* flops_amount,
+ const double* bytes_amount, double rate, double timeout);
#endif
XBT_PUBLIC e_smx_state_t simcall_execution_wait(smx_activity_t execution);
XBT_PUBLIC e_smx_state_t simcall_execution_test(smx_activity_t execution);
exec_init(flops)->set_priority(priority)->start()->wait();
}
-void parallel_execute(std::vector<s4u::Host*> hosts, std::vector<double> flops_amounts,
- std::vector<double> bytes_amounts)
+void parallel_execute(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
+ const std::vector<double>& bytes_amounts)
{
parallel_execute(hosts, flops_amounts, bytes_amounts, -1);
}
-void parallel_execute(std::vector<s4u::Host*> hosts, std::vector<double> flops_amounts,
- std::vector<double> bytes_amounts, double timeout)
+void parallel_execute(const std::vector<s4u::Host*>& hosts, const std::vector<double>& flops_amounts,
+ const std::vector<double>& bytes_amounts, double timeout)
{
xbt_assert(hosts.size() > 0, "Your parallel executions must span over at least one host.");
xbt_assert(hosts.size() == flops_amounts.size() || flops_amounts.empty(),
}
// deprecated
-void parallel_execute(int host_nb, s4u::Host** host_list, double* flops_amount, double* bytes_amount, double timeout)
+void parallel_execute(int host_nb, s4u::Host* const* host_list, const double* flops_amount, const double* bytes_amount,
+ double timeout)
{
smx_activity_t s =
simcall_execution_parallel_start("", host_nb, host_list, flops_amount, bytes_amount, /* rate */ -1, timeout);
}
// deprecated
-void parallel_execute(int host_nb, sg_host_t* host_list, double* flops_amount, double* bytes_amount)
+void parallel_execute(int host_nb, s4u::Host* const* host_list, const double* flops_amount, const double* bytes_amount)
{
smx_activity_t s = simcall_execution_parallel_start("", host_nb, host_list, flops_amount, bytes_amount,
/* rate */ -1, /*timeout*/ -1);
* @param timeout timeout
* @return A new SIMIX execution synchronization
*/
-smx_activity_t simcall_execution_parallel_start(std::string name, int host_nb, sg_host_t* host_list,
- double* flops_amount, double* bytes_amount, double rate, double timeout)
+smx_activity_t simcall_execution_parallel_start(const std::string& name, int host_nb, const sg_host_t* host_list,
+ const double* flops_amount, const double* bytes_amount, double rate,
+ double timeout)
{
/* checking for infinite values */
for (int i = 0 ; i < host_nb ; ++i) {
return host->get_cname();
}
-simgrid::kernel::activity::ExecImplPtr SIMIX_execution_parallel_start(std::string name, int host_nb,
- sg_host_t* host_list, double* flops_amount,
- double* bytes_amount, double rate, double timeout)
+simgrid::kernel::activity::ExecImplPtr
+SIMIX_execution_parallel_start(std::string name, int host_nb, const sg_host_t* host_list, const double* flops_amount,
+ const double* bytes_amount, double rate, double timeout)
{
/* Check that we are not mixing VMs and PMs in the parallel task */
XBT_PRIVATE void SIMIX_execution_finish(smx_activity_t synchro);
XBT_PRIVATE simgrid::kernel::activity::ExecImplPtr
-SIMIX_execution_parallel_start(std::string name, int host_nb, sg_host_t* host_list, double* flops_amount,
- double* bytes_amount, double rate, double timeout);
+SIMIX_execution_parallel_start(std::string name, int host_nb, const sg_host_t* host_list, const double* flops_amount,
+ const double* bytes_amount, double rate, double timeout);
#endif
*********/
/* Helper function for executeParallelTask */
-static inline double has_cost(double* array, size_t pos)
+static inline double has_cost(const double* array, size_t pos)
{
if (array)
return array[pos];
return -1.0;
}
-kernel::resource::Action* HostModel::execute_parallel(size_t host_nb, s4u::Host** host_list, double* flops_amount,
- double* bytes_amount, double rate)
+kernel::resource::Action* HostModel::execute_parallel(size_t host_nb, s4u::Host* const* host_list,
+ const double* flops_amount, const double* bytes_amount,
+ double rate)
{
kernel::resource::Action* action = nullptr;
if ((host_nb == 1) && (has_cost(bytes_amount, 0) <= 0) && (has_cost(flops_amount, 0) > 0)) {
public:
HostModel() : Model(Model::UpdateAlgo::FULL) {}
- virtual kernel::resource::Action* execute_parallel(size_t host_nb, sg_host_t* host_list, double* flops_amount,
- double* bytes_amount, double rate);
+ virtual kernel::resource::Action* execute_parallel(size_t host_nb, s4u::Host* const* host_list,
+ const double* flops_amount, const double* bytes_amount,
+ double rate);
};
/************
}
}
-kernel::resource::Action* HostL07Model::execute_parallel(size_t host_nb, sg_host_t* host_list, double* flops_amount,
- double* bytes_amount, double rate)
+kernel::resource::Action* HostL07Model::execute_parallel(size_t host_nb, s4u::Host* const* host_list,
+ const double* flops_amount, const double* bytes_amount,
+ double rate)
{
return new L07Action(this, host_nb, host_list, flops_amount, bytes_amount, rate);
}
-L07Action::L07Action(kernel::resource::Model* model, size_t host_nb, sg_host_t* host_list, double* flops_amount,
- double* bytes_amount, double rate)
+L07Action::L07Action(kernel::resource::Model* model, size_t host_nb, s4u::Host* const* host_list,
+ const double* flops_amount, const double* bytes_amount, double rate)
: CpuAction(model, 1, 0), computationAmount_(flops_amount), communicationAmount_(bytes_amount), rate_(rate)
{
size_t link_nb = 0;
double next_occuring_event(double now) override;
void update_actions_state(double now, double delta) override;
- kernel::resource::Action* execute_parallel(size_t host_nb, sg_host_t* host_list, double* flops_amount,
- double* bytes_amount, double rate) override;
+ kernel::resource::Action* execute_parallel(size_t host_nb, s4u::Host* const* host_list, const double* flops_amount,
+ const double* bytes_amount, double rate) override;
};
class CpuL07Model : public CpuModel {
class L07Action : public CpuAction {
friend Action *CpuL07::execution_start(double size);
friend Action *CpuL07::sleep(double duration);
- friend Action* HostL07Model::execute_parallel(size_t host_nb, sg_host_t* host_list, double* flops_amount,
- double* bytes_amount, double rate);
+ friend Action* HostL07Model::execute_parallel(size_t host_nb, s4u::Host* const* host_list, const double* flops_amount,
+ const double* bytes_amount, double rate);
friend Action* NetworkL07Model::communicate(s4u::Host* src, s4u::Host* dst, double size, double rate);
public:
- L07Action(kernel::resource::Model* model, size_t host_nb, sg_host_t* host_list, double* flops_amount,
- double* bytes_amount, double rate);
+ L07Action(kernel::resource::Model* model, size_t host_nb, s4u::Host* const* host_list, const double* flops_amount,
+ const double* bytes_amount, double rate);
~L07Action();
void updateBound();
std::vector<s4u::Host*> hostList_;
- double* computationAmount_; /* pointer to the data that lives in s4u action -- do not free unless if free_arrays */
- double* communicationAmount_; /* pointer to the data that lives in s4u action -- do not free unless if free_arrays */
+ const double* computationAmount_; /* pointer to the data that lives in s4u action -- do not free unless if
+ * free_arrays */
+ const double* communicationAmount_; /* pointer to the data that lives in s4u action -- do not free unless if
+ * free_arrays */
double latency_;
double rate_;