File: netloc_mpi_rank_file.c

package info (click to toggle)
mpich 4.0.2-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 423,384 kB
  • sloc: ansic: 1,088,434; cpp: 71,364; javascript: 40,763; f90: 22,829; sh: 17,463; perl: 14,773; xml: 14,418; python: 10,265; makefile: 9,246; fortran: 8,008; java: 4,355; asm: 324; ruby: 176; lisp: 19; php: 8; sed: 4
file content (60 lines) | stat: -rw-r--r-- 1,273 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
 * Copyright © 2016 Inria.  All rights reserved.
 *
 * $COPYRIGHT$
 *
 * Additional copyrights may follow
 * See COPYING in top-level directory.
 *
 * $HEADER$
 */

#define _GNU_SOURCE         /* See feature_test_macros(7) */

#include <netloc.h>
#include <netlocscotch.h>
#include <private/netloc.h>
#include <hwloc.h>

int main(int argc, char **argv)
{
    int ret;
    netlocscotch_core_t *cores;
    int num_processes;

    char *comm_filename;
    char *rank_filename;

    assert(argc == 3);

    comm_filename = argv[1];
    rank_filename = argv[2];

    ret = netlocscotch_get_mapping_from_comm_file(comm_filename, &num_processes, &cores);

    if (ret != NETLOC_SUCCESS) {
        fprintf(stderr, "Error: netlocscotch_get_mapping_from_comm_file failed\n");
        return NETLOC_ERROR;
    }

    FILE *rank_file = fopen(rank_filename, "w");
    if (!rank_file) {
        perror("fopen");
        ret = NETLOC_ERROR;

    } else {
        for (int p = 0; p < num_processes; p++) {
            fprintf(rank_file, "rank %d=%s slot=%d\n",
                    p, cores[p].nodename, cores[p].core);
        }
        fclose(rank_file);
    }

    for (int p = 0; p < num_processes; p++) {
        free(cores[p].nodename);
    }
    free(cores);

    return ret;
}