Skip to content
Snippets Groups Projects
Commit ca33c56c authored by Peter W. Draper's avatar Peter W. Draper
Browse files

Merge branch 'master' into 'simplerdma-wrapper'

# Conflicts:
#   swiftmpistepsim.c
parents cff373bf 0f210f8c
No related branches found
No related tags found
1 merge request!8Draft: RDMA version with wrapped infinity calls
......@@ -174,9 +174,11 @@ void mpiuse_log_restore(const char *filename) {
* @brief dump the logs for all ranks to a file.
*
* @param nranks the number of ranks.
* @param standard only write a standard log, this can be used as input to
* other runs.
* @param dumpfile the file to write
*/
void mpiuse_dump_logs(int nranks, const char *dumpfile) {
void mpiuse_dump_logs(int nranks, int standard, const char *dumpfile) {
/* Make sure output file is empty, only on one rank. */
FILE *fd;
......@@ -184,13 +186,21 @@ void mpiuse_dump_logs(int nranks, const char *dumpfile) {
fd = fopen(dumpfile, "w");
/* Header. */
fprintf(fd,
"# logticin logtic injtic endtic dtic step rank otherrank itype "
" isubtype tag size nr_tests tsum tmin tmax\n");
if (standard) {
fprintf(fd,
"# stic etic dtic step rank otherrank type itype "
" subtype isubtype activation tag size sum\n");
} else {
fprintf(fd,
"# logticin logtic injtic endtic dtic step rank otherrank itype "
" isubtype tag size nr_tests tsum tmin tmax\n");
}
fclose(fd);
}
MPI_Barrier(MPI_COMM_WORLD);
const char *types[] = {"send", "recv"};
/* Loop over all ranks, one by one, getting each rank to append their
* logs. */
for (int k = 0; k < nranks; k++) {
......@@ -210,20 +220,31 @@ void mpiuse_dump_logs(int nranks, const char *dumpfile) {
* version to match the expected injection times for this new run. */
size_t nlogs = mpiuse_log_count;
ticks basetics = 0;
long long sum = 0;
for (size_t k = 0; k < nlogs; k++) {
struct mpiuse_log_entry *log = &mpiuse_log[k];
if (log->rank == myrank && log->endtic > 0) {
if (basetics == 0) basetics = log->tic;
fprintf(fd,
"%lld %.4f %.4f %.4f %.6f %d %d %d %d %d %d %zd %d %.4f %.6f "
"%.6f\n",
log->tic, clocks_from_ticks(log->tic - basetics),
clocks_from_ticks(log->injtic - clocks_start_ticks),
clocks_from_ticks(log->endtic - clocks_start_ticks),
clocks_from_ticks(log->endtic - log->injtic), log->step,
log->rank, log->otherrank, log->type, log->subtype, log->tag,
log->size, log->nr_tests, clocks_from_ticks(log->tsum),
clocks_from_ticks(log->tmin), clocks_from_ticks(log->tmax));
if (standard) {
fprintf(fd, "%lld %lld %lld %d %d %d %s %d %s %d %d %d %zd %lld\n",
log->injtic, log->injtic, log->endtic - log->injtic,
log->step, log->rank, log->otherrank,
types[log->type - SEND_TYPE], log->type, "none",
log->subtype, log->activation, log->tag, log->size, sum);
sum += log->size;
} else {
fprintf(
fd,
"%lld %.4f %.4f %.4f %.6f %d %d %d %d %d %d %zd %d %.4f %.6f "
"%.6f\n",
log->tic, clocks_from_ticks(log->tic - basetics),
clocks_from_ticks(log->injtic - clocks_start_ticks),
clocks_from_ticks(log->endtic - clocks_start_ticks),
clocks_from_ticks(log->endtic - log->injtic), log->step,
log->rank, log->otherrank, log->type, log->subtype, log->tag,
log->size, log->nr_tests, clocks_from_ticks(log->tsum),
clocks_from_ticks(log->tmin), clocks_from_ticks(log->tmax));
}
}
}
fclose(fd);
......
......@@ -94,7 +94,7 @@ struct mpiuse_log_entry {
#ifndef SEND_TYPE
#define SEND_TYPE 25
#define RECV_TYPE 26
#define NO_SUBTYPE 0
#define NO_SUBTYPE 1
#endif
/* API. */
......@@ -105,7 +105,7 @@ struct mpiuse_log_entry *mpiuse_get_log(int ind);
void mpiuse_log_restore(const char *filename);
int mpiuse_nr_logs(void);
int mpiuse_nr_ranks(void);
void mpiuse_dump_logs(int nranks, const char *logfile);
void mpiuse_dump_logs(int nranks, int standard, const char *logfile);
void mpiuse_log_generate(int nr_nodes, int nr_logs, int size, int random,
long int seed, int uniform, const char *cdf,
......
......@@ -92,7 +92,7 @@ with open(infile, "r") as fp:
if line[0] == '#':
continue
words = line.split()
if words[itypecol] == "22":
if words[itypecol] == "25":
key = words[otherrankcol] + "/" + \
words[rankcol] + "/" + \
words[isubtypecol] + "/" + \
......@@ -105,7 +105,7 @@ with open(infile, "r") as fp:
sends.append(words)
nsends = nsends + 1
elif words[itypecol] == "23":
elif words[itypecol] == "26":
key = words[rankcol] + "/" + \
words[otherrankcol] + "/" + \
words[isubtypecol] + "/" + \
......
......@@ -103,7 +103,7 @@ static void *inject_thread(void *arg) {
log->nr_tests = 0;
log->tsum = 0.0;
log->tmax = 0;
log->tmin = INT_MAX;
log->tmin = LONG_MAX;
log->endtic = 0;
log->injtic = getticks();
......@@ -175,7 +175,7 @@ static void queue_runner(struct mpiuse_log_entry **logs, int volatile *nr_logs,
/* Global MPI_Test statistics. */
int lncalls = 0;
double lsum = 0.0;
ticks lmint = INT_MAX;
ticks lmint = LONG_MAX;
ticks lmaxt = 0;
/* We loop while new requests are being injected and we still have requests
......@@ -388,7 +388,7 @@ static void pick_logs(int random) {
* @brief usage help.
*/
static void usage(char *argv[]) {
fprintf(stderr, "Usage: %s [options] nr_messages logfile.dat\n", argv[0]);
fprintf(stderr, "Usage: %s [vds:rgx:c:o:f:z] nr_messages logfile.dat\n", argv[0]);
fprintf(stderr,
" options: -v verbose, -d data check, -s size (bytes/scale), \n"
"\t -f <1|2> randomize injection order, 1 == just sends, "
......@@ -398,7 +398,8 @@ static void usage(char *argv[]) {
"\t-r -c <file> use cdf from file, size is a scale factor., |\n"
"\t-r -o <file> use occurence sample of values in a file, size is a "
"scale factor.,] \n"
"\t-x random seed\n");
"\t-x random seed\n"
"\t-z outout log in standard format, i.e. can be used as input");
fflush(stderr);
}
......@@ -424,15 +425,16 @@ int main(int argc, char *argv[]) {
/* Handle the command-line, we expect the number of messages to exchange per
* rank an output log and some options, the interesting ones are a size and
* whether to use a random selections of various kinds. */
int size = 1024;
int random = 0;
int randomorder = 0;
int uniform = 1;
char *cdf = NULL;
char *odata = NULL;
int opt;
int random = 0;
int randomorder = 0;
int size = 1024;
int standard = 0;
int uniform = 1;
unsigned int seed = default_seed;
while ((opt = getopt(argc, argv, "vds:rgx:c:o:f:")) != -1) {
while ((opt = getopt(argc, argv, "vds:rgx:c:o:f:z")) != -1) {
switch (opt) {
case 'd':
datacheck = 1;
......@@ -458,6 +460,9 @@ int main(int argc, char *argv[]) {
case 'v':
verbose = 1;
break;
case 'z':
standard = 1;
break;
case 'x':
seed = atol(optarg);
break;
......@@ -532,10 +537,8 @@ int main(int argc, char *argv[]) {
if (myrank == 0) {
message("Start of MPI tests");
message("==================");
if (verbose) {
if (datacheck)
message("checking data pattern on send and recv completion");
}
if (datacheck)
message("Checking data pattern on send and recv completion");
}
/* Make three threads, one for injecting tasks and two to check for
......@@ -559,7 +562,7 @@ int main(int argc, char *argv[]) {
MPI_Barrier(MPI_COMM_WORLD);
fflush(stdout);
if (myrank == 0) message("Dumping updated log");
mpiuse_dump_logs(nranks, logfile);
mpiuse_dump_logs(nranks, standard, logfile);
/* Shutdown MPI. */
res = MPI_Finalize();
......
......@@ -53,7 +53,7 @@ static const int task_type_send = 25;
static const int task_type_recv = 26;
/* Global communicators for each of the subtypes. */
static const int task_subtype_count = 34; // Just some upper limit on subtype.
#define task_subtype_count 34 // Just some upper limit on subtype.
static MPI_Comm subtypeMPI_comms[task_subtype_count];
/* The local queues. */
......@@ -243,7 +243,7 @@ static void queue_runner(struct mpiuse_log_entry **logs, int volatile *nr_logs,
/* Global MPI_Test statistics. */
int lncalls = 0;
double lsum = 0.0;
ticks lmint = INT_MAX;
ticks lmint = LONG_MAX;
ticks lmaxt = 0;
/* We loop while new requests are being injected and we still have requests
......@@ -471,6 +471,7 @@ int main(int argc, char *argv[]) {
break;
case 'c':
messagescale = atof(optarg);
break;
case 's':
messagesize = atoll(optarg);
break;
......@@ -513,20 +514,14 @@ int main(int argc, char *argv[]) {
clocks_set_cpufreq(freq);
if (myrank == 0) {
message("Start of MPI tests");
if (messagesize > 0) {
message(" ");
message(" Using fixed message size of %zd", messagesize);
}
message("==================");
if (messagescale != 1.0f) {
message(" ");
message(" Using message scale of %f", messagescale);
}
if (verbose) {
if (!usetics) message("using fast untimed injections");
if (datacheck)
message("checking data pattern on send and recv completion");
}
if (messagesize > 0)
message("Using fixed message size of %zd", messagesize);
if (messagescale != 1.0f)
message("Using message scale of %f", messagescale);
if (!usetics) message("Using fast untimed injections");
if (datacheck)
message("Checking data pattern on send and recv completion");
}
/* Make three threads, one for injecting tasks and two to check for
......@@ -550,7 +545,7 @@ int main(int argc, char *argv[]) {
MPI_Barrier(MPI_COMM_WORLD);
fflush(stdout);
if (myrank == 0) message("Dumping updated log");
mpiuse_dump_logs(nranks, logfile);
mpiuse_dump_logs(nranks, 0, logfile);
/* Shutdown MPI. */
res = MPI_Finalize();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment