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