Sujet énergie pour Systèmes Embarqués
Système Embarqué - Énergie
Accès à Grid5000
- Slides d’introduction
- Getting Started où on vous explique comment accéder à distance en rajoutant le texte suivant dans votre fichier
.ssh/config
Host g5k
User login
Hostname access.grid5000.fr
ForwardAgent no
Host *.g5k
User login
ProxyCommand ssh g5k -W "$(basename %h .g5k):%p"
ForwardAgent no
- Commande pour sélectionner un noeud sur le cluster Gros à Nancy
ssh nancy.g5k
oarsub -I -l walltime=2:0:0 -p "cluster='gros'"
Séance 1 et 2 : Slides et prise en main MojitO/S
- Installer MojitO/S (monitoring système) : https://gitlab.irit.fr/sepia-pub/mojitos
- Tester MojitO/S pour obtenir la charge système (system load) de votre machine pendant 10s
./mojitos -u -t 10 -f 5
- Tester MojitO/S pour obtenir la consommation de base de votre machine pendant 10s
- Capteur RAPL : Consommation mémoire et processeur (en micro-joules)
sudo ./mojitos -r -t 10 -f 5
- Consommation d’une application
- Préparer un script (bash ou python) pour obtenir les données pendant l’exécution d’un programme
sudo ./mojitos -r -f 10 -o /tmp/data.csv & pid=$! ; sleep 5; sudo kill $pid
- Consommation du tri
- Comparez les algorithmes de tri dans plusieurs langages, options de compilation
- Les trois métriques sont le temps, la puissance moyenne, l’énergie
Exemple d’outil pour lire le fichier de sortie de MojitO/S
import pandas as pd
import matplotlib.pyplot as plt
def _read_csv(filename):
df = pd.read_csv(filename, sep=' ', skipinitialspace=True)
if df.columns[-1].startswith('Unnamed'):
df.drop(columns=df.columns[-1:], axis=1, inplace=True)
return df
def show_csv(filename, norm=False):
a = _read_csv(filename)
a['#timestamp'] = a['#timestamp']-a['#timestamp'][0]
if norm:
tmp = (a/a.max())
tmp['#timestamp'] = a['#timestamp']
a = tmp
a.plot(x='#timestamp')
show_csv('/tmp/data.csv', norm=False)
plt.show(block=True)
Séance 3 : Levier : Fréquence du processeur
- Écrire un script (en bash, python, C, rust) qui prends en argument une ligne de commande et qui affiche
- Le temps d’exécution (en seconde)
- L’énergie consommée par le processeur et la mémoire (en Joules)
- La puissance moyenne (l’énergie divisée par le temps) en Watts
Exemple
$ ./mon_script.sh sleep 10
10.01 1322 132.1
Quelques fichiers utiles:
fmin=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq`
boost=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq`
echo $freq | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
- Impact de la fréquence sur l’énergie, le temps, la puissance moyenne
- Lien avec les compteurs de performance (processeur/mémoire)
Séance 4 et 5: Projet d’optimisation
Ensemble de Julia
# Code modified from https://frederic-junier.org/MPS2014/MPS-2017-Fractales-Seance4.pdf
import matplotlib.pyplot as plt
import numpy as np
taille = 200
xmin, xmax = -1, 1
ymin, ymax = -1, 1
iterationmax = 100
a = -0.8
b = 0.156
pixels = np.zeros((taille, taille, 3), dtype='i')
for line in range(taille):
for col in range(taille):
i = 1
x = xmin+col*(xmax-xmin)/taille
y = ymax-line*(ymax-ymin)/taille
while i<=iterationmax and (x**2+y**2)<=4:
x, y = x**2-y**2+a, 2*x*y+b
i += 1
if i>iterationmax and (x**2+y**2)<=4:
pixels[col,line] = (0,0,0)
else:
pixels[col,line] = ((4*i)%256,2*i,(6*i)%256)
plt.imshow(pixels)
plt.show(block=True)
Implémentez dans le langage de votre choix (en sauvegardant le fichier plutôt qu’en l’affichant). Le but est de minimiser
- Le temps d’exécution
- L’énergie consommée
- La puissance moyenne
Vous utiliserez les deux configurations suivantes:
- Rapide (langages compilés) Image 10000x10000 avec 1000 itérations
- Lent (langages interprétés) Image 900x900 avec 100 itérations
Les codes (incluant le code permettant de charger et d’afficher l’image) seront à soumettre sous moodle et les résultats dans le tableau partagé (lien vers le tableau sur Moodle) sous la forme suivante (sur les machines de la salle de TPs pour que les comparaisons soient possibles). Vous pouvez changer la fréquence, mais il faudra toujours au moins soumettre une version avec la fréquence maximum. Vous pouvez utiliser des bibliothèques d’appoint tant qu’il ne s’agit pas d’un appel direct à une fonction calculant julia et que les bibliothèques sont open-source, et pérennes.
Nom | Langage | Ligne de commande | Ligne de compilation | Fréquence | Temps (s) | Énergie (J) | Puissance moyenne (W) |
---|---|---|---|---|---|---|---|
Geo | Python | mpirun -n 2 python3 code.py | N/A | 1.4GHz | 17 | 300 | 128 |
Geo | C | ./code | gcc code.c -O3 -o code | 1.4GH | 22 | 150 | 66 |
Rendu final
A déposer sur moodle, vos codes dans un zip pour la partie julia, ainsi qu’un document de 2 pages en pdf avec le contenu suivant:
- une demi page maximal : Le tableau avec vos résultats (voir ci dessus)
- une section d’analyse de l’ensemble de vos résultats expliquant à votre avis ce qui a impacté le temps, l’énergie et la puissance maximale
- une section expliquant votre méthodologie d’expérimentation, ie comment vous avez décidé quels expériences faire, comment vous les avez réalisées
Le rendu sera à faire au plus tard pour 7 jours après le dernier TP