1. Iulius Curt
  2. Tema2-SPRC

Overview

Tema 2 SPRC - (MapReduce cu MPI)

Iulius Curt  |  334CA


Continut arhiva:
	- main.c  - sursa principala
	- main.h  - headerul principal (contine structuri si macrouri)
	- Makefile  - cu targeturi de baza: build, clean si run(rulare exemplu)
	- config.ini  - fisierul de configurare

Exemplu de rulare:
	- mpirun -np <P> ./main config.ini input.txt


Comunicatia:
	- Comunicatia intre Master si celelalte procese Mapper se face in
	  comunicatorul `MPI_COMM_WORLD`.
	- Comunicatia intre fiecare Mapper si procesele Worker cu care lucreaza se
	  face intr-un comunicator propriu.
	- Master trimite Mapperilor offseturile in fisierul de intrare, iar Mapperii
	  trimit Workerilor aferenti bucati de siruri de caractere.

Impartirea muncii:
	- Se incearca o impartire egala, atat in Master, cat si in Mapperi. Apar,
	  totusi, diferente de maximum dimensiunea unui cuvant pentru evitarea
	  ruperii cuvintelor.
	- Sfarsitul unui calup de munca (text) se alege la cel mai apropiat sfarsit
	  de cuvant aflat dupa dimensiunea prealocata procesului in cauza.

Procesarea:
	- Procesele Worker citesc bucata, primita de la Mapperul partinte, cuvant
	  cu cuvant si le adauga sau incrementeaza frecventa intr-un hashtable.
	- Pentru hashtable am folosit UTHash (http://uthash.sourceforge.net/).

Serializarea datelor:
	- Pentru trimiterea hashtable-ului rezultat din procesarea Workerilor,
	  acesta se serializeaza in 3 array-uri:
	  	- array char in care sunt concatenate toate cuvintele in ordine
	  	- array int in care sunt retinute lungimile cuvintelor concatenate
	  	- array int in care sunt retinute frecventele cuvintelor

Agregarea datelor:
	- In scopul agregarii datelor serializate venite de la mai multi Workeri,
	  un nou hashtable este creat si este populat cu toate datele.

Rezultate timp:
	- Se obtin rezultate destul de proaste:
	  0m21.067s