+
+static void update_action_bound(surf_action_workstation_L07_t action)
+{
+ int workstation_nb = action->workstation_nb;
+ double lat_current = 0.0;
+ double lat_bound = -1.0;
+ int i, j, k;
+
+ for (i = 0; i < workstation_nb; i++) {
+ for (j = 0; j < workstation_nb; j++) {
+ cpu_L07_t card_src = action->workstation_list[i];
+ cpu_L07_t card_dst = action->workstation_list[j];
+ int route_size = ROUTE(card_src->id, card_dst->id).size;
+ network_link_L07_t *route = ROUTE(card_src->id, card_dst->id).links;
+ double lat = 0.0;
+
+ if (action->communication_amount[i * workstation_nb + j] > 0) {
+ for (k = 0; k < route_size; k++) {
+ lat += route[k]->lat_current;
+ xbt_dict_set(parallel_task_network_link_set, route[k]->name,
+ route[k], NULL);
+ }
+ lat_current=MAX(lat_current,lat/action->communication_amount[i * workstation_nb + j]);
+ }
+ }
+ }
+ lat_bound = SG_TCP_CTE_GAMMA / (2.0 * lat_current);
+ DEBUG2("action (%p) : lat_bound = %g", action, lat_bound);
+ if ((action->latency == 0.0) && (action->suspended == 0)) {
+ if (action->rate < 0)
+ lmm_update_variable_bound(ptask_maxmin_system, action->variable,
+ lat_bound);
+ else
+ lmm_update_variable_bound(ptask_maxmin_system, action->variable,
+ min(action->rate,lat_bound));
+ }
+}
+