Les sujets couverts dans cette section s'appliquent aux quatre modèles de traitement en parallèle sous Linux.
Je suis principalement un « chercheur en compilateurs ». Je devrais donc être capable de dire s'il y a beaucoup de compilateurs vraiment performants, générant du code parallèle efficace pour les systèmes Linux. Malheureusement, et pour dire la vérité, il est difficile de battre les performances obtenues en exprimant votre programme en parallèle avec des communications et autres opérations parallèles, le tout dans un code en langage C, compilé par GCC.
Les projets de compilateurs ou de langages suivants représentent une partie des meilleurs efforts produits pour la génération d'un code raisonnablement efficace depuis les langages de haut niveau. Généralement, chacun d'eux est raisonnablement efficace pour les tâches qu'il vise, mais aucun ne correspond aux langages et aux compilateurs puissants et tout-terrain qui vous feront abandonner définitivement l'écriture de programmes C compilés par GCC… ce qui est très bien comme çà. Utilisez ces langages et compilateurs à ce pour quoi ils ont été conçus, et vous serez récompensés par des durées de développement plus courtes, des opérations de maintenance et de débogages réduites, et cætera.
Il existe un grand nombre de langages et de compilateurs en dehors de ceux listés ici (dans l'ordre alphabétique). Une liste de compilateurs librement disponibles (la plupart n'ayant rien à voir avec le traitement en parallèle sous Linux) est accessible ici : http://www.idiom.com/free-compilers.
Au moins dans la communauté de l'informatique scientifique, le Fortran
sera toujours présent. Bien sûr, le Fortran d'aujourd'hui n'a plus la
même signification que celle définie par le standard ANSI de 1966. En
quelques mots, le Fortran 66 était très limité. Le Fortran 77 a ajouté
des nuances dans ses fonctions, la plus intéressante étant la prise en
charge améliorée des données de type caractère et la modification de la
sémantique des boucles DO
. Le Fortran PCF
(« Parallel Computing Forum ») a tenté d'ajouter diverses fonctions de
gestion de traitement en parallèle au Fortran 77. Le Fortran 90 est un langage moderne
et pleinement fonctionnel, qui apporte essentiellement des facilités de programmation
orientée objet ressemblant au C++ et une syntaxe de tableaux en parallèle au langage
du Fortran 77. HPF (« High-Performance Fortran », lui-même
proposé en deux versions (HPF-1 et HPF-2), est essentiellement
la version standardisée et améliorée de ce que beaucoup d'entre nous ont connu
sous les noms de CM Fortran, MasPar Fortran, ou Fortran D. Il étend le Fortran 90
avec diverses améliorations dédiées au traitement en parallèle, très centrées
sur la spécification d'agencements de données. Citons enfin le Fortran 95,
version quelque peu améliorée et raffinée du Fortran 90.
Ce qui fonctionne avec le C peut en général fonctionner aussi avec f2c
,
g77
, ou les produits Fortran 90/95 commerciaux de NAG.
Ceci est dû au fait que tous ces compilateurs peuvent au final produire le
même code que celui utilisé en arrière-boutique par GCC.
Les paralléliseurs Fortran commerciaux pouvant générer du code pour SMP sont disponibles sur http://www.kai.com et http://www.crescentbaysoftware.com. Il n'est pas clairement indiqué si ces compilateurs sont utilisables pour des machines SMP Linux, mais ils devraient l'être étant donné que les threads POSIX standards (soit les LinuxThreads) fonctionnent sur des systèmes SMP sous Linux.
Le Portlan Group propose des compilateurs Fortran HPF (et C/C++) parallèles commerciaux générant du code Linux SMP. Il existe aussi une version ciblant les clusters s'appuyant sur MPI ou PVM. Les produits de http://www.apri.com pourraient aussi être utiles sur des clusters ou des machines SMP.
Parmi les Fortran parallélisés disponibles librement et qui pourraient fonctionner sur des systèmes Linux en parallèle, citons :
ADAPTOR (« Automatic DAta Parallelism TranslaTOR », http://www.gmd.de/SCAI/lab/adaptor/adaptor_home.html, qui peut traduire du Fortran HPF en Fortran 77/90 avec appels MPI ou PVM, mais qui ne mentionne pas Linux.
Fx, de l'Université Carnegie Mellon (N.D.T. : Pittsburgh), vise certains clusters de stations de travail, mais Linux ?
HPFC (un prototype de Compilateur HPF) génère du code Fortran 77 avec appels PVM. Est-il utilisable sur un cluster Linux ?
PARADIGM (« PARAllelizing compiler for DIstributed-memory General-purpose Multicomputers », http://www.crhc.uiuc.edu/Paradigm) peut-il lui aussi être utilisé avec Linux ?
Le compilateur Polaris génère du code Fortran pour multiprocesseurs à mémoire partagée, et pourrait bientôt être reciblé vers les clusters Linux PAPERS.
PREPARE, http://www.irisa.fr/EXTERNE/projet/pampa/PREPARE/prepare.html, vise les clusters MPI… On ne sait pas vraiment s'il sait générer du code pour processeurs IA32.
Combinant ADAPT et ADLIB, « shpf » (« Subset High Performance Fortran compilation system ») est dans le domaine public et génère du code Fortran 90 avec appels MPI. Donc, si vous avez un compilateur Fortran 90 sous Linux…
SUIF (« Stanford University Intermediate Form », voir http://suif.stanford.edu) propose des compilateurs parallélisés pour le C et le Fortran. C'est aussi l'objectif du National Compiler Infrastructure Project… « Quelqu'un s'occupe-t-il des systèmes parallèles sous Linux ? »
Je suis sûr d'avoir omis plusieurs compilateurs potentiellement utiles
dans les différents dialectes du Fortran, mais ils sont si nombreux
qu'il est difficile d'en garder la trace. A l'avenir, je préférerais ne
lister que ceux qui sont réputés fonctionner sous Linux. Merci de
m'envoyer commentaires et corrections en anglais par courrier
électronique à
<hankd CHEZ engr POINT uky POINT edu>
.
GLU (« Granular Lucid ») est un système de programmation de très haut niveau basé sur un modèle hybride combinant les modèles intentionnel (« Lucid ») et impératif. Il reconnaît à la fois les sockets PVM et TCP. Fonctionne-t-il sous Linux ? (Le site du « Computer Science Laboratory » se trouve sur http://www.csl.sri.com.
Jade est un langage de programmation en parallèle sous forme d'extension au langage C et exploitant les concurrences de la granularité des programmes séquentiels et impératifs. Il s'appuie sur un modèle de mémoire partagée distribuée, modèle implémenté par SAM dans les clusters de stations de travail utilisant PVM. Plus d'informations sur http://suif.stanford.edu/~scales/sam.html.
Mentat est un système de traitement en parallèle orienté objet qui fonctionne avec des clusters de stations de travail et qui a été porté vers Linux. Le « Mentat Programming Language » (MPL) est un langage de programmation orienté objet basé sur le C++. Le système temps-réel de Mentat utilise quelque chose qui ressemble vaguement à des appels de procédures à distance (« remote procédure calls » : RPC) non bloquantes. Plus d'informations sur http://www.cs.virginia.edu/~mentat.
Legion http://www.cs.virginia.edu/~legion est construit au dessus de Mentat, et simule une machine virtuelle unique au travers des machines d'un réseau large zone.
À ne pas confondre avec le MPL de Mentat, ce langage était initialement développé pour être le dialecte C parallèle natif des supercalculateurs SIMD MasPar. MasPar ne se situe plus vraiment sur ce segment (ils s'appellent maintenant NeoVista Solutions et se spécialisent dans le data mining[27], mais leur compilateur MPL a été construit en utilisant GCC. Il est donc librement disponible. Dans un effort concerté entre les université de l'Alabama, à Huntsville, et celle de Purdue, le MPL MasPar a été reciblé pour générer du code C avec appels AFAPI (voir la section 3.6), et fonctionne ainsi à la fois sur des machines Linux de type SMP et sur des clusters. Le compilateur est, néanmoins, quelque peu bogué… voir http://www.math.luc.edu/~laufer/mspls/papers/cohen.ps.
Myrias est une compagnie qui vend un logiciel nommé PAMS (« Parallel Application Management System »). PAMS fournit des directives très simples destinées au traitement en parallèle utilisant de la mémoire partagée virtuelle. Les réseaux de machines Linux ne sont pas encore pris en charge.
Parallaxis-III est un langage de programmation structurée qui reprend
Modula-2, en ajoutant des « processeurs et connexions virtuels » pour
le parallélisme des données (un modèle SIMD). La suite Parallaxis
comprend des compilateurs pour ordinateurs séquentiels et parallèles,
un débogueur (extension des débogueurs gdb
et xgdb
), et une vaste gamme d'algorithmes
d'exemple de différents domaines, en particulier dans le traitement des
images. Il fonctionne sur les systèmes Linux séquentiels. Une ancienne
version prenait déjà en charge diverses plate-formes parallèles, et une
prochaine version le fera à nouveau (comprendre : ciblera les clusters PVM).
Plus d'informations sur http://www.informatik.uni-stuttgart.de/ipvr/bv/p3/p3.html.
pC++/Sage++ est une extension au langage C autorisant les opérations de type « données en parallèle », en utilisant des « collections d'objets » formées à partir de classes « éléments » de base. Il s'agit d'un préprocesseur générant du code C++ pouvant fonctionner en environnement PVM. Est-ce que cela fonctionne sous Linux ? Plus d'informations ici : http://www.extreme.indiana.edu/sage.
SR (« Synchronizing Resources », ou « ressources synchronisées ») est un langage de programmation de situations concurrentes et dans lequel les ressources encapsulent les processus et les variables qu'ils partagent. Les « opérations » forment le principal mécanisme d'interactions entre processus. SR propose une intégration novatrice des mécanismes utilisées pour invoquer et traiter les opérations. En conséquence, les appels de procédures locaux ou à distance, les rendez-vous, le message passing, la création dynamique de processus, la multi-diffusion et les sémaphores sont tous pris en charge. SR gère également les variables et opérations globales partagées.
Il existe une adaptation Linux, mais le type de parallélisme que SR peut y faire fonctionner n'est pas clairement défini. Plus d'informations sur http://www.cs.arizona.edu/sr/www/index.html.
ZPL est un langage de programmation par matrices conçu pour gérer les applications scientifiques et d'ingénierie. Il génère des appels à une interface de message-passing assez simple nommée IronMan, et les quelques fonctions qui constituent cette interface peuvent facilement être implémentées à l'aide de pratiquement n'importe quel système de message-passing. Il est toutefois principalement tourné vers PVM et MPI sur des clusters de stations de travail, et peut fonctionner sous Linux. Plus d'informations sur http://www.cs.washington.edu/research/zpl/home/index.html.
Beaucoup de gens passent beaucoup de temps à faire des mesures de performances « au banc d'essai » de cartes-mères particulières, de carte réseau, et cætera, pour déterminer laquelle d'entre elles est la meilleure. Le problème de cette approche est que, le temps d'arriver à des résultats probants, le matériel testé peut ne plus être le meilleur. Il peut même être retiré du marché et remplacé par un modèle révisé et aux propriétés radicalement différentes.
Acheter du matériel pour PC, c'est un peu comme acheter du jus d'orange. Il est généralement fabriqué à partir de produits de bonne qualité, et ce quelque soit le nom de la compagnie qui le distribue. Peu de gens connaissent ou se soucient de la provenance de ces composant (ou du concentré de jus d'orange). Ceci dit, il existe quelques différences auxquelles on devrait être attentif. Mon conseil est simple : Soyez simplement conscients de ce que vous pouvez attendre de votre matériel lorsqu'il fonctionne sous Linux, puis portez votre attention sur la rapidité de livraison, un prix raisonnable et une garantie convenable.
Il existe un excellent aperçu des différents processeurs pour PC sur http://www.pcguide.com/ref/cpu/fam/; En fait, le site PC Guide entier est rempli de bonnes présentations techniques de l'électronique d'un PC. Il est également utile d'en savoir un peu sur les performances et la configuration d'un matériel spécifique, et le Linux Benchmarking HOWTO est un bon document pour commencer.
Les processeurs Intel IA32 sont dotés de plusieurs registres spéciaux qui peuvent être utilisés pour mesurer les performances d'un système en fonction dans ses moindres détails. Le VTune d'Intel, sur http://developer.intel.com/design/perftool/vtune, fait un usage poussé de ces registres de performances, dans un système d'optimisation du code vraiment très complet… qui malheureusement ne fonctionne pas sous Linux. Un pilote sous forme de module chargeable et une bibliothèque de fonctions servant à accéder aux registres de performances du Pentium sont disponibles et ont été écrits par Cuneyt Akinlar. Souvenez-vous que ces registres de performance sont différents selon les processeurs IA32. Ce code ne fonctionnera donc que sur un Pentium, pas sur un 486, ni sur un Pentium Pro, un Pentium II, un K6, et cætera.
Il y a encore un commentaire à faire à propos des performances, destiné spécialement à ceux qui veulent monter de grands clusters dans de petits espaces. Les processeurs modernes incorporent pour certains des capteurs de température, et utilisent des circuits ralentissant la cadence du processeur lorsque cette température dépasse un certain seuil (tentative de réduction des émissions de chaleur et d'amélioration de la fiabilité). Je ne suis pas en train de dire que tout le monde devrait sortir s'acheter un module à effet Peltier (ou « pompe à chaleur ») pour refroidir chaque CPU, mais que nous devrions être conscients du fait qu'une température trop élevé ne se contente pas de raccourcir la durée de vie des composants, mais agit aussi directement sur les performances d'un système. Ne placez vos ordinateurs dans des configurations pouvant bloquer le flux d'air, piégeant la chaleur dans des zones confinées, et cætera.
Enfin, les performances ne sont pas seulement une question de vitesse, mais également de fiabilité et de disponibilité. Une haute fiabilité signifie que votre système ne plantera pratiquement jamais, même si un composant vient à tomber en panne… ce qui nécessite généralement un matériel spécial comme une alimentation redondante et une carte-mère autorisant le remplacement « à chaud » des équipements qui y sont connectés. Tout cela est en général assez cher. Une haute disponibilité signifie que votre système sera prêt à être utilisé pratiquement tout le temps. Le système peut planter si l'un des composants tombe en panne, mais il pourra être réparé et redémarré très rapidement. Le High-Availability HOWTO traite plusieurs des cas de base de la haute disponibilité. En revanche, dans le cas des clusters, une haute disponibilité peut être assurée en prévoyant simplement quelques pièces de rechange. Éliminer le matériel défectueux et le remplacer par une de ces pièces de rechange peut apporter une plus grande disponibilité pour un coût d'entretien moins élevé que celui d'un contrat de maintenance.
Alors, y a-t-il quelqu'un dans l'assemblée qui fasse du traitement en parallèle sous Linux ? Oui !
Il y a encore peu de temps, beaucoup de gens se demandaient si la mort de plusieurs compagnies fabricant des supercalculateurs parallèles n'annonçait pas la fin du traitement en parallèle. Ce n'était alors pas mon opinion (voir http://dynamo.ecn.purdue.edu/~hankd/Opinions/pardead.html pour un aperçu assez amusant de ce qui, à mon avis, s'est vraiment passé), et il semble assez clair qu'aujourd'hui le traitement en parallèle est à nouveau sur une pente ascendante. Même Intel, qui n'a cessé que récemment de produire des supercalculateurs parallèles, est fier du soutien apporté au traitement en parallèle par des choses comme le MMX, et l'EPIC (« Explicitly Parallel Instruction Computer », ou « Ordinateur à jeu d'Instructions Parallèles Explicites ») de l'IA64.
Si vous faites une recherche sur les mots « Linux » et « Parallèle » dans votre moteur de recherche favori, vous trouverez un certain nombre d'endroits impliqués dans le traitement en parallèle sous Linux. Les clusters de PC sous Linux, en particulier, font leur apparition un peu partout. Le fait que Linux se prête particulièrement bien à ce genre de tâche combiné aux coûts réduits et aux hautes performances du matériel pour PC ont fait du traitement en parallèle sous Linux une approche populaire, tant pour les groupes au budget restreint que pour les vastes laboratoires de recherche nationaux confortablement subventionnés.
Certains projets énumérés dans ce document tiennent une liste de sites de recherche « apparentés » utilisant des configurations Linux parallèles similaires. Vous trouvez cependant sur http://yara.ecn.purdue.edu/~pplinux/Sites un document hypertexte dont le but est d'apporter photographies, descriptions et contacts vers les sites de tous les projets utilisant Linux pour effectuer des traitement en parallèle. Si vous voulez voir votre propre site y figurer :
Vous devez avoir un site « permanent » présentant le fonctionnement d'un système Linux en parallèle : Une machine SMP, un système SWAR, ou un PC équipé de processeurs dédiés, configuré pour permettre aux utilisateurs d'exécuter des programmes parallèles sous Linux. Un environnement logiciel basé sur Linux et prenant directement en charge la gestion du traitement en parallèle (tel que PVM, MPI ou AFAPI) doit être installé sur le système. En revanche, le matériel ne doit pas nécessairement être dédié au traitement en parallèle sous Linux et peut être employé à des tâches complètement différentes lorsque les programmes parallèles ne sont pas en cours d'exécution.
Vous devez formuler une demande pour que votre site apparaisse sur cette
liste. Envoyez vos informations en anglais à
<hankd CHEZ engr POINT uky POINT edu>
.
Merci de respecter le format utilisé par les autres entrées pour les
informations concernant votre site. Aucun site ne sera
répertorié sans demande explicite de la part du responsable de ce
site.
Quatorze clusters sont actuellement répertoriés dans cette liste, mais nous avons été informés de l'existence de plusieurs douzaines de clusters Linux à travers le monde. Bien sûr, cette inscription n'implique aucun engagement. Notre objectif est simplement de favoriser le développement des connaissances, de la recherche et de la collaboration impliquant le traitement en parallèle sous Linux.
[27] N.D.T. : le data mining consiste à étudier et mettre au point des techniques efficaces de recherche d'une information au travers d'une immense quantité de données.
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:15