+ return (pimpl_->surf_action_ == nullptr) ? -1 : pimpl_->surf_action_->get_start_time();
+}
+double Exec::get_finish_time() const
+{
+ return (pimpl_->surf_action_ == nullptr) ? -1 : pimpl_->surf_action_->get_finish_time();
+}
+double Exec::get_cost() const
+{
+ return (pimpl_->surf_action_ == nullptr) ? -1 : pimpl_->surf_action_->get_cost();
+}
+
+/** @brief Change the execution priority, don't you think?
+ *
+ * An execution with twice the priority will get twice the amount of flops when the resource is shared.
+ * The default priority is 1.
+ *
+ * Currently, this cannot be changed once the exec started. */
+ExecPtr Exec::set_priority(double priority)
+{
+ xbt_assert(state_ == State::INITED, "Cannot change the priority of an exec after its start");
+ priority_ = priority;
+ return this;
+}
+
+///////////// SEQUENTIAL EXECUTIONS ////////
+ExecSeq::ExecSeq(sg_host_t host, double flops_amount) : Exec(), flops_amount_(flops_amount)
+{
+ Activity::set_remaining(flops_amount_);
+ boost::static_pointer_cast<kernel::activity::ExecImpl>(pimpl_)->set_host(host);
+}
+
+Exec* ExecSeq::start()
+{
+ kernel::actor::simcall([this] {
+ (*boost::static_pointer_cast<kernel::activity::ExecImpl>(pimpl_))
+ .set_name(get_name())
+ .set_tracing_category(get_tracing_category())
+ .set_sharing_penalty(1. / priority_)
+ .set_bound(bound_)
+ .set_flops_amount(flops_amount_)
+ .start();
+ });
+ state_ = State::STARTED;
+ on_start(*Actor::self(), *this);
+ return this;
+}
+
+/** @brief Returns whether the state of the exec is finished */
+/** @brief Change the host on which this activity takes place.
+ *
+ * The activity cannot be terminated already (but it may be started). */
+ExecPtr ExecSeq::set_host(Host* host)
+{
+ xbt_assert(state_ == State::INITED || state_ == State::STARTED,