/* d: size of comm_speed */ void TreeMatchMapping(int nb_obj, int nb_proc, double **comm_mat, double *obj_weight, double * comm_speed, int d, int *sol){ tree_t *comm_tree; tm_topology_t *topology; double duration; int i; TIC; for(i=0;i<nb_obj;i++){ sol[i]=i; // printf("%f ",obj_weight[i]); } //printf("\n"); // return; topology=(tm_topology_t*)malloc(sizeof(tm_topology_t)); topology->arity=(int*)malloc(sizeof(int)*MAX_LEVELS); topology->arity[0]=nb_proc; topology->nb_levels=decompose((int)ceil((1.0*nb_obj)/nb_proc),1,topology->arity); printf("Topology nb levels=%d\n",topology->nb_levels); build_synthetic_proc_id(topology); if(topology->nb_levels>d) update_comm_speed(&comm_speed,d,topology->nb_levels); //exit(-1); //topology_to_arch(topology); //display_tab(arch,hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PROC)); //display_tab(arch,96); //exit(-1); //int nb_core=topo_nb_proc(topology,1000); //display_tab(comm_mat,N); TIC; comm_tree=build_tree_from_topology(topology,comm_mat,nb_obj,obj_weight,comm_speed); printf("Tree buildinbg time=%f\n",TOC); TIC; map_topology(topology,comm_tree,nb_proc,1,sol,NULL); printf("Topology mapping time=%f\n",TOC); if(topology->nb_levels>d) free(comm_speed); free_topology(topology); free_tree(comm_tree); duration=TOC; printf("-------------- Mapping done in %.4fs!\n",duration); }
void map_topology_simple(tm_topology_t *topology,tree_t *comm_tree, int *sigma, int nb_processes, int *k) { map_topology(topology,comm_tree,topology->nb_nodes[topology->nb_levels-1], topology->nb_levels-1,sigma,nb_processes,k); }