Vous êtes sur la page 1sur 57

Programmation

SPHYS B208

Luc Henrard

15 heures de cours
45 heures de TP
4 crédits
Evaluation : Codes pendant l'année +
Examen de TP (livre ouvert)

Webcampus
Agenda

Lundi 10h40 (2h) : Semaine 1 (18/09) à semaine 10 (20/11)


Mercredi 10h40 (1h30) : Semaines 1 à 14 semaine 2 (27/09)
Jeudi 14h (1h30) : Semaines 1 à 14 sauf semaine 4 (12/10)

Cours et TP au Pool Jean-Pol Vigneron (PA)

L 18/09 Cours (Intro)


M 20/09 Cours (Langage 1)
J 21/09 TP1
L 25/09 TP2
M 27/09 X
J 28/09 TP 3
L 02/10 Cours (Language 2)
M 04/10 TP3-4
J 05/10 TP 4
L 9/10 Cours (procédures)
M 11/10 Cours (procédure)
J 12/10 X
L 16/10 TP 5
M 18/10 TP 6
(to be continued ...)
Pool Jean-Pol Vigneron
Comment apprendre à programmer ?

Approche : “Problem solving”

Integration cours – TP
Ce cours sert-il à quelque chose ?
Computational Physics

Physique

Computational
Physics

Informatique
(Hardware / Software) Math
(Algorithmes)
Computational Physics

Vue traditionnelle Vue intégrée

Nature Physics (2015)


Références

Une aide en ligne n'est pas un livre de référence.


Un dictionnaire ne permet pas de parler une langue
PRINT *, 'bonjour'

OU

WRITE (*,*) 'bonjour'


Introduction

● Le matériel informatique évolue rapidemment.

● La programmation et les méthodes numériques évoluent


aussi (mais les bases restent ...).

● La programmation peut s'apprendre (et s'utiliser)


sur 'tout' materiel (récent, ancien, GPU, …).

● Diversité de préacquis chez les étudiants.


Loi de Moore
Evolution très rapide des moyens de calculs

Rm : prophétie auto-réalisatrice

More than Moore : Partir des applications vers le 'hardware'

More then Moore. M.M. Waldrop. Nature (2016)


La Physique avant 1950

Théorique

Experimental

Numérique
La Physique en 1970

Théorique

Experimental

Numérique
La Physique en 1990

Théorique

Numérique
Experimental
La Physique en 2015

Théorique

Numérique
Experimental

Un physicien ne peut plus ignorer les méthodes numériques !


Particles élémentaires Physique des solides / Matériaux

Optique / accoustique
● Prédiction climatique

● Metéorologie

● Analyse du son et de l'image

● Cosmologie

● Biologie structurale et 'drug design'

● Dynamique des fluides

● Dynamique des véhicules


La programmation
● Programmer n'est pas avoir l'habitude d'un ordinateur.

● 'Bien' programmer est nécessaire à la fois sur les PC et les super- ordinateurs

● Programmer = Faire faire des opérations à un exécutant stupide


avec un nombre de mots restreint

● Principale difficulté : exécution en différé !


November 2016

June 2016

www.unamur.be
IBM type 704 (1954)
4 kFLOPS

PTCI Namur (2013) 14 TFLOPS


La physique et les ordinateurs
La physique et les performances d'un ordinateur
Les transistors
Transistor bi-polaire Transistor à effet de champs

''ON'

'OFF'
La physique et les performances d'un ordinateur

Transistor ● Transistor à lampe (1900)


1900 (1)
● Transistor à semiconducteur (Jonction npn)
(Bardeen, Schokley, Brattain
Prix Nobel Physique 1956)

● Transistor Metal-Oxyde-Semiconducteur (MOS)


Transistor à effet de champs (FET)

2010 (109) ● Lithographie


La physique et les performances d'un ordinateur
Magnétorésistance géante
(Nobel 2009)
Mémoire / disque

● Optique

● Magnetique

Batterie

Ecran
La physique et les performances d'un ordinateur
Un challenge : consommation électrique et refroidissement
Plan du cours
Partie 0 : Avant de programmer ...

Partie I : Un langage de programmation : Le FORTRAN

1. Les bases et premiers programmes

2. Les procédures

Partie II : Physique numérique

3. Erreurs en calcul numérique

4. Intégration et différentiation numérique

5. Algorithmes par essais et erreurs

6. Data fitting

7. Nombres aléatoires

Partie III : Quelques notions supplémentaires

8 . Optimisation de code

9. Notions avancées de FORTRAN


Plan du cours

Partie 0 : Avant de programmer …

● Structure d'un ordinateur

● Système d'exploitation

● Logiciels libres et propriétaires

● Qualités d'un programme

● Étapes de développement d'un programme

● Interprétation et compilation
Structure d'un ordinateur
Mémoire principale Mémoire
(RAM - 1/2 C) secondaire
(Disques)

Mémoire interne
Registres

Entrée Unité de controle Sortie

Unité arithmétique
et logique

Central Processing Unit (CPU)


Structure d'un ordinateur
Mémoire principale Mémoire
(RAM - 1/2 C) secondaire
(Disques)

Mémoire interne

Entrée Unité de controle Sortie

Unité arithmétique
et logique

Central Processing Unit


Structure d'un ordinateur
Mémoire principale Mémoire
(RAM - 1/2 C) secondaire
(Disques)

Mémoire interne
(Registres)

Entrée Unité de controle Sortie

Unité arithmétique
et logique

Central Processing Unit


Structure d'un ordinateur
Mémoire Permanente
'Volatile' Mémoire principale
(RAM - 1/2 C) 4 Gb secondaire Lente
(Disques) 100 Gb (Gb/s)
Rapide
(Tb/s)

Mémoire interne
(Registres)

Entrée Unité de controle Sortie

Unité arithmétique
et logique
Clock : 2.2 GHz

Central Processing Unit


Utilisation d'un ordinateur

Utilisateur

Application
Programme
Software

Système d'exploitation
(OS)

Matériel
Hardware
Utilisation d'un ordinateur

Utilisateur

Application
Ensemble de fichiers Programme
Software

Ensemble de fichiers Système d'exploitation Gestion de base


(fichiers cachés) (OS)

Matériel
Matériel physique
Hardware
Utilisation d'un ordinateur
Au delà du PC !

Utilisateur

Administrateur
Système
Application
Programme
Software Autres
Utilisateurs

Système d'exploitation
(OS)

Matériel
Matériel physique
Hardware
Plan du cours

1. Introduction et contexte

2. Avant de programmer …
● Structure d'un ordinateur

● Système d'exploitation

● Logiciels libres et propriétaires

● Qualités d'un programme

● Étapes de développement d'un programme

● Interprétation et compilation
Systèmes d'exploitation

Single – Multi-user

Single – Multi-tasking
Systèmes d'exploitation
Systèmes d'exploitation
Systèmes d'exploitation

Top 500 supercomputers


Plan du cours

1. Introduction et contexte

2. Avant de programmer …
● Structure d'un ordinateur

● Système d'exploitation

● Logiciels libres et propriétaires

● Qualités d'un programme

● Étapes de développement d'un programme

● Interprétation et compilation
Logiciel libre et propriétaire
● Logiciel propriétaire : logiciel dont l'utilisation, la duplication ou la modification est limitée. (licence)

● Logiciel libre est un logiciel dont l'utilisation, l'étude, la modification et la duplication en vue de sa diffusion
sont permises, techniquement et légalement, afin de garantir certaines libertés à l'utilisateur.

GNU (www.gnu.org) (1984 – Richard Stadelman) et Copyleft

● Freeware : Logiciel gratuit (pas nécessairement un logiciel libre ...)

● Opensource : Logiciel dont la source est accessible


(mais pas nécessairement gratuit).

Ex : GNU/Linux, Libreoffice, …
Plan du cours

1. Introduction et contexte

2. Avant de programmer …
● Structure d'un ordinateur

● Système d'exploitation

● Logiciels libres et propriétaires

● Qualités d'un programme

● Étapes de développement d'un programme

● Interprétation et compilation
Qualités d'un programme
pour un physicien
KISS : Keep it simple, stupid

● Fiabilité (bon résultat pour toutes les entrées et tous les utilisateurs, stabilité,...)

Les codes sont écrits par des humains, pour des humains (pas pour l'ordinateur)

● Maintenance possible (lisibilité) et transportabilité (Standardisation)

→ Structure claire et lisible (organigramme et écriture)


→ Commentaires et noms de variables explicites
→ Généralité (pas de particularisme)
→ Modularité (fonction, sous-routines, modules, librarie, ...)
→ Traçabilité (Historique, auteur, version, ...)

● Efficacité (temps, mémoire)

En temps et en mémoire (complexité)


Ces 2 programmes donnent le même résultat … parfois
Ces 2 programmes donnent le même résultat … parfois
Plan du cours

1. Introduction et contexte

2. Avant de programmer …
● Structure d'un ordinateur

● Système d'exploitation

● Logiciels libres et propriétaires

● Qualités d'un programme

● Étapes de développement d'un programme

● Interprétation et compilation
Développement d'un programme

1) Définir le problème
Quel type de problème ?
Généralité ? Limite ? Utilisateur ? Interface ?

2) Identifier les entrées et sorties 1/3

3) Réaliser l'organigramme (Algorithme)

4) Traduire en language de programmation 1/6

1/2
5) Test du programme

Temps 'humain'
Organigramme

Start / Stop

Calcul

Entrée - Sortie

Choix
Développement d'un programme
Exemple : Transformer une température d'unité (Kelvin → Celcius)

Start

Entrée
(Kelvin)

Calcul
(K → C)

Output
(Celcius)

Stop
Développement d'un programme
Exemple : Transformer une température d'unité (Kelvin → Celcius)

Start Ce programme est impossible à écrire et à utiliser :


(Chaque programmeur va faire qqch de différent)

● Pas de définition de la manière dont l'utilisateur


Entrée
entre la température en K (prompt, fenêtre)
(Kelvin) ● L'utilisateur ne sait pas ce qu'il doit faire (rien de pire !)

● Pas de test de la valeur d'entrée et de retour à l'utilisateur

● Pas de définition de la manière dont l'utilisateur

Calcul va connaître la valeur de sortie


(K → C) ● Une ou plusieurs température(s) ?

● ...

Ecrire T
(Celcius)

Stop
Développement d'un programme
Exemple : Transformer une température de Kelvin à Celcius

Start
Calcul
(K → C)
Demander à
l'utilisateur T(K)
Ecrire
(Celcius)
Get T(K)
Ecrire
'Nouveau
calcul ?'
Non
Ecrire T(K)
Pas physique
T(K) > 0
Get 'Oui/non'

Oui

Ecrire T(K) Oui Non


Oui/Non ? Stop
Développement d'un programme

● Ne pas hésitez à écrire un ligne de commentaire de plus

● Le temps calcul n'est pas lié au nombre de lignes de code

● Un code incompréhensible n'est pas 'meilleur'

KISS : Keep it simple, stupid


Plan du cours

1. Introduction et contexte

2. Avant de programmer …
● Structure d'un ordinateur

● Système d'exploitation

● Logiciels libres et propriétaires

● Qualités d'un programme

● Étapes de développement d'un programme

● Interprétation et compilation
Programmation : Interprétation et compilation

Programme : Ensemble de commande (fichier)

Language interprété (MATLAB, python) : Exécution ligne par ligne

Language compilé (FORTRAN, C) : Language traduit en language 'machine'


par un compilateur

- Etape intermédiaire (compilation)


+ Vérification de la syntaxe
+ Vitesse d'exécution (optimisation)

Code Source Fichier 'objet' Fichier 'Executable'


Compilation Link

nom.f90 nom.o nom.exe


nom

3 fichiers différents
Programmation : Interprétation et compilation

Language interprété (MATLAB) : Exécution ligne par ligne

Language compilé (FORTRAN, C) : Language traduit en language 'machine'


par un compilateur

- Etape intermédiaire (compilation)


+ Vérification de la syntaxe
+ Vitesse d'exécution (optimisation)

Code Source Fichier 'objet'


Compilation

program1.f90 program1.o

Fichier 'Executable'
Code Source Fichier 'objet'
Compilation Link
program.exe
program2.f90 program2.o program

Code Source Fichier 'objet'


Compilation
program3.f90 program3.o
Programmation : Compilateur

● Le language de programmation : syntaxe et ensemble de règles standards

● Compilateur : Traduction en 'language machine'

● A côté du language standard, chaque compileur a ses caractéristiques propres

- Eléments de syntaxe , Instructions


- Fonctions intrinsèques
- Options de compilation
- Etapes (compilation – link) plus ou moins transparente
- Editeur intégré ou pas avec ou sans code couleur

Ecrivez votre code en suivant les régles standards du language de programmation.


Dans le cas contraire, le portabilité sera réduite

Les fichiers objet '.o' ne sont pas portables d'un ordinateur à l'autre.
Les fichier excécutable '.exe' ne sont pas portable d'un OS à l'autre et
en général, peu portable d'un ordinateur à l'autre
Plan du cours
Partie 0 : Avant de programmer ...

Partie I : Un langage de programmation : Le FORTRAN

1. Les bases et premiers programmes

2. Les procédures

Partie II : Physique numérique

3. Erreurs en calcul numérique

4. Intégration et différentiation numérique

5. Algorithmes par essais et erreurs

6. Data fitting

7. Nombres aléatoires

Partie III : Quelques notions supplémentaires

8 . Optimisation de code

9. Notions avancées de FORTRAN