fişa disciplinei
1. Date despre program
1.1 Instituţia de învăţământ superior	Universitatea Babeş-Bolyai Cluj-Napoca	
1.2 Facultatea	Facultatea de Matematică şi Informatică	
1.3 Departamentul	Departamentul de Informatică	
1.4 Domeniul de studii	Informatică	
1.5 Ciclul de studii	Licenţă	
1.6 Programul de studiu / Calificarea	Informatică (ȋn limba germană)	

2. Date despre disciplină
2.1 Denumirea disciplinei (ro)
(en)	
Programare Paralelă și Distribuită
Parallel and Distributed Programming	
2.2 Titularul activităţilor de curs	Conf. dr. Christian Săcărea	
2.3 Titularul activităţilor de seminar	Conf. dr. Christian Săcărea	
2.4 Anul de studiu	3	2.5 Semestrul	5	2.6. Tipul de evaluare	E	2.7 Regimul disciplinei	Obligatoriu	
2.8 Codul disciplinei	MLG5165		

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

4. Precondiţii (acolo unde este cazul)
4.1 de curriculum	•	Programare orientata pe obiecte
•	Structuri de date și algoritmi
•	Sisteme de operare	
4.2 de competenţe	•	Deprinderi de programare	

5. Condiţii (acolo unde este cazul)
5.1 De desfăşurare a cursului	•	Sală de curs cu videoproiector	
5.2  De desfăşurare a seminarului/laboratorului	•	Laborator cu stații de lucru	

6. Competenţele specifice acumulate
Competenţe profesionale	•	C3.1 Identificarea unor clase de probleme şi metode de rezolvare caracteristice sistemelor informatice 
•	C3.2 Utilizarea de cunoştințe interdisciplinare, a tiparelor de soluții şi a uneltelor, efectuarea de experimente şi interpretarea rezultatelor lor
•	C4.2 Explicarea rolului, interacțiunii şi funcționării componentelor sistemelor software 
•	C4.5 Dezvoltarea şi implementarea şi integrarea soluțiilor software	
Competenţe transversale	•	CT1 Honorable, responsible, ethical behavior, in the spirit of the law, to ensure the professional reputation 
•	CT3 Demonstrating initiative and pro-active behavior for updating professional, economical and organizational culture knowledge 	

7. Obiectivele disciplinei (reieşind din grila competenţelor acumulate)
7.1 Obiectivul general al disciplinei	•	Achiziționarea conceptelor de bază privind programarea concurentă, paralelă și distribuită
•	Bazele comunicării între procese și între thread-uri, în cadrul aceleiași mașini sau între mașini distincte
•	Cunoașterea tehnicilor de bază ale programării paralele
•	Cunoașterea și utilizarea pattern-urilor de proiectare a aplicațiilor paralele
•	Cunoașterea și utilizarea framework-urilor existente pentru dezvoltarea aplicațiilor paralele și distribuite	
7.2 Obiectivele specifice

	•	Arhitecturi paralele și sisteme de programare paralelă
•	Cunoașterea utilizării tehnicilor de programare paralelă în rezolvarea problemelor
•	Cunoașterea modului de evaluare a câștigurilor de performanță obținute prin paralelizare
•	Deprinderea de a lucra individual sau în echipă pentru a rezolva probleme într-un context paralel sau distribuit	

8. Conţinuturi
8.1 Curs	Metode de predare	Observaţii	
1. Introducere generală: necesitatea utilizării paralelismului; prelucrare concurentă vs paralelă vs distribuită; nivele de paralelism	Expunerea conceptelor, exemple, studii de caz		
2. Arhitecturi paralele; Pipeline; Mașini vectoriale; Sisteme grid și cluster; Supercomputere	Expunerea conceptelor, exemple, studii de caz		
3. Procese vs thread-uri; managementul proceselor / thread-urilor	Expunerea conceptelor, exemple, studii de caz		
4. Concepte de concurență: race condition, secțiuni critice, excludere mutuală, deadlock; sincronizare: monitoare, semafoare	Expunerea conceptelor, exemple, studii de caz		
5. Modele de paralelism; paralelism implicit / explicit; paralelism al datelor; pasăre de mesaje; memorie partajata;	Expunerea conceptelor, exemple, studii de caz		
6. Programare paralelă în memorie partajata: thread-uri C, C++, Java; OpenMP	Expunerea conceptelor, exemple, studii de caz		
7. Evaluarea performanței programelor paralele: PRAM (Parallel Random Access Machine). Eficientă, cost, scalabilitate	Expunerea conceptelor, exemple, studii de caz		
8. Pattern-uri de programare paralelă: master/slave, task farm / work pool; divide et impera; pipeline	Expunerea conceptelor, exemple, studii de caz		
9. Programare paralelă prin pasare de mesaje. MPI	Expunerea conceptelor, exemple, studii de caz		
10. Faze în programele paralele: PCAM (Partiționare, Comunicare, Agregare, Mapare): descompunerea task-urilor; descompunerea domeniului; granularitate; grad de paralelism; dependențele între task-uri	Expunerea conceptelor, exemple, studii de caz		
11. Tehnici de construcție a programelor paralele: divide et impera; arbori binari; dublare recursivă	Expunerea conceptelor, exemple, studii de caz		
12. Programare bazată pe paralelismul datelor	Expunerea conceptelor, exemple, studii de caz		
13. GPGPU (programare generală utilizând procesorul grafic): OpenCL, CUDA	Expunerea conceptelor, exemple, studii de caz		
14. Sisteme de fișiere distribuite	Expunerea conceptelor, exemple, studii de caz		
Bibliografie
1. Ian Foster. Designing and Building Parallel Programs, Addison-Wesley 1995.
2. Michael McCool, Arch Robinson, James Reinders, Structured Parallel Programming: Patterns for
Efficient Computation,” Morgan Kaufmann,, 2012 .
3. Berna L. Massingill, Timothy G. Mattson, and Beverly A. Sanders,Addison A Pattern Language for
Parallel Programming. Wesley Software Patterns Series, 2004.
4. Grama, A. Gupta, G. Karypis, V. Kumar. Introduction to Parallel Computing, Addison Wesley, 2003.
5. D. Grigoras. Calculul Paralel. De la sisteme la programarea aplicatiilor. Computer Libris Agora, 2000.
6. V. Niculescu. Calcul Paralel. Proiectare si dezvoltare formala a programelor paralele. Presa Univ.
Clujana, 2006.
7. D.B. Skillicorn, D. Talia. Models and Languages for Parallel Computation. ACM Computer Surveys,
30(2) pg.123-136, June 1998.
8. B. Wilkinson, M. Allen, Parallel Programming Techniques and Applications Using Networked
Workstations and Parallel Computers, Prentice Hall, 2002
9. E.F. Van de Velde. Concurrent Scientific Computing. Spring-Verlag, New-York Inc. 1994.
10. Boian F.M. Ferdean C.M., Boian R.F., Dragos R.C. Programare concurenta pe platforme Unix,
Windows, Java. Ed. Albastra, grupul Microinformatica, Cluj, 2002 .
11. OpenMP docs: https://www.openmp.org/
12. MPI docs: https://docs.open-mpi.org/
13. CUDA docs: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
14. OpenCL docs: https://www.khronos.org/opencl/	
8.2 Seminar / laborator	Metode de predare	Observaţii	
L1 Thread-uri vs procese			
L2-L5 Programare concurentă C++, Java, C#			
L6-L7 OpenMP			
L8-L10 MPI			
L11-L14 CUDA/OpenCL			

			
Bibliografie	
1. Eckel, B., Thinking in Java, 4th Edition, New York: Prentice Hall, 2006.
2. Larman, C.: Applying UML and Design Patterns: An Introduction to OO Analysis and Design, Berlin: Prentice Hall, 2004.
3. Fowler, M., Patterns of Enterprise Application Architecture, Addison-Wesley, 2002.
4. E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns – Elements of Reusable Object Oriented Software, Ed. Addison Wesley, 1994.
5. Walls, Craig, Spring in Action, Third Edition, Ed. O’Reilley, 2011.
6. Kent Beck, Test Driven Development: By Example, Ed. Addison-Wesley Professional, 2002.
7. ***, http://download.oracle.com/javase/tutorial/
8. ***, http://msdn.microsoft.com/en-us/library/aa288436%28v=vs.71%29.aspx	

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 urmează recomandările ACM și IEEE pentru studiile de informatică (computer science)
•	Cursul face parte din curricula la toate marile universități din țară și din afară
•	Companiile de software consideră cursul important pentru dobândirea deprinderilor avansate de programare	

10. Evaluare
Tip activitate	10.1 Criterii de evaluare	10.2 metode de evaluare	10.3 Pondere din nota finală	
10.4 Curs	Cunoașterea conceptelor de bază	examen scris	40%	
	Aplicarea cunoștințelor teoretice în rezolvarea de probleme	proiect de semestru	30%	
10.5 Seminar/laborator	Aplicarea cunoștințelor teoretice în rezolvarea de probleme	evaluarea lucrărilor de laborator	30%	
				
10.6 Standard minim de performanţă	
•	Minim nota 4.5 din 10 la examenul scris
•	Minim 4.5 din 10 media notelor	

Data completării		Semnătura titularului de curs		Semnătura titularului de seminar
13.04.2024			Conf. dr. Christian Săcărea			Conf. dr. Christian Săcărea

Data avizării în departament			           Semnătura directorului de departament	
...........................................					Conf. dr. Adrian Sterca