size_t surf_workstation_get_size(surf_resource_t workstation, surf_file_t fd);
surf_action_t surf_workstation_read(surf_resource_t resource, void *ptr, size_t size, surf_file_t fd);
surf_action_t surf_workstation_write(surf_resource_t resource, const void *ptr, size_t size, surf_file_t fd);
-int surf_network_link_is_shared(surf_network_link_t link);
-double surf_network_link_get_bandwidth(surf_network_link_t link);
-double surf_network_link_get_latency(surf_network_link_t link);
+int surf_network_link_is_shared(surf_cpp_resource_t link);
+double surf_network_link_get_bandwidth(surf_cpp_resource_t link);
+double surf_network_link_get_latency(surf_cpp_resource_t link);
void *surf_action_get_data(surf_action_t action);
void surf_action_set_data(surf_action_t action, void *data);
void surf_action_unref(surf_action_t action);
/* connect all traces relative to network */
xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) {
tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- NetworkCm02LinkLmmPtr link = static_cast<NetworkCm02LinkLmmPtr>(
- static_cast<NetworkCm02LinkPtr>(
+ NetworkCm02LinkLmmPtr link = dynamic_cast<NetworkCm02LinkLmmPtr>(
+ static_cast<ResourcePtr>(
xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)));
xbt_assert(link, "Cannot connect trace %s to link %s: link undefined",
xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) {
tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- NetworkCm02LinkLmmPtr link = static_cast<NetworkCm02LinkLmmPtr>(
- static_cast<NetworkCm02LinkPtr>(
+ NetworkCm02LinkLmmPtr link = dynamic_cast<NetworkCm02LinkLmmPtr>(
+ static_cast<ResourcePtr>(
xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)));
xbt_assert(link, "Cannot connect trace %s to link %s: link undefined",
xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) {
tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- NetworkCm02LinkLmmPtr link = static_cast<NetworkCm02LinkLmmPtr>(
- static_cast<NetworkCm02LinkPtr>(
+ NetworkCm02LinkLmmPtr link = dynamic_cast<NetworkCm02LinkLmmPtr>(
+ static_cast<ResourcePtr>(
xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)));
xbt_assert(link, "Cannot connect trace %s to link %s: link undefined",
state_initial, state_trace, bw_initial, bw_trace, lat_initial, lat_trace, policy);
- xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast<NetworkCm02LinkPtr>(nw_link));
+ xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast<ResourcePtr>(nw_link));
XBT_DEBUG("Create link '%s'",name);
return nw_link;
lmm_constraint_t constraint = lmm_get_cnst_from_var(p_maxminSystem,
action->p_variable,
i);
- NetworkCm02LinkPtr link = (NetworkCm02LinkPtr) lmm_constraint_id(constraint);
+ NetworkCm02LinkPtr link = static_cast<NetworkCm02LinkPtr>(lmm_constraint_id(constraint));
TRACE_surf_link_set_utilization(link->m_name,
action->p_category,
(lmm_variable_getvalue(action->p_variable)*
src->p_name, dst->p_name);
xbt_dynar_foreach(route, i, _link) {
- link = static_cast<NetworkCm02LinkLmmPtr>(static_cast<NetworkCm02LinkPtr>(_link));
+ link = dynamic_cast<NetworkCm02LinkLmmPtr>(static_cast<ResourcePtr>(_link));
if (link->p_stateCurrent == SURF_RESOURCE_OFF) {
failed = 1;
break;
if (sg_network_crosstraffic == 1) {
routing_platf->getRouteAndLatency(dst, src, &back_route, NULL);
xbt_dynar_foreach(back_route, i, _link) {
- link = static_cast<NetworkCm02LinkLmmPtr>(static_cast<NetworkCm02LinkPtr>(_link));
+ link = dynamic_cast<NetworkCm02LinkLmmPtr>(static_cast<ResourcePtr>(_link));
if (link->p_stateCurrent == SURF_RESOURCE_OFF) {
failed = 1;
break;
bandwidth_bound = -1.0;
if (sg_weight_S_parameter > 0) {
xbt_dynar_foreach(route, i, _link) {
- link = static_cast<NetworkCm02LinkLmmPtr>(static_cast<NetworkCm02LinkPtr>(_link));
+ link = dynamic_cast<NetworkCm02LinkLmmPtr>(static_cast<ResourcePtr>(_link));
action->m_weight +=
sg_weight_S_parameter /
(link->p_power.peak * link->p_power.scale);
}
}
xbt_dynar_foreach(route, i, _link) {
- link = static_cast<NetworkCm02LinkLmmPtr>(static_cast<NetworkCm02LinkPtr>(_link));
+ link = dynamic_cast<NetworkCm02LinkLmmPtr>(static_cast<ResourcePtr>(_link));
double bb = bandwidthFactor(size) * (link->p_power.peak * link->p_power.scale);
bandwidth_bound =
(bandwidth_bound < 0.0) ? bb : min(bandwidth_bound, bb);
"Using a model with a gap (e.g., SMPI) with a platform without links (e.g. vivaldi)!!!");
//link = *(NetworkCm02LinkLmmPtr *) xbt_dynar_get_ptr(route, 0);
- link = static_cast<NetworkCm02LinkLmmPtr>(*static_cast<NetworkCm02LinkPtr *>(xbt_dynar_get_ptr(route, 0)));
+ link = dynamic_cast<NetworkCm02LinkLmmPtr>(*static_cast<ResourcePtr *>(xbt_dynar_get_ptr(route, 0)));
gapAppend(size, link, action);
XBT_DEBUG("Comm %p: %s -> %s gap=%f (lat=%f)",
action, src->p_name, dst->p_name, action->m_senderGap,
}
xbt_dynar_foreach(route, i, _link) {
- link = static_cast<NetworkCm02LinkLmmPtr>(static_cast<NetworkCm02LinkPtr>(_link));
+ link = dynamic_cast<NetworkCm02LinkLmmPtr>(static_cast<ResourcePtr>(_link));
lmm_expand(p_maxminSystem, link->p_constraint, action->p_variable, 1.0);
}
if (sg_network_crosstraffic == 1) {
XBT_DEBUG("Fullduplex active adding backward flow using 5%%");
xbt_dynar_foreach(back_route, i, _link) {
- link = static_cast<NetworkCm02LinkLmmPtr>(static_cast<NetworkCm02LinkPtr>(_link));
+ link = dynamic_cast<NetworkCm02LinkLmmPtr>(static_cast<ResourcePtr>(_link));
lmm_expand(p_maxminSystem, link->p_constraint, action->p_variable, .05);
}
}
static XBT_INLINE void surf_link_free(void *r)
{
- delete static_cast<NetworkCm02LinkPtr>(r);
+ delete dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(r));
}
static XBT_INLINE void surf_workstation_free(void *r)
}
void surf_as_cluster_set_backbone(AS_t as, void* backbone){
- static_cast<AsClusterPtr>(as)->p_backbone = static_cast<NetworkCm02LinkPtr>(backbone);
+ static_cast<AsClusterPtr>(as)->p_backbone = dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(backbone));
}
const char *surf_model_name(surf_model_t model){
return get_casted_workstation(resource)->write(ptr, size, fd);
}
-int surf_network_link_is_shared(surf_network_link_t link){
- return link->isShared();
+int surf_network_link_is_shared(surf_cpp_resource_t link){
+ return dynamic_cast<NetworkCm02LinkPtr>(link)->isShared();
}
-double surf_network_link_get_bandwidth(surf_network_link_t link){
- return link->getBandwidth();
+double surf_network_link_get_bandwidth(surf_cpp_resource_t link){
+ return dynamic_cast<NetworkCm02LinkPtr>(link)->getBandwidth();
}
-double surf_network_link_get_latency(surf_network_link_t link){
- return link->getLatency();
+double surf_network_link_get_latency(surf_cpp_resource_t link){
+ return dynamic_cast<NetworkCm02LinkPtr>(link)->getLatency();
}
surf_action_t surf_cpu_execute(surf_resource_t cpu, double size){
*/
static void parse_S_host_link(sg_platf_host_link_cbarg_t host)
{
- RoutingEdgePtr info = (RoutingEdgePtr) xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL);
+ RoutingEdgePtr info = static_cast<RoutingEdgePtr>(xbt_lib_get_or_null(host_lib, host->id, ROUTING_HOST_LEVEL));
xbt_assert(info, "Host '%s' not found!", host->id);
xbt_assert(current_routing->p_modelDesc == &routing_models[SURF_MODEL_CLUSTER] ||
current_routing->p_modelDesc == &routing_models[SURF_MODEL_VIVALDI],
if((src->m_id == dst->m_id) && info.loopback_link ){
xbt_dynar_push_as(route->link_list, void *, info.loopback_link);
if (lat)
- *lat += static_cast<NetworkCm02LinkPtr>(info.loopback_link)->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(info.loopback_link))->getLatency();
return;
}
if (info.link_up) { // link up
xbt_dynar_push_as(route->link_list, void *, info.link_up);
if (lat)
- *lat += static_cast<NetworkCm02LinkPtr>(info.link_up)->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(info.link_up))->getLatency();
}
}
if (p_backbone) {
- xbt_dynar_push_as(route->link_list, void *, p_backbone);
+ xbt_dynar_push_as(route->link_list, void *, static_cast<ResourcePtr>(p_backbone));
if (lat)
- *lat += static_cast<NetworkCm02LinkPtr>(p_backbone)->getLatency();
+ *lat += p_backbone->getLatency();
}
if (dst->p_rcType != SURF_NETWORK_ELEMENT_ROUTER) { // No specific link for router
if (info.link_down) { // link down
xbt_dynar_push_as(route->link_list, void *, info.link_down);
if (lat)
- *lat += static_cast<NetworkCm02LinkPtr>(info.link_down)->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(info.link_down))->getLatency();
}
if (info.limiter_link) // limiter for receiver
sg_platf_route_cbarg_t e_route;
int size = 0;
unsigned int cpt;
- NetworkCm02LinkPtr link;
+ void *link;
xbt_dynar_t links = NULL;
route_cache_element_t elm = NULL;
xbt_dynar_t nodes = xbt_graph_get_nodes(p_routeGraph);
xbt_dynar_foreach(links, cpt, link) {
xbt_dynar_unshift(route->link_list, &link);
if (lat)
- *lat += link->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(link))->getLatency();
}
}
xbt_dynar_foreach(links, cpt, link) {
xbt_dynar_insert_at(route->link_list, pos, &link);
if (lat)
- *lat += link->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(link))->getLatency();
pos++;
}
}
xbt_dynar_foreach(links, cpt, link) {
xbt_dynar_unshift(route->link_list, &link);
if (lat)
- *lat += link->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(link))->getLatency();
}
size++;
}
while (!xbt_dynar_is_empty(route_stack)) {
sg_platf_route_cbarg_t e_route = xbt_dynar_pop_as(route_stack, sg_platf_route_cbarg_t);
xbt_dynar_t links;
- NetworkCm02LinkPtr link;
+ void *link;
unsigned int cpt;
if (p_hierarchy == SURF_ROUTING_RECURSIVE && prev_dst_gw != NULL
xbt_dynar_foreach(links, cpt, link) {
xbt_dynar_push_as(res->link_list, sg_routing_link_t, link);
if (lat)
- *lat += link->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(link))->getLatency();
}
prev_dst_gw = e_route->gw_dst;
size_t table_size = xbt_dynar_length(p_indexNetworkElm);
sg_platf_route_cbarg_t e_route = NULL;
- NetworkCm02LinkPtr link;
+ void *link;
unsigned int cpt = 0;
e_route = TO_ROUTE_FULL(src->m_id, dst->m_id);
xbt_dynar_foreach(e_route->link_list, cpt, link) {
xbt_dynar_push(res->link_list, &link);
if (lat)
- *lat += link->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(link))->getLatency();
}
}
}
if(info.link_up) { // link up
xbt_dynar_push_as(route->link_list, void*, info.link_up);
if (lat)
- *lat += static_cast<NetworkCm02LinkPtr>(info.link_up)->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(info.link_up))->getLatency();
}
}
src_ctn = (xbt_dynar_t) xbt_lib_get_or_null(host_lib, tmp_src_name, COORD_HOST_LEVEL);
if(info.link_down) { // link down
xbt_dynar_push_as(route->link_list,void*,info.link_down);
if (lat)
- *lat += static_cast<NetworkCm02LinkPtr>(info.link_down)->getLatency();
+ *lat += dynamic_cast<NetworkCm02LinkPtr>(static_cast<ResourcePtr>(info.link_down))->getLatency();
}
}
dst_ctn = (xbt_dynar_t) xbt_lib_get_or_null(host_lib, tmp_dst_name, COORD_HOST_LEVEL);
WorkstationL07Model::WorkstationL07Model() : WorkstationModel("Workstation ptask_L07") {
if (!ptask_maxmin_system)
ptask_maxmin_system = lmm_system_new(1);
+ surf_network_model = new NetworkL07Model();
+ surf_cpu_model = new CpuL07Model();
routing_model_create(p_networkModel->createResource("__loopback__",
498000000, NULL,
0.000015, NULL,
SURF_RESOURCE_ON, NULL,
SURF_LINK_FATPIPE, NULL));
- surf_network_model = new NetworkL07Model();
- surf_cpu_model = new CpuL07Model();
+
}
double WorkstationL07Model::shareResources(double now)
latency = MAX(latency, lat);
xbt_dynar_foreach(route, cpt, _link) {
- link = dynamic_cast<LinkL07Ptr>(static_cast<NetworkCm02LinkPtr>(_link));
+ link = dynamic_cast<LinkL07Ptr>(static_cast<ResourcePtr>(_link));
xbt_dict_set(ptask_parallel_task_link_set, link->m_name, link, NULL);
}
}
for (j = 0; j < workstation_nb; j++) {
void *_link;
LinkL07Ptr link;
+
xbt_dynar_t route=NULL;
if (communication_amount[i * workstation_nb + j] == 0.0)
continue;
&route, NULL);
xbt_dynar_foreach(route, cpt, _link) {
- link = static_cast<LinkL07Ptr>(static_cast<NetworkCm02LinkPtr>(_link));
+ link = dynamic_cast<LinkL07Ptr>(static_cast<ResourcePtr>(_link));
lmm_expand_add(ptask_maxmin_system, link->p_constraint,
action->p_variable,
communication_amount[i * workstation_nb + j]);
if (policy == SURF_LINK_FATPIPE)
lmm_constraint_shared(nw_link->p_constraint);
- xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast<NetworkCm02LinkPtr>(nw_link));
+ xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast<ResourcePtr>(nw_link));
return nw_link;
}
/* Connect traces relative to network */
xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) {
tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- LinkL07Ptr link = (LinkL07Ptr) xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL);
+ LinkL07Ptr link = dynamic_cast<LinkL07Ptr>(static_cast<ResourcePtr>(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)));
xbt_assert(link, "Link %s undefined", elm);
xbt_assert(trace, "Trace %s undefined", trace_name);
xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) {
tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- LinkL07Ptr link = (LinkL07Ptr) xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL);
+ LinkL07Ptr link = dynamic_cast<LinkL07Ptr>(static_cast<ResourcePtr>(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)));
xbt_assert(link, "Link %s undefined", elm);
xbt_assert(trace, "Trace %s undefined", trace_name);
xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) {
tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name);
- LinkL07Ptr link = (LinkL07Ptr) xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL);
+ LinkL07Ptr link = dynamic_cast<LinkL07Ptr>(static_cast<ResourcePtr>(xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)));
xbt_assert(link, "Link %s undefined", elm);
xbt_assert(trace, "Trace %s undefined", trace_name);