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

Run 3 ranks...

parent b8b8e541
Branches
No related tags found
1 merge request!8Draft: RDMA version with wrapped infinity calls
#CFLAGS = -g -O0 -Wall -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined
#CFLAGS = -g -O0 -Wall -Iinfinity/include -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined
CFLAGS = -g -O0 -Wall -Iinfinity/include
......
......@@ -83,7 +83,8 @@ static int volatile todo_send = 0;
/* The local receive queue. */
static struct mpiuse_log_entry **volatile recv_queue;
static int volatile nr_recv[16] = {0}; // XXX needs to be dynamic
static int volatile nr_recv = 0;
static int volatile nr_recvs[16] = {0}; // XXX needs to be dynamic
/* Starting up the server ends. */
static int volatile starting[16] = {1}; // XXX needs to be dynamic...
......@@ -254,7 +255,7 @@ static void *recv_thread(void *arg) {
message("Accepting incoming connections on %d", BASE_PORT + rank);
/* No. of receives to process. */
int todo_recv = nr_recv[rank];
int todo_recv = nr_recvs[rank];
/* We loop while new requests are being send and we still have messages
* to receive. */
......@@ -273,15 +274,15 @@ static void *recv_thread(void *arg) {
/* Now find the associated log. */
int found = 0;
for (int k = 0; k < nr_recv[rank]; k++) {
for (int k = 0; k < nr_recv; k++) {
struct mpiuse_log_entry *log = recv_queue[k];
if (log != NULL && !log->done && log->otherrank == rank &&
log->subtype == subtype && log->size == size && log->tag == tag) {
found = 1;
// if (verbose)
message("receive message subtype %d from %d on %d", log->subtype, rank,
myrank);
if (verbose)
message("receive message subtype %d from %d on %d", log->subtype, rank,
myrank);
/* Check data sent data is unchanged and received data is as
* expected. */
......@@ -297,8 +298,9 @@ static void *recv_thread(void *arg) {
}
}
if (!found) {
error("No matching receive on connections to %d (%d of %d todo)",
BASE_PORT + rank, todo_recv, nr_recv[rank]);
error("No matching receive on connections to %d (%d of %d todo:"
" rank = %d otherrank = %d subtype = %d size = %zd tag = %d)",
BASE_PORT + rank, todo_recv, nr_recvs[rank], myrank, rank, subtype, size, tag);
}
// Ready for next use of buffer?
......@@ -338,7 +340,7 @@ static size_t pick_logs() {
nr_send = 0;
recv_queue = (struct mpiuse_log_entry **)calloc(
nlogs, sizeof(struct mpiuse_log_entry *));
int all_nr_recv = 0;
nr_recv = 0;
for (size_t k = 0; k < nlogs; k++) {
struct mpiuse_log_entry *log = mpiuse_get_log(k);
......@@ -350,8 +352,8 @@ static size_t pick_logs() {
send_queue[nr_send] = log;
nr_send++;
} else if (log->type == task_type_recv) {
recv_queue[all_nr_recv] = log;
all_nr_recv++;
recv_queue[nr_recv] = log;
nr_recv++;
} else {
error("task type '%d' is not a known send or recv task", log->type);
}
......@@ -363,19 +365,19 @@ static size_t pick_logs() {
}
/* Now we need to count the numbers of messages to send per rank. */
for (int k = 0; k < nr_ranks; k++) nr_recv[k] = 0;
for (int k = 0; k < all_nr_recv; k++) {
for (int k = 0; k < nr_ranks; k++) nr_recvs[k] = 0;
for (int k = 0; k < nr_recv; k++) {
struct mpiuse_log_entry *log = recv_queue[k];
nr_recv[log->otherrank]++;
nr_recvs[log->otherrank]++;
}
/* Sort into increasing tag. */
qsort(recv_queue, all_nr_recv, sizeof(struct mpiuse_log_entry *), cmp_logs);
qsort(recv_queue, nr_recv, sizeof(struct mpiuse_log_entry *), cmp_logs);
qsort(send_queue, nr_send, sizeof(struct mpiuse_log_entry *), cmp_logs);
if (verbose) {
message("maxsize = %zd, nr_send = %d, all_nr_recv = %d", maxsize, nr_send,
all_nr_recv);
message("maxsize = %zd, nr_send = %d, nr_recv = %d", maxsize, nr_send,
nr_recv);
}
return maxsize;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment