fişa disciplinei
1. Date despre program
1.1 Instituţia de învăţământ superior	Universitatea Babes-Bolyai Cluj-Napoca	
1.2 Facultatea	Facultatea de Matematica si Informatica	
1.3 Departamentul	Departamentul de matematica	
1.4 Domeniul de studii	Informatica	
1.5 Ciclul de studii	Licenta	
1.6 Programul de studiu / Calificarea	Informatica	

2. Date despre disciplină
2.1 Denumirea disciplinei	Programare paralelă: tehnici şi paradigme	
2.2 Titularul activităţilor de curs	Conf. Dr. Niculescu Virginia	
2.3 Titularul activităţilor de seminar	Conf. Dr. Niculescu Virginia	
2.4 Anul de studiu	3	2.5 Semestrul	6	2.6. Tipul de evaluare	colocviu	2.7 Regimul disciplinei	Optional	

3. Timpul total estimat (ore pe semestru al activităţilor didactice)
3.1 Număr de ore pe săptămână	3	Din care: 3.2 curs	2	3.3 seminar/laborator	1	
3.4 Total ore din planul de învăţământ	42	Din care: 3.5 curs	28	3.6 seminar/laborator	14	
Distribuţia fondului de timp:	ore	
Studiul după manual, suport de curs, bibliografie şi notiţe	20	
Documentare suplimentară în bibliotecă, pe platformele electronice de specialitate şi pe teren	10	
Pregătire seminarii/laboratoare, teme, referate, portofolii şi eseuri	23	
Tutoriat	7	
Examinări 	20	
Alte activităţi: ..................	-	
3.7 Total ore studiu individual	80	
3.8 Total ore pe semestru	150	
3.9 Numărul de credite	6	

4. Precondiţii (acolo unde este cazul)
4.1 de curriculum	•	Fundamentele programarii, Structuri de date	
4.2 de competenţe	•	Abilitati de implementare programe.	

5. Condiţii (acolo unde este cazul)
5.1 De desfăşurare a cursului	•	proiector	
5.2  De desfăşurare a seminarului/laboratorului	•	laborator cu statii de lucru	

6. Competenţele specifice acumulate
Competenţe
profesionale	
•	Fiecarea student trebuie sa dovedeasca faptul ca a dobandit un nivel de cunostinte si intelegere a subiectului si ca este capabil (a) sa exprime aceste cunostinte; si, de asemenea, ca poate folosi aceste cunostinte in rezolvarea unor probleme prin implementarea solutiilor folosind programarea paralela.	
Competenţe transversale	-	Abilitatea de a aplica tehnici specifice programarii paralele in rezolvarea problemelor.
-	Abilitatea de evalua cresterea de performanta obtinuta prin folosirea paralelizarii.
-	Abilitatea de a implementa programe paralele.

7. Obiectivele disciplinei (reieşind din grila competenţelor acumulate)
7.1 Obiectivul general al disciplinei	-	Cunoasterea, intelegerea conceptelor de baza ale programarii paralele.
-	Abilitatea de a lucra independent sau in echipa pentru a rezolva probleme intr-un context de programare paralela.
-	Cunoasterea, intelegerea paradigmelor si tehnicilor de baza ale programarii paralele.	
7.2 Obiectivele specifice

	-	Obtinerea de cunostinte de baza despre programarea paralela. 
-	Cunoasterea si folosirea celor mai importante paradigme/tehnici de dezvoltare a programelor paralele. 
-	Implementarea programe paralele folosind  thread-uri Java(sau C#),  sau Parallel Python sau OpenMP.
-	Realizarea unui Proiect(aplicatie)  folosind pentru implementare una dintre variantele specificate anterior	

8. Conţinuturi
8.1 Curs	Metode de predare	Observaţii	
1.	Introducere generala in programarea paralela:
-	necesitatea folosirii paralelismului;
-	probleme si dificultati in programarea paralela;
Arhitecturi paralele - Taxonomii	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
2.	 Tipuri de paralelism
•	 Paraleism implicit
•	 Paraleism explicit
-	Modelul Data-parallel 
-	Modelul Message-passing 
-	Modelul Shared-variable 	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
3.	PRAM (Parallel Random Access Machine)
Retele computationale
Evaluarea performantei programelor paralele: complexitate-timp, complexitate-procesor, acceleratie, eficienta, cost; evaluare scalabilitate.	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
4.	Faze in dezvoltarea programelor paralele (PCAM)
-	Partitionare, Comunicare,  Aglomerare, Mapare
Partitionare->Descompunere
-	functionala (task decomposition)
-	a domeniului de date(geometrica)
              distributii de date	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
5.	Concurenta – concepte
Race-conditions, critical section, mutual exclusion, deadlock
-	Sincronizare: monitoare, semafoare,	Expunere, descriere, explicatie, exemple , discutii  ale unor studii de caz.		
6.	Programare paralela in medii cu memorie partajata.
Java Threads, OpenMP
	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
7.	
Programare paralela in medii cu memorie distribuita.
MPI	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
8.	Programare paralela in medii cu memorie partajata si distribuita.

Parallel Python	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
9.	  Paradigme ale programarii paralele:
-	Master-slaves
- Task-Farm
-	Work-Pool	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
10.	Paradigme ale programarii paralele:
 - Divide &Impera
Tehnici  utilizate in constructia algoritmilor paraleli: 
- Tehnica arborelui binar
- Tehnica dublarii recursive	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
11.	Paradigme ale programarii paralele::
-	Pipeline
-	Modelul Map-Reduce
	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
12.	Exemple de algoritmi paraleli:
- algoritmi numerici: inmultire de matrici, rezolvare sistem linear
	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
13.	Exemple de algoritmi paraleli 
- algoritmi de sortare
- algoritmi de cautare
	Expunere, descriere, explicatie, exemple, discutii  ale unor studii de caz.		
14.	Prezentare proiecte 
	Discutii, analize, evaluari.		
Bibliografie
1.	Ian Foster. Designing and Building Parallel Programs, Addison-Wesley 1995. 
2.	Grama, A. Gupta, G. Karypis, V. Kumar. Introduction to Parallel Computing, Addison Wesley, 2003.
3.	D. Grigoras. Calculul Paralel. De la sisteme la programarea aplicatiilor. Computer Libris Agora, 2000.
4.	V. Niculescu. Calcul Paralel. Proiectare si dezvoltare formala a programelor paralele. Presa Univ. Clujana, 2006.
5.	D.B. Skillicorn, D. Talia. Models and Languages for Parallel Computation. ACM Computer Surveys, 30(2) pg.123-136, June 1998. 
6.	B. Wilkinson, M. Allen, Parallel Programming Techniques and Applications Using Networked Workstations and Parallel Computers, Prentice Hall, 2002 
7.	E.F. Van de Velde. Concurrent Scientific Computing. Spring-Verlag, New-York Inc. 1994.
	
8.2 Seminar / laborator	Metode de predare	Observaţii	
1.	Exemple simple de algoritmi paraleli.	Dialog, dezbatere, explicatie,exemple.		
2.	Tehnici folosite in constructia programelor paralele.	Dialog, dezbatere, explicatie,exemple.		
3.	Exemple folosind Java Threads
	Dialog, dezbatere, explicatie,exemple.		
4.	Exemple OpenMP
	Dialog, dezbatere, explicatie,exemple.		
5.	Exemple folosind Parallel Python
	Dialog, dezbatere, explicatie,exemple.		
6.	Exemple MPI.
	Dialog, dezbatere, explicatie,exemple.		
7.	Prezentari ale proiectelor studentilor
	Dialog, dezbatere, explicatie,exemple.		
Bibliografie	
1.	Parallel Python, [http://www.parallelpython.com/] 
2.	Java Programming Language [www.oracle.com/us/technologies/java/overview]
3.	OpenMP[http://openmp.org/wp/]
4.	MPI[http://www.mpi-forum.org/]

9. Coroborarea conţinuturilor disciplinei cu aşteptările reprezentanţilor comunităţii epistemice, asociaţiilor profesionale şi angajatori reprezentativi din domeniul aferent programului
•	Cursul respecta Recomandarile IEEE and ACM Curricula pentru studii in Computer Science;
•	Cursuri cu tematica similara exista in programele de studii ale majoritatii universitatilor din tara si strainatate.
•	Cursul defineste dobandirea unor abilitati care constituie avantaje evidentiate de potentialele firme angajatoare din domeniu.	

10. Evaluare
Tip activitate	10.1 Criterii de evaluare	10.2 metode de evaluare	10.3 Pondere din nota finală	
10.4 Curs	 In scopul evaluarii obtinerii competentelor specifice, fiecare student va dezvolta un proiect prin care va rezolva o problema cu specificatii date, folosind programare paralela(se va alege unul dintre limbajele discutate). Proiectul va avea o documentatie care va descrie metoda de paralelizare si evaluarea performantei.	colocviu
	Prezentarea proiectului =
50%	
10.5 Seminar/laborator			Implementarea proiectului = 50%	
10.6 Standard minim de performanţă	
•	 
Minim 5 la media finala.

Data completării		  Titular de curs		               Titular de laborator
1.04.2013.......		....Niculescu Virginia.........			..Niculescu Virginia.....

Data avizării în departament			                          Director de departament	
...........................................						…............................