forked from LLNL/loupe
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapi.w
142 lines (112 loc) · 3.31 KB
/
api.w
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <sys/types.h>
#include <dlfcn.h>
#include <mpi.h>
#include <stdio.h>
#include <iomanip>
#include <iostream>
#include <fstream>
#include <stddef.h>
#include <sys/time.h>
#include "mpid.hh"
#include <map>
#include <vector>
#include <string>
mpid_data_stats* g_mpi_stats;
//Internal identifiers used by our profiler
{{forallfn foo}}
#define f_{{foo}} {{fn_num}}
{{endforallfn}}
std::string g_f_names[] = { {{forallfn foo}}
"{{foo}}",
{{endforallfn}}};
{{fn foo MPI_Pcontrol}}{
{{callfn}}
if(level)
g_mpi_stats->enable();
else
g_mpi_stats->disable();
}
{{endfn}}
{{fn foo MPI_Init }}{
{{callfn}}
// Create the GLOBAL profiling data
g_mpi_stats = new mpid_data_stats("global", g_f_names);
g_mpi_stats->mpid_init();
}
{{endfn}}
// TODO: Eventually we need support for MPI_Thread_Multiple
{{fn foo MPI_Init_thread }}{
{{callfn}}
// Create the GLOBAL profiling data
g_mpi_stats = new mpid_data_stats("global", g_f_names);
g_mpi_stats->mpid_init();
}
{{endfn}}
{{fn foo MPI_Finalize }}{
//We might need to do some MPI calls just before closing MPI
g_mpi_stats->mpid_finalize();
delete g_mpi_stats;
{{callfn}}
}
{{endfn}}
{{fn foo MPI_Comm_split }}{
{{callfn}}
g_mpi_stats->mpid_add_communicator(newcomm);
}
{{endfn}}
//TODO: hanndles for other sends
{{fn foo MPI_Send MPI_Isend MPI_Send_init }}{
uint64_t long elapsed;
g_mpi_stats->mpid_call_start(f_{{foo}});
{{callfn}}
elapsed = g_mpi_stats->mpid_call_end(f_{{foo}});
g_mpi_stats->mpid_call_stats(count, datatype, elapsed, f_{{foo}});
g_mpi_stats->mpid_traffic_pattern(dest, count, datatype, comm, f_{{foo}});
}
{{endfn}}
{{fn foo MPI_Recv MPI_Irecv MPI_Recv_init }}{
uint64_t long elapsed;
g_mpi_stats->mpid_call_start(f_{{foo}});
{{callfn}}
elapsed = g_mpi_stats->mpid_call_end(f_{{foo}});
g_mpi_stats->mpid_call_stats(count, datatype, elapsed, f_{{foo}});
}
{{endfn}}
{{fn foo MPI_Waitany MPI_Wait MPI_Waitall }}{
uint64_t long elapsed;
g_mpi_stats->mpid_call_start(f_{{foo}});
{{callfn}}
elapsed = g_mpi_stats->mpid_call_end(f_{{foo}});
g_mpi_stats->mpid_call_stats(0, MPI_UNSIGNED, elapsed, f_{{foo}});
}
{{endfn}}
{{fn foo MPI_Bcast }}{
uint64_t long elapsed;
g_mpi_stats->mpid_call_start(f_{{foo}});
{{callfn}}
elapsed = g_mpi_stats->mpid_call_end(f_{{foo}});
g_mpi_stats->mpid_call_stats(count, datatype, elapsed, f_{{foo}});
//Only measure traffic for the root
//if (g_mpi_stats->is_me(root, comm)){
// g_mpi_stats->mpid_traffic_pattern(-1, count, datatype, comm, f_{{foo}});
//}
}
{{endfn}}
{{fn foo MPI_Alltoall}}{
uint64_t long elapsed;
g_mpi_stats->mpid_call_start(f_{{foo}});
{{callfn}}
elapsed = g_mpi_stats->mpid_call_end(f_{{foo}});
g_mpi_stats->mpid_call_stats(sendcount, sendtype, elapsed, f_{{foo}});
//g_mpi_stats->mpid_traffic_pattern(-1, sendcount, sendtype, comm, f_{{foo}});
}
{{endfn}}
{{fn foo MPI_Allreduce}}{
uint64_t long elapsed;
g_mpi_stats->mpid_call_start(f_{{foo}});
{{callfn}}
elapsed = g_mpi_stats->mpid_call_end(f_{{foo}});
g_mpi_stats->mpid_call_stats(count, datatype, elapsed, f_{{foo}});
//g_mpi_stats->mpid_traffic_pattern(-1, count, datatype, comm, f_{{foo}});
}
{{endfn}}