From bee0b9ef57da446b1a2d0cbc22a3fc530f8ff6c5 Mon Sep 17 00:00:00 2001 From: norangebit Date: Thu, 18 Mar 2021 18:47:24 +0100 Subject: [PATCH] Support odd text --- main.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/main.c b/main.c index b2e0abe..4bf9c21 100644 --- a/main.c +++ b/main.c @@ -20,6 +20,9 @@ int sum_array(int *, int); int main() { int rank, size, private_text_len, text_len, pattern_len; + int *text_piece; + int *displacements; + int remain; char *pattern, *text; MPI_Init(NULL, NULL); @@ -34,14 +37,27 @@ int main() { printf("pattern: %s\n", pattern); text_len = strlen(text); pattern_len = strlen(pattern); - private_text_len = text_len / size; // TODO: size non divisibile + private_text_len = text_len / size; + remain = text_len % size; + + text_piece = (int *) malloc(sizeof(int) * size); + displacements = (int *) malloc(sizeof(int) * size); + + displacements[0] = 0; + for (int i = 0; i < size - 1; ++i) { + text_piece[i] = private_text_len; + displacements[i + 1] = displacements[i] + private_text_len; + } + + text_piece[size - 1] = private_text_len + remain; } - MPI_Bcast(&private_text_len, 1, MPI_INT, MASTER, MPI_COMM_WORLD); + MPI_Scatter(text_piece, 1, MPI_INT, &private_text_len, 1, MPI_INT, MASTER, MPI_COMM_WORLD); char *private_text = (char *) malloc(sizeof(char) * (private_text_len + 1)); - MPI_Scatter(text, private_text_len, MPI_CHAR, private_text, private_text_len, MPI_CHAR, MASTER, MPI_COMM_WORLD); + MPI_Scatterv(text, text_piece, displacements, MPI_CHAR, private_text, private_text_len, MPI_CHAR, MASTER, + MPI_COMM_WORLD); private_text[private_text_len] = '\0'; printf("%d -> input: %s\n", rank, private_text); @@ -116,7 +132,7 @@ int main() { char *read_text() { // TODO - return "abc"; + return "ciaoooooo mamma come stai???"; } char *read_pattern() {