
Risorsa bibliografica obbligatoria 

Risorsa bibliografica facoltativa 

Anno Accademico

2014/2015

Scuola

Scuola di Ingegneria Industriale e dell'Informazione 
Insegnamento

095959  ALGORITHMS AND PARALLEL COMPUTING

Docente 
Cremonesi Paolo

Cfu 
10.00

Tipo insegnamento

Monodisciplinare

Corso di Studi 
Codice Piano di Studio preventivamente approvato 
Da (compreso) 
A (escluso) 
Insegnamento 
Ing Ind  Inf (Mag.)(ord. 270)  MI (403) INGEGNERIA MATEMATICA  *  A  ZZZZ  095959  ALGORITHMS AND PARALLEL COMPUTING  088940  ALGORITMI E CALCOLO PARALLELO  Ing Ind  Inf (Mag.)(ord. 270)  MI (487) MATHEMATICAL ENGINEERING  INGEGNERIA MATEMATICA  *  A  ZZZZ  095959  ALGORITHMS AND PARALLEL COMPUTING 
Programma dettagliato e risultati di apprendimento attesi 
ALGORITHMS AND PARALLEL COMPUTING
Description
Historically, parallel computing has been considered to be the highend of computing, and has been used to model difficult problems in many areas of science and engineering. Today, commercial applications provide an equal or greater driving force in the development of faster programs. These applications require the processing of large amounts of data in sophisticated ways. Dataintensive applications such as data mining, recommender systems, financial modelling and multimedia processing have implications on the design of algorithms and provide a new challenge for the modern generation of computing platforms. Parallel processing is the only costeffective method for the fast solution of these bigdata problems. The emergence of inexpensive parallel computers such as commodity desktop multiprocessors, graphic processors, and clusters of PCs has made parallel methods generally applicable, as have software standards for portable parallel programming.
This course provides the students with all the skills necessary to write efficient algorithms, able to solve largescale problems on parallel computers. The emphasis is on teaching concepts applicable across a wide variety of problem domains, and transferable across a broad set of computer architectures.
Topics
The course is structured in four parts.
 The first part of the course covers modern objectoriented programming (OOP) and introduces the fundamentals of the C++11 programming language. C++11 is used as the reference language through the rest of the course. This part is mainly handson, and students gain experience in designing simple but powerful objectoriented applications and in writing code using the C++11 language. Example problems covers both traditional computer science algorithms (sorting, searching, lists and graphs, dynamic programming) as well as simple scientific computing algorithms (matrix computations).
 The second part covers dataintensive algorithms for information retrieval and datamining problems. These algorithms adopt collaborativefiltering and contentbased filtering techniques to facilitate search in large amounts of data. During the last years, bigdata algorithms have seen an increasing adoption in various services. The most famous success story is Netflix. The Netflix company launched in 2009 a competition (www.netflixprize.com) offering a 1 million dollar prize to anyone able to create a better information retrieval system than the one adopted by Netflix itself. This part of the course presents several dataintensive algorithms, including the Netflix winner algorithm.
 The third part covers the main aspects of parallel computing: parallel architectures, programming paradigms, parallel algorithms. Parallel architectures range from inexpensive commodity multicore desktops, to generalpurpose graphic processors, to clusters of computers, to massively parallel computers containing tens of thousands of processors. Students learn how to analyse and classify these architectures in terms of their components (processor architecture, memory organization, and interconnection network). Pros and cons of different parallel programming paradigms (e.g., functional programming, shared memory, message passing) are evaluated by means of simple case studies.
 The fourth part of the course introduces MPI, OpenMP, and Cuda, three of the most widely used standards for writing portable parallel programs, each of them representative of a different programming paradigm. This part includes a significant programming component in which students program concrete examples from bigdata domains such as data mining, information retrieval, recommender systems, and operations research.
Please refer to the course official web site for further details.
Prerequisites
Prerequisite is the knowledge of a programming language, preferentially C.

Note Sulla Modalità di valutazione 
Tipo Forma Didattica

Ore didattiche 
lezione

60.0

esercitazione

40.0

laboratorio informatico

0.0

laboratorio sperimentale

0.0

progetto

0.0

laboratorio di progetto

0.0

Informazioni in lingua inglese a supporto dell'internazionalizzazione 
Insegnamento erogato in lingua
Inglese

