Exemplo n.º 1
0
int main(int argc, char **argv)
{
    FILE *output = stdout;
    FILE *input = stdin;

    if ( collect_parameters(input) ) {
        fprintf(stderr, "Parameter collection failed.\n");
        return 1;
    }


    fprintf(output, "<?xml version=\"1.0\"?>\n");
    fprintf(output, "\n<sdl version=\"2.0\"/>\n");
    fprintf(output, "\n");

    fprintf(output, "<config>\n");
    fprintf(output, "    run-mode=both\n");
    fprintf(output, "</config>\n");
    fprintf(output, "\n");

    fprintf(output, "<param_include>\n");

    fprintf(output, "  <rtr_params>\n");
    fprintf(output, "    <debug> 0 </debug>\n");
    fprintf(output, "    <num_ports> %d </num_ports>\n", params.k);
    fprintf(output, "    <num_vcs> 3 </num_vcs>\n"); /* 3 VCs are sufficient */
    fprintf(output, "    <link_bw> %s </link_bw>\n", params.link_bw);
    fprintf(output, "    <xbar_bw> %s </xbar_bw>\n", params.xbar_bw);
    fprintf(output, "    <topology> dragonfly </topology>\n");
    fprintf(output, "    <dragonfly:hosts_per_router> %u </dragonfly:hosts_per_router>\n", params.p);
    fprintf(output, "    <dragonfly:routers_per_group> %u </dragonfly:routers_per_group>\n", params.a);
    fprintf(output, "    <dragonfly:intergroup_per_router> %u </dragonfly:intergroup_per_router>\n", params.h);
    fprintf(output, "    <dragonfly:num_groups> %u </dragonfly:num_groups>\n", params.g);
    fprintf(output, "  </rtr_params>\n");
    fprintf(output, "\n");
    fprintf(output, "  <nic_params>\n");
    fprintf(output, "    <topology> dragonfly </topology>\n");
    fprintf(output, "    <num_peers> %d </num_peers>\n", params.N);
    fprintf(output, "    <num_vcs> 3 </num_vcs>\n"); /* 3 VCs are sufficient */
    fprintf(output, "    <link_bw> %s </link_bw>\n", params.link_bw);
    fprintf(output, "  </nic_params>\n");
    fprintf(output, "\n");
    fprintf(output, "</param_include>\n");
    fprintf(output, "\n");

    fprintf(output, "<sst>\n\n");



    uint32_t router_num = 0;
    uint32_t nic_num = 0;
    for ( uint32_t g = 0 ; g < params.g ; g++ ) {
        fprintf(output, "  <!-- GROUP %u -->\n", g);
        uint32_t tgt_grp = 0;

        for ( uint32_t r = 0 ; r < params.a ; r++ ) {
            fprintf(output, "  <!-- GROUP %u, ROUTER %u -->\n", g, r);

            fprintf(output, "  <component name=rtr:G%uR%u type=merlin.hr_router>\n", g, r);
            fprintf(output, "    <params include=rtr_params>\n");
            fprintf(output, "      <id> %d </id>\n", router_num);
            fprintf(output, "    </params>\n");

            uint32_t port = 0;
            for ( uint32_t p = 0 ; p < params.p ; p++ ) {
                fprintf(output, "    <link name=link:g%ur%uh%u port=port%u latency=%s />\n",
                        g, r, p, port++, params.link_lat);

            }
            for ( uint32_t p = 0 ; p < params.a ; p++ ) {
                if ( p != r ) {
                    uint32_t src = (p < r) ? p : r;
                    uint32_t dst = (p < r) ? r : p;
                    fprintf(output, "    <link name=link:g%ur%ur%u port=port%u latency=%s />\n",
                            g, src, dst, port++, params.link_lat);
                }
            }
            for ( uint32_t p = 0 ; p < params.h ; p++ ) {
                if ( (tgt_grp%params.g) == g ) {
                    tgt_grp++;
                }
                uint32_t src_g = (g < (tgt_grp%params.g)) ? g : (tgt_grp%params.g);
                uint32_t dst_g = (g < (tgt_grp%params.g)) ? (tgt_grp%params.g) : g;

                fprintf(output, "    <link name=link:g%ug%u:%u port=port%u latency=%s />\n",
                        src_g, dst_g, tgt_grp / params.g, port++, params.link_lat);
                tgt_grp++;
            }

            fprintf(output, "  </component>\n");
            fprintf(output, "\n");

            for ( uint32_t h = 0 ; h < params.p ; h++ ) {
                fprintf(output, "  <!-- GROUP %u, ROUTER %u, HOST %u -->\n", g, r, h);
                fprintf(output, "  <component name=nic:G%uR%uH%u type=merlin.test_nic>\n", g, r, h);
                fprintf(output, "    <params include=nic_params>\n");
                fprintf(output, "      <!-- node number %d -->\n", nic_num);
                fprintf(output, "      <id> %d </id>\n", nic_num);
                fprintf(output, "    </params>\n");
                fprintf(output, "    <link name=link:g%ur%uh%u port=rtr latency=%s />\n",
                        g, r, h, params.link_lat);
                fprintf(output, "  </component>\n");

                nic_num++;
            }
            fprintf(output, "\n");
            router_num++;
        }
        fprintf(output, "\n");
    }



    fprintf(output, "\n</sst>\n");


    return 0;
}
Exemplo n.º 2
0
int
main(int argc, char **argv)
{
    char * nic_link_latency = "10ns";
    FILE *output = stdout;
    FILE *input = stdin;

    if ( collect_parameters(input) ) {
        fprintf(stderr, "Parameter collection failed!\n");
        return 1;
    }


    fprintf(output, "<?xml version=\"1.0\"?>\n");
    fprintf(output, "\n<sdl version=\"2.0\"/>\n");
    fprintf(output, "\n");

    fprintf(output, "<config>\n");
    fprintf(output, "    run-mode=both\n");
    fprintf(output, "</config>\n");
    fprintf(output, "\n");

    fprintf(output, "<param_include>\n");

    fprintf(output, "  <rtr_params>\n");
    fprintf(output, "    <debug> 0 </debug>\n");
    fprintf(output, "    <num_ports> %d </num_ports>\n", params.k);
    fprintf(output, "    <num_vcs> 2 </num_vcs>\n");
    fprintf(output, "    <link_bw> %s </link_bw>\n", params.link_bw);
    fprintf(output, "    <xbar_bw> %s </xbar_bw>\n", params.xbar_bw);
    fprintf(output, "    <topology> fattree </topology>\n");
    fprintf(output, "    <fattree:loading> %d </fattree:loading>\n",  params.numnodes);
    fprintf(output, "  </rtr_params>\n");
    fprintf(output, "\n");
    fprintf(output, "  <nic_params>\n");
    fprintf(output, "    <topology> fattree </topology>\n");
    fprintf(output, "    <fattree:loading> %d </fattree:loading>\n", params.numnodes);
    fprintf(output, "    <fattree:radix> %d </fattree:radix>\n", params.k);
    fprintf(output, "    <num_peers> %d </num_peers>\n", params.peers);
    fprintf(output, "    <num_vcs> 2 </num_vcs>\n");
    fprintf(output, "    <link_bw> %s </link_bw>\n", params.link_bw);
    fprintf(output, "  </nic_params>\n");
    fprintf(output, "\n");
    fprintf(output, "</param_include>\n");
    fprintf(output, "\n");

    fprintf(output, "<sst>\n");


    addr myip;
    myip.x[0] = 10;
    myip.x[1] = params.k;
    myip.x[2] = 1;
    myip.x[3] = 1;
    char myip_str[16] = {0};

    int router_num = 0;
    fprintf(output, "  <!-- CORE ROUTERS -->\n");
    int num_core = (params.k/2) * (params.k/2);
    for ( int i = 0 ; i < num_core ; i++ ) {
        myip.x[2] = 1 + i/(params.k/2);
        myip.x[3] = 1 + i%(params.k/2);
        formatIP(myip, myip_str);
        fprintf(output, "  <component name=core:%s type=merlin.hr_router>\n", myip_str);
        fprintf(output, "    <params include=rtr_params>\n");
        fprintf(output, "      <id> %d </id>\n", router_num++);
        fprintf(output, "      <fattree:addr> %d </fattree:addr>\n", myip.s);
        fprintf(output, "      <fattree:level> 3 </fattree:level>\n");
        fprintf(output, "    </params>\n");

        for ( int l = 0 ; l < params.k ; l++ ) {
            fprintf(output, "    <link name=link:pod%d_core%d port=port%d latency=%s />\n",
                    l, i, l, params.link_lat);
        }

        fprintf(output, "  </component>\n");
        fprintf(output, "\n");

    }

    for ( int pod = 0 ; pod < params.k ; pod++ ) {
        fprintf(output, "\n\n\n");
        fprintf(output, "  <!-- POD %d -->\n", pod);
        myip.x[1] = pod;
        fprintf(output, "  <!-- AGGREGATION ROUTERS -->\n");
        for ( int r = 0 ; r < params.k/2 ; r++ ) {
            int router = params.k/2 + r;
            myip.x[2] = router;
            myip.x[3] = 1;
            formatIP(myip, myip_str);
            fprintf(output, "  <component name=agg:%s type=merlin.hr_router>\n", myip_str);
            fprintf(output, "    <params include=rtr_params>\n");
            fprintf(output, "      <id> %d </id>\n", router_num++);
            fprintf(output, "      <fattree:addr> %d </fattree:addr>\n", myip.s);
            fprintf(output, "      <fattree:level> 2 </fattree:level>\n");
            fprintf(output, "    </params>\n");

            for ( int l = 0 ; l < params.k/2 ; l++ ) {
                fprintf(output, "    <link name=link:pod%d_aggr%d_edge%d port=port%d latency=%s />\n",
                        pod, r, l, l, params.link_lat);
            }
            for ( int l = 0 ; l < params.k/2 ; l++ ) {
                int core = (params.k/2) * (r) + l;
                fprintf(output, "    <link name=link:pod%d_core%d port=port%d latency=%s />\n",
                        pod, core, l + params.k/2, params.link_lat);
            }
            fprintf(output, "  </component>\n");
            fprintf(output, "\n");

        }

        fprintf(output, "\n");
        fprintf(output, "  <!-- EDGE ROUTERS -->\n");
        for ( int r = 0 ; r < params.k/2 ; r++ ) {
            myip.x[2] = r;
            myip.x[3] = 1;
            formatIP(myip, myip_str);
            fprintf(output, "  <component name=edge:%s type=merlin.hr_router>\n", myip_str);
            fprintf(output, "    <params include=rtr_params>\n");
            fprintf(output, "      <id> %d </id>\n", router_num++);
            fprintf(output, "      <fattree:addr> %d </fattree:addr>\n", myip.s);
            fprintf(output, "      <fattree:level> 1 </fattree:level>\n");
            fprintf(output, "    </params>\n");

            for ( int l = 0 ; l < params.numnodes ; l++ ) {
                int node_id = pod * (params.k/2) * params.numnodes;
                node_id += r * params.numnodes;
                node_id += l;
                fprintf(output, "    <link name=link:pod%d_edge%d_node%d port=port%d latency=%s />\n",
                        pod, r, node_id, l, params.link_lat);
            }

            for ( int l = 0 ; l < params.k/2 ; l++ ) {
                fprintf(output, "    <link name=link:pod%d_aggr%d_edge%d port=port%d latency=%s />\n",
                        pod, l, r, l+params.k/2, params.link_lat);
            }

            fprintf(output, "  </component>\n");
            fprintf(output, "\n");
            fprintf(output, "  <!-- NODES -->\n");
            for ( int n = 0 ; n < params.numnodes ; n++ ) {
                int node_id = pod * (params.k/2) * params.numnodes;
                node_id += r * params.numnodes;
                node_id += n;
                myip.x[3] = n+2;
                formatIP(myip, myip_str);
                fprintf(output, "  <component name=nic:%s type=merlin.test_nic>\n", myip_str);
                fprintf(output, "    <params include=nic_params>\n");
                fprintf(output, "      <!-- node number %d -->\n", node_id);
                fprintf(output, "      <id> %d </id>\n", node_id);
                fprintf(output, "      <fattree:addr> %d </fattree:addr>\n", myip.s);
                fprintf(output, "    </params>\n");
                fprintf(output, "    <link name=link:pod%d_edge%d_node%d port=rtr latency=%s />\n",
                        pod, r, node_id, params.link_lat);
                fprintf(output, "  </component>\n");
                fprintf(output, "\n");
            }
        }


    }





    fprintf(output, "\n");
    fprintf(output, "</sst>\n");

    return 0;
}