- smx_synchro_t synchro = (smx_synchro_t) xbt_mallocator_get(simix_global->synchro_mallocator);
- synchro->type = SIMIX_SYNC_PARALLEL_EXECUTE;
- synchro->name = xbt_strdup(name);
- synchro->state = SIMIX_RUNNING;
- synchro->execution.host = NULL; /* FIXME: do we need the list of hosts? */
- synchro->category = NULL;
-
- /* set surf's synchro */
- host_list_cpy = xbt_new0(sg_host_t, host_nb);
- for (i = 0; i < host_nb; i++)
- host_list_cpy[i] = host_list[i];
-
-
- /* FIXME: what happens if host_list contains VMs and PMs. If
- * execute_parallel_task() does not change the state of the model, we can mix
- * them. */
- surf_host_model_t ws_model =
- host_list[0]->extension<simgrid::surf::Host>()->getModel();
- for (i = 1; i < host_nb; i++) {
- surf_host_model_t ws_model_tmp =
- host_list[i]->extension<simgrid::surf::Host>()->getModel();
- if (ws_model_tmp != ws_model) {
- XBT_CRITICAL("mixing VMs and PMs is not supported");
- DIE_IMPOSSIBLE;
- }
+ simgrid::kernel::activity::ExecImplPtr exec =
+ simgrid::kernel::activity::ExecImplPtr(new simgrid::kernel::activity::ExecImpl(name, nullptr));
+
+ /* Check that we are not mixing VMs and PMs in the parallel task */
+ bool is_a_vm = (nullptr != dynamic_cast<simgrid::s4u::VirtualMachine*>(host_list[0]));
+ for (int i = 1; i < host_nb; i++) {
+ bool tmp_is_a_vm = (nullptr != dynamic_cast<simgrid::s4u::VirtualMachine*>(host_list[i]));
+ xbt_assert(is_a_vm == tmp_is_a_vm, "parallel_execute: mixing VMs and PMs is not supported (yet).");