1 #include "cado.h" // IWYU pragma: keep
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include "parallelizing_info.h"
5 #include "select_mpi.h"
6 #include "params.h"
7 #include "macros.h"
8 
9 int verbose=0;
10 
program(parallelizing_info_ptr pi,param_list pl MAYBE_UNUSED,void * arg MAYBE_UNUSED)11 void * program(parallelizing_info_ptr pi, param_list pl MAYBE_UNUSED, void * arg MAYBE_UNUSED)
12 {
13     if (verbose) {
14         pi_log_init(pi->m);
15         pi_log_init(pi->wr[0]);
16         pi_log_init(pi->wr[1]);
17     }
18 
19     // it is here as a cheap sanity check.
20     pi_hello(pi);
21 
22     if (verbose) {
23         pi_log_op(pi->m, "serialize");
24         serialize(pi->m);
25 
26         /* note that in order to do serialize(pi->wr[0]), we need to make
27          * sure that only one thread in the intersecting communicator
28          * executes.
29          */
30         if (pi->wr[1]->trank == 0) {
31             pi_log_op(pi->wr[0], "serialize(2nd)");
32             serialize(pi->wr[0]);
33         }
34         serialize_threads(pi->wr[1]);
35 
36         if (pi->wr[0]->trank == 0) {
37             pi_log_op(pi->wr[1], "serialize(3rd)");
38             serialize(pi->wr[1]);
39         }
40         serialize_threads(pi->wr[0]);
41 
42         pi_log_print_all(pi);
43 
44         pi_log_clear(pi->m);
45         pi_log_clear(pi->wr[0]);
46         pi_log_clear(pi->wr[1]);
47     }
48 
49     return NULL;
50 }
51 
main(int argc,char * argv[])52 int main(int argc, char * argv[])
53 {
54     int rank;
55     int size;
56     param_list pl;
57 
58     MPI_Init(&argc, &argv);
59     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
60     MPI_Comm_size(MPI_COMM_WORLD, &size);
61 
62     param_list_init (pl);
63     parallelizing_info_init();
64 
65     parallelizing_info_decl_usage(pl);
66     param_list_decl_usage(pl, "v", "turn on some demo logging");
67 
68     const char * programname = argv[0];
69 
70     argv++, argc--;
71     param_list_configure_switch(pl, "v", &verbose);
72 
73     for( ; argc ; ) {
74         if (param_list_update_cmdline(pl, &argc, &argv)) { continue; }
75         fprintf(stderr, "Unhandled parameter %s\n", argv[0]);
76         param_list_print_usage(pl, programname, stderr);
77         exit(EXIT_FAILURE);
78     }
79 
80     parallelizing_info_lookup_parameters(pl);
81 
82     if (verbose)
83         param_list_display (pl, stderr);
84     if (param_list_warn_unused(pl)) {
85         param_list_print_usage(pl, programname, stderr);
86         exit(EXIT_FAILURE);
87     }
88 
89     pi_go(program, pl, 0);
90 
91     parallelizing_info_finish();
92     param_list_clear(pl);
93 
94     MPI_Finalize();
95 
96     return 0;
97 }
98 
99