From 08d5a84f1030371d3cc2304c1c6e774d6368d534 Mon Sep 17 00:00:00 2001 From: Gasper Spagnolo Date: Sat, 17 Dec 2022 03:44:31 -0500 Subject: [PATCH] Test more --- dn7/server.c | 171 ++++++++++++++++++++++++++------------------------- 1 file changed, 87 insertions(+), 84 deletions(-) diff --git a/dn7/server.c b/dn7/server.c index 1d8cc2a..3a5cf7f 100644 --- a/dn7/server.c +++ b/dn7/server.c @@ -13,55 +13,55 @@ #define DEBUG 0 void segfault_handler(int sig) { - void *array[10]; - size_t size; + void *array[10]; + size_t size; - size = backtrace(array, 10); + size = backtrace(array, 10); - fprintf(stderr, "[-] Error: signal %d:\n", sig); - backtrace_symbols_fd(array, size, STDERR_FILENO); - exit(1); + fprintf(stderr, "[-] Error: signal %d:\n", sig); + backtrace_symbols_fd(array, size, STDERR_FILENO); + exit(1); } int* setup_send_array(int size) { - int *arr = (int *)malloc(size * sizeof(int)); + int *arr = (int *)malloc(size * sizeof(int)); - if(arr == NULL) { - printf("[-] Error: malloc failed!\n"); - exit(1); - } + if(arr == NULL) { + printf("[-] Error: malloc failed!\n"); + exit(1); + } - for (int i = 0; i < size; i++) { + for (int i = 0; i < size; i++) { if (i % 2 == 0 ){ arr[i] = 1; } else { arr[i] = 0; } - } + } // Set random bit to two arr[rand() % size] = 2; - return arr; + return arr; } int* setup_recv_array(int n_elements) { - int *recv_arr = (int *)malloc(n_elements * sizeof(int)); + int *recv_arr = (int *)malloc(n_elements * sizeof(int)); - if(recv_arr == NULL) { - printf("[-] Error: malloc failed!\n"); - exit(1); - } + if(recv_arr == NULL) { + printf("[-] Error: malloc failed!\n"); + exit(1); + } - for (int i = 0; i < n_elements; i++) { - recv_arr[i] = 0; - } - return recv_arr; + for (int i = 0; i < n_elements; i++) { + recv_arr[i] = 0; + } + return recv_arr; } void setup_displacements_and_counts(int *displacements, int *counts, int ntasks) { - for(int i = 0; i < ntasks; i++) { - displacements[i] = (int) (ARRAY_SIZE / ntasks * i); // my_start - counts[i] = (int) (ARRAY_SIZE / ntasks * (i + 1)) - displacements[i]; // my_end - my_start - } + for(int i = 0; i < ntasks; i++) { + displacements[i] = (int) (ARRAY_SIZE / ntasks * i); // my_start + counts[i] = (int) (ARRAY_SIZE / ntasks * (i + 1)) - displacements[i]; // my_end - my_start + } } void throw_err(int line, int err_code) { @@ -74,17 +74,17 @@ void throw_err(int line, int err_code) { int main(int argc, char* argv[]) { - int taskid, ntasks; - int *send_arr, *recv_arr; - int *displacements, *counts; + int taskid, ntasks; + int *send_arr, *recv_arr; + int *displacements, *counts; - double start_time = MPI_Wtime(); + double start_time = MPI_Wtime(); - MPI_Init(&argc, &argv); - signal(SIGSEGV, segfault_handler); + MPI_Init(&argc, &argv); + signal(SIGSEGV, segfault_handler); - MPI_Comm_rank(MPI_COMM_WORLD, &taskid); - MPI_Comm_size(MPI_COMM_WORLD, &ntasks); + MPI_Comm_rank(MPI_COMM_WORLD, &taskid); + MPI_Comm_size(MPI_COMM_WORLD, &ntasks); MPI_Request request; MPI_Status status; int flag = 0; @@ -92,56 +92,58 @@ int main(int argc, char* argv[]) int message_len = strlen(message) + 1; char recv_message[message_len]; - if(DEBUG) { - printf("[+] Task %d has started...\n", taskid); - fflush(stdout); - } + if(DEBUG) { + printf("[+] Task %d has started...\n", taskid); + fflush(stdout); + } - if (taskid == 0) { - //Setup array that we need to sort - send_arr = setup_send_array(ARRAY_SIZE); - } + if (taskid == 0) { + //Setup array that we need to sort + send_arr = setup_send_array(ARRAY_SIZE); + } - // Allocate memory for send_displacements and send_counts - displacements = (int *)malloc(ntasks * sizeof(int)); - counts = (int *)malloc(ntasks * sizeof(int)); + // Allocate memory for send_displacements and send_counts + displacements = (int *)malloc(ntasks * sizeof(int)); + counts = (int *)malloc(ntasks * sizeof(int)); - if(displacements == NULL || counts == NULL) { - printf("[-] Error: malloc failed!\n"); - exit(1); - } + if(displacements == NULL || counts == NULL) { + printf("[-] Error: malloc failed!\n"); + exit(1); + } - // Setup displacements and counts - setup_displacements_and_counts(displacements, counts, ntasks); + // Setup displacements and counts + setup_displacements_and_counts(displacements, counts, ntasks); - if(DEBUG) { - printf("[+] Setup displacements and counts done!\n"); - fflush(stdout); - } + if(DEBUG) { + printf("[+] Setup displacements and counts done!\n"); + fflush(stdout); + } - // Setup recv array - recv_arr = setup_recv_array(counts[taskid]); + // Setup recv array + recv_arr = setup_recv_array(counts[taskid]); - if(DEBUG) { - printf("[+] Setup done!\n"); - fflush(stdout); - } + if(DEBUG) { + printf("[+] Setup done!\n"); + fflush(stdout); + } - if(MPI_Barrier(MPI_COMM_WORLD) != MPI_SUCCESS) - throw_err(__LINE__, errno); + if(MPI_Barrier(MPI_COMM_WORLD) != MPI_SUCCESS) + throw_err(__LINE__, errno); - // Scatterv array to all processes - if(MPI_Scatterv(send_arr, counts, displacements , MPI_INT, recv_arr, ARRAY_SIZE, MPI_INT, 0, MPI_COMM_WORLD) != MPI_SUCCESS) - throw_err(__LINE__, errno); + // Scatterv array to all processes + if(MPI_Scatterv(send_arr, counts, displacements , MPI_INT, recv_arr, ARRAY_SIZE, MPI_INT, 0, MPI_COMM_WORLD) != MPI_SUCCESS) + throw_err(__LINE__, errno); - MPI_Irecv(recv_message, message_len, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &request); + if(MPI_Irecv(recv_message, message_len, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &request)) + throw_err(__LINE__, errno); for(int i =0; i < counts[taskid]; i++) { if(DEBUG) printf("%d ", recv_arr[i]); if(i % 20 == 0) { - MPI_Test(&request, &flag, &status); + if(MPI_Test(&request, &flag, &status)) + throw_err(__LINE__, errno); if(flag) { printf("[+] Recieved stop signal!\n"); break; @@ -149,30 +151,31 @@ int main(int argc, char* argv[]) } if(recv_arr[i] == 2) { printf("[+] Found 2 at index %d! --> taskid: %d\n", displacements[taskid] + i, taskid); - MPI_Isend(message, message_len, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &request); + if(MPI_Isend(message, message_len, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &request)) + throw_err(__LINE__, errno); break; } } - // Gather the array - if(MPI_Gatherv(recv_arr, counts[taskid], MPI_INT, send_arr, counts, displacements, MPI_INT, 0, MPI_COMM_WORLD)) - throw_err(__LINE__, errno); + // Gather the array + if(MPI_Gatherv(recv_arr, counts[taskid], MPI_INT, send_arr, counts, displacements, MPI_INT, 0, MPI_COMM_WORLD)) + throw_err(__LINE__, errno); - if (taskid == 0) { - if(DEBUG) { - for(int i = 0; i < ARRAY_SIZE; i++) { - printf("%d ", send_arr[i]); - } - } + if (taskid == 0) { + if(DEBUG) { + for(int i = 0; i < ARRAY_SIZE; i++) { + printf("%d ", send_arr[i]); + } + } - double total_time = MPI_Wtime() - start_time; + double total_time = MPI_Wtime() - start_time; - printf("\nTotal time: %f\n", total_time); - } + printf("\nTotal time: %f\n", total_time); + } - MPI_Finalize(); - return 0; + MPI_Finalize(); + return 0; // 1: 0.616473 // 2: 0.742917