From e5c9fe7c0e33368f87c73185d00fed0205e179d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20Babi=C4=8D?= Date: Tue, 20 Oct 2015 20:58:05 +0200 Subject: [PATCH] sample1 edited and working with unknown file lenght --- .gitattributes | 1 + .gitignore | 32 ++++++++++ Makefile | 2 + readfile | Bin 0 -> 8352 bytes readfile.c | 71 +++++++++++++++++++++ run | 4 ++ sample1 | Bin 0 -> 9536 bytes sample1.c | 79 +++++++++++++++++++++++ sample1_e | Bin 0 -> 14096 bytes sample1_e.c | 165 +++++++++++++++++++++++++++++++++++++++++++++++++ sample1_e.in | 10 +++ testt | Bin 0 -> 9296 bytes testt.c | 28 +++++++++ 13 files changed, 392 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Makefile create mode 100755 readfile create mode 100644 readfile.c create mode 100755 run create mode 100755 sample1 create mode 100644 sample1.c create mode 100755 sample1_e create mode 100644 sample1_e.c create mode 100644 sample1_e.in create mode 100755 testt create mode 100644 testt.c diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b634d85 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.pdf filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bbf313b --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# Object files +*.o +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..727c4d3 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +program: + gcc readfile.c -o readfile diff --git a/readfile b/readfile new file mode 100755 index 0000000000000000000000000000000000000000..d66011d93ab5529d7c21f56482b7c57a7caec571 GIT binary patch literal 8352 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 +#include + +#define INPUTFILE "sample1_e.in" +// Avoids aggresive memory reallocation at the beginning of buffer growth sequence +#define INIT_COUNT 8 +// Optimal exponential buffer growth factor, 2 is sometimes used to +#define GROWTH_FACTOR 1.5 + +void *my_malloc(size_t size); +void *my_realloc(void *p, size_t size); +FILE *my_fopen(const char *filename, const char *mode); + +int main(int argc, char *argv[]){ + + int number, count = 0, max = INIT_COUNT; + // Allocate enough memory for INIT_COUNT numbers + int *numbers = my_malloc(max * sizeof(int *)); + FILE *file = my_fopen(INPUTFILE, "r"); + + // Read lines of numbers until an EOF or a character is read + while (fscanf(file, "%hd", &number) == 1) { + // Buffer space check + if (max == count) { + // Grow buffer exponentially + max *= GROWTH_FACTOR; + numbers = my_realloc(numbers, max * sizeof(int *)); + } + + // Store the read number to the array in memory + numbers[count++] = number; + } + + //printf("count: %d, max: %d\n", count, max); + int i; + for (i = 0; i < count; i++) { + printf("%d ", numbers[i]); + } + + return 0; +} + + +void *my_malloc(size_t size) { + void *p = malloc(size); + if (p == NULL) { + printf("Memory allocation unsuccessful.\n"); + exit(EXIT_FAILURE); + } + return p; +} + + +void *my_realloc(void *p, size_t size) { + void *temp = realloc(p, size); + if (temp == NULL) { + printf("Insufficient memory; can't add more items.\n"); + exit(EXIT_FAILURE); + } + return temp; +} + + +FILE *my_fopen(const char *filename, const char *mode) { + FILE *file = fopen(filename, mode); + if (file == NULL) { + printf("File %s could not be opened.\n", filename); + exit(EXIT_FAILURE); + } + return file; +} diff --git a/run b/run new file mode 100755 index 0000000..39218fe --- /dev/null +++ b/run @@ -0,0 +1,4 @@ +#!/bin/bash + +mpicc -Wall "$1.c" -o "$1" +mpirun -v -np "$2" "$1" diff --git a/sample1 b/sample1 new file mode 100755 index 0000000000000000000000000000000000000000..bae6913b239620aa09979334154e0c3a0d3f86e4 GIT binary patch literal 9536 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 literal 0 HcmV?d00001 diff --git a/sample1.c b/sample1.c new file mode 100644 index 0000000..4334e4e --- /dev/null +++ b/sample1.c @@ -0,0 +1,79 @@ +#include +#include + +#define BUFSIZE 10 + +int main(int argc, char *argv[]) { + int size, rank; + int slave; + int buf[BUFSIZE]; + int n, value; + float rval; + MPI_Status status; + + MPI_Init(&argc, &argv); + MPI_Comm_size(MPI_COMM_WORLD, &size); + if (size == 3) { + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + if (rank == 0) { + buf[0] = 5; + buf[1] = 1; + buf[2] = 8; + buf[3] = 7; + buf[4] = 6; + buf[5] = 5; + buf[6] = 4; + buf[7] = 2; + buf[8] = 3; + buf[9] = 1; + printf("\n Sending the values {5,1,8,7,6,5,4,2,3,1}"); + printf("\n -----------------------------"); + for (slave = 1; slave < size; slave++) { + printf("\n from master %d to slave %d", rank, slave); + MPI_Send(buf, 10, MPI_INT, slave, 1, MPI_COMM_WORLD); + } + printf("\n\n Receiving the results from slaves"); + printf("\n ---------------------------------"); + MPI_Recv(&value, 1, MPI_INT, 1, 11, MPI_COMM_WORLD, &status); + printf("\n Minimum %4d from slave 1", value); + MPI_Recv(&value, 1, MPI_INT, 2, 21, MPI_COMM_WORLD, &status); + printf("\n Sum\t %4d from slave 2", value); + MPI_Recv(&value, 1, MPI_INT, 1, 12, MPI_COMM_WORLD, &status); + printf("\n Maximum %4d from slave 1", value); + MPI_Recv(&rval, 1, MPI_FLOAT, 2, 22, MPI_COMM_WORLD, &status); + printf("\n Average %4.2f from slave 2\n", rval); + } + else { + if (rank == 1) { + MPI_Recv(buf, 10, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); + value = 100; + for (n = 0; n < BUFSIZE; n++) { + if (value > buf[n]) { + value = buf[n]; + } + } + MPI_Send(&value, 1, MPI_INT, 0, 11, MPI_COMM_WORLD); + value = 0; + for (n = 0; n < BUFSIZE; n++) { + if (value < buf[n]) { + value = buf[n]; + } + } + MPI_Send(&value, 1, MPI_INT, 0, 12, MPI_COMM_WORLD); + } + else { + MPI_Recv(buf, 10, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); + value = 0; + for (n = 0; n < BUFSIZE; n++) { + value = value + buf[n]; + } + MPI_Send(&value, 1, MPI_INT, 0, 21, MPI_COMM_WORLD); + rval = (float) value / BUFSIZE; + MPI_Send(&rval, 1, MPI_FLOAT, 0, 22, MPI_COMM_WORLD); + } + } + } + MPI_Finalize(); + return (0); +} diff --git a/sample1_e b/sample1_e new file mode 100755 index 0000000000000000000000000000000000000000..b2f1d30cada3bcc88f193b90370121e19ef97db9 GIT binary patch literal 14096 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 z +#include +#include +#include +#include + +#define INPUTFILE "sample1_e.in" +// Avoids aggresive memory reallocation at the beginning of buffer growth sequence +#define INIT_COUNT 8 +// Optimal exponential buffer growth factor, 2 is sometimes used to +#define GROWTH_FACTOR 1.5 + +// Macro for counting the lenght of an array +#define COUNT(x) ((int) (sizeof(x) / sizeof(x[0]))) + + +void *my_malloc(size_t size); +void *my_realloc(void *p, size_t size); +FILE *my_fopen(const char *filename, const char *mode); +bool is_mpi_defined(int n); + +int main(int argc, char *argv[]) { + int size, rank, slave, i, n, value, count = 0; + float fvalue; + + MPI_Status status; + + MPI_Init(&argc, &argv); + MPI_Comm_size(MPI_COMM_WORLD, &size); + + if (size == 4) { + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + if (rank == 0) { + + int number, max = INIT_COUNT; + // Allocate enough memory for INIT_COUNT numbers + int *numbers = my_malloc(max * sizeof(int *)); + //int num[10]; + FILE *file = my_fopen(INPUTFILE, "r"); + + // Read lines of numbers until an EOF or a character is read + while (fscanf(file, "%d", &number) == 1) { + // Buffer space check + if (max == count) { + // Grow buffer exponentially + max *= GROWTH_FACTOR; + numbers = my_realloc(numbers, max * sizeof(int *)); + } + + // Store the read number to the array in memory + numbers[count++] = number; + } + + printf(" Sending numbers: "); + for (i = 0; i < count; i++) + printf("%d ", numbers[i]); + + + printf("\n -----------------------------"); + for (slave = 1; slave < size; slave++) { + printf("\n from master %d to slave %d", rank, slave); + MPI_Send(numbers, count, MPI_INT, slave, 1, MPI_COMM_WORLD); + } + printf("\n\n Receiving the results from slaves"); + printf("\n ---------------------------------"); + MPI_Recv(&value, 1, MPI_INT, 1, 11, MPI_COMM_WORLD, &status); + printf("\n Minimum %4d from slave 1", value); + MPI_Recv(&value, 1, MPI_INT, 2, 21, MPI_COMM_WORLD, &status); + printf("\n Sum\t %4d from slave 2", value); + MPI_Recv(&value, 1, MPI_INT, 1, 12, MPI_COMM_WORLD, &status); + printf("\n Maximum %4d from slave 1", value); + MPI_Recv(&fvalue, 1, MPI_FLOAT, 2, 22, MPI_COMM_WORLD, &status); + printf("\n Average %4.2f from slave 2", fvalue); + MPI_Recv(&fvalue, 1, MPI_FLOAT, 3, 31, MPI_COMM_WORLD, &status); + printf("\n H. mean %4.2f from slave 3\n", fvalue); + } + else { + MPI_Probe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); + MPI_Get_count(&status, MPI_INT, &n); + + is_mpi_defined(n); + int numbers[n]; + count = COUNT(numbers); + + if (rank == 1) { + MPI_Recv(numbers, n, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); + //MPI_Recv(numbers, n, MPI_INT, status.MPI_SOURCE, status.MPI_TAG, MPI_COMM_WORLD, &status); + value = INT_MAX; + for (i = 0; i < count; i++) { + if (value > numbers[i]) { + value = numbers[i]; + } + } + MPI_Send(&value, 1, MPI_INT, 0, 11, MPI_COMM_WORLD); + value = 0; + for (i = 0; i < count; i++) { + if (value < numbers[i]) { + value = numbers[i]; + } + } + MPI_Send(&value, 1, MPI_INT, 0, 12, MPI_COMM_WORLD); + } + else if (rank == 2) { + MPI_Recv(numbers, n, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); + value = 0; + for (i = 0; i < count; i++) { + value = value + numbers[i]; + } + MPI_Send(&value, 1, MPI_INT, 0, 21, MPI_COMM_WORLD); + fvalue = (float) value / count; + MPI_Send(&fvalue, 1, MPI_FLOAT, 0, 22, MPI_COMM_WORLD); + } + else { + MPI_Recv(numbers, n, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); + fvalue = 0.0; + for (i = 0; i < count; i++) { + fvalue += 1.0 / numbers[i]; + } + fvalue = (float) count / fvalue; + MPI_Send(&fvalue, 1, MPI_FLOAT, 0, 31, MPI_COMM_WORLD); + } + } + } + MPI_Finalize(); + return (0); +} + + +void *my_malloc(size_t size) { + void *p = malloc(size); + if (p == NULL) { + printf("Memory allocation unsuccessful.\n"); + exit(EXIT_FAILURE); + } + return p; +} + + +void *my_realloc(void *p, size_t size) { + void *temp = realloc(p, size); + if (temp == NULL) { + printf("Insufficient memory; can't add more items.\n"); + exit(EXIT_FAILURE); + } + return temp; +} + + +FILE *my_fopen(const char *filename, const char *mode) { + FILE *file = fopen(filename, mode); + if (file == NULL) { + printf("File %s could not be opened.\n", filename); + exit(EXIT_FAILURE); + } + return file; +} + +bool is_mpi_defined(int n) { + if (n == MPI_UNDEFINED) { + printf("MPI encountered undefined integer and terminated."); + exit(EXIT_FAILURE); + } + return true; +} diff --git a/sample1_e.in b/sample1_e.in new file mode 100644 index 0000000..a81e5cb --- /dev/null +++ b/sample1_e.in @@ -0,0 +1,10 @@ +5 +1 +8 +7 +6 +5 +4 +3 +2 +1 diff --git a/testt b/testt new file mode 100755 index 0000000000000000000000000000000000000000..5cfe26b7553c6cfd0c6cff6dd30f383d8e06918f GIT binary patch literal 9296 zcmeHNYiu0V6~4P0Kaw~bJCM|nluUz>fXW*ugvdNfX8p>T+QAJr4Q-S0+B>!v_Tlc% zf)i+KZ~|FDAhbZM{-{=hA3@>=m0Ai_)i?@GKx!o;3PLKC=mTUEpoyR>qXa_4s{0!No6b5F}}Jx`dpk5OeFKsIYcXFLZH< zSSxCQ)ZnMf8ln!zbXK`$TCem1pi7ANE5NTijH28eQ|=*AYOhpu#X9tN%N&s@Mj`>S zqrQqpDS{3=jH1)39|xrpRcW%GV1k;JU9-|>TI#=4$GkX&#zwz&%I`YA4vA!)i0G2f z5|wiSY~U?BO8lcs9fe1i>XKo)#eoG=w)+53;l{^hR%4G;eM z>(@T?NDI|1$B*a#;OqvU=+c)GwgNx$|J#53`0mc`SKod8`@7a1UcT$>^M}p^PrdT5 zAgZdCD^a6WsJ*5N{tEC_74%=PfyHb3Bnsni)HiwoOx*H{N0H zRC=B9NG4-t9P^6C{R6#bXDX2}(~;!uB83)B`i&BFXDS_!3Ue%$j0qDDTNJf3v3-`5 zdKvDCB_nY{(eFunB5g&Y)b}=$M~T}iCbKrWViKTwn~21c!nC3hJA#UlOvb?hC8J_v zHj}2^voSSkCDAFdy|1^U)7%`|9J-ok$zMDk9K?rxKs&*C5=Puhpu8Wm7ss&k{o(>r zLupp;mG-uRB+l=T&O-M_X;=Dn9(~<~)1KsFxNts8sBXZ8yU*KQE}YLg(jRu=>gXa^ zOt^4$G)vr=dAHtppysjVnlKK`+BNf+0ybt|s6Q^Ni;u$9_d=y`*?v4%uGhhlJVEsf zZx&E4+eb1@&BC0N(KX z6UNKu?A1kY%h}t?_3-1gKmCoTf|?N7rXd*4C(*IpCu$xCLK<~wTJPEoEZ|McXK^w68={rotw{NHLO*Q(~Hq_N0_SH2KPIstw z*k4Hss#Mk&q6PJ&fAEt+VVZPQNRP}uSNA8!N!OE9l_>@0^LFF(2|beYk~46+PM03$6lHgO z*Ywiol>*~*cct=GhX}u_Xizf86BO%F;W*+VN5sW zv#ET=A!4pZmmK4HC3C;&yH17g$lN|YZ*n}-N*|wfDf2v^R`M=Y?|AwDKZ|(|PgBp< z>JmAj=xd6;t>{@rYt_11<5^$qZhL3vwc6##9$cYajmQbp6UyvO*pU%XJMGX3=3+?% zmy;rtOxac_+|k==N5+*jp3H_uvN7Z_Vo?zyX(E!D5TWSaB>XwlPCGSsSm{hGl`IoX z)TOO>gbWln8Mj49#+4!4ngTB)%}_ceh+!i=QTk-d%u^S6yc z4c;S(*eIG#!66gxP zfag4*lnLR7J-DH8@AqjBa3AHd)(nFq-YE&mFP`T|fs_B!9{+i%zxaI}1zu@f)y8{L z`e_o+Ez`l3%Bx^2%>!vv^8YufzxX}=hYXO3^RAzIIq=2(Ukltv5?6wY z=)fuOJMHn)S4IC;rSHuX?*U#Z@0*tTi~GM<`d=X^zeVLS`4r-Z60dL$(}yxNDn`?G z#?Fq7fi=w=J9nCWy*Cdc?ORF?n|8t+rSxz{aLU&OnPxO)j>l6Yk+>PPQ|XKu$xaD; z6er`BZAC*{uequno+~KHM6mO*MSj*!?-kDHIhsu*_QJ#^$!u|%s%>R#>b`0A>^Xkp_PyiZuk1UNLyiaMl)({&lSnbL*Zv`3 zG$$Ota{N4{0PoFAO)D&%k^^zu=WBIYkyrN9QYt+f70Z)D(bbT`K9*Rp6~7a_w+5FWB;tj zp6~ZBs`fwh*z@~icoq!(J&yAS#W+AsuvgzJ{}Hw;UG{w6tN()bufvwc&+YU5yYUO! z{}r~hRM?*55B~oLo>*R=+<#s_Z+qJ3zh5@1%Mo4kS`uT-@B%{|DFY>v7w?AAW{2m9-Qr)JUHo6VM_JfwyaQ( vN4R}fRJcc!et7M>?ei3np&U^!j`DRO{CM8@{HA4IseMBoJo`P)z3u-Gw`U&K literal 0 HcmV?d00001 diff --git a/testt.c b/testt.c new file mode 100644 index 0000000..3fe2e8a --- /dev/null +++ b/testt.c @@ -0,0 +1,28 @@ +#include +#include + +int main(int argc, char **argv) { + int rank, size, root_process; + + MPI_Status status; + + MPI_Init(&argc, &argv); + + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); + + if( rank == 0 ) { + printf("I am the first process\n"); + } + else if( rank == 1 ) { + printf("I am the second process\n"); + } + else if( rank == 2 ) { + printf("I am the third process\n"); + } + else { + printf("I am a remaning process\n"); + } + + MPI_Finalize(); +}