FLASH INFORMATIQUE FI



Sysquake 3




Yves PIGUET


Sysquake, le logiciel scientifique déjà présenté dans ces colonnes en octobre 1999 et en septembre 2001, est passé à la version 3 en octobre dernier. Les améliorations apportées se situent principalement à trois niveaux :

  • l’interactivité de Sysquake et l’interface utilisateur ;
  • le renforcement de la compatibilité avec Matlab, avec notamment les tableaux de cellules et un meilleur support des MAT-files ;
  • l’ouverture vers le monde extérieur, avec la connexion à des bases de données, TCP/IP et les Web Services.

L’interactivité graphique est ce qui distingue le plus clairement Sysquake de ses concurrents, notamment Matlab, Octave et Scilab. Elle permet la manipulation directe des graphiques et permet, par leur mise à jour pratiquement instantanée, de comprendre intuitivement les phénomènes qu’ils représentent et les lois qui les gouvernent.

Après une revue des nouveautés apparues dans les versions 3.0 et 3.1, cet article donne un aperçu de son architecture. La conception modulaire facilite le portage sur de nouvelles plates-formes, comme nous le verrons dans le cas du Pocket PC.

Nouveautés

JPEG - 10.3 ko
fig. 1
Sysquake 3 sur Windows XP : application multidocuments basée sur la bibliothèque C++ MFC

L’interface utilisateur est le changement le plus visible apporté par Sysquake 3. Sur Windows (fig. 1), Sysquake est maintenant une application multi-documents, avec des fenêtres séparées pour l’interface par ligne de commande, les graphiques interactifs et le nouvel éditeur qui permettent le développement dans la même application. Sur Mac OS X (fig. 2), Sysquake est basé sur Cocoa, la bibliothèque native héritée de NextStep, au lieu de Carbon. Carbon est une bibliothèque largement compatible avec la toolbox de Mac OS 9 qu’Apple a écrite pour assurer une transition plus facile aux développeurs. Bien que la distinction pour l’utilisateur ne saute pas aux yeux (le Finder est une application Carbon), dans le cas de Sysquake, on en a profité pour revoir complètement l’interface : nouvelle boîte de dialogue pour les préférences, nouvelles barres d’outils, éditeur, historique des commandes dans un tiroir, utilisation d’Unicode. Sysquake apparaît aussi comme un "service" pour de nombreuses autres applications Cocoa : on peut faire évaluer par Sysquake une commande sélectionnée dans un éditeur ou un traitement de texte. Enfin, Sysquake et ses extensions sont au format binaire natif Mach-O : les extensions peuvent être compilées avec gcc et faire appel directement à toutes les bibliothèques de Mac OS X.

JPEG - 5.6 ko
fig. 2
Sysquake 3 sur Mac OS X, dont l’interface utilisateur est basée sur la bibliothèque native Cocoa

Le langage de programmation de Sysquake supporte deux nouveaux types de données : les nombres à virgule flottante simple précision (single) réels et complexes, et les tableaux de cellules, dont chaque élément peut contenir une donnée de n’importe quel type. La fonction fminsearch permet l’optimisation de fonctions dans R^n.

Threads

Sysquake permet maintenant l’exécution de plusieurs tâches en parallèle. Depuis la version 1, il était possible d’exécuter une fonction périodiquement ; mais dans certaines situations, les threads facilitent beaucoup la programmation. Les calculs très longs peuvent être faits en tâche de fond avec un affichage progressif des résultats. Les threads évitent aussi le blocage de l’interface pendant la communication avec des périphériques ou d’autres programmes. Le listing 1 montre un serveur HTTP minimal.

Listing 1 : utilisationd’un thread dans un serveur HTTP minimal

Extensions

Les autres améliorations principales ont été faites par des extensions, dont voici les principales :

  • bases de données (MySQL et SQLite sur Windows et Mac, ODBC sur Windows, fichiers DB sur Mac) ;
  • sockets TCP et UDP ;
  • exécution de commandes shell sur Windows (existait déjà sur Mac) ;
  • entrées-sorties audio ;
  • Web Services (XML-RPC et SOAP, client et serveur).

Les protocoles XML-RPC et SOAP permettent à Sysquake de communiquer avec d’autres applications locales ou distantes. Parmi les applications visées, on peut citer la communication avec des applications Java locales, par exemple pour représenter la simulation d’un système en 3D dont les lois de commandes seraient développées dans Sysquake, ou la distribution de la charge de calcul sur un cluster.

Sysquake Application Builder

Pour finir, Sysquake Application Builder permet la création d’applications indépendantes qui peuvent être redistribuées sans royalties. Le code source de l’application ne figure pas dans le code généré, ce qui donne une bonne protection des algorithmes utilisés.

Architecture de Sysquake

Le coeur de Sysquake est LME (Lightweight Math Engine), l’interpréteur d’un langage de programmation compatible avec Matlab (fig. 3). Le développement de LME a commencé en 1997 avec pour but de permettre l’implémentation de régulateurs temps-réel sur PowerMac ; cela a imposé une indépendance presque totale par rapport au système d’exploitation, pour éviter par exemple des allocations de mémoire ou des accès au disque qui étaient interdits dans les tâches temps-réel. Avec du recul, cette approche s’est révélée extrêmement judicieuse pour permettre une réutilisation de LME dans de nouvelles applications (à commencer par Sysquake) et sur des systèmes d’exploitation très divers.

JPEG - 9 ko
fig. 3
Architecture modulaire de Sysquake

LME lui-même est constitué de différents éléments :

  • le noyau comprend le compilateur vers du code intermédiaire, l’interpréteur de ce code et les fonctions de base pour la programmation et le support des types natifs ;
  • les fonctions spécifiques au système d’exploitation qui permettent à LME de communiquer avec l’extérieur : entrées/sorties, lecture du code source des fonctions interprétées, accès à l’horloge ;
  • les fonctions d’extension qui peuvent être soit compilées avec le noyau, soit placées dans des extensions de type DLL, soit être carrément supprimées suivant l’application (c’est le cas de nombreuses fonctions mathématiques ou des fonctions d’algèbre linéaire basées sur LAPACK) ;
  • les extensions basées sur des bibliothèques tierces (libpng pour la lecture et l’écriture d’images PNG par exemple) ou propres au système d’exploitation (entrées-sorties audio) ;
  • les extensions développées par l’utilisateur, compilées sous forme de DLL et chargées au démarrage par LME.

LME est écrit en C “orienté objet”, c’est-à-dire en reprenant certains principes qui font la force de la programmation-objet : modularité, structures opaques partout où c’est possible pour faciliter l’évolution de l’implémentation sans remise en cause de tout le code (“objets”), extension du code par pointeurs de fonctions (“méthodes virtuelles”). Le choix du C a permis notamment le portage de LME sur des systèmes aux ressources très limitées, comme le Palm.

Graphiques interactifs

Les autres modules qui composent Sysquake sont les graphiques, la gestion de l’interactivité et l’interface utilisateur. Les graphiques sont très largement indépendants du système d’exploitation : des fonctions d’abstraction permettent de séparer le code commun à toutes les plates-formes (calcul de l’échelle, fonctions spécialisées pour les courbes de niveau ou les simulations de systèmes dynamiques, commandes qui étendent LME) de l’affichage proprement dit.

La gestion de l’interactivité est l’une des originalités majeures de Sysquake par rapport à d’autres logiciels apparentés tels que Matlab. Une application pour Sysquake est composée d’un fichier texte (SQ file) décrivant les variables qui permettent la synchronisation de toutes les figures (elles donnent l’état de l’application à un certain instant) et les fonctions à appeler en réaction à différents événements, par exemple une demande de réaffichage ou un clic de souris. Ces fonctions sont implémentées dans le langage de LME. La gestion des SQ files et de tout ce qui leur est associé (gestion des événements, synchronisation des graphiques, gestion des fonctions undo/redo, etc.) est également complètement indépendante de la plate-forme, et écrite en C.

Enfin, l’interface utilisateur constitue l’essentiel de ce qui est propre à chaque plate-forme. Les bibliothèques natives de l’interface graphique de la plate-forme sont utilisées avec le langage qui leur est associé : C++ et MFC sur Windows, Objective C et Cocoa sur Mac OS X. La toolbox de Mac OS 9 et Carbon sont abandonnés sans regret.

Portage vers une nouvelle plate-forme

La division de Sysquake en différents modules et la séparation très claire entre les parties indépendantes et dépendantes du système d’exploitation facilitent beaucoup le portage sur une nouvelle plate-forme. Le dernier, qui n’est pas achevé au moment où ces lignes sont écrites, est le Pocket PC. Les ordinateurs Pocket PC ont un microprocesseur dérivé de l’ARM, typiquement un Intel XScale ; ils tournent sous un système d’exploitation, Windows Mobile 2003 actuellement, assez largement compatible avec Windows XP. Le développement se fait typiquement avec MS eMbedded Visual C++, similaire à Visual C++ mais dont les bugs du compilateur sont différents !

La première étape consiste à compiler le noyau de LME avec une interface utilisateur minimale qui permet d’évaluer des expressions et d’en observer le résultat. Une fois cette étape franchie, l’ajout des fonctions d’extension ne demande pratiquement aucun travail. Les entrées-sorties, qui permettent notamment la lecture des bibliothèques LME, dépendent du système d’exploitation ; pour Windows Mobile, on a pu reprendre largement le code pour Windows avec des adaptations mineures dues à la hiérarchie des fichiers différente. Avec l’amélioration de l’interface utilisateur (historique des commandes, basculement de 90 degrés de l’affichage), la gestion des DLL pour les extensions et les tests, le tout a pris moins d’une semaine. Le résultat est disponible sur le site de Calerga [1]. La suite, Sysquake complet, pourra se baser largement sur la version Windows. Des modifications relativement mineures seront nécessaires en raison des restrictions de la version Windows CE de MFC ; par exemple, seul Unicode est supporté pour les chaînes de caractères et certaines fonctions graphiques manquent.

Benchmark

Moyenne lu max fibo uint find list func
Dell Dimension 2400 P4 3.06 GHz 2749.3 2864 1330 2920 2984 3743 2510 2894
Apple PowerMac G5 Dual 2.5 GHz 2410.9 2915 2633 2438 2239 2116 1835 2700
Apple PowerBook G4 1.33 GHz 1330.0 1330 1330 1330 1330 1330 1330 1330
Apple PB G4 1.33 GHz (Matlab 7.0.1) 773.2 1017 1953 458 341 986 340 319
Apple iBook G3 500 MHz 497.4 531 619 286 604 481 455 507
DEC Workstation 500au Alpha 500 MHz 402.5 227 516 359 663 457 230 365
Sun Blade 100 UltraSparcIIe 500 MHz 367.5 194 400 488 414 400 326 350
Generic PC Pentium Win2K 300 MHz 350.9 444 257 380 518 288 276 294
Dell Axim X30 PXA270 626 MHz 143.4 55 140 31 381 111 59 226
Apple PowerBook 3400 PPC603 200 MHz 133.7 141 120 111 215 182 79 88
CerfBoard 255 XScale 400 MHz 84.4 11 25 42 234 92 63 125
Kontron X-board<861> SC1200 266 MHz 76.9 65 63 81 88 142 47 52
Palm Zire 71 OMAP 144 MHz, emu M68k 1.192 1.04 1.14 1.21 1.06 1.74 0.99 1.15
Handspring Visor MC68EZ328 16 MHz 0.508 0.189 0.449 0.546 0.522 0.750 0.480 0.616

Tableau 1- résultats du benchmark (lu : décomposition LU ; max : recherche du maximum d’un vecteur de nombres ; fibo : suite de Fibonacci calculée par multiplications matricielles ; uint : arithmétique entière sur des octets ; find : recherche de chaînes de caractères ; list : manipulation de listes ; func : appels récursifs de fonctions).

Le tableau 1 montre la diversité des plates-formes sur lesquelles LME a été porté. Un benchmark a été écrit pour exécuter différents types de fonctions. Le résultat est normalisé pour que l’ordinateur de référence, le PowerBook 17” de l’automne 2003, donne des résultats correspondant à sa fréquence, 1.33 GHz. Le résultat global est la moyenne arithmétique de tous les tests. Les applications sont Sysquake 3.1 pour les ordinateurs Windows et Mac OS X, Sysquake Embedded pour les cartes Linux XScale et Geode SC1200, LyME pour les ordinateurs portables Palm OS, une version interne de Sysquake 3.1 pour le Powerbook 3400 Mac OS 8.6, et le prototype actuel de LME pour Windows CE pour le Dell Axim. Pour comparaison, le benchmark a aussi été exécuté avec Matlab 7.0.1 sur le Powerbook de référence.
Quelques remarques s’imposent :

  • le résultat global, moyenne arithmétique non pondérée explicitement, a une part d’arbitraire, mais constitue un moyen commode de comparaison ;
  • LME ne tire pas (encore) parti des deux microprocesseurs du PowerMac G5 ;
  • l’absence de FPU (unité à virgule flottante) sur le XScale rend les calculs mathématiques (notamment la décomposition LU, proche d’une inversion matricielle) relativement lents ;
  • le Dell Axim, qui tient dans une poche de chemise, est comparable à un bon ordinateur de 1996 ;
  • les performances du Palm sont très mauvaises parce que LyME est compilé pour un microprocesseur 68k qui est émulé sur l’ARM [1] ;
  • le rapport de vitesse de 1 à 1000 entre les modèles de milieu de gamme de Palm et d’ordinateur de bureau, déjà observé en 2001, demeure ;
  • la comparaison avec Matlab 7.0.1 est assez parlante ; elle serait moins spectaculaire avec des calculs sur des matrices de taille importante, où seules les performances de Lapack comptent.

Conclusion

L’architecture modulaire de Sysquake le rend bien adapté à des applications très diverses. En utilisant ou en omettant certaines parties, on obtient différentes applications. À part Sysquake, il existe Sysquake Remote, un module Apache pour un mode de fonctionnement similaire à PHP, Sysquake Embedded pour la commande de systèmes embarqués, et LyME comme substitut à une calculatrice scientifique avancée sur Palm. Et comme le montre le portage sur Pocket PC, ce n’est pas fini... L’intérêt de développer en parallèle toute une famille de produits qui partagent une grande partie de leur code est de multiplier les tests ; la qualité de chaque programme en profite. La mise à jour en fonction de l’évolution du matériel et des systèmes d’exploitation est aussi facilitée, comme le montre le passage de Mac OS 9 à Mac OS X.
L’EPFL possède une licence de site de Sysquake 3. L’auteur, qui est le développeur de Sysquake, reçoit très volontiers les demandes de discussions ou de présentations. Cet article a esquissé quelques directions de développement, comme la supervision de processus, le calcul sur des clusters ou le développement de nouvelles bibliothèques, pour lesquelles une collaboration serait possible.

Url

[1] site de Calerga : http://www.calerga.com

[1] Mais cela ne doit pas faire oublier que LyME reste une excellente solution pour calculer une décomposition en valeurs singulières en attendant le TSOL !



Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.