Au delà des performances en terme de durée, nous pouvons comparer les
dépenses énergétiques des processeurs pour effectuer le même traitement
selon nos deux solutions.
En fixant arbitrairement le nombre de blocs à traiter
Les programmes clients prévoient à cet effet un paramètre sur
leur ligne de commande.
, nous obtiendrons par exemple :
[laurier10] $ ./prog00_server 9988 8877 ↵
host 'laurier10.enib.fr' waiting for text connections on port '9988'...
host 'laurier10.enib.fr' waiting for binary connections on port '8877'...
starting iterations...
200 blocks in 9.91488 s (20.1717 block/s, 69.2589 Joules)
starting iterations...
200 blocks in 1.81161 s (110.399 block/s, 8.81107 Joules)
[laurier11] $ ./prog01_txt_client laurier10 9988 200 ↵
running 200 iterations...
200 blocks in 9.91495 s (20.1716 block/s, 96.1862 Joules)
[laurier11] $ ./prog02_bin_client laurier10 8877 200 ↵
running 200 iterations...
200 blocks in 1.81161 s (110.399 block/s, 11.8247 Joules)
La différence de performances se traduit par une différence de
consommation énergétique (en Joules) considérable.
Remarquez que la solution de formatage retenue pour la version textuelle
est extrêmement simple : nous générons des textes de longueur fixe
pour décrire chaque valeur numérique.
Cela permet de ne pas avoir à aborder la complication de l'analyse d'un
texte à longueur variable.
En effet, dans un tel cas il serait nécessaire de découper le texte selon
les séparateurs pour extraire ensuite chaque valeur numérique, ce qui
constituerait une charge de travail encore plus lourde pour la machine
Que ce soit fait explicitement dans notre code source, ou par une facilité
de bibliothèque déjà réalisée, ce travail doit de toutes façons être
fait par la machine.
.
Les machines de Labo de l'ENIB sont interconnectées par des
switches
assurant une communication à 100 Mb/s.
Ce débit n'est pas très élevé et nos programmes de communication
passent finalement beaucoup de temps à attendre que les données
circulent.
Si nous utilisions une communication à 1 Gb/s, les différences de
performances entre les différentes solutions seraient encore plus
marquées.
En particulier, il serait possible, dans le cas de la communication binaire,
de ne pas effectuer la permutation des octets si le client et le serveur
utilisent le même ordre des octets pour représenter les entiers.
Il suffit pour ceci qu'ils s'échangent au début de la communication des
entiers représentant une valeur connue à l'avance sans permuter l'ordre de
leurs octets ; si leurs représentations sont identiques après réception,
cela signifie qu'aucune permutation n'est nécessaire pour la suite de
la communication entre ces deux interlocuteurs.
Cette modification est laissée à titre d'exercice d'approfondissement
Malheureusement, si vous effectuez des mesures entre des machines de Labo
de l'ENIB, vous n'observerez pas de différences très significatives
(à cause de la limitation du débit par les switches).
.