logo-polimi
Loading...
Risorse bibliografiche
Risorsa bibliografica obbligatoria
Risorsa bibliografica facoltativa
Scheda Riassuntiva
Anno Accademico 2019/2020
Scuola Scuola di Ingegneria Industriale e dell'Informazione
Insegnamento 054073 - ADVANCED PROGRAMMING FOR SCIENTIFIC COMPUTING
Docente Formaggia Luca
Cfu 10.00 Tipo insegnamento Monodisciplinare
Didattica innovativa L'insegnamento prevede  1.0  CFU erogati con Didattica Innovativa come segue:
  • Blended Learning & Flipped Classroom

Corso di Studi Codice Piano di Studio preventivamente approvato Da (compreso) A (escluso) Insegnamento
Ing Ind - Inf (Mag.)(ord. 270) - BV (478) NUCLEAR ENGINEERING - INGEGNERIA NUCLEARE*AZZZZ054073 - ADVANCED PROGRAMMING FOR SCIENTIFIC COMPUTING
054383 - ADVANCED PROGRAMMING FOR SCIENTIFIC COMPUTING
Ing Ind - Inf (Mag.)(ord. 270) - MI (487) MATHEMATICAL ENGINEERING - INGEGNERIA MATEMATICA*AZZZZ054073 - ADVANCED PROGRAMMING FOR SCIENTIFIC COMPUTING
054383 - ADVANCED PROGRAMMING FOR SCIENTIFIC COMPUTING

Obiettivi dell'insegnamento

The course aims at providing concepts of scientific computing and C++ programming. It addresses procedural, object oriented and generic programming techniques, parallel computing with message passing (MPI) and shared memory (openMP) paradigms, debugging and profiling of computer codes, program organization, data structures, design patterns  and numerical algorithms.

The course is offered in a 10-credit version, to which 8 CFU are offered jointly with the course 095976 Advanced Programming for Scientific Computing. The present detailed program defines aims, educational outcomes and syllabus for both versions. The difference between the two versions is in the evaluation procedure, where the 10 credit course implies necessarily the development of a project.


Risultati di apprendimento attesi

The expected learning outcomes are:

Knowledge and understanding:

  • Learn and understand the main programming techniques and design patterns  instrumental to the development of  scientific codes;
  • Learn and understand the practical implementation of some numerical techniques adopted in scientific computing;
  • Learn and understand how to develop scientific code in a scalar and in a parallel environment;
  • Learn and understand how to write efficient scientific codes and the main  techniques for debugging and profiling.

Applying knowledge and understanding:

  • Apply the acquired techniques to a practical contexts;
  • Motivate the choice of the adopted methods and tools;

Making judgment:

  • Choose the appropriate code design for a specific objective
  • Develop autonomous thinking by chosing the structure and design of the developed code in great autonomy;

Communication skills:

  • Organize codes for readability and comment it using de-facto standard tools to produce reference manual automatically;
  • Strenghten his-her written and oral communication skills through the writing of the project report and the presentation of the results. 

Ability in learning:

  • The students has to elaborate on the material provided during lectures and laboratory sessions in order to chose the appropriate software design, programming paradigms and implementation techniques. Will also learn on how to interface his/her code with existing libraries. This activity will strenghten his/her capability of autonoumous learning.

 


Argomenti trattati

1)    Advanced C++ programming. This part aims to complete the student knowledge of computer languages by providing an exhaustive illustration of the advanced features of C++, including those added in the new C++11/14 standard, with an emphasis on scientific computing applications. We will also give elements of numerical linear algebra, like iterative solution of large linear systems and eigenvalue problems, solution of non-linear systems of equations.

2)   Code design and organization. In this part of the course we cover the main design patterns, exception handling, static and dynamic libraries, debugging and profiling of computer codes, code versioning systems.

3)  Application of Parallel programming. In this part of the course we address practical issues of parallel programming in the contest of numerical algorithms.

 

 


Prerequisiti
  • Knowledege of basic numerical or statistical techiques;
  • Basic knowledge of the C++ language

Modalità di valutazione

For the 10 Credits version the final assessment is made through a project where a mathematical problem or an engineering application is solved by developing a computer program. The students should prepare a short report and present the project with an oral presentation folowed by questions by the teachers.  Projects may be carried out in groups of up to two students. In exceptional cases (more complex projects) the group may be formed by three students. The student is required to produce a short report (23/30 pages) and present the results orally with the aid of slides. The presentation is followed by questions from the teachers.

For the 8 credit version, the student is given the possibility of carrying out a simpler project based on extending or improving one of the examples shown at lecture or during the exercise sessions, in groups of  up three students, followed by a short presentation of the work, or to carry out a written exam with questions concerning the techniques presented during lectures and exercise sessions and a simple program to develop and test, followed by an oral presentation and questions from the teachers.

In both cases we assess:

1) The quality of the report and of the oral presentation, both in terms of clarity and completeness. (Desctiptor 3 and 4)

2) The originality of the software design, its usability, extendability and efficacy for the target problem (Descriptor  2 and 3)

3) The capability of the student to apply the knowledge and technique aquired during the course (Descriptors 1 and 2)

4) The autonomy in chosing tools, programming paradigms and external libraries (Descriptor 5)

 

 


Bibliografia
Risorsa bibliografica facoltativaS.B Lippman et al., C++ Primer (5th Edition) , ISBN: 978-0321714114
Risorsa bibliografica facoltativaPeter Gottschling, Discovering Modern C++: An Intensive Course for Scientists, Engineers, and Programmers, ISBN: 978-0134383583
Risorsa bibliografica obbligatoriaNotes at disposal on the beep site of Politecnico di Milano https://beep.metid.polimi.it/

Forme didattiche
Tipo Forma Didattica Ore di attività svolte in aula
(hh:mm)
Ore di studio autonome
(hh:mm)
Lezione
55:00
82:30
Esercitazione
30:00
45:00
Laboratorio Informatico
0:00
0:00
Laboratorio Sperimentale
0:00
0:00
Laboratorio Di Progetto
15:00
22:30
Totale 100:00 150:00

Informazioni in lingua inglese a supporto dell'internazionalizzazione
Insegnamento erogato in lingua Inglese
Disponibilità di materiale didattico/slides in lingua inglese
Disponibilità di libri di testo/bibliografia in lingua inglese
Possibilità di sostenere l'esame in lingua inglese
Disponibilità di supporto didattico in lingua inglese
schedaincarico v. 1.6.1 / 1.6.1
Area Servizi ICT
20/01/2020