Introduction

 

        Qui veut des ordinateurs toujours plus rapides ? Tout le monde. Tout le monde esp�re aussi que les programmes fonctionneront encore plus vite � chaque g�n�ration, en ignorant volontairement ou non la premi�re loi d'Amdahl. Alors que la capacit� des disques durs et la taille et la vitesse des microprocesseurs augmentent sans montrer de signes de faiblesse, les composants p�riph�riques comme les contr�leurs de bus ne peuvent pas suivre cette �volution pour de nombreuses raisons, principalement �conomiques et techniques.

        En tentant d'optimiser un programme de gaz sur r�seaux, th�oriquement tr�s simple � mettre en oeuvre, ce projet se heurte � de nombreuses limitations. Les recherches ont �t� longues, plusieurs hypoth�ses ont �t� v�rifi�es alors que certains r�sultats sont inattendus. Toutefois, la qualit� du code reste un facteur essentiel pour les performances d'un programme car il montre la capacit� du programmeur � comprendre le probl�me et � le formuler de mani�re � ce que l'ordinateur montre toute sa puissance, quelle qu'elle soit.

        Ce projet trouve naturellement sa place dans la formation du d�partement MIME car il aborde de nombreux sujets th�oriques et pratiques tr�s importants :

          Les prochaines parties sont organis�es ainsi :         Ce m�moire est compl�t� par quatre annexes.

        Ce m�moire peut �tre lu de diff�rentes mani�res mais il ne peut et ne pourra pas �tre exhaustif. Les personnes d�sirant programmer des gaz sur r�seaux en 2D y trouveront des exp�riences et du savoir-faire qui leur fera gagner beaucoup de temps lors de la programmation. Cependant le lectorat vis� est plus large et certains sauteront des chapitres alors que d'autres r�clameront plus d'informations sur certains d�tails. Ce qui se voulait �tre une sorte de manuel pour reconstruire le programme n'est plus qu'une esquisse des lignes directrices du projet. Les annexes sont fournies pour donner des d�tails et le corps du m�moire �claire un peu sur leur fonction, tout en essayant de rester coh�rent et didactique. Un manuel complet aurait finalement �t� impossible. Esp�rons que suffisamment de d�tails utiles auront filtr� pour permettre aux personnes int�ress�es de reproduire ou am�liorer les techniques d�crites, ou � d�faut d'�tre sensibilis�s par certains points.

Bonne lecture.

 

 

Partie I : Sp�cificit�s du Calcul Intensif

approche �pist�mologico-socio-�conomico-culturelle

 

 

 

 

 

I.1 : Les nouveaux d�fis du calcul intensif :

        Dans la suite de ce m�moire, la notion de calcul intensif sera constamment sous-entendue et utilis�e dans un sens restreint et particulier. Puisqu'aujourd'hui les ordinateurs de bureau ont la puissance des ordinateurs les plus puissants il y a 25 ans, les efforts � effectuer sont de l'ordre du qualitatif et non plus du quantitatif. Les nouveaux d�fis du calcul intensif ne sont plus de cr�er des ordinateurs plus puissants mais de mieux les utiliser. Les ordinateurs actuels sont comme de la mati�re premi�re qu'il faut exploiter apr�s la prospection (le travail de recherche) men�e pas les pionniers et les laboratoires de recherche.

        Ce m�moire explore un axe d'exploitation des ordinateurs de bureau. Leurs caract�ristiques ne font pas d'eux des "supercalculateurs" ce qui rend leur programmation encore plus complexe. Il explore le calcul intensif sous deux angles � la fois : technique et th�orique. L'architecture et la programmation des ordinateurs, en m�me temps que l'�tude du mod�le physique calcul�, permettent de faire converger tous les param�tres permettant d'obtenir un progamme efficace dans la pratique aussi bien que sur le plan th�orique.

 

I.2 : Les images r�alistes :

        De nos jours, il n'existe pas de programme informatique ou de mod�le physique qui puisse explicitement simuler "le monde r�el". Les logiciels utilis�s en Image de Synth�se ou la R�alit� Virtuelle ne font que des approximations visuellement proches de ce qui se passe en r�alit�, mais seuls les mod�les les plus simples sont maitris�s actuellement.

        Lorsqu'on les con�oit, les programmes de simulation nous posent tous le m�me probl�me : "Qu'est-ce que la r�alit� ?". Pour effectuer une simulation, il faut bien comprendre ce que l'on fait et ce que l'on simule. Et pourtant, bien que ce soient des sujets quotidiens et banals, aucun logiciel ne peut simuler explicitement de mani�re satisfaisante les choses suivantes :

        Les images de synth�se tentent de reproduire les r�sultats ou les effets de ces ph�nom�nes, ce qui permet de reconnaitre les images "photor�alistes" gr�ce � leurs nombreux artifacts, malgr� la complexit� croissante des logiciels disponibles. Ils ne simulent pas la r�alit�, ils ne font que reproduire un effet visuel plus ou moins similaire.

        Tous les ph�nom�nes de la liste pr�c�dente ont lieu des milliards de fois par jour sur Terre sans que l'on soit capable de les simuler sur ordinateur, avec tous les ph�nom�nes qui en d�coulent comme la fum�e ou la condensation de l'eau sur les murs adjacents. M�me une salle de bain embu�e ou la ros�e du matin semblent �trang�res aux recherches scientifiques. Les cas �tudi�s jusqu'� maintenant sont limit�s � des mod�les simples et sont calcul�s pendant des jours ou des semaines sur des ordinateurs accessibles � peu des personnes. Dans un sens, c'est compr�hensible si l'on consid�re que le calcul automatique est relativement r�cent pour l'humanit�, qui est elle-m�me r�cente par rapport � l'Univers. Toutefois, si l'on consid�re la banalit� des ph�nom�nes et le nombre de chercheurs travaillant dans ce domaine, le manque de r�sultats probants est �tonnant.

 

I.3 : A propos de l'"optimisation" :

        Le terme d'"optimisation" m�rite qu'on s'y attarde car il fait partie du titre du m�moire et son utilisation en informatique �chappe au contr�le de l'Acad�mie Fran�aise. La suite de cette partie expliquera plus en d�tail la philosophie de travail mais commen�ons par regarder un exemple dans une discipline similaire : les math�matiques.

        Un exemple bien connu d'optimisation concerne le calcul des d�cimales du nombre Pi : l'optimisation dans ce domaine consiste � calculer un maximum de d�cimales avec un minimum de travail. Les liens entre les math�matiques et l'informatique sont tr�s forts, en particulier au niveau de la th�orie des nombres. L'algorithme de Newton-Raphson, utilis� dans les microprocesseurs, illustre ce propos : il permet de calculer une division ou une racine carr�e en effectuant moins d'op�rations qu'avec une technique "simple" mais plus facile � comprendre.

        L'ouvrage de Jean-Christophe Culioli [22] (comme d'autres livres du m�me rayon) pr�sente d'autres exemples de math�matiques appliqu�es au contr�le de processus ou � l'�valuation de fonctions math�matiques complexes. En pr�face, l'auteur y explicite tr�s bien certaines notions qui rejoignent l'objet de ce chapitre : le processus d'optimisation a pour but d'am�liorer un ou des crit�res, qualitatifs ou quantitatifs, en fonction de certaines contraintes dynamiques ou statiques. L'auteur insiste sur le rapport �troit entre la mod�lisation et l'optimisation car ils permettent d'am�liorer le syst�me et de mieux le conna�tre. Nous serons constamment confront�s � ces probl�mes dans la suite de ce m�moire.

        Reprenons l'exemple de la m�thode de Newton-Raphson : elle est bas�e sur la m�thode it�rative dite de Newton. Une meilleure compr�hension de son fonctionnement et l'apport de connaissances externes permettent d'effectuer moins d'op�rations pour obtenir un r�sultat similaire et de transformer l'algorithme it�ratif en une suite lin�aire d'instructions. Dans ce cas, le crit�re d'optimisation est la diminution du nombre d'instructions, ce qui passe ici par l'utilisation d'un algorithme en O(log n) au lieu de O(n). D'autres probl�mes requi�rent d'autres crit�res comme une meilleure stabilit� num�rique ou une meilleure sensibilit� � certains signaux (pour le filtrage d'un signal par exemple) mais le domaine qui nous int�resse le plus est la vitesse pure. Le travail consiste alors � analyser l'algorithme de calcul ainsi que l'ordinateur qui calculera. Le programme doit faire le pont le plus direct possible entre ces deux contraintes fixes. Les moyens sont nombreux et toutes les astuces sont explor�es.

        Il arrive pourtant un jour o� toutes les "ficelles" sont �puis�es : malgr� tous les efforts imaginables, il n'est plus possible de faire mieux. Il devient alors tentant d'estimer que le programme est "optimal" et d'arr�ter les efforts si le temps presse. Cependant il ne faut jamais oublier que "le programme le plus rapide n'existe pas" [7] et on peut toujours gagner un cycle quelque part. Bien qu'on puisse dire � un moment donn� avoir atteint un rapport performance/d�veloppement acceptable, il existe une infinit� de probl�mes ind�cidables et de plateformes, il est donc impossible d'affirmer qu'un programme est parfait. L'optimisation est une discipline de recherche qui vise � lever, pas � pas, certains obstacles dans la r�solution de probl�mes pr�cis. Nous allons voir que m�me en r�duisant la complexit� initiale du probl�me, ce processus fait appel � de nombreux domaines � cause de leurs �troites relations. Une fois sorti du domaine purement th�orique et math�matique, le probl�me impose des choix pratiques difficiles.

 

I.4 : La mont�e des "PC" :

        La puissance relative des ordinateurs de bureau actuels leur permet de se mesurer � des stations de travail beaucoup plus ch�res. Les benchmarks SpecInt et SpecFP comptent dans leur groupe de t�te des processeurs Intel qui sont vendus en masse un an plus tard � un prix abordable. La mont�e des PC n'est plus un ph�nom�ne anodin et a fait apparaitre le terme "Killer Micro" [4]. L'informatique personnelle a explos� au d�but des ann�es 80 et a d�mocratis� l'acc�s � l'informatique telle qu'on la connait aujourd'hui. Plus important encore, le march� "grand public" a permis de faire baisser le prix des appareils et a rendu rentables les investissements lourds dans les appareils de production. La loi de Moore peut donc continuer � se v�rifier gr�ce aux d�bouch�s du march� du grand public.

        L'ordinateur "au rabais", peu puissant mais avec un rapport performance/prix tr�s avantageux, a eu des cons�quences tr�s importantes sur le march� des "superordinateurs" utilis�s dans les domaines scientifiques et industriels. Ces derniers sont caract�ris�s par un co�t d'achat et d'exploitation tr�s important, un syst�me de traitement par lot (non interactif), des syst�mes de programmation et de d�veloppement propri�taires et limit�s, qu'il faut apprendre et maitriser afin de profiter au maximum du temps CPU qui est allou� � l'utilisateur. Ces syst�mes ont des puissances de cr�te tr�s �lev�es gr�ce, entre autre, � :
    - une architecture d�di�e et ax�e sur la performance,
    - des compilateurs sophistiqu�s,
    - une grande extensibilit� (par ajout d'unit�s de calcul ou de m�moire),
    - des techniques �mergentes ou peu r�pandues (ars�niure de gallium ou phosphure d'indium,
    - sans oublier leur emploi g�n�reux (bus tr�s large, duplication d'unit�s, parall�lisme agressif).
        La "mort" des superordinateurs se situe � la fin de la guerre froide, lorsque les budgets de d�veloppement d'armes nucl�aires et de l'espionnage sont devenus moins justifi�s. Ces domaines de "niche" qui �taient la chasse gard�e des certains constructeurs (IBM, Connexion Machine et bien s�r Cray) sont devenus encore plus concurrentiels et critiqu�s. Bien que les "superordinateurs" soient toujours l'objet de fantasmes chez les programmeurs et les physiciens qui ont besoin d'ex�cuter toujours plus d'op�rations par seconde, les responsables des budgets ont pris de plus en plus au s�rieux l'utilisation d'ordinateurs "grand public" tellement moins chers. L'ordinateur connu le plus puissant actuellement (l'IBM "Blue Pacific" de l"Accelerated Strategic Computing Initiative (ASCI)") est construit avec des puces similaires � celles que l'on peut trouver dans un Apple Macintosh.


Vue en "fisheye" de Blue Pacific en septembre 1998 : 1464 noeuds de 4 processeurs POWER, 3.9 TeraFlops, 2.6 TB de SDRAM et 75TB de RAID.

        Il y a encore 20 ans, chaque nouvelle architecture n�cessitait la conception d'un nouveau syst�me de d�veloppement, de nouvelles techniques, d'un nouveau coeur de processeur. Aujourd'hui, cette approche ne repr�sente plus qu'une petite partie du march� et les centres de calcul sont �quip�s de "fermes" d'ordinateurs � base de processeurs Alpha, Power, Sparc, Mips ou Intel dont le co�t de d�veloppement a �t� amorti et valid� par le march� du grand public. Ce n'est donc plus seulement la performance qui est l'enjeu de l'industrie : le prix total est devenu un crit�re d�terminant.

        Nous savons aujourd'hui qu'il est possible de fabriquer des ordinateurs arbitrairement puissants et leur prix est proportionnel � leur taille. L'autre enjeu est de tirer le maximum de performance des puces du commerce : nous allons voir que c'est difficile m�me lorsqu'on ne tient pas compte des probl�mes de parall�lisme.

 

I.5 : Les PC ne permettent pas de soutenir la performance de cr�te :

        "La performance a un prix", c'est une r�gle fondamentale dans l'architecture des ordinateurs comme dans tout autre domaine. Pour les PC, ou tout autre appareil de grande consommation, le prix a �t� r�duit en diminuant certains param�tres cl�s de la performance. Il n'est donc pas possible de comparer deux ordinateurs seulement par leur vitesse d'horloge et les benchmarks les plus divers ont vu le jour pour tenter l'impossible : "mesurer" la performance d'un ordinateur.

        Dans ce m�moire, nous �tudions un type de programme tr�s particulier mais qui met en lumi�re de nombreux points caract�ristiques des architectures utilis�es dont :

        En r�gle g�n�rale, un ordinateur personnel (peu cher) diff�re d'un ordinateur "professionel" par le d�s�quilibre des diff�rents param�tres. Par exemple, les processeurs les plus rapides aujourd'hui sont cadenc�s � plus de 500 MHz alors que la m�moire centrale (celle qui influence le plus les algorithmes que nous allons �tudier ici) reste limit�e � 133MHz au mieux. Nous souffrons du foss� grandissant entre la vitesse "offchip" et "onchip" : les vitesses d'horloge sont plus rapides � l'int�rieur d'une puce qu'en dehors pour des raisons purement physiques. Un ordinateur "professionnel" compensera cette diff�rence par un plus grand nombre de broches sur le bo�tier du processeur et augmentera la largeur des bus : 128 bits au lieu de 64 par exemple. Un ordinateur "personnel" diminuera le prix au d�triment de la performance en diminuant le nombre de broches et en compensant par une m�moire cache par exemple.

        Dans le cas des ordinateurs PC x86 que nous utilisons ici, le foss� est �largi par le jeu d'instruction qui est � la fois inadapt� et mal utilis�. Les processeurs de PC sont con�us selon des r�gles statistiques et non pratiques, en analysant l'utilisation des ressources par du code g�n�r� par des compilateurs pour des applications de bureautique. Ce type d'architecture n'est pas adapt� au contexte du calcul intensif o� chaque unit� d'ex�cution est utilis�e � chaque cycle. Les processeurs Intel ainsi que les plateformes qu'ils font fonctionner (carte m�re, application et syst�me d'exploitation) sous-utilisent la performance th�orique que la vitesse d'horloge laisse supposer.

                Dans le tableau suivant, Paul Hsieh a compar� les techniques de codage de haut niveau d'"hier" et d'"aujourd'hui", afin d'illustrer le changement radical des m�thodes, des moyens, des enjeux et des r�sultats au cours des 20 derni�res ann�es.

Avant :
a) x = y % 32;
b) x = y * 8;
c) x = y / w + z / w;
d) if( a==b && c==d && e==f ) {...}
e) if( (x & 1) || (x & 4) ) {...}
f) if( x>=0 && x<8 &&
    y>=0 && y<8 ) {...}
g) if( (x==1) || (x==2) ||
    (x==4) || (x==8) || ... )
h) #define abs(x) \
      (((x)>0)?(x):-(x))
 
 
 
i) int a[3][3][3];
int b[3][3][3];
...
 
 
j) for(i=0;i<3;i++)
     for(j=0;j<3;j++)
       for(k=0;k<3;k++)
         b[i][j][k] = a[i][j][k];
k) for(i=0;i<3;i++)
    for(j=0;j<3;j++)
      for(k=0;k<3;k++)
        a[i][j][k] = 0;
l) for(x=0;x<100;x++) {
     printf("%d\n",(int)(sqrt(x)));
   }
 
 
 
 
m) c:\>tc myprog.c
n) user% cc myprog.c
o) Utiliser l'algorithme de quicksort.
p) Utiliser l'algorithme de trac� de lignes de Bresenham.
q) Demander les conseils des coll�gues.
r) Ignorer les suggestions des autres.
s) Coder, coder, coder, coder ...
Apr�s :
a) x = y & 31;
b) x = y << 3;
c) x = (y + z) / w;
d) if( ((a-b)|(c-d)|(e-f))==0 ) {...}
e) if( x & 5 ) {...}
f) if( ((unsigned)(x|y))<8 ) {...}
 
g) if( x&(x-1)==0 && x!=0 )
 
h) static long abs(long x) {
long y;
    y = x>>31;
    return (x^y)-y;
}
i) typedef struct {
        int element[3][3][3];
} Three3DType;
Three3DType a,b;
...
j) b = a;
 
 
 
k) memset(a,0,sizeof(a));
 
 
 
l) for(tx=1,sx=0,x=0;x<100;x++) {
    if( tx<=x ) {
      tx+=2*sx+3;
      sx++;
    }
    printf("%d\n",sx);
  }
m) c:\>wcc386 /5r/otexan myprog.c
n) user% gcc -O3 myprog.c
o) Utiliser le merge sort ou le radix sort.
p) Utiliser l'algorithme de trac� de lignes DDA en virgule fixe.
q) Chercher des exemples par USENET/WEB/FTP.
r) Ecouter les suggestions mais �tre sceptique.
s) Penser, coder, penser, coder ...

                Certaines astuces semblent �videntes, ou sont expliqu�es dans les cours de M. Greussay. D'autres le sont beaucoup moins et elles existent car les compilateurs actuels ne peuvent effectuer eux-m�mes de telles modifications, au risque de ne plus se conformer aux normes ANSI (s'ils �taient d�ja compatibles avant). Dans ce cas, rien ne remplace une analyse humaine, globale et attentive du code, par un ou des programmeurs exp�riment�s.

                La multiplication des r�gles contraignant le codage rend les ordinateurs actuels de plus en plus difficiles � programmer en pratique. Bien qu'une partie de la litt�rature actuelle se penche sur le probl�me, ce n'est pourtant pas la pr�occupation principale de la plupart des programmeurs qui utilisent de plus en plus les langages orient�s objets, qui permettent de programmer de tr�s lourdes applications en cachant les d�tails au programmeur, mais montrant leur lenteur � l'utilisateur.

                Or le propos de ce m�moire n'est pas de programmer un navigateur Web, un OS ou une application "middleware" mais une application compacte qui fait peu de choses et le plus rapidement possible.

 

I.6 : La convergence des algorithmes, des plateformes et des mod�les :

        Tout exercice de programmation peut �tre consid�r� comme l'application d'algorithmes simples ("d'�cole") qui sont utilis�s comme briques de base et adapt�s � chaque cas particulier. La programmation est donc un acte d'expertise, d'analyse et d'adaptation, visant � transcrire un mod�le th�orique vers un programme (une suite d'instruction) le plus adapt� � la plateforme utilis�e.

        Dans le cas d'un mod�le physique programm� sur un ordinateur "adapt�", cet exercice est relativement facile : la m�moire est abondante et rapide, les calculs sont (parfois) pr�cis et tr�s rapides. Dans le cas qui nous concerne, l'exercice est beaucoup plus difficile : la m�moire est rapide ou spacieuse (du fait des niveaux de m�moire cache) et les calculs sont effectu�s selon des r�gles complexes (afin de diminuer la taille du microprocesseur). L'analyse doit �tre beaucoup plus compl�te, � la mesure de la complexit� de la plateforme, et le mod�le physique doit �tre mieux compris afin de b�n�ficier de ses caract�ristiques particuli�res.

        Le but d'un calcul change selon le contexte : un code de "recherche" ou "d�veloppement" sert � d�montrer la validit� d'un mod�le, afin de prouver que la th�orie sous-jacente est correcte, alors qu'un code de "production" utilise ce mod�le (une fois qu'il est valid�) pour l'utiliser dans un cas utile et pratique. Dans le premier cas, la vitesse n'est pas le crit�re recherch� : le chercheur tente de d�terminer les param�tres permettant de reconstituer des conditions id�ales pour reproduire des cas connus. Dans le deuxi�me cas, le mod�le est consid�r� valide et l'utilisateur doit contr�ler tous les param�tres permettant d'appliquer les cas connus � des situations pratiques nouvelles. La vitesse d'ex�cution du programme devient alors importante : gagner dix pourcents de vitesse de calcul permet de gagner deux heures sur un calcul qui durerait une journ�e.

        Le type de programme que nous consid�rons ici utilise ce qu'on pourrait appeler des algorithmes de "deuxi�me g�n�ration" qui effectuent les op�rations du mod�le de mani�re parfois diff�rente d'un programme "simple" ou de "d�veloppement". Lorsque le mod�le original est maitris�, il doit �tre revu depuis le d�but afin d'�tre analys� sous des angles diff�rents et b�n�ficier des particularit�s architecturales de la plateforme choisie. Nous nous trouvons ici dans un monde o� la th�orie n'a plus de relation directe avec l'impl�mentation du mod�le, nous cherchons � concilier l'exactitude des premiers programmes avec la vitesse permise par l'ordinateur.

 

I.7 : La mentalit� de l'optimisation :

        Le travail pr�sent� ici ne trouve que partiellement son origine dans le domaine scientifique. En effet, la plupart des utilisateurs de codes de calcul intensif consid�rent ceux-cis comme des "boites noires" dont ils tournent les boutons pour obtenir les r�sultats d�sir�s.

        Les raisons d'optimiser du code sont pourtant nombreuses et d�passent la simple course � la vitesse, ce qui nous conduit aux �tudes sur l'organisation des ordinateurs. Cela permet d'explorer la plateforme, de d�couvrir des caract�ristiques utiles, de mettre au point des techniques de programmation et de mettre notre patience � l'�preuve. Cela permet aussi de rentabiliser l'inverstissement de l'achat de la plateforme en exploitant au maximum ses caract�ristiques particuli�res.

        Ces motivations sont plus caract�ristiques de la culture de l'informatique personnelle que professionelle : les demo-makers par exemple passent beaucoup de temps � analyser les manuels des ordinateurs pour imaginer des effets graphiques in�dits et gagner des concours. Un exemple similaire est la programmation des jeux vid�os : les codeurs doivent faire face � de nombreux imp�ratifs de portabilit�, de vitesse et de flexibilit� qui les forcent � chercher constamment de nouvelles techniques. Une des contraintes les plus importantes est la faible puissance des ordinateurs qui obligeait, jusqu'aux ann�es 90, les programmeurs � coder les parties importantes de leurs applications en langage assembleur.

        Dans le monde des ordinateurs personnels, la famille x86 est toute puissante malgr� ses nombreux d�fauts : le prix sur le march� de masse et l'acceptation par le public ne sont pas directement li�s aux qualit�s de l'architecture. La portabilit� est donc peu importante car les caract�ristiques fondamentales ne changent pas d'une machine � l'autre, contrairement au monde UNIX o� la programmation en langage de haut niveau (principalement C) est n�cessaire. Il est donc plus naturel de "soigner son code" sur un PC que sur une station de travail, en acc�dant directement � la carte vid�o ou aux p�riph�riques par exemple.

        Un des sp�cialistes de l'optimisation des programmes est Michael Abrash dont le livre [7] a inspir� certaines phases du travail pr�sent� ici. En particulier, il d�montre qu'il y a parfois des moyens tr�s efficaces de coder un mod�le (par exemple, le Jeu de la Vie qui a �t� acc�l�r� d'un facteur 300) si l'on prend la peine de se pr�occuper de ce que font le mod�le, l'ordinateur et le programme. D'autres auteurs comme Knuth ou Paul Hsieh, ont prouv� par de nombreux exemples que la mani�re la plus rapide n'est pas forc�ment la plus �vidente : un algorithme complexe peut �tre plus efficace qu'un algorithme simple si le calcul ne convient pas � l'architecture de la machine. En particulier, il faut partir d'un algorithme efficace, trait� sous l'angle des ressources disponibles sur la plateforme.

        Dans le type d'optimisation qui nous concerne ici, le temps a une importance particuli�re, diff�rente des autres projets : tous les moyens disponibles doivent �tre mis en oeuvre pour aboutir. Bien que le code final soit d'une grande complexit�, il n'est pas con�u pour les besoins du grand public ou pour �tre rentable (imm�diatement). Le plus gros effort est fourni lors de la programmation afin que l'ex�cution soit la plus rapide possible. Cela va � l'encontre des proc�d�s de codage "classiques" qui privil�gient avant tout la portabilit�, la facilit�, la maintenance (surtout pour le mauvais code) et le temps de mise sur le march�. Dans notre cas, le temps d'ex�cution est plus important que le temps de programmation. Ce point de vue est valide ici puisque le sujet est relativement simple et born� : il est r�duit � un coeur de calcul, entour� de plusieurs "algorithmes annexes", sans toute la lourdeur de la gestion d'une interface complexe avec l'utilisateur, avec d'autres ordinateurs ou avec des logiciels complexes. Le sujet est donc r�duit au "coeur de calcul" entour� d'une interface simple (�cran, clavier et souris sous MS-DOS) sur une plateforme connue et maitris�e, calculant un mod�le simple (FHP3) num�riquement stable.

 

I.8 : Importance de l'interactivit� :

        N�anmoins, pour que l'efficacit� du programme soit utile, un minimum d'interactivit� avec l'utilisateur est n�cessaire, ce qui ajoute une composante importante dans l'analyse du programme. La n�cessit� de garder le contr�le de l'ordinateur, donc de pouvoir intervenir sur le calcul et ses param�tres � tout moment, modifie consid�rablement la structure du programme lorsque l'on compare une version "interactive" avec une version "prototype" utilis�e uniquement par le d�veloppeur en interne. Il faut d'abord pouvoir prendre en charge le plus de complexit� possible pour l'utilisateur, qui n'est pas sens� s'occuper de la technique sous-jacente. Au contraire, l'utilisateur recherche des donn�es pertinentes qui seraient susceptibles de lui faire comprendre un ph�nom�ne. Le programme est donc graphiquement intensif car l'image est ce qui parle le plus et le plus vite. En cela, il rejoint les applications de jeu qui doivent g�rer un "monde virtuel" en fonction des actions de l'utilisateur.

        En rendant le programme interactif, l'utilisateur peut acc�l�rer ses cycles d'�tude, par exemple en interrompant un calcul qu'il d�couvre inutile lors de son ex�cution. Cela compte autant que l'acc�l�ration du programme lui-m�me et justifie certaines complexit�s du code.

        Dans la majorit� des cas, les scientifiques sont peu pr�occup�s par l'interactivit� de leurs programmes car ils se penchent plus sur les aspects th�oriques que les c�t�s pratiques. Les ordinateurs permettent d�j� de diminuer leur charge de calcul et de se concentrer sur l'essentiel. Le code de calcul est donc vu par ses utilisateurs comme une sorte de "boite noire" qui effectue son travail de mani�re "atomique" et crache son r�sultat lorsque le calcul est termin�. Le "workflow" classique peut �tre sch�matis� ainsi :

                1) Expression du probl�me
                2) Formalisation et mod�lisation du ph�nom�ne
                3) Simulation (calcul)
                4) D�pouillage du r�sultat
                5) Comparaison du mod�le et du r�sultat
                6) retour en 2) si la comparaison n'est pas satisfaisante.

        Dans certains cas, le calcul peut durer une journ�e ou une semaine, le d�pouillage peut durer encore plus longtemps. Le programme de calcul est rarement interactif, les donn�es g�n�r�es en sortie peuvent occuper des centaines de m�gaoctets et leur d�pouillage est impossible sans outil adapt�. L'analyse des r�sultats peut aussi faire apparaitre des calculs inutiles qu'il aurait �t� �conomique de ne pas stocker en m�moire de masse. Enfin, lorsqu'une nouvelle it�ration est n�cessaire, il faut souvent effectuer les calculs depuis le d�but m�me si un ajustement minime a �t� effectu�.

        En rendant le calcul transparent � l'utilisateur, les inconv�nients ci-dessus sont �vit�s :

  • seules les donn�es estim�es int�ressantes par l'utilisateur sont sauvegard�es, ce qui r�duit l'espace m�moire n�cessaire,
  • une grande partie du d�pouillage s'effectue lors du calcul m�me, ce qui permet de gagner beaucoup de temps,
  • l'utilisateur peut modifier les param�tres du calcul au milieu de celui-ci, �vitant ainsi de tout recalculer depuis le d�but.

     

    I.9 : Petit r�sum� :

            L'�tude qui fait l'objet de ce m�moire a plusieurs caract�ristiques et contraintes :

  • Domaine d'�tude restreint, complexit� initiale limit�e et maitris�e (ou du moins le croit-on).

  • Utilisation d'une plateforme informatique r�pandue et �conomique.

  • Programmation "intelligente", �labor�e et soign�e, privil�giant tant que possible la vitesse d'ex�cution aux d�pends de la portabilit�, de la vitesse de d�veloppement et de la maintenabilit�.

  • Travail de recherche sur l'adequation des algorithmes avec la plateforme pour acc�l�rer au maximum l'ex�cution, transformant compl�tement le mod�le initial pour cadrer au plus pr�s avec la machine.

  • Interactivit� avec l'utilisateur, disponibilit� des r�sultats et utilisation du potentiel du mod�le utilis�.

            Ces crit�res expliquent pourquoi ce projet ne ressemble pas � des projets classiques : l'unique param�tre int�ressant �tant la vitesse, de nombreux probl�mes �tant pr�cedemment r�solus de mani�re th�oriques ou conceptuels, le d�fi � relever est la gestion de la complexit� croissante du projet.

     

     

    Partie II : Pr�sentation des Gaz sur R�seaux

     

    II.1 : Introduction :

            Cette partie ne peut pas et n'a pas la pr�tention d'�tre exhaustive : le sujet est trop vaste pour pouvoir envisager d'en faire le tour complet. Il n'est pas non plus possible ici d'expliquer (encore et encore) ce que sont les LGA : d'autres articles ou livres le font tr�s bien. Le lecteur novice et press� peut consulter l'annexe B, les explications les plus claires en fran�ais sont donn�es en [18], [14] et [27]. Ce m�moire discute de la programmation d'un mod�le physique, nous allons donc nous concentrer sur les notions essentielles qui permettent de comprendre les choix de conception.

     

    II.2 : Nomenclature :

            Le terme de "gaz sur r�seau", ou "lattice gas automata" en anglais (LGA) n'a pas fait l'objet d'une �tude par l'Acad�mie Fran�aise et la premi�re question est de savoir s'il faut mettre "r�seau" au pluriel. La r�ponse la plus satisfaisante consiste � consid�rer le r�seau comme un m�dium, un "ether" virtuel et digital sur lequel prennent vie des ph�nom�nes, gr�ce au support physique de l'ordinateur. Un "gaz sur r�seau" d�signe donc un gaz particulier (par exemple "FHP-3") alors que l'expression "les gaz sur r�seaux" d�signe un ensemble de gaz aux propri�t�s diff�rentes (par exemple l'ensemble des LGA en deux dimensions).

            On peut aussi trouver dans la litt�rature diverses d�nominations pour d�signer un ou des gaz sur r�seaux : "LGA", "LG" pour "Lattice Gas", "LGCA" pour "Lattice Gas Cellular Automata", GR ou GSR pour "gaz sur r�seau(x)"... Les nombreuses variantes des mod�les apportent encore d'autres noms ou acronymes.

     

    II.3 : G�n�se :

            L'existence des LGA est li�e � plusieurs courants d'id�es ou techniques. D'abord, les LGA sont une simplification extr�me des lois et des programmes de "Dynamique Mol�culaire" o� chaque particule (atomes ou mol�cules) d'une mati�re est simul�e avec sa vitesse, sa masse, sa direction, avec autant de valeurs en virgule flottante pour chaque grandeur et dans chaque dimension. Ainsi, contrairement aux m�thodes d'�l�ments finis, les particules sont simul�es afin de laisser ressortir leur comportement individuel, au lieu de les enfermer dans des moyennes et des interpolations. Les Gaz sur R�seaux se situent entre le monde de la dynamique mol�culaire ("MD") d'une part et les techniques volumiques classiques (Euler ou Navier-Stokes par exemple) d'autre part, car ils apportent la capacit� de simuler de plus grands ph�nom�nes qu'avec de la MD classique. Ils peuvent faire �merger des comportements de plus grande �chelle, accessibles seulement par les techniques d'�l�ments finis mais avec un niveau de d�tail sup�rieur.

            L'autre facteur d�terminant pour l'existence des LGA est la d�mocratisation des ordinateurs. Il suffit en fait de peu de ressources pour commencer � exp�rimenter sur ce type de "m�dium". C'est cette d�pendance technologique qui explique en partie l'historique de la m�thode : tout comme pour les Automates Cellulaires classiques, les premi�res exp�riences ont �t� r�alis�es � la fin des ann�es 60 (Kadanoff & Swift, 1968) et le premier mod�le intens�ment �tudi� (HPP) date officiellement de 1973. Le domaine a ensuite explos� au d�but des ann�es 80 gr�ce � des ressources informatiques r�pandues et l'int�r�t du public. Les LGA ont des liens de parent� tr�s forts avec d'autres mod�les comme les Automates Cellulaires classiques ou le mod�le d'Ising, utilis�s en thermodynamique ou pour �tudier les s�parations de phases sans hydrodynamique. Le mod�le HPP repr�sente une convergence naturelle de toutes ces influences et a cr�� un nouveau domaine hybride et fascinant.

     

    II.4 : Un premier mod�le : HPP

            Les LGA sont issus de recherches de m�canique statistique, un des objectifs �tant de simplifier les lourds calculs de dynamique mol�culaire pour en extraire les composantes fondamentales. Des mod�les � v�locit� finie, � temps fini puis des simplifications de plus en plus radicales (binarisation et discr�tisation totale) ont donn� le jour en 1973 au mod�le dit "HPP" [37] (initiales de Jean Hardy, Olivier de Pazzy et Yves Pomeau). Ce mod�le n'est pas utilisable en pratique mais sa compr�hension est importante pour des raisons historiques et techniques car il n'est pas possible de faire plus simple (en deux dimensions). Il cristalise donc tous les d�fauts et toutes les caract�ristiques que l'on retrouve dans les mod�les plus �volu�s et son �tude permet de g�n�raliser des techniques aux autres mod�les. Par exemple, les �quations de collision ou la complexit� algorithmique (comme dans [31]) sont �tudi�es d'abord sur HPP avant d'�tre adapt�es aux autres mod�les. HPP ressemble � un Automate Cellulaire � voisinage de Von Neumann (carr�) simple, synchrone et homog�ne. Il diff�re d'un Automate Cellulaire classique car chaque cellule ne poss�de pas d'�tat interne : comme not� pr�c�demment, le gaz sur r�seau est un "m�dium" sur lequel transitent des particules bool�ennes qui s'entrechoquent aux intersections du grillage. Les cellules sont ici appel�es "noeuds" et sont le si�ge des collision. Comme le tapis d'un billard sur lequel roulent les boules, les particules se d�placent sans friction sur cet "ether" informatique.

            Les frictions que l'on veut faire apparaitre sont du type hydrodynamique (par exemple la viscosit�) et concernent les interactions entre particules. Les interactions avec le m�dium servent � d�terminer les "conditions aux limites" (les parois ou les objets qui agissent sur le fluide). Les collisions entre les particules d�terminent le comportement du fluide et avec HPP il n'y a pas beaucoup de choix : les r�gles de conservation sont strictes et il n'y a pas beaucoup de degr�s de libert�. Ainsi :

            Pour simplifier, les collisions n'ont qu'un seul cas particulier : le "choc frontal". Toute autre configuration est "transparente" et laisse les particules voyager librement. Le travail du programme de simulation HPP consiste � faire voyager les particules d'un site � l'autre et de v�rifier � chaque fois si un choc frontal a lieu. Puisque toutes les quantit�s sont binaires, la complexit� algorithmique est consid�rablement simplifi�e par rapport � un programme de Dynamique Mol�culaire classique, o� les collisions peuvent se produire � tout moment. De plus, on �conomise tous les tests de collisions comme tous les types de calculs en virgule flottante (potentiellement instables). Pourtant, m�me avec HPP, des ph�nom�nes hydrodynamiques (plus ou moins r�alistes) peuvent apparaitre malgr� la simplification extr�me : le comportement � l'�chelle macroscopique ne d�pend pas des propri�t�s microscopiques (par exemple, les m�mes lois permettent d'�tudier les �coulements d'air et d'eau). Les collisions des particules dans les Gaz sur R�seaux jouent un r�le crucial dans l'�mergence des ph�nom�nes macroscopiques.

            Parmi toutes les combinaisons possibles, le choc frontal est la seule qui permette de r�organiser les particules aff�rentes tout en respectant les lois de conservation �nonc�es pr�c�demment.

     


    Description d'une collision frontale.
            La conservation de masse et du nombre de particules est simple puisque les particules ont la m�me masse et le nombre de particules aff�rentes est identique au nombre de particules sortantes (deux dans ce cas). L'�nergie du syst�me est donc conserv�e. La conservation de l'impulsion (vecteur mouvement) est un peu plus d�licate � montrer, le dessin ci-dessous r�sume l'id�e.

    Description des vecteurs mouvements d'une collision frontale.

            L'impulsion est la somme des vecteurs mouvements des particules. Le cas de la collision frontale avec HPP se r�sume � additionner deux vecteurs (unitaires) de direction oppos�e, ce qui donne un vecteur nul. L'impulsion d'autres configuration donnera d'autres vecteurs mais le choc frontal est la seule configuration o� toutes les grandeurs �nonc�es sont conserv�es et o� l'on puisse avoir une autre configuration en sortie. Ce type d'�change de configuration est la base de l'�mergence de ph�nom�nes d'hydrodynamique � l'�chelle macroscopique et sera raffin� plus tard.

     

    II.5 : Caract�ristiques du mod�le HPP :

            Le choc frontal repr�sente 12,5% du champ de collision (2 combinaisons sur 16) et se produit � une densit� de 0.5 (2 particules sur 4). Par rapport aux mod�les r�cents, le premier rapport montre une faible efficacit� (faible rapport de nombre de Reynolds par site) mais HPP est inutilis� surtout parcequ'il a quatre "invariants" qui sont nuisibles dans la plupart des cas. Les "invariants" sont des quantit�s conserv�es dans le mod�le et qui ne correspondent pas au comportement d'un fluide r�el.

            En simplifiant � outrance la dynamique mol�culaire, de nombreux "artefacts" li�s � la discr�tisation apparaissent. Les �quations qui r�gissent le fluide prennent toutefois un nouveau visage et l'exp�rimentation informatique est plus facile. Depuis l'apparition de ce mod�le, de nombreuses variantes ont vu le jour pour att�nuer ou �viter les probl�mes pr�sent�s ici, ainsi que d'autres qui ont �t� d�couverts ensuite.

     

    II.6 : Le mod�le FHP :

            Les Automates Cellulaires peuvent-ils r�soudre des �quations diff�rentielles partielles, comme celles de Navier-Stokes ?
    Telle �tait la question cruciale pos�e par de nombreux scientifiques depuis l'apparition de ce domaine d'�tude. Rappelons que les premiers calculateurs automatiques ont �t� con�us dans cette optique, comme la machine � diff�rences finies de Babbage ou le calculateur �lectronique de John Vincent Atanasoff (1937-1942). Stanislaw Ulam et Konrad Zuse dans les ann�es 50, Stepen Wolfram et Richard Feynman dans les ann�es 80, ont milit� pour r�soudre cet �pineux probl�me. Pourtant, ce n'est que dix ans apr�s l'introduction du mod�le HPP que la connexion entre les deux sujets a �t� comprise. Uriel Frisch, Brosl Hasslacher et Yves Pomeau (d'o� FHP) ont propos� en 1986 une l�g�re modification qui permet de retrouver les �quations diff�rentielles de Navier-Stokes [19].

            La premi�re modification du mod�le HPP porte sur le "medium" anisotropique. Au lieu d'un maillage carr�, un maillage hexagonal est n�cessaire et suffisant pour r�soudre ce probl�me. Cette l�g�re modification permet en fait d'augmenter le nombre de degr�s de libert� lors des collisions et d'avoir plus de possibilit�s de sortie diff�rentes. Le fluide a donc plus d'opportunit�s de diffuser ses particules dans chaque direction et de diminuer sa viscosit�. Les simulations deviennent soudain plus int�ressantes ...

            La deuxi�me am�lioration du mod�le HPP r�soud "l'invariance de parit� lin�aire" en exploitant ces nouveaux degr�s de libert�s. Le nombre de collisions �quivalentes augmente et il suffit d'ajouter une nouvelle loi de collision : la "collision triangulaire".

            L'invariance galil�enne sera pour l'instant corrig�e par un adimensionnement d'une grandeur. Si l'advection d'un vortex a lieu � quatre fois la vitesse du fluide, on divisera par quatre les vitesses mesur�es pour retrouver l'invariance galil�enne (en monophasique). Cette m�thode n'est plus valable avec diff�rentes phases mais cela sort du sujet du m�moire.

            La temp�rature n'est pas un probl�me en soi, elle n'intervient pas dans les exp�riences qui int�ressent les utilisateurs de LGA. Si elle est n�cessaire, la solution est simple : avoir plusieurs vitesses de particules. Deux moyens existent : les particules elles-m�mes sautent plusieurs sites � chaque pas de temps, ou/et les liens ont plusieurs longueurs. Les r�gles de collision doivent refl�ter ces changements tout en respectant les r�gles de conservation initiales. En deux dimensions, un tel r�seau est g�n�ralement le voisinage de Moore � 8 voisins : les diagonales sont 1.41 fois plus longues que les liens horizontaux ou verticaux. Le r�seau hexagonal reste toutefois plus int�ressant pour son plus grand nombre d'isom�tries et donc par un plus grand nombre d'opportunit�s de collisions �quivalentes (D2Q12 ?).

     

    II.7 : Les r�gles et les nouvelles propri�t�s de FHP-1 :

            Dans leur fameux article [19], Frisch, Hasslacher et Pomeau vont d�crire une premi�re version du mod�le FHP qui r�pond � la contrainte d'�tre n�cessaire et suffisante pour retrouver les �quations de Navier-Stokes � grande �chelle. Seule la partie th�orique est r�solue dans l'�tude, l'efficacit� n'est pas au rendez-vous : les am�liorations viendront plus tard, la d�monstration �tant d�j� un grand pas.


    Les r�gles de collision du mod�le FHP-1.

            Le deuxi�me effet du changement de g�om�trie, apr�s avoir bris� l'anisotropie, fut d'apporter d'autres axes de sym�trie : 3 au lieu de 2. Il y en a maintenant 64 possibilit�s de configuration en entr�e, au lieu de 16. Les auteurs vont introduire 2 types de collisions au lieu d'une seule, soit 5 collisions au lieu de 2 pour HPP, si on tient compte des sym�tries et des rotations. On passe de 12,5 % � 12,8 % d'exploitation du champ des collisions mais l'am�lioration se situe autre part.

            D'abord, la collision triangulaire am�liore sensiblement la qualit� de l'�coulement et permet � elle seule de faire apparaitre des comportements hydrodynamiques r�alistes. Elle permet de faire "communiquer" entre elles des lignes et de mieux r�partir les particules sur les diff�rents axes du r�seaux.

            Ensuite, et c'est tout aussi remarquable : les collisions frontales n'ont plus seulement une, mais deux "voies de sortie". Il existe trois configurations d'entr�e �quivalentes, �quiprobables, au lieu de deux pour HPP. Il faut donc choisir, lorsqu'un choc frontal a lieu, la configuration de sortie.

            Si les chiralit�s locales sont choisies chaque fois au hasard et de mani�re totalement ind�pendante, le fluide simul� diff�re d'un fluide HPP d'une autre fa�on encore : il devient irr�versible. Alors qu'un fluide HPP est purement d�terministe (toute configuration initiale des particules donnera une unique configuration finale) le fluide FHP peut donner un nombre quasiment infini de configurations de sorties, selon le g�n�rateur de nombres al�atoires. Si les nombres sont "r�ellement" al�atoires, le fluide correspond � un fluide r�el et il n'est pas possible de remonter � la configuration d'origine apr�s n'importe quel nombre de pas de calcul.

            Pour illustrer cette propri�t� incroyable, on proc�de parfois � l'exp�rience suivante : soit un programme FHP avec une configuration des particules initiales choisies arbitrairement. Le g�n�rateur de nombres al�atoires est d�terministe et r�versible.

            Christopher Moore a d�montr� [31] que la pr�diction du r�sultat d'un calcul FHP fait partie de l'ensemble P-complet. En fran�ais, cela signifie que pour obtenir le r�sultat de N cycles, il faut effectuer tous les N pas de temps les uns apr�s les autres : il n'y a pas de court-circuit possible. Il n'y a th�oriquement pas de moyen de calculer le Ni�me �tat d'un LGA sans calculer tous les �tats pr�c�dents. Le calcul "brut" est la seule voie possible pour atteindre le r�sultat de la simulation, les optimisations doivent donc porter sur la partie de calcul.

            Le fluide FHP a des propri�t�s fortement non lin�aires et dissipatives, ainsi que de nombreuses autres propri�t�s curieuses, malgr� sa simplicit� �tonnante. Il ob�it � la loi de Mariotte et des gaz parfaits. Il est un milieu compressible et peut donc propager une onde "sonore" de mani�re circulaire comme dans la nature. Son calcul est par construction inconditionnellement stable et exact. Mais son efficacit� est mauvaise en pratique : le chemin parcouru par une particule entre deux collisions (mean free path en anglais) est tr�s long en moyenne, la viscosit� du fluide est forte et il faut donc des millions de sites pour simuler des ph�nom�nes int�ressants.

    II.8 : Les am�liorations de FHP-2 :

            La premi�re am�lioration du mod�le FHP original, ensuite renomm� FHP-1, fut d'ajouter une "particule immobile". Cet ajout permet de porter le nombre de configurations � 128 et de rajouter de nombreuses opportunit�s inesp�r�es pour r�arranger les particules en sorties. La viscosit� chute et le mod�le devient plus efficace. On commence aussi � s'int�resser aux propri�t�s de dualit� du mod�le : dans le cas du choc frontal, remplacer une particule par un "trou" et vice versa est tout � fait valable.


    Les r�gles de collision additionnelles du mod�le FHP-2.

            La viscosit� diminue et le nombre de collisions augmente : 20 entr�es mais l'occupation du champ de collision reste faible : 15 %. Bien que les possibilit�s augmentent et que la d�finition du mod�le FHP-2 ne soit pas tr�s pr�cise, il reste encore des efforts � faire.

     

    II.9 : Caract�ristiques particuli�res du mod�le FHP-3 :

            Le mod�le sur lequel nous allons nous attarder est le mod�le FHP-3. Il est une extension du mod�le FHP-2 avec une jeu de collisions satur� : 76 combinaisons sur 128 donnent lieu � un r�arrangement des particules � la sortie. 59 % : c'est le maximum d'occupation du champ de collisions que l'on puisse obtenir avec 7 bits. La table des collisions sera analys�e en d�tail dans la partie IV alors attardons-nous ici sur les raisons d'�tudier ce mod�le particulier.

            Tout d'abord, ce mod�le offre un compromis acceptable de simplicit� et d'efficacit�. Il n'est pas plus avantageux de faire plus simple : les deux mod�les FHP d�crits pr�c�demment sont conceptuellement plus simples mais la surcharge en calcul d�e aux collisions plus complexes de FHP-3 est largement compens�e par la r�duction du nombre de donn�es � traiter, donc le temps de calcul est r�duit. Nous verrons aussi que les mod�les FHP sont memory bound sur la plateforme qui nous concerne, une acc�l�ration des calculs n'a donc pas d'influence radicale sur le temps total de calcul car la m�moire est trop lente. La programmation de FHP-3 est plus avantageuse que FHP-1 ou FHP-2 malgr� une plus grande complexit�.

            Il n'est pas non plus envisageable � notre niveau de programmer un mod�le plus efficace : apr�s FHP3, aucun mod�le ne fait autorit� et n'est suffisamment connu pour �tre utilis� dans le cadre de notre �tude de cas. Apr�s FHP-3, le foisonnement d'am�liorations a dispers� les efforts et aucun nouveau mod�le discret n'est assez maitris�e par le public novice. De plus, la plus grande partie des nouveaux mod�les implique une r�organisation compl�te des donn�es et du programme : nouveaux r�seaux, nouvelles g�om�tries, nouvelles lois et nouveaux artefacts � maitriser. Enfin, notre travail doit rester une �tude de cas simple et notre but n'est pas d'�tudier un nouveau mod�le en profondeur : nous voulons simplement en faire fonctionner un le plus vite possible.

            FHP-3 est donc l'un des derniers mod�les "stables" et connus avant la diversification des mod�les. On peut ainsi esp�rer que des techniques d�velopp�es pour FHP-3 sont r�utilisables facilement dans les autres mod�les. Ces techniques (notamment le strip mining) et leurs implications seront ainsi facilement comprises par les utilisateurs qui les r�utiliseront et les am�lioreront selon les cas.

     

    II.10 : Propri�t�s physiques des mod�les FHP :

            Pour illustrer les propos du chapitre pr�c�dent, nous �tudierons le tabelau suivant :

    mod�le FHP-1 FHP-2 FHP-3
    Cs
    (vitesse du son en site par cycle)
    g
    f*
    (densit� id�ale, en occupation du site)
    0,187 0,179 0,285
    Re*
    (Nombre maximal de Reynolds par site � la densit� id�ale)
    0,387 1,08 2,22

            Pour fonctionner correctement, � un nombre de Reynolds maximum, les Gaz sur R�seaux doivent �tre utilis�s autour d'une densit� particuli�re qui d�pend du mod�le. Pour FHP-3, cette densit� est heureusement simple : deux particules par site (2/7 = 0,285). Si l'invariance galil�enne est n�cessaire, la densit� peut �tre diff�rente. La vitesse des �coulements doit aussi �tre limit�e, en pratique � Mach 0.3 soit au maximum 0,6*0,3 = 0,2 sites par pas de temps.

            Puisque nous parlons ici du nombre de Reynolds, attardons-nous dans ce paragraphe sur sa d�finition. Pour simplifier un peu arbitrairement, il met en relation la taille d'un objet ou d'un ph�nom�ne avec la viscosit� du fluide. Pour un gaz sur r�seau, la viscosit� correspond � une sorte de r�sistance � la diffusion d'une force ou d'une perturbation dans toutes les directions. Ainsi, plus le nombre de Reynolds est �lev�, plus les ph�nom�nes se diffusent et les g�om�tries sont complexes. Il est ainsi possible de comparer des ph�nom�nes qui ont lieu � des vitesses diff�rentes, � des �chelles diff�rentes, � des pressions diff�rentes dans des mati�res diff�rentes, la complexit� du ph�nom�ne est ainsi r�duite � un seul nombre sans unit�. Il correspond aux �quivalences suivantes, de la plus th�orique � la plus pratique pour nous :

    avec
            En cons�quence, avec un gaz sur r�seau, nous pouvons d�duire le nombre de Reynolds caract�ristique d'un �coulement � partir de la vitesse (en nombre de Mach) du fluide, multipli�e par la longueur caract�ristique de l'�coulement (L) et l'efficacit� du mod�le (Re*).

            Le tableau montre que le gain en efficacit� en nombre de Reynolds entre FHP-1 et FHP-3 est environ d'un facteur 6. Il faut donc en th�orie 36 fois moins de sites et 6^3=216 fois moins de temps de calcul avec FHP-3 (puisque le temps de calcul cro�t environ � la puissance troisi�me de la longueur caract�ristique). Les param�tres id�aux d'utilisation changent aussi, tout comme les caract�ristiques (par exemple la vitesse du son). Le respect de ces param�tres est crucial pour utiliser FHP de mani�re optimale et sans surprise : il suffit d'un �cart pour observer des ph�nom�nes non physiques (artifacts).

            De plus, on ne reviendra jamais assez sur l'importance de l'adimensionnement li� � l'invariance galil�enne ! A densit� id�ale, la vitesse du fluide doit �tre multiplit�e par 3/10 (voir la formule du tableau avec une densit� de 2/7).

            Pour les Gaz sur R�seaux du type FHP, d'autres ph�nom�nes curieux, inattendus et inqui�tants apparaissent. Pour des �coulements � pression constante, les r�gions � plus grande vitesse ont une plus grande densit� :

    avec
    ce qui ne correspond pas � la formule normale :  

            L'�quation de Navier-Stokes pour le cas g�n�ral est celle-ci :

            Mais pour un Gaz sur R�seau (hexagonal) � basse pression et � basse vitesse, elle devient :

            Le terme g(rho) est ajout� pour corriger l'invariance galil�enne. Il est donn� dans le tableau pr�c�dent, o� il d�pend de la densit�. Selon les cas, il peut �tre int�gr� dans l'adimensionnement d'une grandeur (vitesse, pression, temps...). Il faut alors choisir la densit� en fonction du crit�re d'exp�rimentation, soit un grand nombre de Reynolds ou l'invariance galil�enne, restaur�e d'une mani�re ou d'une autre. La pression, la densit�, la vitesse, la viscosit� et le temps sont ainsi enchev�tr�s de mani�re complexe et leur �tude sort du cadre de ce m�moire puisqu'elle est disponible dans la litt�rature sp�cialis�e. L'utilisateur est mis en garde du fait que la validit� des r�sultats d�pend de la qualit� de l'analyse du probl�me et de la compr�hension intime des m�canismes mis en jeu. Le programme seul ne pourra donner de r�sultat correct que dans des conditions contr�l�es par l'utilisateur.

            Les gaz sur r�seaux FHP ne sont pas parfaits, nous le savons maintenant. Mais il y a surtout un d�tail � rendre insomniaque car aucune solution simple n'est satisfaisante. Le probl�me peut �tre �nonc� de cette mani�re : si deux particules voyagent sur le m�me lien en sens inverse, elles ont moins d'une chance sur deux pour �tre d�vi�es dans un choc frontal. En cons�qunce, la viscosit� de FHP-3 est inf�rieure � ce que le mod�le pourrait fournir dans un cas id�al o� tout �v�nement d'une particule croisant une autre donnerait lieu � une r�organisation des configurations. Le probl�me touche la nature m�me du r�seau car un lien entre deux noeuds a deux canaux unidirectionnels et ind�pendants. Il n'est pas possible de diviser ce canal en deux tron�ons et de tester les collisions � cet endroit car il faudrait disposer d'une autre dimension ou direction pour r�ordonner les configurations � chaque temps t+1/2. Le probl�me a �t� abandonn�, les caract�ristiques des r�seaux existants �tant estim�s suffisamment satisfaisantes. Mais surtout, il faut respecter le principe d'exclusion de Fermi qui stipule que deux particules ne peuvent pas avoir la m�me position et la m�me vitesse au m�me instant.

            Le dernier d�faut reproch� aux LGA bool�ens est la quantisation et le fort niveau de bruit. Il faut effectuer des moyennes, ce qui emp�che quasiment toute mesure ponctuelle. Un physicien pr�f�re souvent 10% d'erreur � 10% de bruit lorsqu'il veut effectuer un calcul. Notons toutefois pour terminer que la pr�cision d'un gaz sur r�seau approche 1% dans des conditions id�ales, soit environ la pr�cision de la mesure. Les m�thodes traditionnelles sont qualitativement et quantitativement plus impr�cises en pratique et n�cessitent de nombreuses mises � l'�chelle ainsi que des mesures r�elles.

     

    II.11 : Extensions diverses :

            Pour clore cette partie, nous allons voir quelques variations sur le th�me des Gaz sur R�seaux. La premi�re famille conserve l'aspect binaire, ou dicret, de HPP/FHP : des mod�les thermiques, comme �voqu�s pr�c�demment, ont �t� �tudi�s (g�om�trie D2Q9) [13]. Diverses �tudes ont permis de mieux contr�ler l'invariance galil�enne du mod�le : par exemple le mod�le FHP-4 avec plusieurs particules immobiles [20][28][29]. Des mod�les � plusieurs phases (mati�res) miscibles ou immiscibles permettent d'injecter des "traceurs" dans des �coulements, ou de simuler la s�paration de deux fluides (comme de l'huile se s�parant de l'eau) [9][15][16]. En 1988, Jean-Pierre Rivet [11] programme un Gaz sur R�seau en 3D � grande �chelle sur un r�seau FCHC (HyperCube � Faces Centr�es). En 1990, C. Appert et S. Zaleski ajoutent des forces non locales entre particules pour calculer la s�paration de phases.

            Les LGA discrets ont vite �t� supplant�s par la famille des LGA en virgule flottante car leur rapport efficacit�/temps de calcul est plus int�ressant. La disponibilit� de plateformes suffisamment puissantes a permis � ce domaine de cro�tre au point de canaliser la plupart des efforts de recherche. Les utilisateurs de CAM-8 sont probablement les derniers � utiliser des mod�les discrets. La premi�re raison d'utiliser les nouveaux mod�les est simple : il n'y a pas besoin d'int�grer de nombreux points pour effectuer une mesure. Les mod�les discrets sont intrins�quement bruit�s et les physiciens d�testent le bruit. Ce bruit est pourtant int�ressant pour faire �merger des ph�nom�nes spontan�ment alors qu'ils sont forc�s dans la pratique (par exemple : dissym�trie dans un tunnel pour forcer des all�es de Von Karman � apparaitre rapidement, voir la partie III.9).

            Pour r�duire la viscosit�, les nombres en virgule flottante sont utilis�s car ils ont une plage dynamique bien sup�rieure � un seul bit. Toutefois on ne peut plus utiliser les techniques de collision classiques ! On utilise alors les m�thodes de Bolzman, l'op�rateur BGK est le plus souvent utilis� actuellement. Le nombre de Reynolds est bien plus grand et les mesures sont plus faciles avec un m�me nombre de sites, m�me si ces sites prennent plus de place en m�moire qu'un site FHP. La m�thode de Bolzman est utilis�e dans presque tous les domaines actuellement, avec autant ou plus de diversit� que le mod�le FHP, m�me si le d�bogage est encore plus difficile qu'avec FHP : lorsque la densit� n'est pas exactement conserv�e, on ne peut pas savoir exactement si c'est une erreur d'arrondi, de frappe ou de formule...

           Enfin, puisque le bruit est n�cessaire dans certains cas, Boghossian et al. [35] ont introduit les ILG : Integer Lattice Gases, sens�s avoir � la fois les avantages des mod�les discrets et continus. Les premi�res exp�riences ont calm� l'optimisme initial, mais tout espoir n'est pas perdu.

     

    II.12 : Conclusion :

            Le mod�le FHP-3 allie une simplicit� relative � des caract�ristiques suffisamment int�ressantes pour justifier les efforts de programmation qui sont effectu�s dans ce domaine. Nous avons toutefois constat� qu'il ne peut �tre utilis� que dans un nombre restreint de cas et dans des conditions s�v�rement contr�l�es mais notre �tude porte uniquement sur les aspects architecturaux et algorithmiques de ce type de mod�les. Cette deuxi�me partie est la seule qui porte sur les aspects purement th�oriques et nous pouvons maintenant nous int�resser aux algorithmes dans tout le reste de ce m�moire, tout en �tant conscient des possibilit�s et des limites du mod�le.

     

     

    Partie III : Pr�sentation des travaux ant�rieurs

     

    III.1 : Introduction :

            Apr�s la partie pr�c�dente, qui rappelle les points cl�s de m�canique qui nous concernent, cette partie pr�sente les techniques classiques et basiques pour programmer les Gaz sur R�seaux. Elle est la base et le point de d�part du travail r�alis� pour ce m�moire. La premi�re impl�mentation de r�f�rence est donn�e en annexe B : elle a fait l'objet d'un article dans le journal Pascalissime et permet de comprendre les probl�mes de base pos�s par le mod�le FHP3. Nous �tudierons la structure et la conception du programme puis les probl�mes rencontr�s pour arriver � la description d'une deuxi�me impl�mentation de r�f�rence plus sophistiqu�e. Enfin nous analyserons plus en profondeur les caract�ristiques de la programmation des LGA pour pr�parer la version de ce m�moire.

     

    III.2 : Id�es de base :

            Le premier programme, �crit � l'origine en Turbo Pascal, a �t� inspir� par l'article de Pierre Lallemand, paru Revue du Palais de la D�couverte [18] et d�crivant approximativement le mod�le FHP-2. Le seul paragraphe dans lequel la programmation est abord�e est celui-ci :

    "
    Nous donnons d'abord quelques br�ves indications sur ces exp�riences, pour susciter d'�ventuelles vocations aupr�s des lecteurs disposant d'un ordinateur personnel. Chaque noeud du r�seau est repr�sent� par un nombre form� par la juxtaposition de sept nombres �gaux � 0 ou 1 (bits) : un octet de la m�moire d'ordinateur suffira donc pour d�crire chaque site. L'�volution temporelle se fait en deux �tapes :

  • propagation des particules par d�placement vers les noeuds voisins des bits convenables
  • collision en chaque noeud en allant lire dans une table pr�par�e une fois pour toutes le r�sultat de la collision particuli�re.
    "

            Mais ces indications m'ont longtemps laiss� perplexe. J'ai ensuite cherch� de l'aide dans les th�ses de Val�rie Pot [15] et d'Umberto d'Ortona [14] � Jussieu mais aucun code et aucune indication ne sont fournis. Pourtant, les questions suivantes sont simples :

            La premi�re question est r�solue par du "travail sur papier" et une analyse exhaustive des collisions possibles. Le travail est effectu� avec des repr�sentations vectorielles des configurations afin de trouver des r�organisations possibles. Pourtant, les efforts seuls, sans source de r�f�rence, ont donn� la table des collisions de l'annexe B qui n'est pas compl�tement juste, malgr� un bon d�but. Les progr�s sont difficiles sans exemple, ce qui motive en retour l'aspect instructif de ce m�moire. Nous reviendrons sur la constitution de la lookup table dans la partie IV.

            La repr�sentation des donn�es est un probl�me tout aussi compliqu� lorqu'aucune r�f�rence n'est disponible. En effet, m�me s'il est clair qu'un bit peut repr�senter une particule et qu'un octet permet de repr�senter toutes les directions, un pas de temps comporte de nombreux pas interm�diaires et le r�seau repr�sente l'�tat fig� des particules � un instant qui n'est pas pr�cis� par le mod�le. En effet, un pas de temps commence-t-il par une collision ou un d�placement ? Repr�sentons-nous les particules qui entrent ou qui sortent ? Un bit repr�sente-t-il un lien ou un noeud ? Comment organiser les donn�es pour qu'elles soient facilement manipul�es ?

            Une fois que la transposition d'un r�seau carr� � un r�seau hexagonal est comprise, nous pouvons partir d'un "ether" simple et b�tir l'algorithme de calcul � partir du code de d�placement. Tout d'abord, le calcul est effectu� cycle apr�s cycle, et l'�tat du r�seau repr�sente les particules � chaque cycle, sans se pr�occuper de la sous-�tape (avant ou apr�s collision ou d�placement). Ce qui importe est le changement entre chaque cycle : une particule se propage cycle apr�s cycle en sautant d'un noeud � un autre. Pour effectuer ce changement, la fonction de "calcul" effectue les deux op�rations (propagation et collision), une cellule apr�s l'autre. Effectuer les deux op�rations l'une apr�s l'autre sur tout le r�seau impliquerait la programmation de deux boucles ind�pendantes et augmenterait le nombre d'acc�s � la m�moire. Dans tous les algorithmes qui suivront, les deux op�rations sont effectu�es � l'int�rieur de la m�me boucle pour b�n�ficier de la localit� des registres.

            La technique d'�laboration du programme est simple :
        - D'abord mettre en place la boucle externe avec la pr�paration des pointeurs vers les donn�es.
        - Ensuite, programmer la propagation des particules : charger un octet de m�moire et distribuer un par un tous les bits vers les noeuds voisins, avec la gestion des variables temporaires (pour �viter le recouvrement dans certaines directions, comme expliqu� dans le chapitre suivant).
        - Enfin, lorsque le d�placement est fonctionnel (tous les bits se d�placent comme pr�vu sur le r�seau), il ne reste plus qu'� inclure la consultation de la table, juste apr�s l'endroit o� le noeud courant est lu.

            Il devient clair aussi que la table, puisqu'elle est consult�e entre le chargement et la distribution, doit contenir une repr�sentation aussi simple et compl�te que possible des op�rations � effectuer. La table peut effectuer des op�rations complexes et r�duire la taille du programme, elle concentre donc toute l'intelligence du code de collision. L'annexe B montre deux mani�res de la programmer : par code explicite ou par constante � la compilation. La table exploite ainsi le huiti�me bit pour effectuer la collision avec des "murs" virtuels sans ajouter une seule ligne de code. Des effets de pesanteur ou d'attraction peuvent m�me �tre ajout�s en modifiant l�g�rement certaines entr�es de la table. C'en est presque trop facile ...

     

    III.3 : Les plans temporaires :

            Un aspect m�connu des programmes de ce type concerne les "plans temporaires" : le probl�me ne peut �tre appr�hend� dans toute sa complexit� que lors de la programmation, lorsqu'il est d�j� trop tard. Ce probl�me deviendra encore plus pr�pond�rant avec les codes de strip mining et il est important pour la suite du travail de maitriser parfaitement l'algorithme et les donn�es associ�es.

            Les "plans temporaires" deviennent tr�s important pour les g�om�tries tr�s larges car m�me avec un ordinateur disposant de toute la m�moire vive du monde, il est important de l'utiliser correctement. Les plans temporaires sont d�cris succintement dans l'annexe B et dans la partie V.6 mais �tudions ici leur th�orie g�n�rale en partant d'un cas de dimension 1 (par exemple un automate cellulaire lin�aire) :

            Dans un ordinateur "s�quenciel", les noeuds sont trait�s un par un. Supposons que le sens de balayage soit le m�me que le sens de x et regardons ce que ferait un algorithme simple mais mauvais :

    
    1) d'abord il lit la valeur du noeud courant en x,
    2) ensuite il calcule la valeur suivante,
         par consultation de la table par exemple,
    3) enfin il �crit une partie du r�sultat dans chaque
         partie correspondante : x-1, x et x+1
    4) il incr�mente x et retourne en 1) si la ligne n'est pas termin�e.


            Cet algorithme est mauvais car au cycle suivant de la boucle du temps t, il trouvera en x+1 une valeur qui correspondra � t+1 et la catastrophe sera in�vitable :
     

            La solution la plus simple est d'utiliser deux plans de travail : un plan "source" et un plan "destination", permettant une complexit� arbitraire dans le voisinage avec l'argument choc que le "transfert" s'effectue simplement en �changeant les deux pointeurs vers les tableaux :
     

            Toutefois, lorsque la taille totale des tableaux atteint les limites de la m�moire de l'ordinateur, il est clair que seule une moiti� est vraiment utile car les informations sont redondantes ou inutilis�es. Cette consid�ration devient incontournable pour les simulations en 3D car elles utilisent une quantit� ph�nom�nale de m�moire (de 16MO � 4GO dans certains cas). L'argument de simplicit� de la technique de l'�change de pointeurs perd toute cr�dibilit� devant ce probl�me.

            La solution privil�gi�e, bien que plus complexe, utilise un "plan temporaire" pour m�moriser le r�sultat de chaque cycle et �viter le "court circuit temporel" d�crit plus haut. Les caract�ristiques de cette m�moire d�pendent de la quantit� d'informations qui doit voyager dans le m�me sens que celui du balayage. Pour l'exemple de l'automate cellulaire lin�aire d�crit plus haut, il faut m�moriser un mot ou un bit car le d�placement se fait vers le voisin imm�diat. Au niveau de l'algorithme, cela se traduit par la n�cessit� de retarder l'�criture du r�sultat. Le programme est dot� d'une valeur temporaire (plan ponctuel) et devient ainsi :

    
    1) lire la valeur du noeud courant en x,
    2) �crire en x la valeur temporaire,
    3) calculer la valeur suivante de x,
    4) �crire chaque partie du r�sultat dans chaque partie correspondante :
       x-1, x mais x+1 va dans la valeur temporaire.
    5) incr�menter x et retourner en 1) si la ligne n'est pas termin�e.
            Le graphe de dataflow suivant illustre une autre mani�re de r�soudre le probl�me :

            Une difficult� suppl�mentaire est d'amorcer le programme en fournissant une valeur initiale correspondant � l'extr�mit� de la ligne : cela peut �tre astucieusement utilis� pour injecter des particules dans le domaine d'�tude et cr�er un vent artificiel. De m�me, la valeur finale de la variable temporaire (� la fin de la ligne) peut �tre ignor�e pour faire disparaitre les particules et cr�er une sorte de bouche de sortie pour le fluide. Les particules peuvent ainsi �tre cr��es puis effac�es � des extr�mit�s oppos�es du tunnel, ce qui g�n�re naturellement un vent dans le tunnel. Des techniques plus sophistiqu�es sont cependant recommand�es car cette m�thode est aussi simple que limit�e dans la pratique.

            Toutefois nous traitons des tableaux en deux dimensions et les choses ont tendance � s'emm�ler et rendre la programmation tr�s d�licate. Il y a pourtant une r�gle simple � retenir : il faut un buffer temporaire par dimension (que la dimension soit temporelle ou spatiale) et l'information � m�moriser correspond au voyage qu'effectuent les particules dans le sens du balayage.

            Pour appliquer l'algorithme en 2 dimensions, il faut un plan temporaire ind�pendant pour chaque dimension. Les colonnes sont trait�es exactement de la m�me mani�re qu'une ligne mais apr�s projection sur la dimension perpendiculaire : ce n'est plus un noeud de m�moire qui est n�cessaire pour le plan temporaire mais toute une ligne. Pour un tableau de x * y noeuds, il faudra en tout M = 1 + x + xy noeuds en m�moire. En r�gle g�n�rale, on compte (x+1)*y noeuds pour l'allocation de la m�moire d'un tableau 2D.

            La formule se g�n�ralise facilement � toute dimension N>1 et elle se r�duit approximativement � la un polyn�me si toutes les dimensions sont similaires. On peut ainsi prouver que la quantit� totale de m�moire ne s'approche pas du double de la taille du tunnel comme dans l'alternative pr�c�dente. Par exemple, pour un r�seau en 3D de dimensions (x,y,z) avec un voyage d'un noeud par pas de temps, il faudra en tout M = 1 + x + xy + xyz noeuds de m�moire. Si x, y et z sont des valeur rapproch�es, la formule devient le polyn�me suivant : M = x^0 + x^1 + x^2 + x^3 = 1 + x + x^2 + x^3. Elle tend ainsi vers M = (x+1)^N  et permet, pour un cas donn�, d'utiliser moins de m�moire ou d'avoir un tableau plus grand, par rapport � la technique de l'�change de pointeurs (M = 2x^N).

            Naturellement, la complexit� du programme augmente mais comme pour le reste cela d�pend de l'exp�rience, des ressources, de la patience et de la compr�hension de la technique. Un cas interm�diaire (compromis complexit�/espace m�moire) serait de diviser le tunnel en de nombreuses parties et de disposer d'un plan temporaire : chaque bloc ayant la m�me taille, il est facile d'utiliser la technique d'�change de pointeurs sans pour autant doubler l'occupation de la m�moire. Cette technique ne permettant pas de r�duire directement le temps de calcul, elle n'est pas �tudi�e ici. De plus, les fortes contraintes en m�moire sur les PC ainsi que les m�moires caches (principalement les modes write through et write back qui ne peuvent pas toujours �tre contr�l�s) favorisent la technique de plan temporaire minimal, d�crite plus haut.

     

    III.4 : Premier code de r�f�rence :

            Nous allons ici �tudier succintement un premier morceau de code qui servira de r�f�rence pour estimer les performances, les contraintes et les limites des algorithmes r�alis�s. Il est extrait de l'annexe B et c'est la version �crite en assembleur pour i286 en 1995 :

    
    BEGIN
    (*...*)
     asm
    (*...*)
    
    (* boucle principale *)
    
    @BOUCLE_EXTERIEURE:
      mov seg_ligne,$A000
      mov y,99
    @BOUCLE_Y:
       mov es,seg_ligne
    
    (* PARTIE IMPAIRE: *)
    
    (* force la particule D *)
        xor cl,cl
        rol rand,1
        jnc @pas_retenue1
        mov cl,1
    @pas_retenue1:
    
        mov bp,1            (* BP est le registre de contrôle de la boucle *)
        mov di,xmax+2               (* DI pointe sur le noeud courant *)
        mov si,offset temp_impair+1   (* SI pointe sur les bits E et F *)
    @BOUCLE_IMPAIRE:
    
    (* Al collectera les bits du noeud courant *)
         lodsb                         [1]
         mov byte[si-1],0              [2]
    
    (* Ah désignera les bits à envoyer *)
         mov ah,byte ptr es:[di]       [3]
         or ah,ah                      [4]
         jz @vide1                     [5]
    
    (* consulte le tableau: *)
         mov bl,ah                     [6]
         xor bh,bh                     [7]
         rol rand,1                    [8]
         jnc @pas_rol1                 [9]
         inc bh                        [10]
    @pas_rol1:
         mov ah,byte[bx+offset p]      [11]
    
    (* distribue les bits: *)
         shr ah,1                      [12]
         jnc @pas_A1                   [13]
         or byte ptr es:[di-1],A       [14]
    @pas_A1:
         shr ah,1                      [15]
         jnc @pas_B1                   [16]
         or byte ptr es:[di-xmax-1],B  [17]
    @pas_B1:
         shr ah,1                      [18]
         jnc @pas_C1                   [19]
         or byte ptr es:[di-xmax],C    [20]
    @pas_C1:
         shr ah,1                      [21]
         jnc @pas_D1                   [22]
         or cl,2                       [23]
    @pas_D1:
         shr ah,1                      [24]
         jnc @pas_E1                   [25]
         or byte ptr ds:[bp+offset temp_pair],E [26]
    @pas_E1:
         shr ah,1                      [27]
         jnc @pas_F1                   [28]
         or byte ptr ds:[bp+offset temp_pair-1],F [29]
    @pas_F1:
         shl ah,6                      [30]
         or al,ah                      [31]
    @vide1:
         shr cl,1                      [32]
         jnc @pas_retenue_D1           [33]
         or al,8                       [34]
    @pas_retenue_D1:
         stosb                         [35]
         inc bp                        [36]
        cmp bp,xmax                    [37]
        jbe @BOUCLE_IMPAIRE            [38]
    
    
    (* PARTIE PAIRE: *)
    
    (* coup�e : elle est similaire � la partie impaire *)
    
       add seg_ligne,40
       dec y
      jnz @BOUCLE_Y
    
      mov ah,1
      int 016h
      jz @BOUCLE_EXTERIEURE
     end;
    (* boucle principale *)
    
    END.

            or byte ptr ds:[bp+offset temp_pair],E : nous atteignons ici des sommets de programmation CISC. Rappel : le nombre r�duit de registres nous oblige � utiliser comme compteur/pointeur le pointeur de trame BP (frame Base Pointer), alors qu'il est sens� servir pour le passage de param�tres sur la pile pour les langages de haut niveau. Le probl�me est que tout adressage utilisant BP utilise par d�faut le segment de pile SS alors que les donn�es sont adress�es par ES (le tableau dans la m�moire vid�o) et DS (les donn�es statiques et le plan temporaire). Nous devons donc ajouter un pr�fixe d'adressage ("DS:") pour restaurer le segment, ce qui consomme inutilement des cycles. Rappelons aussi que sur le i286, bien qu'il existe de nombreux modes d'adressage, peu de registres peuvent �tre effectivement utilis�s comme pointeur. Il est donc facile de comprendre que c'est l'architecture bancale de la machine qui fait dire � certains que "les compilateurs peuvent g�n�rer du code aussi efficace qu'un code �crit en assembleur", puisque la flexibilit� r�duite diminue artificiellement les �carts possibles de performance.

            Nous voyons aussi, dans le reste du code, de nombreuses boucles, des manipulations de segments, des calculs de pointeurs et la gestion du plan temporaire horizontal : de nombreuses parties du programme seraient susceptibles d'�tre �limin�es en retravaillant la structure globale. Bien que le programme en assembleur soit environ deux fois plus rapide que le programme en Pascal, il semble effectuer des op�rations trop complexes pour ne bouger que quelques bits. Il faut environ 38 instructions pour traiter une seule cellule et le traitement est ralenti pour de nombreuses raisons, dont :

            Rappelons aussi qu'un PC � base de i286 n'a pas de m�moire cache et tous les acc�s � la m�moire centrale n�cessitent d'envoyer une adresse � des puces de DRAM dont le temps d'acc�s est environ de 70 ns. Malgr� l'apparition de chipsets sophistiqu�s et le d�but des optimisations mat�rielles, les instructions du coeur de la boucle consomment de la bande passante, ce qui entre en concurrence avec les autres acc�s � la m�moire. Le programme est naturellement memory bound � cause de l'architecture du processeur.

            Les mesures manuelles sur un PC i286 � 12MHz donnent une vitesse d'environ 100000 noeuds par seconde, la g�om�trie �tant limit�e architecturalement � 320*200 par la m�moire segment�e et la carte VGA (granularit� de 64 Ko). Il y a environ une image et demie affich�e par seconde ce qui est honnorable pour un ordinateur de cette classe (comparer � l'iPSC en D.6). La recherche des goulots d'�tranglements est difficile car le processeur i286 ex�cute les instructions avec des dur�es tr�s variables et le temps d'acc�s � la m�moire est tr�s fluctuant. Toutefois nous pouvons effectuer quelques estimations : le calcul d'un noeud n�cessite environ 120 cycles d'horloge et 38 instructions, soit 3,2 cycles d'horloge par instruction en moyenne.

     

    III.5 : Influence de l'architecture :

            Le passage du i286 � 12MHz au Pentium � 100MHz en 1996 fut un grand bouleversement. Les r�gles de codage ont �t� profond�ment modifi�es : les instructions recommand�es ne sont pas les mêmes, la m�moire cache sur deux niveaux peut enfin contenir tout le code et toutes les donn�es (L1 : 8Ko et L2 : 256Ko), de nombreuses innovations sont incluses... Pourtant le mode r�el ne b�n�ficie pas directement de toutes les am�liorations, comme par exemple les modes d'adressage �tendus et orthogonaux du i386 qui permettent d'utiliser toutes les combinaisons de registres pour acc�der � la m�moire.

            La m�moire virtuelle en mode prot�g� reste un probl�me car la manipulation des registres de segments d�clenche de longues s�quences de microcode pour v�rifier la validit� des adresses, ce qui en plus peut d�clencher des exceptions pour g�rer les pages en m�moire et sur le disque dur s'il faut les swapper. On s'attend donc naturellement � ce que le programme fonctionne moins vite lorsqu'il est lanc� � partir de Windows. Pourtant, il s'y ex�cute visiblement plus vite ! Plus pr�cis�ment, en mode fen�tr�, il s'ex�cute beaucoup plus vite qu'en mode normal/"plein �cran".

            Le changement d'architecture, du 286 au Pentium, a chang� compl�tement les rapports entre les flux de donn�es et d'instructions. L'introduction de deux niveaux de m�moire cache balance la plus grande latence relative de la m�moire vid�o. De plus, l'acc�s � la m�moire vid�o subit de nombreuses restrictions : par exemple, elle est acc�d�e au travers du bus PCI et elle n'est pas cachable. L'exp�rience avec Windows a montr� la situation paradoxale o� un programme "optimal" pour le 286 est inefficace sur Pentium. Pour expliquer cela, il faut pr�ciser que Windows (en mode fen�tr�) �mule la m�moire vid�o : il redirige les acc�s vid�o vers la DRAM centrale gr�ce � la translation d'adresse du mode prot�g�/pagin�. Ainsi, nous n'acc�dons pas nous-m�mes � la m�moire vid�o, c'est l'�mulateur qui copie la DRAM p�riodiquement vers la vraie carte. La m�moire centrale �tant cachable, les acc�s sont beaucoup plus rapides et le transfert par bloc vers l'�cran est plus rapide qu'octet par octet. Les instructions de type read-modify-write sont encore plus lourdes puisqu'elles n�cessitent une lecture (blocante, pour �viter toute modification intempestive au milieu de l'instruction) puis une �criture et il faut une transaction compl�te sur le bus PCI (attente que le bus soit libre - envoyer l'adresse - envoyer/recevoir la donn�e) pour transf�rer un simple octet ou un bloc entier. Le calcul en m�moire cachable puis le transfert par bloc (ou en rafale, burst pour le PCI) est forc�ment plus rapide que le premier programme.

            Le diagramme ci-contre est extrait de [33]. Il repr�sente une carte m�re aux caract�ristiques suivantes :
    * Processeur Pentium 100MHz avec 2 caches int�gr�es de 8Ko chacune
    * Bus local : donn�es 64 bits, 66 MHz, 528Mo/s th�oriques
    * Cache L2 de 256Ko avec des puces SRAM � 15 ns de temps d'acc�s (sans compter les latences de gestion de la LRU et de la SRAM de "tag" � 15 ns aussi)
    * M�moire DRAM � 70ns de temps d'acc�s (30ns en mode page), EDO possible.
    * Bus PCI multiplex� � 33MHz et 32 bits de large (132Mo/s th�oriques)

            Nous pouvons y voir que le nombre de circuits et de connexions � traverser est proportionnel � la latence et � la vitesse de transfert. Le circuit imprim� montre en plus que cela est proportionnel � la distance parcourue dans les fils : la m�moire cache est tr�s proche du processeur alors que les slots PCI et DRAM sont �loign�s. Des mesures r�elles sur cette plateforme, en conditions "id�ales", donnent une vitesse de transfert unidirectionnel de 28Mo/s vers la carte vid�o. En pratique, le processeur peut donc afficher un mot de 32 bits tous les 4 cycles, soit une instruction d'affichage entrelac�e avec sept instructions de calcul. Il n'est pas raisonnable dans ces conditions d'utiliser le premier code de r�f�rence qui utilise de nombreuses op�rations complexes vers la m�moire vid�o.

            La le�on est simple : en mode "normal" (MS-DOS) il ne faut plus utiliser la m�moire vid�o pour stocker le tunnel. Il faut au contraire utiliser une m�thode qui paradoxalement prendrait plus de temps si l'on ne regardait que le nombre d'instructions � ex�cuter. Le calcul doit donc s'effectuer dans la m�moire centrale et, comme l'�mulateur MSDOS de Windows le faisait, afficher r�guli�rement le r�sultat � l'�cran, tous les N pas de temps (N pouvant varier � la demande de l'utilisateur). Nous �vitons ainsi de perdre du temps dans les transactions "blocantes" du bus PCI, dont le temps d'acc�s est probablement sup�rieur � 100ns (carte vid�o comprise). Pour qu'un programme tourne vite, il est crucial de placer les donn�es au meilleur endroit.

     

    III.6 : Deuxi�me code de r�f�rence :

            Le second code de r�f�rence date de 1997 et est inclus ci-dessous. L'id�e directrice est de r�duire le code de distribution des bits en groupant les noeuds par quatre. Le r�seau est alors tourn� � 90 degr�s et il n'y a plus de code pour les lignes paires et impaires, comme pour le circuit d�crit en V.6. Ce code est destin� aux plateformes � partir du i386 et "optimis�" pour le Pentium classique (P53C) o� nous pouvons utiliser les registres sur 32 bits au lieu de 16. La boucle externe affiche les calculs puis traite N pas de temps de cette mani�re :

    
    ;
    ;  BALAYAGE:
    ;
       mov ebx,es:[640]
       mov XB,ebx
    
       mov di,640
    boucle_ext:
         mov bx,320
    boucle_int:
           mov word ptr X,bx        ;U (1)
    
    ;
    ; d�placement des variables:
    ;
           mov esi,XC               ;*V                 [3]
           mov ebx,es:[di-316]      ;*prefixe + U (3)   [6]
           mov XD,esi               ;*V                 [8]
           mov XC,ebx               ;*U (4)             [10]
    
           mov edx,X1               ;*V                 [12]
           mov eax,XB               ;*U (5)             [14]
           mov ecx,es:[di+4]        ;*pr�fixe+U (7)     [17]
           and edx,010000000h   ;XE ;*V                 [19]
           mov X1,eax               ;*U (8)             [21]
           mov XB,ecx               ;*V                 [23]
    
           mov ebp,XA               ;*U (9)             [25]
           mov ebx,es:[di+320]      ;*pr�fixe+U (11)    [28]
           and ebp,020000000h   ;XF ;*V                 [30]
           mov XA,ebx               ;*U (12)            [32]
           or ebp,edx               ;*V                 [34]
    
    ;verticaux:
           and eax,0C0C0C0C0h       ;*U (13)            [36]
           and esi,008080808h       ;*V                 [38]
           and ebx,001010101h       ;*U (14)            [40]
           or eax,esi               ;*V                 [42]
    ;XL
           mov ecx,XD               ;*U (15)            [44]
           or eax,ebx ;report des verticaux *V          [46]
           mov ebx,XA               ;*U (16)            [48]
           and ecx,000100010h       ;*V                 [50]
           and ebx,000002000h       ;*U (17)            [52]
           or ebp,ecx               ;*V                 [54]
           mov ecx,X1               ;*U (18)            [56]
           or ebp,ebx               ;*V                 [58]
           and ecx,000201020h       ;*U (19)            [60]
           or ebp,ecx               ;*U (20) (d�pendance sur ECX) [62]
    ;XR:
           mov ebx,XB               ;*V                 [64]
           rol ebp,8  ; report XL    *U (21)            [66]
           mov ecx,XC               ;*V                 [68]
           or eax,ebp ; report XL    *U (22)            [70]
           mov ebp,XD               ;*V                 [72]
           and bx,2                 ;U (23)             [72']
           and ebp,000040000h       ;*V                 [74]
           and cx,4                 ;U (24)             [74']
           mov edx,XA               ;*V                 [76]
           or bx,cx                 ;U (25)             [76']
           mov ecx,X1               ;*V                 [78]
           or bp,bx                 ;U (26)             [78']
           and edx,002000200h       ;*V                 [80]
           or ebp,edx               ;*U (27)            [82]
           and ecx,004020400h       ;*V                 [84]
           or ebp,ecx               ;*U (28)            [86]
           ror ebp,8                ;*V                 [88]
           or eax,ebp               ;*U (29)            [90]
    
    ; d�termine quelle banque LUT on utilise:
           rol word ptr seed1,1     ;U (32) 3 cycles + non pairable  [94]
           setc bh                  ;U (35) microcode                [97]
    
           mov bl,ah                ;U (36) d�pendance sur EBX       [98]
           mov ah,[offset p+bx]
      ; acc�de au tableau (#1)  U (38) AGI sur EBX, pr�fixe possible [101]
           mov bl,al                ;U (39) d�pendance sur EAX       [102]
           mov al,[offset p+bx]
      ; acc�de au tableau (#2)  U (41) AGI sur EBX, pr�fixe possible [105]
           ror eax,16               ;U (42) d�pendance sur EAX       [106]
    
           mov bl,ah                ;U (43) d�pendance sur EAX       [107]
           mov ah,[offset p+bx]
      ; acc�de au tableau (#3)  U (45) AGI sur EBX, pr�fixe possible [110]
           mov bl,al               ;U (46) d�pendance sur EAX        [111]
           mov al,[offset p+bx]
      ; acc�de au tableau (#4)  U (48) AGI sur EBX, pr�fixe possible [114]
           ror eax,16               ;U (49) d�pendance sur EAX       [115]
    
    ;writeback:
           mov bx,word ptr X        ;V                  [115']
           mov ecx,[offset temp+bx] ;**U (50)           [117]
           mov [offset temp+bx],eax ;*V                 [119]
           mov es:[di-320],ecx      ;pr�fixe+*U (51)    [122]
    
           add di,4                 ;V                  [123]
           sub bx,4                 ;U (52)             [123']
           jnz boucle_int           ;V                  [124]
    
         cmp di,63360
         jbe boucle_ext

            La boucle interne comporte 67 instructions pour traiter 4 noeuds, soit environ 17 instructions par noeud : c'est deux fois mieux que le code de r�f�rence en mode 8 bits. Une estimation "statique", rapide et optimiste de ce kernel sur un Pentium classique fait penser qu'il peut s'ex�cuter en 52 cycles (voir les nombres entre parenth�ses, soit 13 cycles par noeud).

            Mais en r�alit�, le code a �t� con�u pour �tre ex�cut� en mode r�el (16 bits sous MS-DOS) et l'utilisation des registres en mode 32 bits ajoute un pr�fixe de taille, invisible dans la syntaxe, � chaque instruction : cela brise compl�tement le pairage des instructions ! La plupart des d�pendances de donn�es entre les registres ont �t� aplanies dans le code de mouvement afin d'ex�cuter deux instructions par cycle sur le Pentium mais les pr�fixes de taille �taient oubli�s dans l'analyse. Les instructions marqu�es d'un ast�risque prennent ainsi deux cycles au lieu d'un demi-cycle ! Cela montre bien que le nombre d'instruction, le temps d'ex�cution et le nombre de sites trait�s par seconde sont des valeurs qui ne sont plus naturellement ou simplement proportionnelles : l'architecture complexe du Pentium a des "cycles cach�s" qui n'apparaissent pas en lisant le code source, m�me en assembleur ! Alors que ce code est tr�s bon pour le i386, le Pentium a un pipeline diff�rent qui favorise certains types de codes tout en pouvant ex�cuter les autres programmes mais � une vitesse nettement inf�rieure et sans pr�venir.

            L'analyse sous ce nouvel angle (voir les nombres entre crochets) donne environ 124 cycles (comme pour la version i286, mais 31 cycles par noeud). Cette baisse incroyable des performances, malgr� le soin apport� au code, a motiv� la conception d'un DOS-extender pour la suite du projet. Le code de mouvement a �t� assez bien r�duit mais reste lourd et consomme tous les registres. L'analyse du code r�v�le aussi que le processeur effectue des op�rations inutiles ou perd du temps � manipuler des donn�es entre les registres. Ainsi, la consultation des tables, en raison du faible nombre de registres disponibles, du jeu d'instructions, des pr�fixes et des d�pendances crois�es, prend 20 cycles au moins, bien qu'en th�orie cela n�cessite 4 cycles pour un cas "simple et id�al".

            La densit� globale dans le domaine d'�tude peut �tre d�termin�e en accumulant le nombre de particules � chaque pixel. Nous voyons ici une accumulation sur 8 bits avec deux d�passements (les m�mes couleurs sont utilis�es deux fois pour des densit�s diff�rentes) et un �coulement de Poiseuille caract�ristique. L'image peut �tre calcul�e interactivement (les param�tres peuvent �tre chang�s) en une minute environ.

            L'accumulation doit commencer apr�s la stabilisation du fluide et la disparition des ondes de choc. Il faut ici pouvoir g�rer trois tableaux de 64 Ko, ce qui est � la limite des possibilit�s du mode r�el du x86. Avec un code de ce type, il a fallu deux heures � un Pentium � 100 MHz pour calculer l'image suivante :
            A chaque pas de temps, la densit� de chaque noeud est accumul�e sur 16 bits dont nous voyons ici les 8 bits de poids fort. Il faut donc un tableau de 128Ko en m�moire et acc�der en tout � plus de 200Ko, ce qui a n�cessit� l'emploi du mode flat (ou unreal). Ce programme est donc difficilement transportable et n�cessite une configuration tr�s pr�cise pour fonctionner.
            Le bruit au niveau de l'octet de poids fort est r�duit mais il a fallu beaucoup de temps de calcul pour que toute la dynamique de l'octet soit utilis�e et donne une image utilisant toutes les couleurs de la palette (plus de 64K*3=200000 pas de temps). La vitesse de rafraichissement pour ce type de code sur cette machine atteint environ 10Hz et la taille est fix�e � 320x200 noeuds, c'est � dire la r�solution de l'�cran.

     

    III.7 : Conditions aux limites et effets de bords :

            Les LGA permettent de calculer les �quations diff�rentielles de Navier-Stokes dans des conditions id�ales de tr�s faible vitesse et de taille infinie du r�seau [19]. Toute autre condition ne permet d'effectuer qu'une approximation, par exemple lorsque la taille est finie (limit�e par la taille de la m�moire de l'ordinateur), ou alors la simulation ne correspond pas aux r�alit�s physiques. Entre autres exemples, la vitesse du fluide ne doit pas d�passer Mach 0,3 environ mais en plus des limites th�oriques, les limites pratiques sont aussi difficiles � connaitre et � comprendre.

            Nous allons �tudier en particulier le cas d'une �prouvette dans une soufflerie ainsi que les effets de bords li�s aux conditions aux limites. Dans les images pr�c�dentes, nous pouvons observer certains ph�nom�nes qui influencent la simulation et ses r�sultats. Tout d'abord, avant chaque pas de temps, le vent est g�n�r� par une boucle qui cr�e de nouvelles particules afin de g�n�rer un "vent" dans le tunnel. Les propri�t�s de ce flux ont des cons�quences directes sur le temps de disparition des ph�nom�nes transitoires et ind�sir�s.

            La mani�re la plus simple, comme le permet l'algorithme de plan temporaire d�crit pr�c�demment, est de cr�er une particule directement dans le sens du vent. Cela correspond bien � la th�orie mais dans la r�alit�, un vent n'est pas constitu� de particules allant toutes dans la m�me directions : ce serait un vent supersonique ! De plus, les ph�nom�nes d�passant Mach 0,4 ne sont pas fid�les � la r�alit�. Il faut donc cr�er un flux d'air, non une masse homog�ne ou homocin�tique irr�elle. La vitesse et la direction des particules doivent �tre bien choisies. La vitesse des particules ne peut pas �tre modifi�e car elle est unitaire : la vitesse du flux sera r�gl�e par la "vitesse" d'introduction et de destruction des particules de chaque c�t� du tunnel. Une autre m�thode est de "forcer" certaines particules au hasard dans le tunnel en changeant leur direction mais c'est plus compliqu� car le tunnel devra �tre boucl� sur lui-m�me comme un tore, ce qui implique qu'en se propageant, les turbulences se retrouveront en amont et se perturberont elles-m�mes. Cette m�thode est adapt�e � d'autres cas (�tude d'un cisaillement pour d�terminer la viscosit� par exemple) mais pas � celui des simulations qui nous int�ressent (m�me si ce n'est pas le domaine le plus adapt� pour les LGA).

            Pour cr�er un vent, nous introduisons des particules � un certain ryhtme, qui est contr�l� au clavier par l'utilisateur dans les exp�riences r�alis�es. Leur direction est aussi importante : elle doit �tre d�corr�l�e, aussi al�atoire que possible, pour �viter que les caract�ristiques du vent n'influencent ou ne perturbent les ph�nom�nes en aval. Pour d�corr�ler un signal, il suffit de le moduler par un signal connu pour �tre al�atoire : nous disposons d�j� de ph�nom�nes explicitement al�atoires au niveau de certaines configurations de collision. La technique est alors de cr�er des particules allant en sens inverse du vent pour, si elles en ont le temps, frapper le mur adjacent. Cela cr�e une zone de haute densit� propice � de nombreuses collisions, favorisant une r�partition al�atoire et naturelle des particules, m�me si elles sont cr��es de mani�re d�terministe. Leur surnombre local et la configuration de la paroi forcent ainsi un flux de particules al�atoires dans le sens d�sir� (en moyenne). L'entropie du mod�le leur assure une r�partition naturellement �quilibr�e dans le temps et dans l'espace.

            Le deuxi�me probl�me important concerne les autres conditions aux limites. D'abord, les parois horizontales (sup�rieure et inf�rieure) sont "rugueuses" : le mod�le le plus simple sp�cifie que les particules repartent par le lien o� elles �taient venues. Ensuite, la paroi de droite est totalement "absorbante" et fait disparaitre toutes les particules. Dans la r�alit�, cela correspondrait � un tuyau d�bouchant dans le vide sid�ral, ce qui n'est pas notre intention : une veine de soufflerie r�elle maintient une densit� assez homog�ne autour du domaine d'�tude et le vent n'est pas "aval�" d'une mani�re ou d'une autre. Les conditions sont r�unies pour faire apparaitre un �coulement parabolique de Poiseuille qui interf�re avec le domaine d'�tude comme dans l'image de densit� sur 8 bits. La densit� n'est pas homog�ne ni lin�aire autour de l'�prouvette et le ph�nom�ne de portance que l'on veut mettre en �vidence est perturb� par l'influence des parois et de la disparition des particules, ce qui est similaire � une anisotropie de la pression dans tout le tunnel.

            La solution adopt�e pour l'exp�rience suivante (l'accumulation sur 16 bits) est de r�tablir la pression dans le tunnel gr�ce � une sorte de "peigne" qui pi�ge une partie des particules qui allaient dispara�tre. De proche en proche, elles cr�ent une pression qui s'oppose en partie � leur disparition totale : le fluide devient plus homog�ne et les directions des particules sont plus diverses. Nous voyons sur l'image de densit� 16 bits que le profil n'est plus parabolique, bien que les parois rugueuses laissent subsister de l�g�res perturbations locales. La pression dans le tunnel est mieux r�partie et �quilibr�e.

            Une deuxi�me solution pour r�duire encore plus, ou anihiler, l'�coulement parabolique est de rendre les parois glissantes pour que leur vitesse par rapport au vent ne soit pas chang�e. Cette solution a par exemple �t� adopt�e pour l'all�e de von Karman dans l'exemple de David Hanon en III.9. Cela n'a pas �t� essay� dans les premiers codes car le programme ne le permettait pas encore, seules les parois rugueuses pouvant �tre cod�es dans un octet. En compl�ment de la premi�re solution, nous disposons alors d'un domaine d'�tude dont la pression et la vitesse sont homog�nes et favorables pour �tudier des ph�nom�nes turbulents comme les all�es de von Karman. Dans le cas contraire, par exemple si l'�coulement de Poiseuille subsistait, il faudrait agrandir le tunnel de mani�re � ce que les paraboles n'interviennent pas substanciellement dans les mesures, ce qui augmenterait quadratiquement les besoins de m�moire et de temps de calcul.

            Pour que ces conditions aux limites soient remplies, il faut plus de flexibilit� dans le programme. La nature du mod�le FHP permet d'ajouter facilement les fonctions d�sir�es mais leur impl�mentation est souvent une aventure plus complexe que l'on pourrait s'y attendre. De plus, le bon sens des �quations classiques contredit la r�alit� microscopique des particules : les equations d'Euler ne traitent pas explicitement du mouvement chaotique brownien. Un bon programme de calcul FHP a donc besoin de parois glissantes comme rugueuses et d'un contr�le s�r de la cr�ation et de la destruction des particules. Les algorithmes vus jusqu'� pr�sent ne permettent pas de tel contr�le sur la rugosit� des parois.

     

    III.8 : Remplissage et redimensionnement dynamique du tunnel :

            Une fois le fluide en r�gime "stationnaire", c'est � dire lorsque tous les ph�nom�nes transitoires (comme les ondes de choc ou les ph�nom�nes anisotropiques hexagonaux) ont disparu, on effectue les mesures et on r�fl�chit aux calculs suivants. En d'autres termes, une grande partie des calculs a pour seule fonction d'�liminer les transitoires. Une formule empirique : t=4*(h+l) donne le nombre de pas de temps � calculer pour que disparaisse la plupart des ondes de choc, soit deux � trois allers et retours de l'onde de paroi � paroi. Or les simulations les plus int�ressantes sont les plus grosses et le temps de calcul augmente tr�s vite ; en utilisant la formule pr�c�dente, il faut environ : N=4*(h+l)*h*l pas de calcul en tout, ou environ N=8*l^3 si h et l sont proches. Dans ce chapitre, nous allons explorer des moyens de r�duire ce temps de calcul.

            Pour commencer, nous pouvons constater que la veine de simulation FHP est souvent vide au d�but de l'exp�rience. Il faut l pas de temps et h*l*l = hl� calculs de site pour remplir le tunnel en particules. Ce sont autant de cycles facilement gagn�s si la veine contenait d�j� des particules !

            Le probl�me est maintenant : comment remplir le tunnel ? Il est facile de le remplir uniform�ment de particules, ou avec des particules au hasard, mais d'une part c'est trop simple et d'autre part il faut g�rer le cas d�licat des �prouvettes qui seraient remplies de particules. En effet, la forme que l'on place dans le tunnel n'est pas obligatoirement "pleine" et il faut que l'algorithme de remplissage tienne bien compte de ce cas de figure. Comme dit plus haut, un algorithme simple ne convient pas et il faut utiliser un algorithme de remplissage "intelligent" tel qu'on le rencontre dans les logiciels de dessin bitmap (exploration r�cursive ou floodfill).

            La premi�re simplification oubliait aussi que ce qui nous int�resse est d'obtenir un �tat le plus proche possible du r�gime stationnaire. Or le cas le plus simple consomme beaucoup de temps dans la mise en mouvement le fluide. Une possibilit� serait d'utiliser une r�solution statique et approximative des �quations d'Euler ou de Navier-Stokes pour "guider" le remplissage pr�liminaire du tunnel. La limitation ne se situe pas dans la charge de calcul mais dans sa complexit� qui augmente avec celle de la g�om�trie des parois. De plus, ce n'est pas un sujet qui nous concerne dans cette �tude.

            Une autre m�thode serait d'utiliser les mod�les plus simples comme FHP-2 ou FHP-1 pour effectuer une premi�re passe dans le fluide. Ces mod�les sont plus a priori rapides � calculer et peuvent effectuer une premi�re approximation, ce qui est int�ressant puisque nous abandonnons la technique de consultation de table. Nous verrons pourtant que le calcul a une importance aussi grande que le d�placement des donn�es ("FHPIII est memory bound") et cette m�thode ne r�duit pas le nombre de mouvements de particules. Toutefois, nous avons vu dans la partie pr�c�dente que la principale diff�rence entre les versions du mod�le FHP concernent la viscosit�, ou le nombre de Reynolds par noeud. Si nous pouvons calculer � un nombre de Reynolds plus faible, nous avons donc int�r�t � r�duire le nombre de noeuds plut�t que d'augmenter la viscosit� : le programme de calcul reste identique mais nous pouvons r�duire le nombre de d�placements en r�duisant la taille du tunnel lors de l'amor�age du fluide.

            Pour r�duire le temps total de calcul, nous avons donc int�r�t � commencer avec une version dont la taille est une fraction de la taille r�elle. En pratique, le programme de ce m�moire limite la largeur minimale � 256 noeuds. Nous pouvons donc amorcer le tunnel avec cette largeur, durant le temps n�cessaire � la disparition des transitoires, soit environ 2000 pas de temps. Ensuite, le tunnel est agrandi : le cas le plus simple est un doublement de toutes les dimensions et un quadruplement ais� du nombre de cellules et de leur contenu (le contenu est recopi� dans 3 cellules voisines). Le calcul continue et fait disparaitre les transitoires li�es � l'agrandissement soudain du tunnel. La proc�dure de calcul/agrandissement est r�it�r�e jusqu'� obtenir la taille d�sir�e pour l'exp�rience. Il est alors possible d'acc�l�rer consid�rablement le temps de calcul n�cessaire � l'�tablissement du r�gime stationnaire.

            Etudions l'exemple d'une simulation dans un tunnel de dimension l=3h avec l'intention d'effectuer une ou des mesures br�ves lorsque le r�gime transitoire a disparu. Dans notre cas, la largeur minimum est de 256 noeuds, la hauteur est donc de 256/3=86 noeuds. Le temps de stabilisation du fluide est environ de 4*(256+86)=1400 pas de temps soit 1400*256*86=30 millions de calculs de sites. Ensuite, le tunnel peut �tre agrandi et contenir 512*172 noeuds. Le calcul red�marre alors pendant un temps n�cessaire pour que le fluide s'adapte au nouveau nombre de Reynolds, mais toutefois moins que le temps n�cessaire pour l'amor�age du fluide : environ 2*(512+172)=1400 pas de temps et 1400*512*172=123 millions de sites. Nous pouvons continuer ainsi � calculer et agrandir jusqu'� ce que la m�moire soit satur�e ou le nombre de Reynolds d�sir� soit atteint. Dans notre cas, avec une limitation � 64MO, nous obtenons le temps de calcul total suivant :

            L'agrandissement progressif permet de diviser par deux le temps d'amor�age du fluide : en commen�ant � la taille pr�vue au d�part (8192*2752) il faudrait calculer 10^12 sites au moins ! A la fin du calcul, les 22400 pas de temps sont largement suffisant pour effectuer les mesures d�sir�es, gr�ce � des moyennes dans le temps et dans l'espace.

            Il faut maintenant mentionner au moins trois limitations pratiques importantes, li�es � la complexit� des ph�nom�nes. Nous atteignons un nombre de Reynolds id�al d'environ 5000 et le type de programme pr�sent� jusqu'� pr�sent ne convient plus. La premi�re limite concerne le temps de calcul : si l'ordinateur calcule un million de sites par secondes (comme dans le deuxi�me code de r�f�rence) il faudra une semaine pour calculer les 577 Milliards de sites de l'exp�rience. Nous sommes encore loin du "temps r�el" et de l'interactivit� d�sir�s. Ensuite, les programmes actuels utilisent le PC sous MS-DOS en mode r�el, ce qui limite les exp�riences � 320*200 points, il n'est pas possible d'atteindre ainsi des nombres de Reynolds int�ressants et justifiant les efforts de programmation. Enfin, bien que le redimensionnement soit une �tape relativement simple � programmer, il devient plus compliqu� de d�finir les parois par de simples bitmaps ou par programmation au cas par cas. Il faut donc utiliser un mode de repr�sentation vectoriel qui sera r�interpr�t� � chaque fois que le tunnel change de taille. Les vecteurs sont simples � g�rer mais leur repr�sentation interm�diaire dans le code du projet actuel est tr�s complexe.

     

    III.9 : Etude d'un cas r�el : benchmark de von Karman :

            Afin de pouvoir comparer les r�sultats et l'efficacit� de la m�thode employ�e, nous utiliserons les donn�es fournies par une �tude allemande [36], d�crivant les conditions de simulation d'all�es de von Karman. Puisque nos LGA simulent les fluides de mani�re explicitement temporelle en 2D, nous ne nous int�resserons qu'� la partie correspondante du benchmark qui comporte des exp�riences en 2D et en 3D, en statique ou en dynamique.

    G�om�trie du tunnel et conditions aux limites : (extrait de [36])

            Avec un adimensionnement correct (si l'on tient compte de l'invariance galil�enne entre autre) nous avons besoin approximativement d'un site par millim�tre carr�, soit 2200*410=902000 sites ou environ 1 m�gaoctet. Les PC actuels disposent d'au moins 64 Mo actuellement et le calcul � 1Mc/s permet de soutenir un affichage � 1Hz dans ce cas. Dans des conditions id�ales (densit�, vitesse...), nous pouvons donc tr�s facilement atteindre le nombre de Reynolds requis par le benchmark. Il reste ensuite assez de marge pour corriger les artifacts du r�seau.

            Les all�es de von Karman ont �t� simul�es par plusieurs laboratoires, dont les laboratoires Fuji (Japon), l'Universit� Libre de Bruxelles, l'Universit� de Munich ou l'Observatoire de Nice pour citer quelques exemples. Dans la comparaison suivante, nous �tudions la diff�rence entre une r�solution temporelle d'�quations classiques et un calcul FHP-3 :

    El�ments finis : (extrait de [36])

    FHP-3: (ULB, David Hanon,
    r�seau de 800*200, Mach 0,45 et densit�=0,28)
    t=0
     

    t=100
     

    t=7000
     

            Dans des conditions appropri�es et avec l'adimensionnement correct, les r�sultats sont similaires. Toutefois, les gaz sur r�seaux permettent de faire appara�tre les fluctuations d�es au mouvement brownien. La simulation est donc bruit�e et n�cessite une int�gration temporelle et spatiale pour effectuer une mesure. Cependant, l'apparition de ph�nom�nes complexes est naturelle et n'a pas besoin d'�tre forc�e (ou si peu) : le cercle du benchmark est d�cal� d'un centim�tre dans le tunnel (1/41=2,5%) alors que dans l'exp�rience FHP il n'est d�cal� que d'un pixel (1/200=0,5%, mais cela est probablement involontaire et li� � l'algorithme de dessin du cercle). D'habitude, le d�centrage est n�cessaire pour forcer l'apparition rapide des tourbillons contrarotatifs car la m�thode de r�solution classique n'est pas bruit�e par nature. La recherche d'une solution exacte implique qu'une dissym�trie n'apparaitra qu'avec une erreur d'arrondi. En revanche, les gaz sur r�seaux comme FHP permettent au bruit brownien d'organiser les turbulences microscopiques (� l'�chelle de quelques sites) en turbulences macroscopiques (qui peuvent �tre �tudi�es par int�gration sur de nombreux sites) et de faire appara�tre les all�es caract�ristiques sans for�age ou dissim�trie artificiels. De plus, la complexit� de la g�om�trie du tunnel est arbitraire et n'influence pas le calcul.

            Le programme de David Hanon m�lange par codage les parois glissantes et rugueuses. En raison de l'imp�ratif du changement dynamique de la g�om�trie du tunnel, cette approche devient complexe et il faut pouvoir g�rer des parois de toute nature dans notre code final.

     

    III.10 : Conclusion :

            Les deux codes de r�f�rence, ainsi que les nombreuses versions interm�diaires et les exp�riences qu'ils ont permis de conduire, montrent que le niveau de performance esp�r� ne peut �tre atteint qu'avec des techniques de codage et des algorithmes plus sophistiqu�s. L'approche par lookup table a atteint ses limites car il n'est pas possible de diminuer le nombre d'instructions par noeuds � cause des limitations et des contraintes architecturales (pas assez de registres, mode r�el ou unreal trop limit�s, pr�fixes divers et m�moire lente). L'apparition vers 1997 du jeu d'instructions MMX ainsi que la lecture plus attentive du livre de Michael Abrash [7] renforcent la conviction qu'il faut revoir le programme depuis le d�but.

     

     

    Partie IV : R�alisation

     

    IV.1 Introduction :

            Les premiers programmes de LGA sont relativement petits (le kernel comprend moins de 100 instructions) et commencent d�j� � n�cessiter une attention soutenue pour fonctionner correctement. Le temps n�cessaire � mettre un programme au point se mesure en semaines puis en mois pour la version en assembleur. Le projet d�crit ici est encore plus ambitieux et n�cessite une longue pr�paration pour que tous les �l�ments puissent fonctionner correctement, d'abord seuls puis en coop�ration avec les autres. Il faut concevoir chaque �l�ment ind�pendemment tout en pr�voyant leur assemblage final, il est donc n�cessaire d'avoir une vue g�n�rale du projet aussi claire que possible.

            Ce projet a �t� lanc� au d�part car il a �t� pr�par� pendant plusieurs ann�es : la plateforme est mieux maitris�e (en particulier le d�veloppement en assembleur MMX en mode prot�g�) et l'algorithme de strip mining est imagin�. Certains autres aspects algorithmiques et structurels sont imagin�s comme l'organisation des donn�es et la repr�sentation des parois. En th�orie, le projet ne devrait pas �tre compliqu� mais "le d�mon se cache toujours dans les d�tails"...

     

    IV.2 : Intel : la plateforme id�ale malgr� elle

            Pour les nombreuses raisons expos�es pr�c�demment, la plateforme reste le PC sous MS-DOS. De plus, le d�veloppement dans un autre environnement et � ce niveau n�cessiterait l'apprentissage d'autres techniques et MS-DOS est le seul environnement permettant un contr�le total de la machine, condition n�cessaire pour trouver les goulots d'�tranglement des algorithmes test�s, sans interf�rences du syst�me d'exploitation ni d'�v�nements ext�rieurs incontr�lables. Enfin, bien que l'avenir commercial de ce syst�me soit incertain, des alternatives libres comme FreeDOS permettront de distribuer le programme avec le syst�me d'exploitation pr�configur�, afin d'en simplifier l'utilisation et la diffusion gratuite. Il n'est pas question d'utiliser d'ALPHA, de SPARC ou de PowerPC malgr� leur puissance sup�rieure. Un CRAY (T3E ou SV) conviendrait tr�s bien car les outils de profiling sont livr�s mais outre le prix et la place d�raisonnables, le but du projet n'est pas d'atteindre la plus haute performance possible mais bien de trouver des techniques afin de mieux exploiter une machine existante et facilement disponible. Le d�fi algorithmique est d�j� suffisamment complexe.

            Avec le temps, de nouveaux processeurs Intel et clones sont apparus : r�cemment l'Athlon d'AMD a surpass� le PIII d'Intel (voir "la Jihad des CPU de 7�me g�n�ration" par Paul Hsieh) et les compagnies se font une concurrence fr�n�tique, au niveau des prix, de la performance et des fonctionalit�s, pour la ma�trise du march�. Pour des raisons pratiques, nous devons nous concentrer sur une partie seulement des architectures disponibles, en esp�rant que les autres architectures ne soient pas compl�tement diff�rentes. La compatibilit� binaire entre les versions garantit cependant que le programme fonctionne partout o� les fonctions n�cessaires (souris s�rie, VESA2, MMX, MS-DOS et HIMEM.SYS en mode r�el) sont pr�sentes.

            Nous allons nous concentrer sur deux processeurs et leur architecture : le Pentium MMX � 200MHz, disponible � la maison, et le Pentium II dont plusieurs sont disponibles � l'universit�, dont deux en version biprocesseur. Ce sont deux architectures r�pandues et connues, mais suffisamment diff�rentes pour n�cessiter une �tude particuli�re. Le premier (P200MMX) est un processeur superscalaire � deux voies, proche d'un RISC classique, alors que le deuxi�me (PII) a un coeur OOO (Out Of Order execution) pouvant traiter 40 instructions � diff�rents stades de leur ex�cution, disposant de 80 registres renomm�s. L'interface avec la m�moire centrale et la "r�sistance � la charge de calcul" sont compl�tement diff�rentes et n�cessiteraient deux versions diff�rentes du programme : le P200MMX est un processeur "statique", qui reste assez pr�visible gr�ce � sa cache d'instructions, alors que le PII est enti�rement dynamique et non d�terministe ! Pour ne rien am�liorer, les r�gles de codage sont radicalement diff�rentes. Les sch�mas ci-dessous illustrent les diff�rences architecturales entre les deux types de processeurs :
    Pentium MMX :
    Pentium II :
    * jusqu'� 2 instructions d�cod�es par cycle
    * 2 caches internes (donn�es et instructions) de 16 Ko
    * bus m�moire externe : Socket 7 � 66MHz
    (comme les Pentium � 100 MHz)
    * jusqu'� 3 instructions d�cod�es par cycle et
    traduites en 6 micro-instructions (�ops).
    * 2 caches internes (donn�es et instructions) de 16 Ko
    et cache transactionnelle de 256Ko dans le module
    * bus m�moire externe : Slot 1 � 66MHz puis 100 et 133MHz, transactionnel

    courtesy of Intel

            De nombreuses ressources sont disponibles, notamment dans la bibliographie et sur Internet. Michael Abrash [7] d�crit bien les aspects importants de la programmation du Pentium classique et l'adjonction du jeu d'instruction MMX est relativement simple :

            Par contre, les r�gles de codage pour le PII (qui est un Pentium Pro avec support du jeu d'instructions MMX) sont diff�rentes et d�pendent de l'architecture remodel�e du coeur OOO : ce processeur travaille en transformant les instruction x86 en �ops, ce qui modifie les r�gles de groupement des instructions. Nous reviendrons bient�t sur ce probl�me.

            Le DOS-Extender (ou "loader 32 bits") est un morceau de code situ� au d�but d'un programme MS-DOS autonome et qui place le processeur en mode 32 bits : il permet ainsi d'utiliser les registres sur 32 bits sans utiliser de pr�fixe de taille, donc de faire fonctionner le programme plus vite. Son d�veloppement a commenc� vers 1997 et s'est stabilis� rapidement car il est court et con�u pour �tre tr�s compact : le code binaire occupe moins d'un kilo-octet. Le mode DPMI (DOS Protected Mode Interface) permettant d'utiliser le mode prot�g� 32 bits sous Windows a �t� essay� mais de nombreuses difficult�s ont emp�ch� de poursuivre l'effort dans cette direction : il a �t� plus simple de tout recoder � la main car cela �vite d'�tre d�pendant de conventions et d'interfaces complexes, contraignantes et inadapt�es. Le loader est minimal et ne remplit que les fonctions n�cessaires. Il a d'abord �t� programm� avec TASM mais le m�lange des codes 16 bits et 32 bits a rendu le codage tr�s difficile. Il a �t� port� tr�s facilement sous NASM et ce sera l'assembleur final : il est distribu� sous GPL, il est de plus en plus utilis�, il est stable et surtout sa syntaxe est tr�s simple et tr�s pratique, d�barrass�e de toute convention inutile. L'utilisation des directives USE16 et USE32 a fait dispara�tre de nombreuses difficult�s qui ont frein� le d�veloppement avec TASM, en particulier l'adjonction manuelle des pr�fixes de taille ("db 66h" et "db 67h"). Pour compl�ter, j'ai �crit un ensemble de fonctions permettant de se passer d'un linker et qui permet de g�n�rer l'ent�te d'un fichier EXE. Ces fonctions font actuellement partie de la biblioth�que de macros de NASM. Enfin, deux programmes (une sorte de pr�processeur et un patcheur d'ent�te) �crits en Turbo Pascal fournissent les derniers utilitaires pour programmer sans se pr�occuper de certains d�tails de bas niveau.

            Une fois le programme lanc�, nous disposons de l'environnement id�al : nous pouvons acc�der lin�airement � 64Mo (limite du standard XMS) en nous souciant beaucoup moins des segments qu'avant. Seules trois interruptions sont utilis�es : le clavier, la souris et la proc�dure d'erreur fatale (qui est d�clench�e par le processeur lorsqu'un bug se manifeste violemment). Ainsi, il n'y a pas un seul cycle que nous ne pouvons contr�ler et nous disposons de l'int�gralit� de la puissance de la machine, sans autre entrave que son architecture. Cet environnement est augment� de fonctions au fur et � mesure que leur int�gration devient possible. Par exemple, une fois que le contr�le de la carte vid�o en mode 1024*768*256/LFB est assur�, la souris est int�gr�e pour entrer des ordres. Presque toutes les fonctions sont test�es hors de l'environnement avant d'�tre int�gr�es, souvent en langage Turbo Pascal pour faciliter le d�bogage et la compr�hension des algorithmes. Par exemple, voici le programme qui est � la base du driver de souris :
     

    
    Uses Crt, Dos;
    {$F+}
    
    const COM1INTR = $0C;
          COM1PORT = $3F8;
    
    var bytenum : word;
        combytes : array[0..2] of byte;
        x, y : longint;
        button1, button2,changed : boolean;
        MouseHandler : procedure;
    
    procedure MyMouseHandler; Interrupt;
    var dx, dy : integer;
    var inbyte : byte;
    begin
      inbyte := Port[COM1PORT];  { Get the port byte }
    
      { Make sure we are properly "synched" }
      if (inbyte and 64) = 64 then bytenum := 0;
    
      { Store the byte and adjust bytenum }
      combytes[bytenum] := inbyte;
      inc(bytenum);
    
      { Have we received all 3 bytes? }
      if bytenum = 3 then
        begin
    
          { Yes, so process them }
          dx := (combytes[0] and 3) shl 6 + combytes[1];
          dy := (combytes[0] and 12) shl 4 + combytes[2];
          if dx >= 128 then dx := dx - 256;
          if dy >= 128 then dy := dy - 256;
          x := x + dx;
          y := y + dy;
          button1 := (combytes[0] And 32) <> 0;
          button2 := (combytes[0] And 16) <> 0;
    
          { And start on first byte again }
          bytenum := 0;
          changed := true;
        end;
    
      { Acknowledge the interrupt }
      Port[$20] := $20;
    end;
    
    
    var error: boolean;
    begin
      ClrScr;
    
      error:=false;
    
      { Initialize the normal mouse handler }
      asm
        mov ax, 0
        int $33
        inc ax
        jne @the_end
    
        mov ax,24h
        int 33h     { get mouse parameters }
        inc ax
        je @the_end  { no mouse or other error }
        cmp ch,2
        jne @the_end { we want a serial mouse }
        cmp cl,2   { COM port }
        jae @not_the_end
    @the_end:
        mov word ptr [error], -1
    @not_the_end:
    
      end;
    
      if error then halt(1);
    
      { Initialize some of the variables we'll be using }
      bytenum := 0;
      x := 0;
      y := 0;
      button1 := false;
      button2 := false;
    
      { Save the current mouse handler and set up our own }
      GetIntVec(COM1INTR, @MouseHandler);
      SetIntVec(COM1INTR, Addr(MyMouseHandler));
    
    
      while not keypressed do
        if changed then
         begin
           WriteLn(x : 5, y : 5, button1 : 7, button2 : 7);
           changed:=false;
         end;
    
      SetIntVec(COM1INTR, @MouseHandler);
    end.
    

           

            Une fois l'algorithme compris, le code est traduit en langage assembleur et retest� avec Turbo Pascal en inline. Ensuite, la partie d�velopp�e et valid�e peut �tre recopi�e dans l'environnement en assembleur, apr�s une l�g�re traduction de la syntaxe (Turbo Pascal -> NASM) et le renommage des variables. C'est � cet endoit que surviennent la plupart des probl�mes : faute de frappe, erreur de copier/coller, syntaxe erronn�e mais non d�tect�e par NASM ... Les probl�mes sont facilement �limin�s avec beaucoup de pratique, de m�thode et de patience et les cas simples permettent de se pr�parer aux cas tr�s difficiles. Par exemple, certains bugs ont n�cessit� deux semaines pour �tre r�solus alors qu'un module peut �tre int�gr� en quelques heures : la programmation est un exercice non lin�aire ! Le type de code pr�c�dent n'a pas �t� optimis� tr�s fortement : son ex�cution n'est pas absolument critique et l'acc�s aux entr�es-sorties prend la plupart des cycles. Il a donc �t� recod� pour �tre le plus compact possible et effectuer seulement les op�rations n�cessaires, gr�ce � de nombreux param�tres pr�-cod�s ou d�finis une fois pour toute (comme le curseur de la souris). A ce niveau, cela suffit pour atteindre l'objectif de performance d�sir�.

            Lorsque le code le permettait, un stub a �t� int�gr� pour supporter les plateformes bi-processeur. Cela a demand� trois jours non-stop de travail pour lire les documents d'Intel mais le r�sultat est simple, compact et bien cern�. La communication s'effectue simplement avec des s�maphores en m�moire. Le syst�me de coh�rence de caches MESI a �t� mis � l'�preuve et des mesures ont montr� que cette plateforme n'est int�ressante que pour des applications CPU bound (les deux processeurs � 266 MHz doivent se partager un unique bus similaire � celui du Pentium 100). Toutefois, apr�s quelques mois d'utilisation, le stub a �t� d�valid� afin de pouvoir se concentrer sur la partie la plus importante : le calcul. En effet, il faut programmer une version mono- et bi-processeur pour chaque version du kernel de calcul et cela ralentit le d�veloppement. Le code bi-processeur reste toujours disponible et la structure du programme est pr�serv�e pour permettre son retour lorsque le code sera abouti et parall�lisable.

     

    IV.3 : Description de l'algorithme de strip mining

            Comme nous l'avons constat� avec les programmes de la partie III, la bande passante avec la m�moire est une "ressource" tr�s importante car elle peut faire ralentir le programme d'une mani�re dramatique. Le deuxi�me code de r�f�rence ne r�soud pas tout � fait le probl�me car la vitesse de calcul est inversement proportionnelle � la vitesse de l'affichage et il faut donc choisir entre interactivit� et temps de calcul. Le choix de l'algorithme est mieux adapt� au Pentium que pour le premier exemple destin� au i286 mais l'affichage hors de la boucle de calcul est une erreur strat�gique car elle g�n�re autant de cache misses que le calcul. L'affichage entrelac� avec le calcul r�duirait le nombre de cache misses, am�liorerait la vitesse de rendu � l'�cran et b�n�ficierait naturellement de la localit� spatiale et temporelle.

            Cependant, la situation va encore se d�t�riorer dans l'avenir car malgr� les lourds investissements r�alis�s dans ce domaine par les industriels, la bande passante vers la m�moire centrale s'accro�t plus lentement que la vitesse de traitement des processeurs. Si notre algorithme est bas� sur un balayage lin�aire de toute la m�moire, l'acc�l�ration r�alis�e en utilisant une plateforme "plus rapide" ne sera pas proportionnelle � l'augmentation de la vitesse du processeur. L'entrelacement de l'affichage avec le calcul, n�cessaire pour r�duire le nombre de transactions sur le bus m�moire, n'est pas suffisant pour permettre � l'algorithme d'exploiter les plateformes modernes et celles qui leur succ�deront : nous serons toujours limit�s par la vitesse d'acc�s � la m�moire centrale, acc�d�e en lecture et en �criture.
    extrait de la page d'accueil du benchmark STREAM
            Pour traiter un tableau de N sites, il faudra donc acc�der � N*2 sites ainsi qu'� la m�moire vid�o ce qui sature tragiquement le bus m�moire. Si le probl�me est li� au balayage lin�aire, il faut alors y renoncer. Il faut balayer d'une mani�re qui permette � la m�moire cache d'�tre utilis�e de mani�re optimale, c'est � dire : extraire la localit� spatiale et temporelle du mod�le. Nous devons pour cela analyser la d�pendance des donn�es � chaque pas de temps entre une cellule et ses voisins :

            Nous voyons sur le sch�ma pr�c�dent que si nous partons du calcul d'une cellule, le pas de temps suivant fera intervenir 6 cellules suppl�mentaires, 12 cellules puis 18 cellules pour chaque pas de temps successif et ainsi de suite. Commencer le calcul � partir d'une seule cellule se traduit par une croissance hexagonale du domaine � traiter. Le voisinage hexagonal impose des manipulations de donn�es complexes, masquages et d�calages, n�cessaires au traitement exclusif des cellules qui nous concernent pour chaque �tape, ce qui r�duit l'efficacit� du programme. Nous ne pouvons pas nous baser directement sur le voisinage pour cr�er un nouveau balayage.

            Le probl�me est simplifi� si l'on s'inspire d'une technique qui traite des lignes au lieu de cellules individuelles : la d�pendance des donn�es se confond alors dans une croissance lin�aire, non hexagonale, du domaine � traiter. La technique de strip mining est connue et principalement utilis�e sur des plateformes sophistiqu�es, multi-processeurs, avec plusieurs niveaux de m�moire, c'est � dire o� l'acc�s � la m�moire n'est pas uniforme, comme dans notre cas. Le principe de cette technique est de diviser le domaine calcul� en bandes (strips) et de les balayer de mani�re non lin�aire. Par exemple, en utilisant des propri�t�s math�matiques, il est possible de r�organiser les donn�es d'une matrice afin de calculer son inverse : le programme de strip mining ne balaiera plus les donn�es de mani�re triviale et les donn�es resteront plus longtemps en m�moire cache, ce qui acc�l�re le calcul. Dans notre cas, ce ne sont pas des propri�t�s math�matiques mais g�om�triques qu'il faut �tudier.

            Nos strips correspondront aux lignes du tableau : elles seront calcul�es par une boucle simple, en distingant toutefois les lignes paires et impaires (comme pour le premier code de r�f�rence). Les lignes sont ensuite balay�es � un niveau sup�rieur avec une "fen�tre glissante" : c'est un balayage similaire � une double boucle imbriqu�e, portant sur l'axe y. L'algorithme de balayage consiste donc en trois boucles les unes dans les autres :
    
    for y:=0 to y_max do        (* balayage g�n�ral : g�n�re les cache misses *)
      begin
        for i:=0 to strip do    (* boucle interne de strip mining, sans inclure l'amro�age *)
          for x:=0 to x_max do  (* balayage d'un strip *)
            calcule (x,y+i);    (* le d�bordement en y n'est pas trait� dans ce pseudo-code *)
        affiche_ligne(y);
      end;
            Nous pouvons voir que cette adaptation convient aux n�cessit�s de l'affichage, sans que la cache ne soit vid�e : le transfert des donn�es vers l'ext�rieur s'effectue avec la garantie que les donn�es soient d�j� en cache si le param�tre strip est bien choisi. La bande passante du bus externe du processeur est donc divis�e en 3 : lecture, �criture des �l�ments modifi�s, affichage. Cependant les �l�ments mis en jeu sont tr�s complexes : ce balayage compos� implique que l'on peut trouver sur le tableau, lors du calcul, des sites dont les valeurs correspondent � des pas de temps �loign�s, il faut un m�canisme adapt� pour g�rer les buffers n�cessaires. Le sch�ma suivant montre les d�pendances sur l'axe y � tous les pas interm�diaires du calcul d'un tableau de 7 lignes et avec un strip mining de 3 lignes :
    Le sens de balayage global est sur l'axe y, le sens de balayage de la boucle interne est symbolis� par les larges fl�ches transparentes. Les cases repr�sentent diff�rentes valeurs pour chaque ligne � diff�rentes �tapes, elles sont num�rot�es dans l'ordre d'appel de la fonction de calcul. Les petites fl�ches montrent les d�pendances de donn�es entre les cellules.

            Nous pouvons apercevoir que le cas de buffer temporaire expliqu� en partie III.3 est un cas particulier de ce nouvel algorithme lorsque strip est �gal � 1. Cela signifie que le plan temporaire dans ce cas particulier ne change pas. Par contre, lorsque strip augmente, la gestion du plan temporaire devient beaucoup plus complexe : il faut strip lignes de buffer et autant de pas de temps diff�rents sont pr�sents sur le tableau. Le d�placement des donn�es dans le tableau demande alors encore plus de soin lors du d�veloppement et n�cessite une pr�paration importante. La r�alisation du programme a �t� plus difficile que pr�vu, principalement car l'algorithme de balayage initialement utilis� comportait des d�pendances spatio-temporelles cach�es qui �taient impossibles � r�soudre sans une r�vision compl�te du programme.

            Dans le programme final, tous les indices sont transform�s en pointeurs et lin�aris�s afin de r�duire � la fois le nombre n�cessaire de registres et le nombres d'instructions de calcul. La structure de boucle pr�sent�e initialement ne convient pas pour g�rer l'amor�age du buffer de strip mining : nous avons vu que le balayage doit commencer et se terminer en augmentant puis en r�duisant progressivement le nombre de strips. La fen�tre de calcul est alors cern�e par deux pointeurs, modifi�s par de simples op�rations de comparaison/assignement. La boucle est ainsi contr�l�e par des conditions complexes mais le nombre de param�tres est r�duit � deux variables : "d�but" et "fin". "fin" est "poursuivi" par "d�but", la chasse se termine lorque "d�but" d�passe la "fin" (c'est � dire : la fin du tunnel, mais pour r�duire les d�pendances entre les registres, ce param�tre est confondu avec une valeur imm�diate connue). D'autres pointeurs sont aussi n�cessaires pour g�rer les tableaux temporaires.

    
    const strip=2;
    var buf:array[0..strip-1,0..159,0..1] of byte; (* buffer temporaire *)
    var j,debut,fin,debut_buf:word;
    label calcul;
    begin
    
     while not keypressed do
     begin
      debut:=1; (* initialisation des pointeurs *)
      fin:=1;
      debut_buf:=0;
    
    calcul:
      for j:=fin downto debut do
      begin
       if (j and 1)=1 then (* parit� de la ligne *)
    (* calcule une ligne impaire *)
       else
    (* calcule une ligne paire *)
      end;
    
      if fin=199 then
       inc(debut_buf)
      else
       inc (fin);
    
      if fin<strip+1 then
       goto calcul;
    (* affichage ligne ici *)
      inc(debut);
      if debut<=199 then
       goto calcul;
     end;
    

            Cet algorithme des pointeurs qui se poursuivent a �t� adapt� pour ne n�cessiter qu'un minimum de sauts et de structures if-then-else. Dans la version en assembleur, les pointeurs sont en plus "lin�aris�s" : ils ne sont pas incr�ment�s de 1 mais augment�s de la taille d'une ligne et augment�s par l'adresse du d�but du tunnel, afin de pouvoir effectuer des comparaisons directes entre les pointeurs qui servent aussi de compteurs. Toutefois, bien que la structure de strip mining externe soit assez simple, les d�tails internes deviennent tr�s complexes. En particulier, le "saut temporel", qui s�pare les sites entre le d�but et la fin de la fen�tre, agit comme un saut g�om�trique et n�cessite donc un buffer temporaire aussi gros que la fen�tre. La gestion des pointeurs � l'int�rieur de cette structure est difficile � mettre au point.

            Les m�saventures d�es au strip mining sont nombreuses mais la plus importante met en jeu la structure compl�te du programme. Nous avons vu dans les pseudo-codes pr�c�dents que nous pouvions profiter de l'algorithme pour y inclure la fonction d'affichage. Le programme r�alis� va plus loin en essayant d'utiliser la structure du buffer temporaire pour m�moriser des informations sur la fen�tre courante, en particulier afin d'effectuer une accumulation des particules et afficher la densit� dans le tunnel. L'avantage �vident est que cela �conomise beaucoup de m�moire : le buffer d'affichage n�cessite alors strip lignes au lieu de y et cela nous ram�ne au cas d�crit pour le buffer temporaire simple (au total : y+1 lignes au lieu de 2y). Pourtant la r�alisation fait appara�tre que les donn�es ne sont pas acc�d�es dans le m�me ordre que pour le buffer temporaire de d�placement : l'affichage n�cessite un pointeur suppl�mentaire ainsi qu'un algortihme nouveau, m�me si la place occup�e n'est pas un probl�me. Tous les registres utilisables sont d�j� allou�s et l'accumulation de donn�es sur la fen�tre n'est pas possible. Seules les donn�es disponibles � un intervale de strip pas de temps peuvent �tre affich�es. Aussi, l'affichage sophistiqu� pr�vu au d�part n'a pas �t� inclus dans le programme m�me s'il est d�j� con�u et test�. A posteriori, la technique simple (consommant beaucoup de m�moire) aurait �t� pr�f�rable mais la structure du code existant est trop avanc�e et fig�e pour pouvoir �tre modifi�e. Un recodage complet est n�cessaire et serait plus rapide.

            Le speedup permis par l'algorithme de strip mining d�pend du nombre de lignes contenues dans la fen�tre et sa taille d�pend de nombreux param�tres. Afin de maximiser la r�utilisation des donn�es, il faut donc que la fen�tre corresponde le mieux possible aux caract�ristiques de la m�moire de la machine, ce qui est absolument ind�terministe et impr�visible. La premi�re mesure � prendre est d'orienter le tableau dans la hauteur afin que la fen�tre soit la plus �troite possible. Par exemple, dans le cas des all�es de von Karman, il faut tourner le tunnel � 90 degr�s (hauteur plus grande que la largeur) afin que l'algorithme soit plus efficace. En effet, le speedup est proportionnel � strip, ce que confirment les mesures. Pour le cas d'une version multiprocesseur, cela veut dire que le d�coupage du domaine doit se faire dans la largeur afin de r�duire la bande passante du bus externe, m�me si cela augmente le nombre de s�maphores de synchronisation.

            Ensuite, il faut que le nombre de lignes dans la fen�tre ne soit ni trop grand ni trop petit mais il n'y a pas de formule g�n�rale permettant de d�terminer ce param�tre. La solution la plus efficace et la plus simple est de mesurer en conditions r�elles toutes les possibilit�s : c'est l'�tape de calibration qui calcule plusieurs pas de temps et mesure le temps pour chaque largeur de la fen�tre. A la fin des mesures, il d�termine le meilleur score (le temps divis� par la taille de la fen�tre) : le r�sultat, en nombre de lignes, servira pour les calculs futurs. La calibration doit �tre effectu�e � chaque fois que les param�tres de simulation changent (nombre de sites ou g�om�trie du tunnel) afin que le temps de calcul soit toujours optimal. Pour des raisons historiques et pratiques, la recherche exhaustive est limit�e � 32 valeurs de strip mais il n'est pas n�cessaire d'augmenter ce nombre et cela suffit pour de donner une bonne id�e sur l'architecture de la m�moire de la machine. Par des mesures, calculs et d�ductions, il est possible de d�terminer la bande passante r�elle de la m�moire centrale ou la taille de la m�moire cache. Les processeurs les plus r�cents (Pentium II par exemple) ont une excellente r�ponse au strip mining, utilisant souvent un nombre maximal de lignes dans la fen�tre, alors que les processeurs de cinqui�me g�n�ration avec cache L2 externe ont un score faible correspondant � la taille de la m�moire cache L1.

            A premi�re vue, le strip mining est une technique complexe dont l'efficacit� n'est pas garantie : le gain en performance est d�pendant de l'architecture de la machine et sa complexit� pratique est peu �vidente � appr�hender. Toutefois c'est un algorithme adaptatif qui ne surcharge pas la machine lorsque c'est inutile et son efficacit� est d�montr�e en pratique pour les plateformes actuelles. Nous allons voir � la fin de cette partie une application r�elle o� le speedup approche 2,5.

            Dans le cas qui nous concerne, le strip mining utilis� ici est une version tr�s sp�ciale adapt�e aux tableaux en deux dimensions. Son extension � d'autres dimensions est envisageable mais sa complexit� intrins�que doit �tre compl�tement maitris�e : les m�saventures avec la version actuelle du code (en particulier les croisements de pointeurs pour l'affichage) montrent que ce domaine particulier devrait �tre �tudi� plus en profondeur de mani�re "acad�mique" pour �tre connu et utilis� largement. Le manque de connaissances pr�liminaires a rendu la programmation difficile, malgr� la longue pr�paration. Esp�rons que dans le futur, cet algorithme sera mieux �tudi� et se banalisera car c'est une solution simple et non calculatoire (ind�pendante du "Grand O") pour acc�l�rer les calculs lourds sur les machines actuelles et futures.

     

    IV.4 : Nouvelle structure des donn�es et m�thode de calcul

            Nous avons vu que m�me en groupant les octets par 4, il faut toujours 47 instructions de mouvement des donn�es contre 12 pour la consultation de la table : le premier programme n�cessitait 30 instructions de mouvement pour 6 de consultation, nous sommes pass�s de 5:1 � 4:1 avec une augmentation de la taille du code de 1,6. Il est clair que pour acc�l�rer le programme, il faut r�duire le temps pass� � bouger les bits. En ignorant les autres param�tres, il faudrait diviser par quatre le nombre d'instructions de mouvement de donn�es pour doubler la vitesse de calcul. Malheureusement nous ne pouvons pas agir sur le jeu d'instructions, nous devons jouer sur l'organisation des donn�es pour r�duire cet �norme probl�me.

            Si le programme passe les 4/5�mes de son temps � bouger les bits, c'est parcequ'il doit extraire puis ins�rer des bits dans d'autres mots (le processeur ne dispose pas d'instruction sp�ciale pour cette t�che), ceci sept fois par site, pour tous les sites. Nous devons donc utiliser une repr�sentation des donn�es qui r�duit au maximum le nombre d'instructions n�cessaires au mouvement. La structure la plus simple est �videmment le mot long, permettant en MMX de coder 64 particules allant dans la m�me direction.

            Le calcul est un nouveau probl�me : il faut l'effectuer par op�rations logiques explicites au lieu de consulter des tables. Nous ne disposons pas d'instruction ad�quate permettant de transformer 7 mots de 64 bits en 64 octets. Le probl�me est toutefois plus compliqu� car l'enjeu est de pouvoir suivre la croissance de la puissance des ordinateur et cette croissance passe par l'augmentation de la largeur des mots : les programmes consultant des tables sont donc condamn�s � stagner au niveau de la performance car le nombre de sites calcul�s restera proportionnel au nombre de consultations. Au contraire, en utilisant une technique bas�e sur la repr�sentation parall�le des sites, une augmentation de la largeur des mots augmentera la vitesse de calcul. Une estimation situe le "point de rupture" � des mots de 32 bits : cette technique n'est pas int�ressante pour un processeur 16 bits mais cela d�pend aussi beaucoup du nombre de registres, du jeu d'instructions et du nombre d'instructions d�cod�es par cycle. L'introduction des instructions MMX et les registres associ�s favorisent beaucoup l'utilisation du mod�le � calcul explicite, malgr� la complexit� inh�rente du programme.

            L'organisation des donn�es au niveau macroscopique joue aussi un r�le important. Traditionnellement, la technique "multi-spin" (en r�f�rence au mod�le d'Ising) regroupe les sept directions dans sept tableaux car les ordinateurs vectoriels (CRAY surtout) peuvent traiter 4096 sites en une seule instruction (8 registres vectoriels de 64 fois 64 bits). Ce type d'organisation perdure encore dans les habitudes mais se heurte comme les autres algorithmes aux architectures complexes des microprocesseurs r�cents. Par exemple, il faut 7 pointeurs pour d�signer le tableau d'origine et 7 pointeurs pour le tableau de destination (en utilisant l'organisation simple, sans buffer temporaire) et les CRAY (comme la plupart des autres processeurs courants) n'ont que 8 registres d'adresse. Ensuite, la m�moire cache, ajout�e au processeur pour pallier au manque de bande passante avec la m�moire centrale, cr�e des probl�mes d'associativit� d'ensemble : pour le Pentium par exemple (8Ko associatif � 2 voies) des acc�s cons�cutifs � des adresses identiques modulo 4096 provoquent de nombreux cache misses artificiels. Nous voyons encore ici que les algorithmes, m�me si leur programmation semble facile, survivent mal aux �volutions de la plateforme.

            L'organisation que nous allons utiliser maintenant est un compromis entre "multi-spin" et "multi-site" : la premi�re contrainte est de diminuer au maximum le nombre de registres pointeurs n�cessaires. Il faut donc "lin�ariser" les acc�s et limiter les modes d'adressage au mode registre + index imm�diat. Pour r�duire encore plus le nombre de registres inutilement utilis�s dans le kernel, l'index sera parfois modifi� � la vol�e par du code automodifiant, par exemple pour l'acc�s � des cellules d'une ligne diff�rente. Le code automodifiant est �videmment plac� hors de la boucle et n'est utilis� que lorsque la taille du tableau change, pour �viter les lourdes p�nalit�s � la premi�re ex�cution.

    
    /* quelques d�finitions : */
    
    #define max_x 512
    #define max_y 512
    #define lli long long int
    #define slli (sizeof(long long int))
    
    /* d�claration en C d'un tableau multi-site : */
    
    char tableau[max_y][max_x];
    (comme pour les programmes �tudi�s jusqu'ici)
    
    /* d�claration en C d'un tableau multi-spin : */
    
    lli a[max_y][max_y/slli];
    lli b[max_y][max_y/slli];
    lli c[max_y][max_y/slli];
    lli d[max_y][max_y/slli];
    lli e[max_y][max_y/slli];
    lli f[max_y][max_y/slli];
    lli g[max_y][max_y/slli];
    (pour les ordinateurs vectoriels)
    
    /* d�claration en C d'un tableau composite : */
    
    struct site {
      lli a,b,c,d,e,f,g;
    } tableau[max_y][max_y/slli];
    
    

            L'annexe D pr�sente diff�rentes variations des structures de donn�es qui ont �t� programm�es. Comme ces logiciels sont �crits en langage de haut niveau, les contraintes de performance sont difficilement visibles au niveau du code source. De plus, la complexit� croissante des plateformes n'est pas le souci majeur des programmeurs dont le seul but est d'obtenir un r�sultat valide. La structure composite n'est donc pas encore r�pandue dans les codes FHP et la d�nomination officielle n'existe pas encore, cette organisation peut aussi bien �tre appel�e multispin entrelac�.

     

    IV.5 : Impl�mentation des parois

            La nouvelle organisation des donn�es permet � la fois d'�conomiser de la bande passante vers la m�moire et de cr�er des parois plus flexibles mais, comme dans le reste du projet, aux d�pends de la complexit� du code et du temps de d�veloppement.

            Tout d'abord, il faut remarquer la limitation inh�rente aux parois "rugueuses" telles que programm�es dans les programmes pr�c�dents o� un seul bit �tait utilis�. D'un c�t�, les parois sont tr�s faciles � g�rer car il suffit de mettre un bit � 1 au bon endroit pour cr�er un mur. De l'autre c�t�, moins d'un de ces bits sur cent est utilis� en pratique : nous pouvons donc gagner facilement un huiti�me de bande passante en ne transmettant pas ce bit, car maintenant il est d�coupl� du domaine des particules.

            Ensuite, le mod�le � un bit est limit� par le type de parois qu'il peut impl�menter : nous avons vu que les parois rugueuses sont n�cessaires mais insuffisantes dans les cas g�n�raux. Pourtant, le mod�le FHP permet une plus grande vari�t� d'orientation des parois. M�me si pour un site, une particule peut repartir dans 5 directions diff�rentes lors d'un choc avec une paroi, le nombre r�el est de 12 directions de parois, c'est � dire une pr�cision de 30 degr�s. Nous avons donc int�r�t � r�utiliser la bande passante gagn�e pour trouver une autre repr�sentation des parois, qui permettrait par exemple de repr�senter une sph�re lisse.
            La structure et l'algorithme n�cessaires � l'impl�mentation des parois est assez simple pour la partie calcul mais cette facilit� est largement compens�e par la complexit� n�cessaire � la fabrication des donn�es repr�sentant les parois. Il suffit d'environ 20 instructions pour d�vier jusqu'� 128 particules de leur trajectoire gr�ce � un �change contr�l� par un masque et deux pointeurs log�s dans une structure de type mur. Ces pointeurs et ce masque n�cessitent cependant un m�canisme sophistiqu� pour �tre mis en place. Pour le programme de calcul, les parois sont "interpr�t�es" gr�ce � une sorte de liste chain�e en m�moire. Son adresse de d�part est fournie par un pointeur de 32 bits log� dans la structure de type site qui devient donc :

    
    /* d�claration en C d'un �l�ment de liste de modification : */
    typdef struct {
      long int cpt; /* nombre d'�l�ments � interpr�ter */
      short int offset1, offset2; /* pointeurs relatifs au site courant */
      lli masque;
    } mur;
    
    /* d�claration en C d'un tableau composite : */
    struct site {
      lli a,b,c,d,e,f,g;
      mur * liste;
      long int pad; /* pour aligner la structure sur 8*64 bits */
    } tableau[max_y][max_y/slli];

            Dans la pratique, seuls les murs verticaux et horizontaux sont utilis�s : les parois obliques ou non rectilignes posent des probl�mes � cause de la parit� des lignes. En effet, cela d�cale les parois d'un quart d'unit� d'un c�t� ou de l'autre et l'algorithme de Bresenham ou de diff�rences finies num�rique ne peuvent �tre utilis�s directement. Toutefois ce n'est pas le probl�me le plus important : la programmation de l'algorithme de g�n�ration automatique des listes de modifications est beaucoup plus complexe que lorsqu'on g�n�re les listes � la main comme lors des premiers essais. Les parois sont m�moris�es sous forme de coordonn�es vectorielles et leur transformation en listes de modifications n'est pas �vidente. Des difficult�s suppl�mentaires concernent l'efficacit� de la transformation (format vectoriel->listes de modification, qui doit donner un r�sultat le plus compact possible) et les croisements entre des parois d'inclinaison diff�rentes. Ces deux probl�mes ont �t� trait�s mais celui de l'efficacit� n'est pas consid�r� comme r�solu, en l'absence de preuves formelles d'optimalit�. Quant au croisement de parois aux orientantions diff�rentes, le probl�me est r�solu pour l'instant en fabricant un "point chaud" : il faut cr�er un mur ponctuel aux parois non glissantes, sinon des particules peuvent disparaitre dans l'interstice situ� � l'intersection des parois.
            L'algorithme de transformation a �t� scind� en deux parties afin de s�parer les difficult�s. La premi�re partie est un petit interpr�te de donn�es vectorielles. Seules les parois lisses horizontales et verticales sont trait�es pour l'instant : le codage de murs obliques ou plus complexes est laiss� comme exercice pour les curieux ou courageux qui en auront besoin. Les coordonn�es sont au format entier fractionnaire, cod� sur 16 bits. Il suffit de les multiplier par la taille du tunnel et de ne garder que les 16 bits sup�rieurs pour obtenir les coordonn�es r�elles dans le tableau. Dans cette premi�re partie, il faut d�coder les vecteurs, v�rifier leur validit�, puis les balayer sur toute leur longueur en appelant � chaque pixel la proc�dure de la deuxi�me partie. Celle-ci attend les coordonn�es d'un site ainsi que l'index des directions � �changer.

            Au fur et � mesure des appels, la deuxi�me partie va construire un r�seau de structures en essayant de r�utiliser au maximum celles d�j� construites, tout en �vitant que des intersections ne laissent �chapper des particules. C'est un algorithme qui fonctionne bien, mais dont l'activit� est difficile � contr�ler pour v�rifier son efficacit�. De plus, l'algorithme en Pascal prend beaucoup de place et a �t� difficile � traduire en assembleur car il est difficile justement de "voir" ce que l'algorithme fait, en plus des habituelles erreurs de fatigue et de frappe. Toutefois, son fonctionnement satisfaisant prouve que le programme est possible et il a permis de d�gager les contraintes inh�rentes au mod�le. Un post-processeur, balayant les structures cr��es, devrait permettre de les comprimer encore plus en �liminant celles qui ne seraient plus utilis�es : l'algorithme actuel n'est pas parfait et souffre de memory leaks. Une �tude � un plus haut niveau et l'utilisation de techniques plus efficaces (�tude et allocation globale des ressources) devraient permettre de g�n�rer des listes optimales et ainsi de consommer moins de m�moire cache. Une autre possibilit� serait de compiler les structures de modifications au lieu d'interpr�ter des listes

            L'objectif d'agrandissement arbitraire du tableau est preque atteint car les parois peuvent �tre compl�tement redimensionn�es dynamiquement. Il reste par contre � trouver un bon algorithme pour le redimensionnement des masses de particules, mais cela ne sera n�cessaire que lorsqu'il sera possible de cr�er et de d�truire des particules afin de g�n�rer du vent dans le tableau. Un algorithme similaire � celui des listes de modifications serait probablement utilis�.

    IV.6 Algorithme d'affichage

            Non seulement le calcul des collisions est plus difficile qu'avec l'organisation multisite, mais l'affichage pose des probl�mes que l'on pourrait qualifier d'int�ressants. Rappelons que l'affichage s'effectue avec un octet par site, la couleur �tant contr�l�e par une palette effectuant la traduction dans le DAC de la carte vid�o.

            Dans les programmes pr�c�dents, le site est tout simplement envoy� vers la carte vid�o et il suffit de modifier la palette pour faire apparaitre les �l�ments d�sir�s, comme la densit� ou la direction des particules. L'affichage est direct et naturel. Maintenant, il faut transformer les plans de bits en octets et le m�me type de probl�me qu'avant se pose : il faut r�duire le nombre total d'instructions ainsi que le nombre d'instructions par site. Pourtant les vieilles habitudes de codage sont tenaces : si le programme devait �tre cod� dans un langage de haut niveau, sans prendre le temps de r�fl�chir, son efficacit� serait faible. Par exemple, le code suivant en C pour effectuer la translation a une complexit� ("grand O") proportionnelle au nombre de sites et ne profite pas de la largeur croissante des registres :

    struct site {
      lli a,b,c,d,e,f,g;
      mur * liste;
      graph *p;
    } *s;
    unsigned char c, *d=video;
    int i;
    
    /* ce pseudo-code transforme un site point� par s
     en 64 octets pour afficher la densit� : */
    for (i=0; i<64; i++) {
      c= ((s->a >>i)&1) + ((s->b >>i)&1) + ((s->c >>i)&1)+ ((s->d >>i)&1)
       + ((s->e >>i)&1) + ((s->f >>i)&1) + ((s->g >>i)&1);
      *(video++)=c;
    }
            Remarquons en passant qu'un deuxi�me pointeur est ins�r� dans site pour remplacer le mot servant � aligner la structure sur une fronti�re de 64 bits. Ce pointeur peut �tre utilis� pour afficher des �l�ments graphiques dont les caract�ristiques ne sont pas encore pr�cises car le programme correspondant n'a pas �t� impl�ment�. Il servira plus tard pour l'affichage des statistiques locales par exemple.

            Le premier gros d�faut de ce code est l'acc�s par octet � la m�moire vid�o, nous avons pourtant vu que cela ralentit consid�rablement le code qui souffrira au moins de 64 lourdes p�nalit�s. Ensuite, ce code est compl�tement lin�aire, il traite chaque bit de chaque site ind�pendamment, comme lors du d�placement des bits lors du calcul en multisite. Cet algorithme "simple" n'exploite pas le parall�lisme permis par les mots tr�s larges. De plus, nous verrons dans le prochain chapitre que le code de calcul doit �tre pr�c�d� d'un code d'accumulation qui transforme les 7 bits d'entr�e en 3 bits sous forme de repr�sentation binaire classique (voir aussi le sch�ma principal et l'annexe C, page 33, pour le code). La r�utilisation de ces donn�es temporaires r�duit le corps de la boucle interne de moiti� :

    for (i=0; i<64; i++) {
      c= ((s0 >>i)&1) + (((s1 >>i)<<1)&1) + (((s2 >>i)<<2)&1);
      *(video++)=c;
    }
    Nous passons de 448 d�calages et masques, 384 additions (1280 op�rations au moins), � 128 additions, 192 masques et 320 d�calages (640 op�rations).         Ensuite, il faut rappeler que l'affichage n'est plus effectu� directement : l'accumulation s'effectue durant le passage de la fen�tre de calcul, pendant strip pas de temps. La valeur maximale th�orique de strip doit �tre de 256/7 (256 est le nombre de valeurs possible de l'octet affich�, 7 �tant le nombre maximal de particules par site). stripmax=32 a �t� choisi pour �viter le d�bordement de l'octet et conserver plusieurs entr�es dans la palette pour afficher des �l�ments de contr�le (boutons, curseur...). Les valeurs 0 � 223 sont r�serv�es � l'affichage des densit�s dans le tunnel, les valeurs 224 � 255 servent aux �l�ments graphiques de contr�le. Ainsi, pour rendre l'affichage des densit�s plus coh�rent, la palette peut �tre chang�e selon la valeur de strip et conserver un contraste optimal, sans post-traitement externe dans un autre logiciel.

            L'annexe C, page 40, traite de l'accumulation lors du calcul puis de l'affichage. Une mani�re plus sophistiqu�e pour effectuer ces op�rations est d'utiliser la technique d'explosion, d�couverte lors de la programmation de la routine d'affichage du curseur. En utilisant les instruction PUNPCK d'une mani�re particuli�re, il est possible de transformer 8 bits cons�cutifs en 8 octets aux valeurs choisies par des masques.

    movq mm1, Sx ; S0, S1 ou S2
    punpcklbw mm1,mm1
    punpckldw mm1,mm1
    punpckldq mm1,mm1
    ;ici les 8 LSB sont recopi�s 8 fois. il faut donc trier ici les bits :
    pand mm1,p1 ; p1 pointe vers la donn�e 0x8040201008040201
    pcmpeqb mm1,[=0, reg ou mem] ; mm1=0 ou 0FFh
    
    ; pour le cas de S0 : astuce ! x-(-1)=x+1
    psubb mm0,mm1 ; mm0 est la valeur accumul�e
    
    ; pour le cas de S1 et S2: 
    pand mm1,p2 ; p2 pointe vers la donn�e 0x0202020202020202
                    ; ou 0x040404040x04040404, selon S1 ou S2
    paddb mm0,mm1 ; et voila !
            Le premier probl�me est que les instructions PUNPCK sont pairables mais pas avec elles-m�mes, il n'est donc pas possible d'entrelacer les 8*3 occurences de ce code, n�cessaires � la fabrication des 64 nombres de 3 bits qui seront accumul� � 64 octets. Les d�pendances fortes et directes entre les registres r�duisent les opportunit�s de pairage et de parall�lisme, emp�chant le d�roulement de la boucle. Ensuite, ce code est trop lent, m�me s'il garde l'affichage simple : rep mosvd suffit pour transf�rer les donn�es vers la m�moire vid�o mais nous savons que cela sature le bus externe et nous perdons des centaine de cycles CPU.

            Ce code serait donc d�s�quilibr� : il utilise trop la CPU lors du calcul et perd du temps lors de l'affichage. Pourtant l'algorithme de strip mining permet de n'afficher qu'une fraction des donn�es, en fonction du param�tre strip. Il faut donc r�duire au maximum le nombre d'op�rations n�cessaires � l'accumulation des donn�es, m�me si l'affichage est plus complexe : d'une part le strip mining compense la perte lorsque strip est �lev�, d'autre part l'entrelacement d'instructions utiles lors du transfert permet de recueillir des statistiques permettant par exemple d'optimiser le contraste de la palette.

            L'algorithme choisi pour l'accumulation est en fait tr�s simple et il utilise au maximum les propri�t�s des donn�es : il consiste � additionner 8*3 bits � 8 octets en parall�le, en masquant directement, sans "�clatement" ou r�organisation, les donn�es. Le calcul de l'accumulation prend donc beaucoup moins de temps et la r�organisation des donn�es est effectu�e lors du transfert vers la m�moire vid�o.

    struct site {
      lli a,b,c,d,e,f,g;
      mur * liste;
      graph *p;
      lli v[8];
    } *s;
    lli mask=0x0101010101010101;
    
    /* pseudo-code d'accumulation : */
    for (i=0; i<8; i++)
      s->v[i]+=((S0>>i)&mask)
              |(((S1>>i)<<1)&mask))
              |(((S2>>i)<<2)&mask));
            Nous utilisons maintenant au maximum 8 additions, 16 OR, 24 AND et 40 d�calages. Le d�roulement de la boucle offre certaines opportunit�s d'optimisation, en �liminant par exemple certains d�calages par des masques diff�rents. Il suffit de d�caler le masque car (x<<1)&mask peut �tre remplac� par x&(mask<<1) � certains endroits (existe-t-il beacoup de compilateurs capables de cette optimisation ?). Ce nouveau masque ne pose aucun probl�me de codage mais il n'est pas possible de l'optimiser dans la version originale de la boucle, � cause de probl�mes potentiels de d�bordements durant les d�calages. La version finale utilise seulement 42 instructions dont 8 AND, 8 PADDB et 7 d�calages. Nous sommes loin des milliers d'instructions n�cessaires avec l'algorithme original en C et nous profiterons de l'�largissement inexorable des regitres dans le futur.

            Maintenant que les octets sont accumul�s, il faut les afficher quand arrive la fin de la fen�tre : le gros probl�me est que la fonction d'accumulation d�crite pr�c�demment m�lange compl�tement les octets. Nous apercevons cependant qu'ils sont ordonn�s d'une mani�re qui ressemble � celle de la sortie du butterfly d'un code de FFT :

                                          v[0]:  0  8 16 24 32 40 48 56
                                          v[1]:  1  9 17 25 33 41 49 57
                                          v[2]:  2 10 18 26 34 42 50 58
                                          v[3]:  3 11 19 27 35 43 51 59
    ordre des octets apr�s accumulation:  v[4]:  4 12 20 28 36 44 52 60
                                          v[5]:  5 13 21 29 37 45 53 61
                                          v[6]:  6 14 22 30 38 46 54 62
                                          v[7]:  7 15 23 31 39 47 55 63
     
            Les instructions PUNPCK sont justement pr�vues pour ce cas et il en faut 24 pour r�organiser tous les octets. La fonction elle-m�me n�cessite 58 instructions et a �t� chronom�tr�e comme �tant capable de saturer le bus externe de donn�es. Les algorithmes, les codes et toutes les explications techniques sont fournies en Annexe C, � partir de la page 40. Les codes actuels ne permettent pas d'utiliser les techniques d'affichage d�crites ici, la technique d'"explosion" simple avec PUNPCK (utilis�e par les codes de prototypage) subsiste . Lorsque les probl�mes structurels du projet seront r�solus, les codes d�velopp�s pourront �tre int�gr�s. Il est int�ressant de noter que ce type de code d'accumulation peut �tre utilis� pour des accumulateurs de 10, 16 ou 32 bits avec les instructions MMX normales. D'autres tailles d'accumulateur peuvent �tre utilis�es si l'addition sur 64 bits est disponible mais le d�senchev�trement des donn�es sera encore d�licat.

            Un code a aussi �t� con�u pour afficher la "densit� de r�organisation" (les collisions donnant lieu � une r�organisation des sorties), � d�faut de pouvoir calculer la chiralit� ponctuelle instantann�e. La s�lection entre les deux versions (densit� de particules ou densit� de collisions r�organis�es) sera effectu�e par un code automodifiant (SMC : Self-Modifying Code).

            Le sch�ma suivant r�sume les algorithmes et la structure des donn�es li�es � l'affichage des densit�s :

    IV.7 : Analyse bool�enne de l'op�rateur de collision

            La r�alisation du projet de maitrise a souffert de plusieurs al�as dont le plus important est celui du code de collision. Le projet avait �t� lanc� avec la conviction que le travail serait facile gr�ce aux "outils modernes" mais en r�alit�, seule la vieille m�thode du papier et du crayon a permis d'arriver � bout du probl�me.

            La table ci-contre pr�sente les collisions du mod�le FHP-3 classique. Il contient � la fois la valeur num�rique de l'entr�e et des sorties, afin de pouvoir programmer une lookup table et les vecteurs vitesses sont repr�sent�s pour comprendre le type de collision qui a lieu.

            Ce mod�le utilise un seul g�n�rateur binaire de nombres al�atoires, d'une probabilit� 1/2. Selon le bit fourni � chaque site par ce g�n�rateur, on choisit la colonne de gauche ou de droite. La colonne de gauche est d�termin�e par la formule (1) et les valeurs de la colonne de droite sont donn�es par la formule (2).

            Les formules qui permettent de calculer les collisions sont extraites de [32] et reproduites de la th�se de James Buick qui a aussi indiqu� des corrections. Elles sont �nonc�es de la mani�re suivante :


            Soit i, compris entre 0 et 6, et , un ensemble de 7 valeurs bool�ennes repr�sentant l'absence ou la pr�sence d'une particule pour chaque lien .
    correspond � la particule immobile, (modulo 6) correspond au lien apr�s rotation de 60�.

    Nous pouvons alors d�finir les variables temporaires suivantes :

           

    o� , a + b, et correspondent respectivement aux op�rateurs bool�ens et, ou, ou exclusif et n�gation.

    Alors , l'ensemble des variables bool�ennes repr�sentant les �tats de sortie, est donn� par

            (1)

    ou
            (2)
    selon la chiralit�.

     


            Le premier probl�me est que je n'ai pu me procurer cette formule que r�cemment. Le deuxi�me est qu'elle g�n�re un grand nombre de variables temporaires qui ne peuvent toutes rentrer dans les registres du processeur. Il faut les stocker en m�moire mais les r�gles de codage des x86 r�cents concernant l'acc�s � la m�moire sont tr�s contraignantes et rendent cette approche inefficace.

            La premi�re id�e fut de partir du tableau fabriqu� pour les programmes pr�c�dents. Le projet a �t� bas� sur l'espoir d'utiliser des outils existants pour fabriquer l'�quation centrale :

            Ce d�tournement de l'usage d'un compilateur VHDL a �t� inspir� par la pluridisciplinarit� du d�partement MIME qui dispense des enseignements sur l'�lectronique et l'informatique. Tous les �l�ments n�cessaires � la conception de programmes assist�e par ordinateur semblent r�unis et fonctionner.         Cette id�e esp�rait que les outils modernes puissent aider � automatiser la fabrication du programme sans se soucier d'autres aspects que les collisions. Pourtant tous les niveaux sont impossibles dans la pratique :

            Afin de programmer � la main le code de collisions, leur fonctionnement a �t� �tudi� plus en profondeur. L'analyse du code VHDL fabriqu� pr�c�demment a montr� que des collisions manquaient et que les r�gles n'�taient donc pas satur�es. La fabrication des r�gles de collisions a �t� recommenc�e et a donn� ce tableau suivant.

            Le principe de conception repose sur le fait que les r�gles de collision sont plus efficaces quand il y en a le plus possible et lorsqu'elles sollicitent au maximum la particule immobile. Une recherche exhaustive des combinaisons et des configurations int�ressantes est difficile � la main, et aucun logiciel ne peut nous aider. Une des mani�res de constituer les r�gles est de r�duire les cas � un seul vecteur de mouvement, lorsque l'"impulsion" est dirig�e dans un seul sens. Il suffit alors de chercher les r�gles pour la direction puis d'appliquer cinq rotations pour obtenir les autres. Mais ce n'est pas une r�gle tr�s formelle.

            A force de t�tonnements, je suis arriv� � une classification plus formelle avec un tableau � deux dimensions, index� par la longueur du vecteur d'impulsion et le nombre de particules mobiles.

            Nous remarquons que la particule immobile (G) est ignor�e : elle sert � passer d'une case � l'autre dans l'axe vertical. Ainsi, il faut une particule immobile pour passer de la configuration 1-3-1 � la configuration 1-4, alors qu'en l'absence de la particule G on sautera � la configuration 1-2. La colonne 2 est inutilisable car le vecteur n'est pas orient� dans le m�me axe d'une case � l'autre.
            Un codage "direct" a �t� tent� : les �quations n�cessitent de nombreuses op�rations, les colonnes 0 et 1 ont �t� laborieusement cod�es. Le code assembleur est tr�s compliqu� et tr�s difficile � comprendre. Cette approche n'est donc pas correcte. En essayant de maitriser la quantit� d'op�rations, l'id�e est venue de "casser" l'op�rateur de collisions d'une mani�re diff�rente, en utilisant certaines propri�t�s de sym�trie dans la diff�rences entre l'entr�e et la sortie d'un site :
            Le passage d'une case � l'autre lors d'une collision avec r�arrangement des particules est r�versible et il modifie toujours la valeur de 4 particules, de 2 mani�res diff�rentes. Cette modification peut �tre effectu�e par un XOR et il n'y a que 3 configurations de 4 particules � d�tecter : E1 (0101 ou 1010), E2 (complexe) et P (0100). E2 est �videmment le plus difficile � mettre au point. L'une des op�randes du XOR final sera la combinaison de ces sous-r�sultats.         La partie de d�tection est r�duite � une table � 4 entr�e et 3 sorties, tenant facilement dans les registres du processeur si elle est cod�e explicitement. Elle est r�p�t�e 6 fois pour toutes les combinaisons d'entr�es cons�cutives (ABCG,BCDG,CDEG,DEFG,EFAG,FABG).

            Cette table fait appel � plusieurs astuces de simplification, dont :
    * La dualit� particule/trou qui permet de ne traiter que la moiti� des cas. Ainsi, lorsqu'il y a plus de 3 particules en entr�e, les particules A � F sont invers�es, ce qui ne change pas la diff�rence � appliquer en sortie. Cette d�tection du nombre de particules fait l'objet d'un code pr�liminaire avant l'application de la table.
    * La particule G sert pour affiner la s�lection du type de collision : E1 et E2 sont compl�tement ind�pendants.

            La difficult� conceptuelle r�side dans l'utilisation correcte des valeurs al�atoires. En sortie de ce tableau, nous disposons de plusieurs sous-r�sultats dont la combinaison permet d'effectuer un XOR sur les particules du site trait�.

     

    IV.8 M�thodes de programmation manuelle en assembleur

            Ce chapitre pr�sente la technique d'optimisation en assembleur qui a �t� utilis�e dans certaines zones du programme exp�rimental. Malheureusement, certaines parties sont tellement complexes que les bugs y sont inextricables, le programme en annexe A pr�sente la version fonctionnelle mais pas compl�tement optimis�e. Tous les d�tails importants sont consign�s en annexe C.

            La technique pr�sent�e ici est l'�volution naturelle des techniques manuelles de codage pour Pentium, ou en g�n�ral pour processeur pipelin� superscalaire. Elle n'est pas d�riv�e de techniques du "Dragon Book" [6] qui traite trop peu de l'optimisation et sous l'angle de code g�n�r� par compilateur, donc des techniques de base et �videntes pour un humain. Le Dragon Book ne traite pas non plus des processeurs superscalaires et suppose un nombre "suffisant" de registres. Nous nous trouvons dans un cas o� la technique de "coloration de registres" � la main n'est pas possible � cause de la taille des graphes � traiter et du faible nombre de registres disponibles. Nous allons voir ici les contraintes cruciales qui ont n�cessit� de concevoir cette technique manuelle.

            La plateforme cible de nos efforts est le Pentium MMX et le Pentium II, deux processeurs au nom similaire mais aux caract�ristiques fondamentalement diff�rentes. Le premier est un processeur superscalaire � deux pipelines de cinq � sept niveaux, alors que le PII est une machine complexe qui ex�cute les instructions dans le d�sordre afin de pallier les lenteurs de la m�moire. Il n'est pas possible de faire deux versions du code pour des raisons de vitesse de codage. D'ici � ce que le projet aboutisse vraiment, le Willamette sera r�pandu. Nous allons nous efforcer de retenir les caract�ristiques de codage communes pour les deux plateformes, ce qui permet au code de fonctionner "honnorablement" partout au lieu d'�tre trop cibl�. En effet, le code n'a pas �t� test� sur des processeurs concurrents, bien que Yannick Sustrac ait report� des performances int�ressantes avec son Cyrix.

            La raison principale et cruciale d'utiliser l'assembleur dans ce projet est que les compilateurs actuels ne peuvent pas g�n�rer "automatiquement" les instructions MMX. Au mieux, ils supportent des pragmas, des librairies ou l'inclusion d'opcodes, mais alors quel est l'int�r�t du compilateur s'il faut faire soi-m�me le codage en assembleur ?

            Il est tr�s peu probable que l'extension MMX du jeu d'instructions x86 ait �t� destin�e � �tre facilement utilis�e dans les compilateurs classiques. Par contre, comme nous pourrons le voir plus tard, Intel a compris l'int�r�t d'un jeu d'instructions simplifi� et plus orthogonal. M�me si les caract�ristiques sont encore �loign�es d'un jeu d'instruction RISC habituel, l'othogonalit� du codage MMX facilite beaucoup la programmation : pas de registre sp�cial ni d'opcode complexe.

     
    Intel Architecture MMX(TM) Instruction Set (Courtesy of Intel)
    Packed Arithmetic Wrap Around Signed Sat Unsigned Sat
    Addition PADD PADDS PADDUS
    Subtraction PSUB PSUBS PSUBUS
    Multiplication PMULL/H
    Multiply & add PMADD
    Shift right Arithmetic PSRA
    Compare PCMPcc
    Conversions Regular Signed Sat Unsigned Sat
    Pack PACKSS PACKUS
    Unpack PUNPCKL/H
    Logical Operations Packed Full 64-bit
    And PAND
    And not PANDN
    Or POR
    Exclusive or PXOR
    Shift left PSLL PSLL
    Shift right PSRL PSRL
    Transfers and Memory Operations 32-bit 64-bit
    Register-register move MOVD MOVQ
    Load from memory MOVD MOVQ
    Store to memory MOVD MOVQ
    Miscellaneous
    Empty multimedia state EMMS
    Nous voyons dans le tableau ci-contre un extrait de la pr�sentation de l'extension MMX par Intel, avec la base des mn�moniques (sans leurs nombreuses variations). Le jeu d'instruction MMX est � la fois plus organis� que les instructions normales et pourtant il n'est pas compl�tement orthogonal. Nous regr�tons par exemple que certains formats ne soient pas support�s avec certaines instructions, que certaines instructions comme la rotation ne soient pas inclues, que seules 4 op�rations logiques soient disponibles (la n�gation d'une donn�e n�cessite 2 instructions !) et d'autres d�tails qui se r�v�lent dans la pratique. A un niveau sup�rieur, les instructions sont toujours au format op reg,reg/mem ce qui limite les possibilit�s, surtout avec seulement 8 registres. Enfin, selon les architectures, les limitations sont vari�es et parfois contradictoires. Il faut pouvoir jongler entre les nombreuses contraintes et �viter tous les types de blocages, au niveau du d�codage, de la m�moire et des unit�s d'ex�cution, tout en allouant correctement le peu de registres disponibles.
            Les plus grandes limitations concernent les r�gles de d�codage et de pairage : certaines instructions ne peuvent �tre d�cod�es qu'� certaines positions du 'slots' de pairage. Pour le PMMX, les instructions vont par paire (une par pipeline, U et V), alors que sur le PII le d�codage doit suivre la r�gle 4-1-1 : le groupe doit faire moins de 16 octets, la premi�re instruction du groupe ne peut g�n�rer que 4 �ops et les deux suivantes qu'une seule (les tables de correspondances instruction->�ops sont donn�es par les manuels Intel). Les r�gles sont g�nantes dans la pratique et nous retiendrons principalement celles-ci :

            Les manuels de Intel contiennent de tr�s nombreuses remarques sur tous les aspects de la programmation, tout en restant tr�s �vasifs sur les contraintes pratiques. Il faut pouvoir jongler avec le faible nombre de registres et les instructions bancales, les formats dissym�triques et les slots des instructions. Cela reste possible � faire � la main pour dix ou vingt instructions mais ne convient pas pour le type de code n�cessaire pour le projet : il faut optimiser plus de 500 instructions dans le coeur de la boucle.

            J'ai donc d�velopp�, en programmant � la main des exemples de plus en plus complexes, une technique bas�e sur les graphes de d�pendances de donn�es. L'astuce principale r�side dans l'algorithme tr�s simple pour g�n�rer le code optimis� (en lisant le graphe s�quentiellement par la fin) mais cette facilit� est largement compens�e par le travail n�cessaire pour pr�parer le graphe. Le workflow de programmation est le suivant :

            Bien s�r, selon la complexit� des op�rations, il faudra plus ou moins de travail sur le graphe pour �quilibrer toutes les branches. Le workflow n'est pas rigide et certaines parties peuvent �tre saut�es ou invers�es. Il faut aussi souvent reprendre le travail � partir d'une �tape pr�c�dente pour �viter des cycles morts caus�s par un registre manquant ou un acc�s m�moire mal plac�, ce qui n'apparait pas imm�diatement lors des phases initiales. Il faut donc avoir toutes les �tapes en t�te afin d'appliquer la bonne optimisation au bon moment.

            Chaque �tape n�cessite � la fois un algorithme et du bon sens. Il ne s'agit pas d'appliquer aveugl�ment une m�thode mais d'�tudier au cas par cas l'influence de telle ou telle transformation. L'analyse du chemin critique du graphe peut ne pas �tre n�cessaire si le graphe est simple et petit, toutefois elle devient n�cessaire pour casser certaines d�pendances complexes. L'allocation des registres se fait en deux �tapes : les branches du graphes sont d'abord r�unies en "faisceaux" lorsqu'il faut d�terminer quel registre sert de destination (le choix n'est pas possible pour l'instruction PANDN par exemple), puis les registres sont associ�s aux faisceaux au dernier moment, lorsque le graphe est �quilibr�. Ce dernier est toujours balay� par le fin : on remonte et on alloue les registres en commen�ant par le premier registre libre. Un registre est donc "occup�" lorsqu'il est associ� � un faisceau et il est lib�r� lorsque le faisceau se termine : le registre est donc libre de servir pour un autre faisceau. Cet algorithme est presque automatique lorsque le graphe est adapt� au nombre exact de registres disponibles, c'est la raison pour laquelle la pr�paration est si importante.
            Par exemple, la table de d�tection des collisions est repr�sent�e dans le graphe ci-contre, apr�s traduction du pseudo-code et explicitation temporelle des d�pendances. A ce stade d'�tude, le but est d'explorer au maximum le parall�lisme des instructions permis par le graphe. Cela permet de d�gager les axes importants et le chemin critique, les besoins en instructions d'acc�s � la m�moire, leur r�partition...
     

     

     

     

     

     

     

     

            Ensuite, le nombre de registres est r�duit afin de pr�server 3 registres tournants (pour le renommage des entr�es). La r�partition des acc�s � la m�moire devient importante. Les feuilles sont repli�es, les donn�es persistantes (celles qui resteront dans les registres) sont choisies en fonction du nombre d'utilisation, les autres sont stock�es en m�moire.

            Une fois les registres allou�s et le graphe pr�t, on va balayer le graphe de bas en haut et de gauche � droite, tout en consignant les noeuds rencontr�s sous forme d'opcodes dans le fichier assembleur. Lors de cette phase terminale, il faut veiller � ce que les r�gles de pairage soient respect�es. Si une des instructions pr�c�demment consign�es entre en conflit (slot ou d�pendance de registre par exemple) avec l'instruction courante, il faut r�organiser le balayage de la ligne et cela d�borde parfois sur d'autres lignes.

     

     

     

            Le code de collision est d�crit sch�matiquement ci-dessous, comme s'il devait �tre c�bl� :

            La structure des donn�es dans le tableau est repr�sent�e ici :
            Il n'existe pas de debugger sous GPL, compatible avec NASM, en mode prot�g�/CPL0. Le d�veloppement se fait donc � l'aveuglette et le bon sens est mis � rude �preuve, en raison du nombre important et croissant d'�l�ments � prendre en compte.

            Le d�veloppement d'un code sain aussi complexe n�cessite de bonnes habitudes de codage et beaucoup de bon sens. Par exemple, lorsqu'un morceau de code fonctionne, il n'y a plus besoin dans la plupart des cas de le modifier : il ne faut pas attendre qu'un bug apparaisse pour sauver le fichier sous un autre nom. Lorsqu'un probl�me se d�clenche, cela limite le nombre de lignes � v�rifier et permet de toujours avoir un programme fonctionnel sur lequel se rabattre lorsque le d�veloppement est dans une impasse. Ainsi le loader 32 bits est stable car il est d�velopp� depuis longtemps, il remplit son r�le et la plateforme ne change pas.

            Les bugs ne sont pas des �tres malins destin�s � nous faire perdre la raison mais c'est un �cart du programme dans la r�alisation de la fonction d�sir�e. Puisqu'un ordinateur effectue exactement ce qu'on lui demande, l'�cart ne peut provenir que des ordres erron�s que le programmeur lui fournit.

  • Les bugs d'inattention constituent environ la moiti� du temps pass� � d�bugger, m�me s'ils sont souvent plus faciles � d�tecter par une relecture attentive. Ils se situent surtout dans l'�criture du programme : label d�clar� mais pas utilis�, erreur de syntaxe, erreur d'adresse, mauvaise taille d'un mot...
  • Les erreurs d'ignorance sont plut�t li�es aux aspects techniques qui sont plus complexes avec des multiprocesseurs modernes. Un probl�me peut survenir quand on croit que l'ordinateur effectue certaines op�rations automatiquement (maintenir la coh�rence des m�moires) ou diff�remment (ordre d'�criture des mots) impr�visibles avec un processeur ex�cutant les instructions dans le d�sordre. La relecture attentive des manuels permet souvent de lever certaines ambig�it�s ou a prioris

            Pour chasser les bugs, les m�mes recettes sont applicables pour toutes les situations :
        1)   Relire tr�s attentivement le code, plusieurs fois si n�cessaire. Simuler mentalement le fonctionnement du processeur et l'�tat de chaque registre, comparer avec les sympt�mes et chercher des similitudes avec ceux-ci.
        2)   R�unir tous les indices, tous les sympt�mes et noter toutes les conditions d'utilisation lorsque le bug se d�clare. Cela peut aider � d�terminer la partie fautive. Par exemple, si le bug est un probl�me d'affichage, il faut d�terminer toutes les parties du code qui acc�dent � l'�cran, directement ou non.
        3)   Isoler la partie fautive : la technique la plus simple est de mettre en commentaire (ou %ifdef zorglub) certaines parties du code r�cemment modifi�es puis restreindre progressivement les recherches par dichotomie jusqu'� ce que le bug soit circonscrit. Cela peut prendre une minute ou plusieurs heures et il ne faut pas h�siter � remettre en cause toute la structure du programme.
        4)   Identifier la d�pendance entre les donn�es et les codes concern�s : on d�couvre parfois que l'erreur vient d'une autre partie que la partie incrimin�e ou d�tect�e par la dichotomie. Le bug d�couvert peut �tre la cons�quence d'une erreur en amont mais qui ne se manifeste que dans certaines conditions que la partie incrimin�e remplit. Certaines donn�es ou certaines parties du code peuvent d�clencher un comportement ind�sir� ou inattendu. Le plus souvent, il s'agit "simplement" d'un oubli ou d'une erreur de frappe. Par exemple, mettre une relocation d'adresse vers l'�cran au lieu du tunnel. Dans l'empressement, ce type d'erreur est facile � commettre mais aussi � corriger. Il en va diff�remment du renommage des registres ...
        5)   Si trop de temps s'est �coul� lors du d�buggage, il faut souvent tout recoder � partir de z�ro. Il est parfois dix fois plus rapide de recommencer que de tout analyser. Le nouveau code est m�me souvent de meilleure qualit� car les bugs se cachent souvent dans les parties r�centes et peu �prouv�es, qui auront �t� m�ries depuis le premier jet. C'est parfois la solution de la derni�re chance pour �liminer les bugs les plus r�calcitrants.

            Il n'est pas forc�ment n�cessaire dans ce cas de disposer d'un d�bogueur interactif avec suivi du code source : il faut de la m�thode, respecter quelques r�gles simples et surtout ne jamais faire confiance aveugl�ment � un code sans l'avoir test� dans les conditions d'utilisation pr�vues ...

     

    IV.9 : R�alisation et r�sultats :

            Le code utilis� actuellement n'est pas la version d�finitive du programme : le l�ger bug dans les collisions passe presque inaper�u mais emp�che d'avoir un r�sutltat r�ellement utilisable. La version beta est toutefois suffisamment rapide pour montrer le gain substantiel apport� par l'analyse soign�e du programme. Sa vitesse d'ex�cution a �t� compar�e sur le m�me ordinateur avec un autre code en C d'allure plus classique :

    plateforme : Pentium MMX 200MHz, SDRAM 66MHz, L2 : 256Ko
    g�om�trie : 1000 it�rations sur 1024*640  (655M site calcul�s)
    
    SP65.asm: 15 secondes, strip=6, zoom=4:1
    vitesse : environ 43Mc/s
    
    Programme de Benjamin Temko (voir l'annexe D)
    compilation:
    gcc -I/usr/X11R6/include -lX11 -L/usr/X11R6/lib -O3 fhp_0.c
    run :
    nice --20 time -o perf ./a.out
    
       58.76 user
        0.44 system
     1:00.87 elapsed
         97% CPU
    (0 avgtext+0avgdata 0maxresident) k0 inputs+0outputs
     (153major+178minor)page faults
     0 swaps
    
    vitesse :   11.2Mc/s
            Le programme en version beta est quatre fois plus rapide qu'un bon code compil�. Cette diff�rence devrait varier selon la plateforme, la version du compilateur ou la version du code. Il faut remarquer cependant que le gain majeur se trouve dans l'utilisation de larges donn�es (64 bits au lieu de 32) et de l'algorithme de strip mining qui garde plus longtemps les donn�es en m�moire cache, ce qui suffit � donner l'avantage avec le Pentium MMX. Le Pentium II d�code plus d'instructions par cycle et sa cache est plus puissante, mais il est peu probable que GCC sache utiliser tous ces derniers raffinements technologiques : il n'est pas dans les attribution d'un compilateur de changer la taille des donn�es ou de modifier l'algorithme de balayage (s'il devait exister un compilateur assez sophistiqu� pour appliquer automatiquement le strip mining � un probl�me aussi complexe que le calcul FHP).

            La version alpha du code de collision (lorsqu'il sera d�bogu�) devrait permettre d'am�liorer la vitesse d'environ 20 ou 30% gr�ce � un meilleur scheduling des instructions dans la phase de d�tection et de d�placement. La meilleure performance absolue actuelle a �t� mesur�e au MIT en janvier 2000 sur un Pentium III � 550MHz :

    taille: 860*736, cycles par pas de temps : 2,3M, 3,6 cycles par site, soit   150 Mc/s.
     
            Bien que la calibration ait �t� effectu�e, toutes les conditions n'ont pas pu �tre r�unies pour am�liorer la performance (je n'avais pas pu emporter toutes mes disquettes). Dans l'absolu, il est probable qu'on puisse calculer sur cette plateforme jusqu'� 400Mc/s en utilisant l'extension SSE (mots de 128 bits) et peut-�tre 800Mc/s en bi-processeur. Toutefois, � cette vitesse, le probl�me sera la communication et la synchronisation (MESI=lent) entre les processeurs.

            L'exp�rience suivante a �t� r�alis�e pour fabriquer une petite animation illustrant les capacit�s du programme existant. Le temps de calcul total est de quelques minutes, en comptant le long temps de sauvegarde des images qui ont �t� choisies pour leur esth�tique, non pour leur int�r�t scientifique. Le nombre de pas entre les images n'est pas fixe mais permet de montrer l'int�r�t d'un affichage plus �volu�, non en "noir ou blanc".

    Les dimensions des images suivantes tiennent compte de la projection sur le r�seau hexagonal (sin(60�)).
    Ecoulement apr�s 528 pas de temps :
    la deuxi�me chambre se remplit lentement
    et les artefacts hexagonaux sont visibles.
    T = 4501 : le flux commence
    � se distordre.
    T = 6010

    T = 6316
    T = 6931 : le flux est moins marqu�,
    noy� dans le bruit.
    T = 8089 : la pression et la vitesse sont
    favorables pour faire disparaitre les
    artefacts hexagonaux mais le contraste est
    trop faible pour distinguer les �coulements.
            Nous voyons ici les limites de l'affichage de la version de d�veloppement : le bruit rend la distinction de ph�nom�nes fins difficile. La refonte du programme permettra d'inclure le code d'affichage � niveaux de gris qui est d�crit en au chapitre IV.6.

            L'exp�rience s'est d�roul�e sur le PII-350 du d�partement MIME. Elle consiste en la diffusion d'une masse de particule de la chambre gauche � la chambre droite du tunnel. Les chambres �tant s�par�es par une paroi munie d'un "trou" de quelques pixels, l�g�rement d�centr� pour que le flux de particules oscille. Apr�s quelques dizaines de milliers de pas de temps, la densit� dans les deux chambres est similaires et le flux disparait, laissant une "bouillie brownienne homog�ne" � l'�cran. Les dimensions et les param�tres initiaux sont les suivants :
    - chambre gauche : densit� : 1, hauteur : 725, largeur : 434
    - chambre droite : densit� : 0, hauteur : 725, largeur : 267
    - paroi : largeur du trou : 26 noeuds
    - vitesse : strip=32, 2014269 cycles CPU par pas de temps, 5,75 ms pour balayer un tableau de 704*728=512512 noeuds, soit 89 millions de noeuds par seconde.

            L'image suivante montre le r�sultat de la routine de calibration du strip mining. Nous pouvons y apercevoir les caract�ristiques de la m�moire et en particulier mesurer le speedup permis par l'algorithme, par rapport � un balayage lin�aire normal (4981/2014=2,47). En particulier, le speedup varie peu au-del� d'un strip mining de 10 lignes, la d�croissance est d�e � la r�duction de la bande passante utilis�e par l'affichage et est en 1/x.

     

     

    Partie V : Plateformes d�di�es

     


     
     
     
     
      V.1 : Introduction :

            Les algorithmes de gaz sur r�seaux ont d�j� fonctionn� sur une large vari�t� de machines dans le monde, par exemple : Alpha, Apple, CRAY-XMP, CRAY-2, Connexion Machine 200, Connexion Machine 5, FPS 164, IBM RS6000, IBM 3090, PC (Intel et clones), SUN/SPARC (jusqu'� 256 CPU), Silicon Graphics Origin 8-CPU, VAX...
    La nature du mod�le des gaz sur r�seaux s'adapte � une tr�s grande vari�t� de machines, des processeurs 16 bits aux calculateurs vectoriels parall�les en passant par les machines de bureau actuelles. Elle permet aussi aux �lectroniciens de cr�er des machines d�di�es, plus ou moins configurables : c'est le sujet de ce chapitre.

            Les avantages sont nombreux : si une programmation tr�s soign�e permet de "gagner" 3 ans en performance, elle peut en faire gagner le double ou plus dans certains cas. Par exemple, d�s ses d�buts, la CAM-8 a atteint des performances encore in�gal�es par les stations de travail actuelles. Le parall�lisme inh�rent au mod�le permet aussi de cr�er des architectures modulaires qui peuvent s'adapter aux contraintes budg�taires fluctuantes, laissant esp�rer des mont�es en puissance vertigineuses. Cela permet enfin de r�soudre le plus simplement du monde des probl�mes de plus en plus difficiles sur les plateformes actuelles : un simple fil peut remplacer de nombreuses lignes de code.

            Tous les essais effectu�s ces quinze derni�res ann�es ont aussi montr� les nouveaux probl�mes qu'une architecture d�di�e entraine. Tout d'abord, le manque de d�bouch�s sur le march� du grand public marginalise les efforts : combien de personnes veulent calculer un milliard de sites FHP par seconde ? La cons�quence directe est que ces architectures suscitent peu d'int�r�t r�el en dehors du monde restreint des gaz sur r�seaux, donc les machines existantes ne sont que des prototypes. Les autres machines sont rest�es dans l'imagination des r�veurs : si concevoir une architecture "accueillante" pour les gaz sur r�seaux semble tr�s facile, les probl�mes �lectroniques et de moyens mat�riels sont bien diff�rents dans la r�alit� pour un projet de cette �chelle.

            Enfin, il ne faut pas perdre de vue qu'une fois construit, le mat�riel n'�volue pas. Il faut souvent revoir compl�tement l'architecture pour chaque g�n�ration de machine, comme pour un ordinateur normal, mais le co�t de d�veloppement est lourd et constant, � la charge du laboratoire qui lance le projet. Il n'y a donc pas de "lign�e" de calculateurs d�di�s comme il y en a pour les voitures, les logiciels, les avions ou les ordinateurs. Les changements d'organisation dans les entrailles de la machine entre chaque nouveau prototype obligent � r��crire tout le logiciel de gestion pour chaque version. Les cycles de d�veloppement sont donc tr�s longs et on perd une partie de l'avance par rapport � des logiciels sur des stations de travail.

            Les quatre premiers chapitres d�crivent des impl�mentations r�elles, les suivants sont des �tudes de cas imaginaires (architecture fiction).

     

    V.2 : RAP-1 :

            Mis au point vers 1986 par Dominique d'Humi�res et Andr� Clouqueur � l'Ecole Normale de la rue d'Ulm, c'est une machine typique de son temps comme le montrent ses caract�ristiques. Ses performances sont de 6,5Mc/s, ou 256 sites par 512 � 50 Hz. Les sites peuvent contenir 16 bits qui sont mis � jour lin�airement par une LUT (2 SRAM de 64Ko) et l'�tude en cours peut �tre visualis�e sur un �cran VGA ind�pendant (synchronisation directe, pas de frame buffer). L'h�te est un PC et les informations peuvent �tre post-trait�es par un VAX en local [11].

            Le RAP-1 a une structure proche de la CAM-6 mais ces deux architectures resten distinctes. La m�moire centrale du RAP-1 est compos�e de VRAM, des puces DRAM de 64 Kbits con�ues pour les cartes vid�o pouvant lire et �crire une donn�e en un cycle gr�ce � deux ports s�par�s. Des circuits sp�ciaux d'adressage permettent la r��criture vers les sites voisins pour certaines lignes, ce qui permet de g�rer les voisinages hexagonaux, de Moore ou de Von Neumann. La CAM-8 permet la r��criture du r�sultat de chaque site vers n'importe quel autre site.

            Le "RAP-1" signifie "R�seau d'Automates Programmable" et n'a plus qu'un int�r�t historique actuellement. Il est limit� architecturalement et ne permet pas de contr�le fin ou d'actions complexes comme le permettent les logiciels. La performance, qui nous int�resse ici, est largement d�pass�e par les PC actuels. Voir l'article dans [20] pour plus de pr�cisions architecturales.


    Une all�e de Von Karman calcul�e sur RAP-1 et post-trait�e.

     

    V.3 : CAM-8 :

            La CAM-8 est probablement la machine la plus int�ressante actuellement. Elle est issue des recherches de Tomaso Toffoli et Norman Margolus au MIT o� ils ont con�u plusieurs g�n�rations de "CAM" (Cellular Automaton Machine). Ils ont donc une exp�rience et une renomm�e qui leur ont permis de concevoir une architecture flexible et performante. En particulier, sa flexibilit� est bien sup�rieure par rapport au RAP-1 (dont elle s'inspire un peu), ce qui lui vaut d'�tre encore en usage. Dix � quinze exemplaires ont �t� fabriqu�s depuis 1992 : un record pour le domaine !


    Une boite CAM-8 avec une carte ins�r�e sur laquelle on aper�oit certains ASIC.
         
    Description d'un ASIC (STEPchip)
    (extrait du manuel de la CAM-8).

            La CAM-8 est une machine complexe, d�crite dans le manuel disponible sur le site qui lui est d�di� (http://www-im.lcs.mit.edu/cam8/ps/hard_ref.ps). Pour r�sumer, la machine est con�ue sur plusieurs �chelles : syst�me, bo�te, carte et ASIC.

  • Le syst�me consiste en une ou plusieurs boites reli�es entre elles dans un r�seau torique 3D, ce qui permet d'en connecter en tr�s grand nombre en parall�le sans que surgissent des probl�mes architecturaux ou logiciels.
  • Une boite contient 8 cartes reli�es par un fond de panier. Le fond de panier n'est pas un bus mais une zone de c�blage permettant de r�aliser des topologies plus ou moins complexes. C'est la seule partie qui requiert une intervention physique. La m�moire contenue dans une bo�te est �quivalente � 16 m�gaoctets.
  • Chaque carte contient des puces m�moire (DRAM) et 16 circuits int�gr�s sp�cialis�s (ASIC) qui effectuent les "op�rations" de la machine. La fr�quence d'horloge est de 25 MHz et les cellules sont trait�s sur la carte avec une largeur de 16 bits par une LUT.
  • Les ASIC concentrent toute l'intelligence de l'architecture. L'utilisateur peut contr�ler de nombreux param�tres comme la largeur des cellules, le nombre de dimensions ou les conditions aux limites (bouclage ou chambre close). Leur configuration n�cessite de nombreux efforts logiciels.

     

    Connexion du fond de panier d'une boite CAM-8 pour une configuration infinie. Seule une direction est montr�e, sans bouclage aux bords.
         
    Connexion de 4 boites pour un tore 2D.

            Comme pour le RAP-1, un moniteur externe permet de visualiser l'activit� de la machine (c'est assez spectaculaire) mais le plus complexe reste la configuration de la machine par l'h�te. Une suite de logiciels est en d�veloppement depuis de nombreuses ann�es. De nombreuses applications ont �t� d�montr�es et la CAM-8 sert pour des recherches dans des domaines tr�s vari�s mais l'interface est encore rudimentaire.

            La CAM-8 est tr�s flexible. Il y a quelques limitations mais elles s'inscrivent dans une architecture sophistiqu�e, destin�e � simuler virtuellement des espaces jusqu'� 32 dimensions. L'espace m�moire est adress� dans chaque carte en associant un ou plusieurs bits � une dimension, ce qui permet de cr�er des g�om�tries quasi arbitraires o� chaque longueur est une puisance de 2 (256*256*256, 128*512, 4096*4096...).

            Chaque carte effectue une consultation de table sur 16 bits pour chaque cellule mais on peut effectuer des op�rations plus complexes (consultation multiple, LUT virtuelle...). Par exemple, pour le mod�le FHP, les 16 bits peuvent servir pour repr�senter 2 sites � 1 bit par directions ou 1 site � 2 bits par directions. Avec 8 cartes � 25 MHz, un boite CAM-8 soutient donc 400Mc/s en FHP3 ou 200Mc/s avec 2 bits par direction (Integer Lattice Gas � 2 bits).

            Le voisinage est configurable site par site : une carte peut acc�der � des �l�ments non contigus dans la m�moire. Cela permet aussi bien de calculer dans des espaces � N dimensions ou effectuer des interactions non locales. C'est ce dernier d�tail qui fait une grande diff�rence avec les autres machines.

            Le site Internet du laboratoire de Norman Margolus n'est pas avare en d�tails techniques. On peut y trouver les applications o� la CAM-8 excelle et m�me un simulateur logiciel. Un article [23] dans la preprint archive montre une application de la CAM-8 aux simulations en 3 dimensions dans le r�seau FCHC � 24 bits. La capacit� � effectuer des consultations successives de la LUT permet de "casser" l'op�rateur de collisions en isom�tries de 16 bits.

     

    V.4 : EXA :

            La soci�t� EXA a �t� cr��e par un professeur du MIT, Molvig. Elle utilise les techniques issues des gaz sur r�seaux dans les milieux industriels. Son nom vient de l'ordre de grandeur du m�me nom (mega, giga, tera, peta puis exa). C'est le nombre d'op�rations n�cessaires pour des simulations r�alistes en 3D, hors de port�e des ordinateurs classiques de l'�poque (vers 1990).

            EXA vend ses services aux soci�t�s qui ont besoin d'�tudes sur des projets particuliers, dans les limites permises par les mod�les utilis�s. Sa puissance de calcul consistait au d�but en une station Silicon Graphics dot�e de cartes acc�l�ratrices dot�es d'ASIC traitant les calculs bool�ens. Le premier mod�le (Molvig/Vichniac, vendu sous le nom "DigitalPhysics") �tait une extension du mod�le pseudo 4D avec 2 vitesses, soit un mod�le thermique avec 48 bits par site. Peu d'informations subsistent sur ce mat�riel qui souffrait des limitations inh�rentes aux mod�le bool�ens.

            Rapidement, la soci�t� a �tendu ce mod�le en utilisant la technique de Bolzman (BGK ?) pour b�n�ficier de la mont�e en performance des calculateurs massivement parall�les constitu�s de stations de travail (beowulfs). EXA d�veloppe, utilise et vend un logiciel appel� Powerflow. Il existe peu de papiers d�crivant le mod�le utilis� mais l'approche choisie est propri�taire (secr�te) et utilise des astuces contestables pour augmenter artificiellement le nombre de Reynolds simulable.

            L'espace simul� est divis� en "voxels" (sous-divisions de l'espace 3D en cubes) de tailles variables dans l'espace simul�. Cela permet d'adapter la quantit� de m�moire et de calculs n�cessaires en fonction de la vorticit� locale. La "granularit�" sera beaucoup plus fine pr�s des parois et dans les zones turbulentes. Certains sp�cialistes ont object� que cela brise la continuit� du milieu et de ses propri�t�s, emp�chant les turbulences de se propager d'un voxel � un autre d'une taille (donc d'une viscosit�) diff�rente. Les techniques qui y rem�dient sont secr�tes et ne peuvent pas �tre examin�es.

            On pense que certains artifacts et d�fauts sont compens�s par des marges de s�curit� et une analyse "intelligente" du partitionnement de l'espace. Une approche similaire au maillage dynamique ou progressif (en cours du calcul) permet de r�duire l'impact du probl�me dans une majorit� des cas. Le reste est noy� dans le bruit num�rique et l'int�gration lors des mesures. Enfin, cet inconv�nient et les �ventuels autres probl�mes sont souvent n�gligeables par rapport aux avantages, lorsqu'ils sont compar�s aux techniques classiques.

            Les gaz sur r�seaux n'ont pas d'avantage majeur en temps de calcul ou en utilisation m�moire par rapport aux techniques �tablies, pour un cas identique. Par contre, la qualit� des r�sultats est souvent sup�rieure : ils sont fiables � quelques pourcents alors que les techniques classiques sont fiables � quelques dizaines de pourcents. De plus, ils sont r�solus explicitement dans le domaine temporel, ils peuvent donc capturer la dynamique d'un probl�me qui n'apparaitrait pas autrement (par exemple avec une r�solution o� le terme temporel est ignor�). Ensuite, les r�sultats sont plus pr�cis. Enfin, contrairement aux autres techniques, la simulation n'a pas besoin de donn�es issues de simulations r�elles pour ajuster les r�sultats des calculs : il suffit juste de fournir les g�om�tries et les param�tres du fluide (Re et Mach) pour obtenir le r�sultat. Cette derni�re qualit� a permis � EXA de se distinguer en r�solvant des probl�mes de turbulences complexes inaccessibles aux autres m�thodes. On comprend donc que les techniques employ�es ne soient pas publiquement connues.

            Le domaine d'utilisation reste limit� au bas subsonique (inf�rieur � Mach 0.4), l'a�ronautique n'est donc pas la cible de l'entreprise. Les �tudes portent sur les car�nages et carosseries de motos, voitures, camions, jusqu'� Re=6.10^6 avec un (tr�s) gros serveur. Le domaine a r�cemment �t� �tendu aux �coulements internes et aux �changes thermiques. Il devient ainsi possible de simuler des injections de moteurs � explosion ou des syst�mes de climatisation.

            Dans la pratique, cette qualit� des calcul a un prix tr�s cher en expertise et en temps CPU. Pour donner un ordre de grandeur, un grand fabricant de voiture a d�cid� d'acheter un cluster de 256 stations de travail dans le but unique d'utiliser Powerflow. Cette initiative a �t� suivie par la plupart des constructeurs europ�ens et am�ricains. EXA loue aussi du temps CPU sur un cluster SGI Origin � 8 CPU en mode batch (partag� entre plusieurs utilisateurs moins fortun�s) et inaugure ainsi un nouveau mode de "service commercial" sur Internet (la mode est vraiment au "e-business" bien que le travail par lot ne soit pas une invention r�cente).

            Peu de d�tails de programmation filtrent sur Internet ou sur le site web de la soci�t�. Une interview avec un ing�nieur fran�ais a cependant permis de d�gager certains points. EXA utilise un r�seau FCHC avec des particules � trois vitesses (0, 1 ou 2 sites par pas de temps) en virgule fixe. L'espace est divis� en "voxels" et en "surfels" de tailles variables (mais multiples les unes des autres pour simplifier le pavage de l'espace). Chaque type de zone ("surfel" ou "voxel") est trait� par un code sp�cial. Un voxel utilise environ 130 octets de m�moire, un surfel en utilise 1300 et peut repr�senter 12 ou 24 faces. Une simulation normale utilise facilement plusieurs millions de voxels, ce qui n�cessite l'emploi d'ordinateurs multiprocesseurs disposant de plusieurs gigaoctets de m�moire. Enfin, un pas de temps �quivalent � une seconde n�cessite 22000 pas de temps de calcul.

            La phase critique de l'expertise est l'adimensionnement : la d�termination des param�tres de calcul en fonction des param�tres r�els. Le but est d'utiliser la puissance de calcul le plus efficacement possible. Les param�tres importants sont la puissance de l'ordinateur (m�moire et vitesse), la vitesse du fluide et la taille de l'�prouvette. La vitesse du fluide dans l'exp�rience doit �tre maximale (environ 0.3) pour maximiser le nombre de Reynolds. Le nombre de Reynolds d�pend aussi de la viscosit� du fluide, qui est fixe pour chaque voxel, et de la longueur caract�ristique du probl�me. L'adimensionnement d�termine donc le nombre de voxels � utiliser en fonction de la d�finition du nombre de Reynolds et en ajustant les termes de l'equation de Navier-Stockes aux �quations caract�ristiques du mod�le avec les termes non-lin�aires qui apparaissent [26]. Le temps de calcul d�pendra du nombre de voxels, du nombre de pas de temps, de la complexit� du fluide et du nombre de processeurs. C'est un algorithme facilement parall�lisable donc l'efficacit� reste satisfaisante avec plusieurs centaines de processeurs, comme le montre une fiche technique disponible sur le site web. Les plateformes de calcul utilis�es sont couramment Sun et SGI. Les r�sultats ou les vecteurs de calculs sont trait�s sur des stations de travail graphiques d�port�es.

            EXA a eu l'amabilit� de communiquer un exemple de calcul r�alis� en 1998 pour donner un ordre de grandeur de l'efficacit� du logiciel. Le calcul portait sur les turbulences autour de la carosserie d'une voiture sportive afin d'�valuer l'efficacit� de volets de d�flexion. Cela a n�cessit� 22000 pas de temps soit 4 jours sur un serveur � 8 processeur � 167 MHz avec 11 millions de voxels et 1 million de surfels. Les entr�es d'air ou les interactions des pneus n'ont pas �t� prises en compte mais le r�sultat est saisissant.

            Cette approche logicielle a beaucoup d'avenir car elle permet concevoir des v�hicules plus silencieux et moins turbulents sans louer ou construire des souffleries r�elles (sans compter le prix de la maquette). Powerflow permet de mod�liser des turbulences li�es aux asp�rit�s d'une structure et donc de v�rifier son impact sur le bruit qu'il g�n�re et sur le Cx de l'engin. Le temps de calcul peut �tre plus court que la construction et les mesures d'une maquette dans une soufflerie silencieuse. Toutefois, de nombreux probl�mes subsistent comme la limitation de la taille des fichiers sur les syst�mes UNIX : la taille limite traditionnelle de 2Go est vite atteinte et les efforts de d�veloppement sont encore en cours.

     

    V.5 : "Fourmi" :

            Ce projet du d�partement MIME n'est pas encore op�rationnel. L'architecture est simple dans les grandes lignes et est enti�rement d�di�e aux automates cellulaires 1 et 2D, sans �tre sp�cialement pr�vue pour un usage pr�cis. Ce projet est appel� ainsi car il part du principe que l'union fait la force, comme dans une fourmili�re : une fourmi isol�e n'est pas tr�s productive alors qu'une arm�e de fourmis peut effectuer beaucoup de travail. C'est une architecture extensible par addition de modules : le prototypage s'effectue avec un seul module puis d'autres modules seront construits en nombre (donc moins chers � l'unit�) lorsque la technique est au point.

            La "fourmi" est une machine SIMD divis�e en deux : elle dispose d'un s�quenceur (partie contr�le) et d'une ou plusieurs cartes d'ex�cution. Chaque �l�ment est configurable : le s�quenceur est c�bl� et "ex�cute" un programme charg� en SRAM locale, tout en envoyant des signaux aux parties d'ex�cutions. Chaque carte "active" est compos�e essentiellement d'un FPGA et d'un bloc de DRAM adress�e par le FPGA. Le FPGA est en technologie SRAM, il peut �tre reconfigur� � tout moment par l'ordinateur h�te (Sun SPARC). Les fonctions r�alisables sont donc potentiellement infinies mais limit�es par la taille et l'architecture du FPGA ainsi que par son langage de commande : le projet Fourmi a aussi pour objet de d�velopper un langage de description des automates cellulaires. Le tout fonctionne � quelques dizaines de m�gahertz.

            La pratique est beaucoup plus complexe, comme le confirme la dur�e du d�veloppement. Le programme de commande traduit le langage de description en code VHDL, ce qui est loin d'�tre facile. Le bus VME, autour duquel est architectur�e la machine, ne permet d'envisager qu'une dizaine de cartes au maximum. Les cartes sont reli�es par un r�seau unidimensionnel. Le d�veloppement est frein� par le manque de moyens mat�riels, par le peu de personnes travaillant au projet et par la d�pendence envers les fabricants de FPGA : de nouvelles versions de FPGA et de logiciels apparaissent plus vite que le projet et il est difficile de conserver d'anciennes versions car elles ne sont plus support�es.

            La CAM-8 a �chapp� � ces probl�mes : la topologie est beaucoup plus flexible et en 3D, laissant envisager la construction de cubes de dizaines de boites de c�t� (le probl�me est alors la dissipation thermique...). Le projet CAM-8 b�n�ficie aussi de subventions du d�partement de recherche de l'arm�e am�ricaine, ce qui permet de r�soudre certains probl�mes de mani�re plus triviale que lorsque le budget est d�pass� ou inexistant.

     

    V.6 : Carte ISA :

            Ce chapitre pr�sente la premi�re �tude personnelle de mat�riel d�di� au calcul de gaz sur r�seau hexagonal, vers 1996, apr�s la sortie de l'article de l'annexe B. Aucun acc�l�rateur de cette structure n'a jamais �t� r�alis�. Le but �tait principalement d'effectuer les calculs et les mouvements complexes de donn�es par de simples circuits �lectroniques sur une carte ISA avec un budget tr�s restreint. La plateforme cible �tait un i286 � 12MHz dot� d'un bus ISA 16 bits. La vitesse th�orique est donc limit�e par la vitesse du bus ISA et la taille des exp�riences est limit�e par le x86 en mode r�el (64Ko).

            La structure de la carte est d�riv�e d'une �tude des mouvements de donn�es dans l'algorithme de l'annexe B. La carte ne pouvait �tre dot�e de m�moire spacieuse, elle devait donc d�pendre de la m�moire centrale de l'h�te. Les composants doivent �tre simples, �conomiques et peu nombreux, sur un circuit imprim� � 2 faces dessin� � la main. Aucune exploitation des r�sultats n'�tait pr�vue : pas de sommation car les particules �taient organis�es en multisite et l'affichage �tait contr�l� par la palette de la carte VGA.

            L'�tude des d�pendances des donn�es a permis de d�finir une strat�gie : seules quelques lignes ont besoin d'�tre m�moris�es dans la carte, ce qui permet de ne contenir que quelques dizaines de kilooctets de SRAM ou de FIFO. Dans ce cas, le plus difficile est de synchroniser le contenu des diff�rentes m�moires : il faut que le logiciel collabore �troitement avec la carte pour permettre � l'algorithme de fonctionner correctement.

            Le sch�ma suivant d�crit les d�pendances de donn�es :

    Description des d�pendances de donn�es pour le mod�le multisite

            Comme les mots transmis sont larges de 16 bits et puisque la gestion des lignes paires/impaires est inutilement complexe, le r�seau a �t� tourn� � 90 degr�s et les noeuds sont trait�s par paires. Il faut donc 2 LUT et chaque cycle d'horloge traite deux sites. La figure suivante montre le nommage des directions, similaire � la strat�gie du deuxi�me code de r�f�rence :

            Deux strat�gies existent : utiliser des FIFO ou des SRAM. L'�tude a port� d'abord sur les FIFO. Par convention, N sera le nombre de sites par ligne.

            L'ordinateur et la carte sont asynchrones, l'ordinateur doit partager la bande passante entre le flux entrant dans la carte et le flux sortant. Pour des raisons de simplicit�, la gestion de la DMA n'a pas �t� envisag�e. Le programme de l'ordinateur h�te est assez simple : il envoie un bloc puis en re�oit un autre � mettre au m�me endroit. Il faut v�rifer � chaque fois que le buffer que l'on va acc�der est pr�t, gr�ce � des s�maphores pr�vus � cet effet. La boucle interne doit �tre �crite en assembleur car elle utilise des instructions sp�ciale rep insw et rep outsw qui ne sont pas disponibles dans les langages de haut niveau :

    
    
            ; init de la boucle externe :
               push ds ; ds pointe vers le tableau
               pop es  ; ds = es = d�but du tableau
               xor di,di ; di = 0
               xor si,si ; si = 0
               mov dx,inout_port ; adresse de la carte ISA
     
               mov bx,nb_lignes
            loop_bx:
    
              ; synchro 1:
                 add dx,2
            loop_dx1:
                   in al, dx
                   and al,1   ; v�rifie que le buffer d'entr�e est pr�t
                 jz loop_dx1
                 sub dx,2
    
                 mov cx,N/2
                 rep outsw dx,si ; bloc DS:SI vers port DX
    
            ; synchro 2:
                 add dx,2
            loop_dx2:
                   in al, dx
                   and al,2   ; v�rifie que le buffer de sortie est pr�t
                 jz loop_dx2
                 sub dx,2
    
                 mov cx,N/2
                 rep insw dx,di ; port DX vers bloc ES:DI
    
               dec bx
               jnz loop_bx
    
            ; fin
    

            Dans cet exemple, les phases sont synchronis�es en utilisant un port de contr�le, permettant de lire l'�tat interne de la carte. Nous allons voir plus loin qu'il est possible de s'en passer. La synchronisation entre le processeur et la carte peut �tre g�r�e par exemple en ins�rant des wait states sur le bus lors de la lecture et de l'�criture du port. Il faut aussi une p�riode d'amorce du "pipeline" interne de la carte mais ce n'est pas trait� ici.

            Si le processeur envoie 2 octets par cycle, s'il faut 2 cycles par site (�criture puis lecture) et si le bus envoie 16 bits par cycle en rafale, la bande passante maximale th�orique est de 12MHz/2*2 soit 12 millions de sites par seconde � 12 MHz. Les al�as du bus ISA abaissent ce d�bit dans la pratique, en particulier pour acc�der � la m�moire DRAM lente et pour garder la compatibilit� avec les cartes ISA 8 bits. Il faut en th�orie 2 cycles pour un acc�s 16 bits et 3 cycles pour deux acc�s 8 bits en mode 16 bits. Cela donne beaucoup de temps � la carte ISA pour traiter les informations par paquets 16 bits, � 6 MHz maximum en th�orie. Le chemin critique de l'acc�l�rateur dispose donc de 160 ns au minimum pour effectuer son travail, ce qui est peu contraignant. Le processeur effectue deux fois plus de travail de mouvement que la carte elle-m�me car sa bande passante est partag�e par plusieurs flux : la carte doit donc pouvoir garder en m�moire deux lignes (2*N sites) au minimum pour �viter de perdre des donn�es.

            En utilisant des FIFO toutes faites, on gagne en simplicit� de gestion : pas d'adressage de SRAM � g�n�rer. La figure pr�c�dente dit en a) qu'il faut conserver pour le buffer d'entr�e 2N sites, soit 2 FIFO de N octets. Une ligne doit �tre constament gard�e en mat�riel afin de simplifier le logiciel et les pointeurs. La deuxi�me se vide au fur et � mesure que le calcul avance.

            Le calcul donne 4 bits pour la premi�re ligne, 8 bits � la suivante et les 4 derniers pour la troisi�me ligne. De plus, de petits buffers doivent �tre correctement plac�s pour temporiser certains r�sultats de un ou deux cycles. On modifie donc la structure de la figure a) pour exploiter des FIFO sur 8 ou 16 bits : on utilise des bits ind�pendants dans la m�me FIFO puisque tous les flux sont synchrones. Il faut donc trois �tages de FIFOs � N �tages, ou en tout 4 FIFOs de N octets. Dans la versions a), on s'aper�oit aussi que le calcul s'effectue � chaque lecture d'un mot en sortie : on peut donc �conomiser un �tage de FIFO. Les parties d�licates sont la programmation des LUT, la gestion du "m�lange" des bits et les buffers associ�s, ainsi que le contr�le g�n�ral de la carte, non repr�sent� ici. Le g�n�rateur de nombres al�atoires peut �tre impl�ment� dans une simple PAL avec un registre � d�calage � r�troaction lin�aire.

            Une autre optimisation porte sur l'utilisation des circuits : on peut r�duire le nombre de circuits buffers 8 bits (des bascules latch non transparentes) � seulement deux en traitant les bits ind�pendamment. Certains bits peuvent donc �tre utilis�s � diff�rents degr�s de d�lai et il n'y a pas de broche inutilis�e. Ainsi, quatre circuits suffisent � "brasser" les bits, le reste du circuit imprim� doit g�rer les autres fonctions : acc�s aux LUT pour leur configuration, d�codage du bus ISA, synchronisation et validation des horloges de tous les circuits. Ce sont ces parties qui sont les plus complexes et qui sont susceptibles de demander du temps pour la mise au point.

            L'architecture d�crite dans ce chapitre n'a pas �t� impl�ment�e pour des raisons financi�res, de temps, de moyens mais surtout parce que les programmes qui ont �t� d�velopp�s ensuite sont beaucoup plus rapides que les 12Mc/s th�oriques que l'acc�l�rateur permettait d'atteindre. La version � base de SRAM pour �muler les FIFOs (ch�res, voir RadioSpares) est plus compliqu�e car il faut adresser des SRAM : les composants discrets sont trop nombreux, les PAL sont trop petites et les FPGA d�passent le budget.

     

    V.7 : Anneau de strip mining :

            L'id�e de cette architecture est venue dans une discussion, � la fin d'une pr�sentation par Amal Stri du projet Fourmi en 1998. C'est une application directe du principe de "strip mining" utilis� dans le programme : il y a deux niveaux de m�moire de vitesse et de quantit� diff�rentes afin de diminuer le co�t total du syst�me. Une m�moire de type DRAM est � la fois spacieuse et �conomique, elle est ici contr�l�e par une puce sp�ciale qui effectue le rafra�chissement et le transfert de blocs, alternant lectures et �critures en rafale. Ensuite, chaque "ligne" de strip mining est impl�ment�e par un circuit qui peut �tre r�pliqu� � volont� selon les besoins et le budget. Il peut consister en un gros FPGA ou tout simplement correspondre au circuit d�crit dans le chapitre pr�c�dent.

            Ce type d'architecture a un int�r�t particulier : plus le nombre de circuits de calcul de lignes est grand, plus le calcul est rapide, ind�pendamment de la taille du tableau � calculer. La partie calcul est s�par�e de la partie stockage et chacune peut avoir la taille d�sir�e. Il devient possible d'augmenter le nombre total de sites calculables en ajoutant une barette de DRAM disponible dans le commerce, ou d'augmenter la vitesse de calcul en fabricant d'autres cartes de calcul. Le contr�leur de DRAM peut aussi g�rer des communications plus lentes afin d'inclure l'anneau dans un anneau plus grand et impl�menter une architecture de strip mining du deuxi�me ordre (avec un anneau d'anneaux).

            L'affichage du r�sultat peut �tre effectu� en lisant le trafic sur un des liens et en envoyant le flux vers un tampon d'affichage pour le synchroniser avec le balayage de l'�cran. Il faut donc que le flux de l'anneau contienne un "jeton" indiquant un retour de balayage vertical mais il est plus simple de g�rer ce cas directement avec le contr�leur de m�moire : il doit contenir les pointeurs de d�but et de fin du balayage de la DRAM et peut donc g�n�rer le signal de synchronisation sans complexit� inutile.

            Une autre caract�ristique int�ressante est que l'anneau est unidirectionnel : chaque module a besoin d'un port d'entr�e et d'un port de sortie identiques dont la bande passante (largeur et fr�quence) correspond � la vitesse de calcul de chaque unit� (la vitesse est la m�me pour un syst�me synchrone). Le contr�leur de m�moire doit donc contenir deux m�moires tampons afin de garder un flux de donn�es constant malgr� l'acc�s altern� (R/W) � la DRAM.

            Ce type de syst�me parall�le exploite les caract�ristiques du mod�le calcul� et son extensibilit� est diff�rente compar�e aux autres syst�mes cellulaires. D'habitude la puissance est augment�e en ajoutant des modules qui contiennent � la fois de la m�moire et des circuits de calcul mais le prix de la DRAM au m�gaoctet est beaucoup plus faible que de la SRAM de petite quantit�. L'acc�s par blocs dans ce mod�le est aussi un facteur qui rend cette architecture possible : des acc�s al�atoires p�naliseraient la bande passante � cause de l'interface compliqu�e des puces de DRAM. Ce syst�me peut donc �tre �tendu par ajout de composants m�moire �conomiques et par ajout de modules de calcul (circuits imprim�s ou FPGA).

            Le probl�me de cette approche, malgr� le rapport performance/prix int�ressant, est qu'il est limit� aux mod�les � interactions courtes en 2D (voisinage de Moore ou de Von Neumann par exemple). Il ne peut �tre utilis� pour des mod�les uni- ou tridimensionnels et l'int�r�t est r�duit en dehors des gaz sur r�seaux : ce n'est pas une architecture "g�n�raliste". Si le domaine � �tudier est limit� aux LGA 2D, c'est l'architecture parall�le la plus recommend�e, m�me avec des mod�les non binaires : ILG, BGK...

     

    V.8 : tableau de PAL :

            L'exploration suivante est un "exercice d'�cole" destin� � comprendre � quel point le mod�le physique influence l'architecture mat�rielle. Les contraintes de prix, de flexibilit� et de r�alisation sont ensuites utilis�es pour modifier les choix.

            Commen�ons par un cas de figure "id�al" car il repr�sente exactement le mod�le FHP : chaque site est associ� � un circuit logique programmable, par exemple une PAL 16L8.

    
       \   /   \   /   \   /   \   /   \   /   \   /   \   /   \
    --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL
       /   \   /   \   /   \   /   \   /   \   /   \   /   \   /
    PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL ---
       \   /   \   /   \   /   \   /   \   /   \   /   \   /   \
    --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL
       /   \   /   \   /   \   /   \   /   \   /   \   /   \   /
    PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL ---
       \   /   \   /   \   /   \   /   \   /   \   /   \   /   \
    --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL
       /   \   /   \   /   \   /   \   /   \   /   \   /   \   /
    PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL ---
       \   /   \   /   \   /   \   /   \   /   \   /   \   /   \
    --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL
       /   \   /   \   /   \   /   \   /   \   /   \   /   \   /
    PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL --- PAL ---
    

         Chaque lien correspond � deux connexions (un bit dans chaque sens). Ce syst�me pourrait fonctionner � 20MHz : le parall�lisme massif permet d'atteindre environ 1Gc/s avec la configuration de circuits ci-dessus (un carr� de 8 par 8). La performance dans des applications r�elles (500*500 environ) serait donc impressionnante mais les obstacles pratiques sont tr�s nombreux :

  • il faudrait un nombre consid�rable de circuits, sur une surface gigantesque (proportionnelle au nombre de sites)
  • la visualisation serait difficile (avec des LED ?)
  • les essais avec les compilateurs VHDL ont montr� que la complexit� des �quations ne permet pas de programmer une PAL normale avec les r�gles FHP-3 "satur�es"
  • les "obstacles" (murs) seraient soit c�bl�s par des fils, soit programm�s dans les PAL, mais ne pourraient pas �tre modifi�s facilement et rapidement
  • l'arbre de l'horloge serait lourd � g�rer ; il faut faire un arbre binaire pour r�partir le signal d'horloge de mani�re synchrone sur tout le circuit (comme expliqu� dans la documentation de la CAM-8).
  • la propagation de la valeur du g�n�rateur de nombres al�atoires est aussi complexe que la propagation de l'horloge dans le circuit.

            Finalement, cette approche est r�serv�e � des cas tr�s particuliers o� l'investissement en mat�riel est justifi� par une utilisation intensive, hors du cadre de la recherche. Une puce VLSI avec un r�seau de 16 * 16 sites pourrait servir de base � des g�n�rateurs de nombres pseudo-al�atoires (de probabilit� 2/7) contr�l�s par cl�.


            Une alternative serait d'utiliser des m�moires SRAM rapides comme celles utilis�es dans les caches L2 des PC. Elles sont relativement �conomiques, largement r�pandues et ne sont pas limit�es par la complexit� de l'�quation. Par exemple, partons de mon stock personnel : environ 100 SRAM 62256 15ns en bo�tier DIL �troit 28 broches, toutes r�cup�r�es sur des cartes m�res d�fectueuses. Comme leur contenu peut �tre chang� � tout moment, le syst�me simul� peut �tre int�ractif. Une SRAM de 32 Koctets contient plus de donn�es que n�cessaire pour une seule table (512 octets), un bo�tier peut donc en plus contenir les informations de 64 lignes diff�rentes pour lesquelles les informations ne seraient pas homog�nes (comme pour des parois plus ou moins glissantes, de informations sur la g�om�trie...). Il faudrait alors que l'h�te optimise l'allocation de ces sous-tables mais ce n'est pas un probl�me inqui�tant. La m�moire est organis�e par octets et les murs peuvent �tre trait�s s�par�ment, il reste donc un bit libre dans les donn�es, utilisable pour impl�menter FHP4 :

            Il n'y a pas assez de puces pour constituer un tableau entier (un tableau de 10 par 10 n'est pas int�ressant pour des applications normales), il faut donc balayer la surface ligne par ligne. L� encore, une ligne de 100 sites n'est pas assez pour des cas classiques, il faudra donc plusieurs cycles pour balayer une ligne r�elle. L'organisation des circuits est toutefois 1D : tous les circuits sont plac�s en ligne. Cela pose un gros probl�me : il faut m�moriser les autres lignes, une moiti� des puces m�moire sera alors d�di�e � cette fonction et il faudra les adresser s�par�ment. Le tableau peut donc contenir 50 x 32K = 1,6 millions de sites qui peuvent �tre organis�s par groupes de 50 sites. Une autre solution serait d'acqu�rir 100 puces FIFO de plusieurs milliers d'octets chacune pour simplifier l'adressage et le c�blage mais ce sont des pi�ces ch�res. Le "brassage" des bits pour les r�partir sur plusieurs ligne cons�cutives peut s'effectuer comme avec la carte ISA, avec des buffers discrets.

            Le probl�me le plus inqui�tant est la programmation les SRAM : il faudrait intercaler des transmetteurs qui s�lectionnent la provenance des donn�es dans le chemin critique, ce qui diminuerait la vitesse, augmenterait le co�t et la consommation �lectrique. De toute fa�on, la sortie de ces puces m�moires n'est pas "latch�e" (la sortie ne peut �tre maintenue lorsque que l'entr�e change). Un syst�me synchrone rapide n'est donc pas possible car il faut en plus alterner les cycles de lecture et d'�criture des SRAM de stockage. On peut consid�rer que la vitesse de consultation des LUT est de 15 ou 20 MHz, soit environ 1 milliard de sites par seconde avec 100 puces de SRAM. La consommation �lectrique est au minimum de : 100mA sous 5V x 100 = 50 Watts pour les SRAM seules.

            La question reste en suspens, mais il est �videmment plus facile de programmer un ordinateur "classique" que de mettre au point un syst�me de ce style, m�me avec des FPGA modernes, en maintenant des performances et une flexibilit� similaires.

            Il appara�t que la cr�ation d'une machine d�di�e au calcul de FHP n'est pas aussi ais�e que le mod�le le laisse penser au d�part. L'�lectronique "c�bl�e" reste pourtant le dernier recours lorsque la vitesse demand�e justifie le manque de flexibilit� et le budget consacr� au projet. L'approche parall�le en 1D ou en 2D permet de gagner un ordre de grandeur dans la vitesse de calcul. Une machine � base de dizaines d'ASIC est une solution brute � un probl�me tr�s pr�cis mais la nature des circuits int�gr�s implique une perte de vitesse d�s qu'il faut communiquer avec un circuit int�gr� voisin : une broche suivie d'une piste de circuit imprim� constituent une charge capacitive qui devient pr�pond�rante � tr�s haute vitesse. Il serait donc illusoire de croire � une augmentation lin�aire de la vitesse de traitement lorsque l'horloge est acc�l�r�e : un syst�me synchrone bas� sur l'architecture PAL ou sur un tableau d'ASIC sera limit� par la vitesse de communication entre les puces. Malgr� ses avantages, le calcul "c�bl�" sera donc toujours limit� par les constantes fondamentales de la physique (comme la vitesse de la lumi�re ou la mobilit� des �lectrons).

     

    V.9 : Conclusion :

            Il semble que l'avenir de ce type de machines se trouve dans les r�seaux logiques reconfigurables sur site : les FPGA. Les nouvelles g�n�rations sont tr�s, tr�s rapides et peuvent m�me contenir des microprocesseurs. Leurs architectures, comme pour les microprocesseurs, deviennent de plus en plus complexes et il est difficile de les utiliser � 90% de leur capacit� th�orique, sans parler du manque de transparence des constructeurs, du prix �lev� des logiciels et de plateformes... Le projet Fourmi a explor� ces diff�rents probl�mes.

            Cependant les FPGA offrent un niveau d'abstraction qui permet de faire b�n�ficier l'utilisateur des performances d'une nouvelle plateforme au prix d'une recompilation du source VHDL ou Verilog. Des plateformes diverses existent d�j�, allant de la simple carte PCI aux syst�mes massivement parall�les. Ces syst�mes reconfigurables se d�mocratisent (lentement mais s�rement) car ils touchent beaucoup plus d'applications : ils permettent de calculer rapidement tout ce qu'un ordinateur classique peut calculer. L'ordinateur "h�te" se charge des t�ches complexes, de l'interface avec l'ext�rieur, de la configuration, pendant que la partie de "calcul brut" est prise en charge par le syst�me reconfigurable.

            Il faut toutefois remarquer qu'aucun standard n'existe actuellement. On peut sp�culer sur l'utilisation du VHDL pour programmer des automates cellulaires, Cellang n'a qu'un usage tr�s restreint et le reste reste au stade exp�rimental. Dans l'absence d'un outil d�terministe et fiable pour programmer les FPGA, le pr�cieux mat�riel risque d'�tre sous-utilis� comme un ordinateur classique. Doit-on en venir aux ASIC ? C'est ce que pr�pare Norman Margolus [30] avec une puce m�langeant circuits de m�moire et de calcul, b�n�ficiant ainsi des toutes derni�res technologies.


            Les r�seaux d'interconnexion entre les processeurs �l�mentaires sont tr�s divers. Pour calculer des gaz sur r�seaux en 2D, la m�thode la plus pratique, �conomique et extensible est l'anneau d�crit au chapitre 6. Les autres techniques semblent soumises aux caprices des �volutions technologiques. Les calculs en 3D sont moins faciles � c�bler de mani�re flexible, il faut encore attendre que la technologie �volue. Un hypercube 4D semblerait convenir mais la seule exp�rience effectu�e a utilis� une CAM-8. Les architectures adapt�es aux r�seaux en 2D ne peuvent pas �tre �tendues directement � la 3D car c'est une projection d'un r�seau 4D. De nombreuses recherches suppl�mentaires doivent �tre effectu�es pour d�terminer une architecture adapt�e mais les techniques futures seront certainement extrapol�es � partir des techniques 2D comme l'anneau (issue de l'algorithme de strip mining).

     

     

    Conclusion

     

            Le travail effectué pour ce mémoire est une source d'enrichissements et de surprises inépuisables, dans des proportions imprévues au départ. L'annexe D montre que les programmes FHP, même les plus évolués, sont loin de se mesurer avec le programme développé dans ce mémoire, espérons donc que ces enseignements profiteront à de nombreuses personnes. Une conclusion simple et concise n'est pas possible car les remarques sont trop nombreuses. Au contraire, essayons de les placer dans un contexte plus général. Commençons par résumer les innovations dont chacun devrait tenir compte lors de la programmation de codes FHP ou similaires.

     

     

    1 : Avancées pour le domaine des gaz sur réseaux

    1.1 : Approche globale du problème :

            Programmer des LGA ne se limite pas en l'expression d'un algorithme dans un langage particulier : le premier problème à surpasser avant de concevoir un programme efficace est de s'affranchir du niveau conceptuel des langages textuels. Bien que le premier charme des LGA soit d'être programmables "facilement", on vérifie aujourd'hui que les algorithmes "naïfs" ne sont plus adaptés aux ordinateurs actuels (à partir de 1995 environ) et nécessitent une connaissance approfondie du modèle physique et de l'architecture de la machine.

            Pour programmer les LGA, il faut partir du modèle physique exprimé abstraitement, examiner de nombreuses options et comparer leurs intéractions dans un cadre choisi. L'interface entre le logiciel et le matériel, qui permet de contr�ler la performance du programme, s'étend sur le système d'exploitation, sur l'algorithme, le modèle physique, l'application, la machine cible... Ce sont autant de détails, parfois contradictoires, qu'il faut considérer attentivement, longtemps avant de fixer des choix définitifs ou commencer à programmer.

            La philosophie de programmation joue aussi un r�le important : selon les objectifs, les moyens et les connaissances, des niveaux différents de performance pourront être atteints. Les objectifs doivent être réalistes et les moyens doivent être préalablement maitrisés, sinon le projet risque de ne pas aboutir. Il ne faut pas hésiter à constituer une large base de connaissances (bibliographie, discussions, rencontres, butinage sur Internet) afin de maitriser le sujet dans ses nombreux détails.

            Lorsque suffisament d'éléments sont réunis et préparés, l'intransigeance et le souci du détail permettent de consolider l'édifice, qui ne manque pas de montrer des signes de faiblesse à mesure qu'il s'agrandit. La cohérence du programme devient de plus en plus difficile à gérer lorsqu'on ajoute des éléments : s'il y a N éléments dans un programme, l'ajout d'un autre élément nécessite N vérifications qui peuvent remettre en cause d'autres éléments. Le développement logiciel de ce projet a d'ailleurs été interrompu car il y a trop de parties à réécrire et les outils actuels ne permettent pas de les développer suffisamment rapidement. Ce n'est pas un problème lié au langage assembleur car des intéractions complexes apparaissent dans tous les langages.

            La programmation d'un logiciel optimisé n'est pas seulement un travail de science fondamentale : ce mémoire a fait appel à des compétences en électronique, compilation, système d'exploitation. Il emprunte des méthodes utilisées entre autres par les codeurs de jeux vidéo, qui ont comme préoccupation commune l'utilisation la plus efficace possible de chaque ressource de l'ordinateur. Il faut pourtant faire attention aux parties théoriques car le résultat risque d'être inutile : l'utilisation du modèle FHP en dehors de ses limites raisonnables donne des résultats aberrants. L'utilisation d'un modèle trop primitif semble économique en complexité de calcul mais est sous-efficace en temps de calcul total sur la machine... Un codeur de jeu vidéo sera plus intéressé par l'effet visuel que par l'exactitude d'un calcul.

            Pour résumer, il faut entre autres : être très attentif, être compétent dans de nombreux domaines, pouvoir faire le lien abstrait entre chaque partie, travailler à la fois sur le très haut et le très bas niveau. En réduisant le nombre de contraintes (par exemple : temps du projet trop court, moyens trop réduits, ressources trop faibles) il est possible de faire des programmes de meilleure qualité mais cela est rarement le cas car une contrainte est souvent compensée par une autre.

     

    1.2 : Organisation des données :

            La refonte de la structure des données et des algorithmes (principaux et annexes) est souvent la première voie à explorer pour améliorer fondamentalement un programme. Dans le contexte d'une approche globale, c'est à dire en tenant compte des détails d'implémentation, il faut essayer et comparer les différentes possibilités qui existent. Lors de ce projet, quatre organisations ont été examinées et on peut résumer leurs propriétés dans le tableau suivant :

    type avantage(s) inconvénient(s)
    tableau 2D d'octets
    (LUT, multisite)
    (chapitre III.4)
    simplicité de progammation/compréhension, adapté pour les ordinateurs 8/16 bits (ex.: i286) sous-efficace pour les microprocesseurs récents (mots large, coeurs OOO, occupation de la cache...)
    tableau 2D de mots
    / 4 sites sur 32 bits
    (multisite à traitement parallèle)
    (chapitre III.6)
    plus efficace pour les coeurs 32 bits (i386-486-P53C), moins d'instructions pour le mouvement de bits individuels plus de manipulations d'octets individuels, donc plus contraignants pour les coeurs récents
    multispin entrelacé dans un tableau
    (chapitre IV.4)
    convient le mieux aux microprocesseurs modernes (registres larges, OOO, cache sur la puce) complexe
    (mais ce m�moire montre que c'est possible)
    multispin (equation booléenne) sur plusieurs tableaux séparés convient naturellement aux calculateurs vectoriels nécessite trop de pointeurs (pression sur les registres et le compilateur pour les processeurs classiques, mauvaise localité spatiale, risque de cache thrashing avec certaines granularités)

            Puisque l'étude porte sur les microprocesseurs modernes (Pentium MMX et Pentium II) il est donc recommandé d'utiliser la technique "multispin entrelacé" sur ces plateformes. Les autres techniques sont sous-efficaces, mettent une pression inutile sur l'allocation des registres (pointeurs et données) et utilisent mal la hiérarchie de la mémoire.

            De plus, il est fortement recommandé d'utiliser des buffers temporaires comme décrits dans au chapitre III.3, afin d'éviter une occupation trop importante. Même si cela peut paraître peu important sur des ordinateurs actuels disposant d'au moins 64MO de mémoire, l'espace supplémentaire nécessaire à la collecte des statisques compense vite cette économie. De plus, le léger surco�t en complexité de programmation est justifié par une meilleure utilisation de la bande passante vers la mémoire. Par exemple, la stratégie de write back du Pentium est no-write-allocate : elle court-circuite la cache si la zone mémoire n'est pas déjà cachée, ce qui pénalise certains algorithmes selon leur ordre de lecture/écriture.

     

    1.3 : Strip mining :

            L'utilisation du strip mining dans le projet permet de gagner entre 25 et 50% du temps de calcul selon la taille des tableaux, alors même que le coeur du CPU est saturé par les calculs. Plus qu'une simple "astuce", cela montre bien que les microprocesseurs sont très dépendants de la localité spatio-temporelle des données car toute leur hiérarchie mémoire est conçue selon ce postulat optimiste.

            Les premiers microprocesseurs ne disposaient pas de mémoire cache, et les machines dédiées ont des canaux spécialisés qui garantissent une certaine bande passante, mais les microprocesseurs actuels ont une bande passante vers la mémoire centrale qui est très réduite par rapport à leur fréquence de fonctionnement interne. A mesure que les architectures deviennent plus complexes, de nombreux paramètres rendent le travail plus difficile : il faut faire attention à la cachabilité des zones accédées, aux temps de latence, aux transferts par paquets, � l'ordre et � l'alignement des accès...

            En concevant un algorithme, il faut donc absolument tenir compte de ces paramètres, avec la difficulté supplémentaire de la nature des traitements à effectuer. En effet, la fenêtre de strip mining doit respecter certaines propriétés spatio-temporelles (qui étaient mal identifiées au début du projet). D'autres types d'automates cellulaires, des traitements de signaux (images, sons) ou des opérations mathématiques complexes (inversions de matrices) ont des dépendances différentes entre les données et nécessiteront un algorithme de strip mining différent, qu'il faudra analyser sérieusement pour éviter que la mémoire centrale ne ralentisse le processeur. En règle générale, on peut considérer que tout balayage d'un tableau avec des intéractions limitées aux voisins peut et doit bénéficier du strip mining.

            Il faut espérer que les prochaines générations de microprocesseurs banalisent encore plus les instructions dédiées au contr�le de la mémoire cache. Le strip mining présenté ici est au départ un palliatif au manque d'instruction spéciale et fonctionne par "cache touching" (une partie de la ligne de cache est accédée, le reste est ensuite utilisé au maximum et on attend que le mécanisme de LRU vide la ligne automatiquement). Une amélioration simple consisterait à effectuer le travail de LRU grâce à une instruction explicite et gagner ainsi quelques pourcents sur l'espace réellement utilisé dans la cache (pour être remplacée, une ligne doit être inutilisée, elle prend donc de la place inutilement) et donc accélérer la vitesse du programme. Jusqu'à maintenant, la seule instruction disponible (WBINVD) vidait indifféremment toute la cache et ne procurait aucun bénéfice net (voir les tests en annexe C). Intel a amélioré la situation lors de l'introduction du Pentium III et des instructions SSE, on peut donc espérer que les prochaines versions du programme en bénéficieront.

            Le Pentium II avait déjà changé le "paysage" de la mémoire cache par une architecture à bus séparés très efficaces et rendait ainsi la L2 presque aussi "rapide" que la L1. La mémoire principale n'avait pourtant pas été accélérée mais le schéma original de strip mining fonctionne très bien. Les choses se compliquent dans les cas où la taille des simulations nécessite l'emploi de liens encore plus lents : réseau local Ethernet ou disque dur. Il faut alors utiliser le strip mining au deuxième degré : la complexité et le gain de cette technique éprouvée au niveau de la carte mère peuvent être retrouvés au niveau d'un système à une échelle différente. Des études sont en cours pour le projet beo-kragen.

            D'une simple réorganisation des ordres d'accès à la mémoire, le point de vue a évolué vers la gestion de tampons mémoire et de flux de données à l'échelle du système entier, prouvant que le programme est actuellement étudié à un niveau d'abstraction beaucoup plus élevé qu'à l'origine.

     

    1.4 : Parois complexes :

            L'utilisation de listes de modifications pour gérer les parois permet de bénéficier de toute la puissance intrinsèque du modèle FHP. Bien que cela soit plus difficile à programmer, les efforts sont justifiés par une grande flexibilité des parois tout en ayant une occupation raisonnable en temps CPU et en mémoire. Le projet a permis de programmer et de résoudre les couches de bas niveau, le reste de l'effort étant laissé à la discrétion d'autres programmeurs spécialisés dans d'autres disciplines (l'algorithme de Bresenham dans un repère rhombohédrique ne faisant pas l'objet de ce mémoire). Ce projet de maitrise prouve que les listes de modifications sont possibles et montre comment les réaliser (bien qu'on puisse toujours améliorer la technique). Il existe aujourd'hui moins de raisons de s'en passser.

     

    1.5 : Programmation en assembleur :

            La pratique de l'assembleur est souvent vue comme un exercice de haute voltige, inutile et peu pratique. Ce mémoire montre que ce n'est qu'une des nombreuses difficultés que l'on rencontre dans les exercices de programmation courante car la plus grande difficulté est souvent au niveau algorithmique (le coeur du calcul utilise un nombre très réduit de types d'instructions, ce qui invalide l'argument de complexité). Le reste de la "difficulté" est au niveau de l'interface, ce qui peut être résolu par de nombreux moyens autres que celui utilisé ici.

            L'utilisation de l'assembleur ici correspond à une philosophie de contr�le total sur les instructions que le microprocesseur va exécuter, et donc maitriser étroitement la performance du programme, quasiment au cycle près. Aucun autre moyen n'existe actuellement pour garantir la "pureté" d'un code exécutable. Les meilleurs compilateurs du monde ne permettent qu'un contr�le limité sur le code généré, malgré l'existence de centaines d'options de compilation : il manque toujours celle dont on a besoin.

            Non seulement les compilateurs actuels ne permettent aucun contr�le du code à l'instruction près, mais il ne savent pas encore gérer automatiquement les instructions MMX ou SSE qui sont nécessaires pour accélérer les calculs avec les algorithmes multispin. L'utilisation d'un compilateur pour du code "final" est donc un effort superflu, car il ajoute un niveau d'abstraction parasite dans l'analyse du problème. Les espoirs de générations automatique de codes "preque parfaits" se sont évanouis devant l'ampleur du manque de réelle intelligence des outils. Ecrire le coeur du calcul à la main, à l'aide d'un simple outil disponible gratuitement sous GPL, s'est révélé finalement beaucoup plus efficace et plus facile que de forcer les compilateurs à créer du code qu'ils ne peuvent pas générer. De plus, cela a nécessité un important effort au niveau de la théorie derrière les calculs de collision, qui a permis la création d'une nouvelle formule.

            Le code actuel a atteint un point critique qui nécessite de nombreux efforts pour le dépasser. Dans l'état actuel du projet, il est alors rentable de se concentrer sur les outils de codage "assisté", dans lesquels les techniques de codage développées pour ce projet peuvent être réinvesties. Le projet "GNL" permettra de recoder entièrement le source du projet, de le porter vers d'autres architectures, tout en permettant d'atteindre et de se maintenir à la puissance de crête de la plateforme cible. Si cet outil interactif avait existé au début du projet, le programme serait fonctionnel plus rapidement et plus facilement. Beaucoup de "travail sur papier", d'efforts et de temps aurait été économisé. Toutefois, le "travail sur papier"effectué pour ce projet a permis de mettre au point et tester en grandeur réelle des techniques à la base de GNL (allocation des registres, évaluation des accès à la mémoire etc).

     

    1.6 : Une nouvelle formule :

            L'une des découvertes les plus inattendues de ce projet est l'équation booléenne au coeur du calcul des collisions. C'est aussi un point très important du mémoire car il découle d'une analyse plus aprofondie et sous un autre angle que la formule (classique aujourd'hui) donn�e au chapitre IV.7.

            La nouvelle formule essaie de correspondre aux exigences du Pentium : peu de registres, bande passante réduite, pairage des instructions compliqué... alors que la formule classique nécessite de nombreux termes temporaires dans le graphe de dépendences, favorisant les architectures RISC avec de très nombreux registres. En comparaison, la nouvelle formule peut être utilisée sur des calculateurs vectoriels (par exemple CRAY classiques avec 8 registres vectoriels).

            La nouvelle formule ne remplace pas l'ancienne, nous pouvons remarquer qu'elle la complémente et élargit le domaine d'application et d'utilisation du modèle FHP saturé. En l'absence d'analyse booléenne plus poussée, il est difficile et peut-être inefficace d'utiliser la formule de d'Humières si moins de 32 registres sont disponibles pour les données (c'est à dire que les pointeurs, compteurs de boucles etc. doivent �tre séparés ou très peu nombreux). Au contraire, si le rapport mémoire/calcul d'une machine particulière efface le problème des variables temporaires d'une manière ou d'une autre, la formule de d'Humières est plus efficace car le nombre total d'opérations booléennes est inférieur à la nouvelle formule.

            Il reste encore à prouver que la vielle formule est optimale, ce qui est une tache difficile en raison de la spécialisation de chaque cas : quelles opérations booléennes sont admises ? XOR, ANDN, NAND, ORN ? La formule peut changer complétement en ajoutant ou en supprimant un opérateur et la pratique montre que les compilateurs VHDL sont incapables de répondre à cette question de manière satisfaisante. L'analyse brute est inefficace, il faudrait donc trouver une nouvelle méthode pour "casser" ce type de formule lourde en instructions simples.

            Loin d'avoir résolu le problème, ce travail relance la question épineuse de l'efficacité des calculs. Il apporte un nouvel élément (une autre formule) ainsi qu'une nouvelle manière d'appréhender la question des collision saturées. Le long travail qui leur a permis de voir le jour n'aurait pas été nécessaire si les microprocesseurs courants avaient plus de bande passante vers la mémoire, plus de registres, et des outils plus efficaces pour "casser" le graphe de dépendances de données de manière satisfaisante.

            Cependant, la formule de d'Humières ressemble un peu à l'algorithme de Bresenham dans le sens où avant son existence, le problème était considéré comme "difficile" (peu de personnes avaient envie de transformer le modèle en code informatique, en raison de sa complexité qui intéressait peu les physiciens). Lorsque le code a été publié, il a été réutilisé abondament et le problème n'a pas ressurgi car le code était estimé "satisfaisant" (quand il était correct...). Aujourd'hui, comme l'algorithme de Bresenham, la formule "canonique" ne satisfait plus les contraintes complexes imposées par certaines classes de machines. Espérons que d'autres personnes continueront les travaux dans ce domaine après ce mémoire.

     

    1.7 : Intégration complète de l'algorithme de visualisation dans celui du calcul :

            Tout comme pour le strip mining, intégrer les calculs de visualisation dans la boucle de calcul permet de bénéficier des propriétés de localité spatio-temporelles des modèles FHP et similaires. Les microprocesseurs comme le Pentium, limités en bande passante vers la mémoire externe, bénéficient de ce type de programme car ils évitent ainsi de saturer inutilement le bus externe par des cache miss à répétition. L'intégration des différents algorithmes, lorsqu'ils portent sur une même donnée, permet de rééquilibrer les caractères memory bound et CPU bound et d'entrelacer la latence des mémoires avec les lourds calculs. Les coeurs OOO (comme le PII ou l'Alpha 21264) ont principalement été conçus dans cette optique, l'exécution spéculative de dizaines d'instructions permet de continuer le programme en attendant une donnée venant de la mémoire centrale.

            Lors de la conception d'un programme de calcul intensif, il est donc important de bien faire cohabiter la partie de calcul brut et les parties qui ne participent pas au calcul proprement dit : bien que le résultat ne change pas, il devient inutile s'il n'est pas présenté correctement à l'utilisateur. Le problème se complique avec l'introduction du strip mining, mais heureusement il se résoud naturellement dans notre cas précis, ce qui peut ne pas être vrai pour d'autres cas.

            Le travail n'a pas abordé la collecte de statistiques, se limitant à la mesure de la densité en particules, mais la remarque reste valable : il faut autant que possible réunir toutes les parties du code autour des m�mes données, afin de bénéficier des mémoires caches de données. Le code exécutable tient souvent largement dans la cache des instructions, la taille du code n'est pas actuellement un problème.

     

    1.8 : Mesurer son code :

            C'est un détail qui est tout le temps oublié, mais même sans le langage assembleur, même si peu de moyens sont disponibles, il est toujours important de connaitre à tout moment le temps d'exécution de chaque bloc d'instructions. Il faut toujours "profiler" son code et comparer ses performances entre chaque modifications.

     

            Tous les détails qui rendent ces éléments cohérents sont très importants, car comme noté précédemment, l'ajout d'un détail peut remettre en cause le programme entier. La plus grande prudence est donc conseillée. Un de mes mots d'ordres est "coder proprement paie toujours" (proprement dans le sens de l'efficacité) car la mentalité actuelle dans le milieu informatique est que "les ordinateurs sont bien assez rapides comme ça, pourquoi se compliquer la tâche ?". Cela conduit à des situations où des programmes tournent � 10% de la puissance nominale de l'ordinateur, sans que personne ne s'inquiète. Or selon le cas et avec du logiciel optimisé, on pourrait économiser 90% du prix d'achat sur le matériel, à performance égale. Cela semble inaproprié pour les calculs de ce mémoire, mais devient très important pour un serveur central ou institutionnel co�tant des millions de francs.

     

    2 : Conclusions des expériences

    2.1 : FHP-3 est memory bound et CPU bound sur x86 :

            Les mesures ont montré que l'on ne peut plus améliorer radicalement les performances de FHP-3, on se heurte toujours à une partie qui dépend trop des calculs ou de la mémoire. Le cas du x86 est dramatique car ni la mémoire ni les instructions ne sont conçues pour supporter et maintenir leur puissance théorique. Le cadre des applications bureautiques et ludiques, permettant l'expansion du marché de masse des particuliers, ne justifie pas une refonte ou un abandon de la vieille architecture du x86, même si Intel essaie de promouvoir l'IA64 pour les domaines où la recompilation est déjà une nécessité. L'IA64 réunit probablement le pire du VLIW et du SPARC en essayant de faire mieux que le x86 : nous ne sommes pas prêts de voir une architecture "sympatique" pour FHP dans le commerce avant longtemps.

    2.2 : Il est possible de descendre à 3 cycles par octets :

            Malgré une substancielle augmentation de la taille du kernel de calcul, par rapport au code multisite 32 bits étudié dans le passé, il est possible d'aller encore plus vite et d'être plus flexible grâce au code multispin entrelacé. Il est peu probable que l'on puisse descendre beaucoup plus bas, par exemple 1 cycle par cellule, car la mémoire freine le processeur de plus en plus si de très longs mots (128 bits ou plus) sont utilisés. De nombreuses améliorations peuvent toutefois êtres effectuées et ne manqueront pas de voir le jour. Les codes multisites sont donc bien morts.

    2.3 : A condition d'effectuer de nombreux efforts, il est possible d'utiliser des PC pour des calculs lourds :

            Comme ce mémoire le prouve, il est possible de compter sur le rapport performance/prix/disponibilité intéressant du PC si de nombreux points sont pris en compte et traités :

            Les PC sont souvent utilisés de nos jours pour des tâches réservées hier à des ordinateurs immenses et chers. La croissance des PC, si on regarde les premières générations, est disproportionnée (bande passante mémoire, parallélisme, ILP) et correspond à des besoins de rentabilité sur le marché de masse pour des individus, mais pas à des applications scientifiques.

    2.4 : Un PC équivaut presque à une CAM8 :

            Les mesures effectuées au MIT en janvier 2000 montrent que les PC de bureau de dernière génération sont presque aussi rapides qu'un bloc CAM8 (8 cartes à 25MHz). Les tout derniers microprocesseurs généralistes permettent de rivaliser avec des ASIC créés il y a plusieurs années. En terme de génération équivalente, si l'on considère la règle de Moore, l'optimisation poussée du code a permis probablement de gagner trois ou quatre années par rapport à un code non optimisé. Le code est 4 fois plus rapide que le plus rapide des codes testés, ce qui permet d'affirmer que l'effort a permis de gagner 3 ans. Ce gain permet d'utiliser une machine plus vieille à vitesse égale (donc moins ch�re) ou bien de gagner 3 ans sur la machine la plus récente. Cet aspect d'économie est valable si le code original était "bâclé", mais reste dans le cadre de la démonstration du fait qu'un codage consciencieux n'est pas une perte de temps à longue échéance.

    2.5 : La loi de Moore est trompeuse :

            La règle de Moore, découverte par le co-fondateur d'Intel dans les années 70, ne signifie que ce qu'elle dit : que le nombre de transistors est multiplié approximativement par quatre tous les trois ans.

            Il est donc abusif de considérer qu'un programme fonctionnera quatre fois plus vite dans quatre ans. Les grands constructeurs pr�parent de nouveaux coeurs de plus en plus étranges et de moins en moins adaptés aux algorithmes actuels. Les détails architecturaux deviennent de plus en plus complexes et il est de plus en plus difficile de tous les prendre en compte lors de la conception d'un programme. Cela veut aussi dire en filigrane que pour tourner quatre fois plus vite dans quatre ans, il faudra complétement reprendre la conception du programme à partir de zéro. Les efforts à fournir afin d'accélérer un programme deviennent de plus en plus grands, à la mesure des efforts fournis pour augmenter le nombre de transistors sur les puces. Les compilateurs ne seront plus assez sophistiqu�s et il faut d'autres moyens pour programmer. Enfin, comme de nombreux exemples le prouvent, l'histoire des ordinateurs ne suit pas une courbe monotone sur du papier à échelle semi-logarithmique : de nombreuses révolutions nous attendent et personne ne pourra plus utiliser ses sources en C écrits il y a dix ans. Si l'avenir de l'informatique est garanti pour les vingt prochaines années, les chemins empruntés sont inconnus et il faut se pr�parer maintenant à la concrétisation de projets incroyables aujourd'hui.

    2.6 : Le sujet des gaz sur réseaux booléens est loin d'être tari :

            Alors que les études actuelles portent sur des modèles à virgule flottante sur des approximations de Bolzmann, la présente étude du modèle FHP est loin d'épuiser toutes les ficelles des informaticiens et des physiciens. FHP reste un "terrain de jeux" incontournable pour comprendre de nombreux problèmes et phénomènes de mécanique des fluides, de mécanique statistique, d'algorithmique, il est donc important de continuer les études dans ce domaine, non pour faire de FHP un outil, mais comme modèle à part entière, pour être étudié et approfondi (le manque d'études dans ce domaine étant le plus souvent d� à un manque de connaissance du sujet, décourageant les étudiants). Un autre piège est la simplicité apparente du modèle, qui séduit les débutants mais qui les perd ensuite. Il est certain que d'autres approches sont nécessaires.

     

    3 : Sujets des recherches futures

            Le programme, même s'il fonctionne, nécessite de nombreuses améliorations plus ou moins complexes, décrites ici :

    3.1 : Mesurer la pression :

            Le problème "annexe" le plus important, celui de la mesure de la densité en particules (donc de la pression), a été résolu dans ce mémoire (popcount parallèle réutilisé dans la phase de détection, puis addition semi-parallèle). Pourtant, un aspect intéressant des mesures en soufflerie n'est pas la mesure dans le fluide, mais sur les parois. Il faut donc mettre en place un dispositif "comptant les bits" qui sont réfléchies par une paroi. Cela peut nécessiter une simple "adaptation" des algorithmes des listes de modification, ou un nouveau type d'algorithme, mais le sujet est sérieux : il permettra d'implémenter un jour des "intéractions fluide/solide", comme la mise en mouvement d'un objet dur par le fluide qui l'entoure (balle dans un courant d'air, vibration d'une surface en fonction de turbulences...). C'est un domaine où les LGA n'ont pas été appliqués, malgré les potentiels certains de ce modèle. L'objection de Norman Margolus à propose des parois mobiles concerne la non-réversibilité du mécanisme, ce qui ne nous intéresse pas dans le cas des écoulements dissipatifs.

    3.2 : Emission de particules :

            Le présent programme manque cruellement d'un "générateur de particules" associé à son contraire ("avaleur" ?). Le problème est caractéristique des veines de soufleries : il faut créer un vent uniforme, qui puisse imposer une vitesse contr�lable du fluide. Il faut donc "créer" et "supprimer" des particules à certains endroits, à une vitesse particulière, tout en conservant la pression totale (le nombre de particules dans la veine, voir la partie III).

            Il n'y a pas de problème conceptuel notable, mais il faut tout de même le programmer. En attendant, l'utilisateur est obligé d'utiliser un nombre fixe de particules qu'il doit programmer en assembleur : des efforts de programmation subtanciels et nombreux sont encore à fournir. De plus, il faudrait mettre au point un algorithme de mesure du "vent" afin de rétrocontr�ler ce mécanisme.

    3.3 : Multi-CPU :

            Le "stub" de bi-processing symétrique a été écrit mais n'est pas utilisé car le reste de l'algorithme n'est pas terminé. Quand ce sera le cas, il faudra adapter légèrement le code (principalement : copier/coller/renommer) puis enlever le code en commentaire (en faisant attention aux bugs qui ont déjà été trouvés).

            Le véritable problème est dans le cadre d'un beowulf car de nombreux autres problèmes devront être résolus. Les prochaines années verront probablement apparaitre des codes d'exemples. Le programme devient encore plus compliqu� lorsque l'espace d'adressage n'est plus partag�.

    3.4 : Extension du code et du modèle :

            Le code développé ici est un modèle simple mais suffisament représentatif des problèmes à résoudre dans des cas réels, même avec des modèles différents. Il peut donc être adapté à des modèles "thermiques" (plusieurs vitesses de particules), multiphases (plusieurs "couleurs" de particules), compressibles, avec des géométries différentes (D2Q9 ou autres) et avec plus ou moins de particules immobiles (pour résoudre le problème de l'invariance galliléenne). Un gros effort de codage devra être effectué pour chaque cas. Cependant, cet effort est d'abord de l'ordre informatique, il faut donc que le recodage du projet tienne compte des besoins d'adaptation du programme pour anticiper la résolution des problèmes futurs. Le code actuel, étude de cas pour un sujet particulier, devra encore beaucoup m�rir pour devenir une plateforme d'expérimentation encore plus générale.

    3.5 : Langage script :

            La définition et la programmation d'un langage script universel permettra l'automatisation des mesures et la description des objets à l'intérieur du domaine d'étude. Actuellement, la définition de la g�om�trie des objets est inclue dans le source en assembleur, ce qui impose un réassemblage à chaque changement de géométrie. Les opérations interactives (changement de taille du tunnel, pas à pas...) ne sont pas absolument précis et nécessite de programmer des mécanismes pour contr�ler plus finement tous les paramètres.

            Un format de fichiers et des mots-clés sont actuellement en stade de réflexion mais leur implémentation nécessite un effort trop important pour être effectué actuellement : il faut que d'autres problèmes plus importants soient résolus (tout d'abord l'exactitude des collisions).

    3.6 : Evolution de la plateforme :

            Les nouvelles instructions "SSE" introduites dans le Pentium III permettent d'envisager un doublement de la performance brute du programme (à fréquence d'horloge égale) avec peu de changements notables du code. Il faudrait tenir compte des tailles doublées des registres (128 bits au lieu de 64), de la configuration des MTRR et des instructions de gestion de la mémoire et des flux. Ces travaux sont déjà possibles mais seront encore plus faciles lorsque tout sera recodé avec GNL, et quand la plateforme (PIII) sera plus largement répandue (et moins chère). C'est donc une échéance de 1 à 2 ans.

     

    4 : Applications

    Avec des adaptations plus ou moins profodes, le programme FHP peut être utilisé dans de nombreux domaines :

    4.1 : Acoustique :

            Déjà utilisés dans ce domaine, les modèles de gaz sur réseaux (FHP, Bolzmann) ne sont pas encore très répandus malgré leur fort potentiel. Cela peut être résumé comme un problème d'"école", les chercheurs en acoustique étudiant les équations (directes) d'acoustique et non de mécanique statistique.

            Les LGA sont très bien adaptés pour visualiser les ondes sonores et permettent des géométries arbitrairement complexes : elles surpassent les méthodes spectrales pour les cas non triviaux. Par exemple, ils sont utilisés pour étudier les turbulences autour des voitures, et donc déterminer et améliorer leur niveau de bruit aérodynamique (leur silence).

            Les LGA peuvent permettre aussi d'effectuer des simulations d'instruments de musique. En l'absence d'interactions fluide/solide, les anche simples, doubles et lipales ne peuvent pas être simulées. Il reste cependant les vibrateurs de type "fl�te" (à biseau) qui peuvent être étudiés en attendant de meilleurs programmes. Ainsi, il sera possible d'étudier un instrument (pour l'instant en 2D) avec un PC suffisamment rapide, et de générer un son de fl�te véritablement réaliste, sans utiliser la moindre méthode de reproduction classique (analyse spectrale, analyser d'impédance du corps résonant, échantillonnage). Les applications en musique et en synthèse directe sont alléchantes. Le niveau de bruit des LGA bool�ens comme FHP est toutefois trop important pour ce type d'applications, les mod�les en virgule flottante sont donc de rigueur pour ce type de probl�mes.

    4.2 : Cryptographie :

            Les LGA de type FHP ont des propriétés macroscopiques très intrigantes : contrairement àla majorit� des Automates Cellulaires classiques, ils ont la capacité de "décorr�ler" un état initial et de le transformer en bruit "brownien" de manière fondamentalement non-linéaire. Le nombre de pas de temps dépend des propriétés du "signal" initial (configuration initiale des particules). Les gaz sur réseaux booléens sont donc très intéressants dans le domaine de la cryptographie, car ils sont potentiellement réversibles, ils sont peu compliqués à calculer, leur état initial est très difficile à retrouver en l'absence des paramètres du calcul et les possibilités d'utilisation sont très nombreuses. Ils peuvent être utilisés comme générateurs de nombres aléatoires ou comme "bruiteurs", avant ou après le calcul. Le brevet des cryptographie par automates cellulaires réversibles ne s'applique pas directement et le MIT travaille sur le sujet. L'efficacité pratique de cette technique reste à démontrer mais elle dépend principalement d'une utilisation judicieuse des LGA, donc l'efficacité potentielle se situe probablement entre DES et RSA. Même si ce n'est probablement pas une révolution pour la cryptographie, c'est un élément important parmi l'arsenal des techniques déjà disponible (courbes elliptiques, nombres premiers, transposition, substitution, permutation...) avec lequel il faudra dorénavant compter. Dans ce cadre, la vitesse de calcul est un élément absolument critique.

            Il faut toutefois rester tr�s prudent dans ce domaine car aucun exemple n'a encore �t� cryptanalys�. Malgr� leurs caract�ristiques non lin�aires, leurs propri�t�s sont �tudi�es depuis longtemps et ils disposent toujours d'une entropie caract�ristique qui permet une attaque par les �quations de Bolzmann.

    4.3 : Réalité Virtuelle / jeux vidéo :

            L'accélération de l'algorithme permet d'envisager la simulation des phénomènes turbulents en "temps réel" ou même plus vite, ce qui est toutefois très subjectif selon le cas. Pour les jeux vidéo, où l'exactitude des calculs et la réalité scientifique des résultats importent peu, les gaz sur réseaux offrent une opportunité incomparable pour les mondes simulés. Les techniques courament utilisées sont des simplifications peu rigoureuses et parfois irréalistes (vent dans l'herbe, nuages de "plasma"...). Avec la montée en puissance des consoles de jeu vidéo, l'utilisation de LGA n'est plus qu'une formalité actuellement et pour le futur. Non seulement des phénomènes réalistes peuvent être visualisés, mais en plus les éléments (acteurs, objets) du jeu peuvent intéragir avec le phénomène. Actuellement, aucune application n'est envisagée dans ce domaine. Espérons que ce n'est qu'une "frilosité passagère" : l'effet de mode peut favoriser une utilisation et un développement très actifs dans ce domaine. Il "suffit" juste de lancer correctement l'idée.

    4.4 : Education :

            La simulation interactive de phénomènes de mécanique des fluides peut être aussi d'intérêt éducatif. En classes de physique et chimie, la disponibilité d'un "fluide virtuel" non nocif et parfaitement contr�lable peut diminuer les risques de certaines expériences et permet donc aux élèves de manipuler eux-mêmes les produits. En classe de Technologie Industrielle, cela permet aussi de simuler des vérins hydrauliques ou des pompes avec un matériel moins encombrant, afin de tester des algorithmes de contr�le de montée en charge de pompe ou de régulation par exemple.

    4.5 : Industrie :

            L'industrie commence timidement à adopter les gaz sur réseaux dans quelques domaines, pour des applications pratiques plus ou moins attendues. Le calcul "industriel" pour les carrosseries et les tuyauteries permet à la société EXA de s'imposer progressivement. De nombreux domaines sont encore en attente d'un miracle que les LGA peuvent produire dans la chimie (réactions d'advection/diffusion), le pétrole (stockage et infiltration dans les sables), la climatisation (où placer la bouche d'aération dans une pièce sans déranger les usagers ?), les peintures (viscosité et écoulements), les risques industriels (souffles d'explosions et écarts entre bâtiments), l'urbanisme (advection des gaz d'échappement), la propagation des flammes et de nombreux problèmes de tous les jours qui ne sont pas encore résolus de manière définitive par les méthodes classiques.

    4.6 : Derniers mots sur les applications des LGA :

            Aujourd'hui, les LGA ont fait l'objet de recherches scientifiques poussées dans des domaines où ils apportent un réel avantage par rapport à la dynamique moléculaire, aux techniques spectrales et aux équations classiques : le facteur d�terminant est l'ind�pendance totale entre la complexit� du calcul et la complexit� des g�om�tries �tudi�es.

            Le premier domaine d'adoption concerne les fluides multiphases et la séparation des phases, la tension de surface, les fluides immiscibles, les interfaces solide/liquide/gaz. Ce domaine reste proche de la m�canique statistique. L'image suivante repr�sente une s�paration de phase calcul�e par Rothman et Keller :

            Un autre domaine qui b�n�ficie des avantages de LGA est l'infiltration et le mouillage en milieu poreux. Nous voyons sur l'image ci-contre l'infiltration de p�trole (hydrophobe, orange, opaque) rempla�ant de l'eau (bleue) dans un grain de sable de Fontainebleau, calcul�e en 3D par John Olson

            Les LGA se sont montrés inadaptés pour les calculs aéronautiques à cause de la faible vitesse permise (< Mach 0,3) et du faible nombre de Reynolds. La simulation des all�es de Von Karman est facile, comme nous avons pu le voir, mais l'explosion quadratique du temps de calcul rend les gaz sur r�seaux classiques inadapt�s pour des nombres de Reynolds sup�rieurs � 10000. L'exemple d'EXA montre que des ordinateurs massivement parall�les sont utilis�s avec des temps de calcul similaires par les autres techniques. Les seuls avantages sont la plus gande finesse, la r�solution dans le domaine temporel et la meilleure fiabilit� des r�sultat, le temps de calcul n'est plus un crit�re d�terminant.

     

    5 : Limites du projet

            Le modèle FHP3 a été plus difficile à implémenter que prévu, sa programmation nécessite des moyens sophistiquée et des connaissances solides qui sont très diffuses dans la bilbiographie classique. La technique prévue au départ pour l'équation booléenne n'a pas fonctionné (compilation VHDL puis GCC puis NASM) pour des raisons d'efficacité. Le travail a dû être effectué entièrement à la main, une nouvelle équation a été déduite à partir de zéro : cela a consommé la moitié du temps du projet qui s'est étalé sur deux ans. Le manque d'outils logiciels adaptés a aussi ralenti la progression.

            Dans ces conditions, l'ambition initiale de "clore le sujet" n'a pu être atteinte, au contraire : ce travail a levé une grande quantité de questions de toutes sortes. Quelques-une ont été résolues mais la plupart est hors du domaine d'étude initial, elles sont plus théoriques ou trop complexes.

            La limite du projet est surtout au niveau du temps d'étude car le sujet est inimaginablement vaste et peu de personnes travaillent actuellement dans ce domaine. L'autre limite, pratique, est très importante car le "budget" (matériel, financier) est quasiment inexistant (ce fut déjà une chance de disposer d'une plateforme biprocesseur). Enfin, les logiciels sont actuellement inadaptés à la tâche de programmation efficace en langage machine : beaucoup de temps a été investi dans le développement de techniques de programmation.

     

    6 : Et maintenant ?

            La première chose à faire est d'améliorer l'environnement de développement. Le projet GNL est l'aboutissement d'années de réflexion sur la pratique du codage en assembleur sur machines superscalaires. Les premiers fichiers sont écrits (l'interface et l'importation de fichiers C sont commencés) pour l'environnement Unix (le logiciel GNL est complétement portable). Il faut concevoir des API afin que de nombreux modules d'assistance au codage puissent communiquer avec l'utilisateur. Des modules d'entrée et de sortie doivent aussi être con�us pour chaque langage et chaque processeur supporté.

            Une fois qu'une version suffisamment complète de GNL sera prête, le programme de gaz sur réseaux de ce mémoire sera recodé, analysé, amélioré, porté et pourra accueillir les suggestions du début de ce chapitre. GNL ne se limite pas à ce projet de LGA, le but avoué est de remplacer une grande partie du codage textuel classique. Si on peut recoder entièrement le programme avec GNL et l'améliorer facilement, ce sera une sorte de première mise à l'épreuve du concept et permettra de l'appliquer à d'autres domaines sensibles : programmation de kernels de systèmes d'exploitations, de routines d'interruptions, de kernels de calculs, de moteurs d'IA ou de 3D pour les jeux vidéos, et même pourquoi pas pour le prototypage rapide d'algorithmes.

            Enfin, à mesure que les processeurs superscalaires exécutent de plus en plus d'instructions en parallèle pour chaque cycle, il devient de plus en plus difficile de programmer des compilateurs pouvant extraire l'ILP d'un programme écrit en C. Les moyennes actuelles sont de l'ordre de trois instructions par cycle dans des conditions "idéales", ce qui est à la fois insuffisant pour augmenter substanciellement la performance des processeurs et trop compliqué pour les compilateurs. GNL expose le parallélisme d'un programme à de nombreux niveaux et permet donc de mieux profiter des processeurs futurs. GNL sera ainsi capable d'aider à l'adaptation du programme vers le Pentium II (les règles de pairage sont différentes).

     

            Pour ce qui est des applications pratiques, le modèle FHP n'est pas aussi efficace pour des simulations à grands nombres de Reynolds. Je vais donc essayer d'appliquer mes connaissances et mes techniques dans le domaine des gaz sur réseaux non booléens comme le modèle Lattice Bolzmann ou BGK. Une voie de recherche à explorer est l'utilisation du modèle ILG (Integer Lattice Gas, sorte de compromis entre Bolzmann et FHP) avec un système de numération logarithmique (nombres entiers différent de Base-2, plus simples que les nombres en virgule flottante). La parallélisation de ce travail permettrait de simuler de larges systèmes efficacement, c'est l'objet du projet beo-kragen (beowulf de Kragen Sitaker).

     

     

    Ressources bibliographiques

     

            Si une thèse peut être consultée à Jussieu, sa référence est fournie.

     

    [1] Bernard Ourghanlian "Les microprocesseurs Alpha" InterEditions, 1995, ISBN 2 7296 0565 7
            Excellente introduction à ce processeur révolutionnaire, écrite en français par le directeur de développement de Digital. Ce n'est pas une documentation technique pure, car elle explique aussi le pourquoi du comment de chaque aspect et de chaque décision de la conception du modèle de programmation. Bon livre sur l'architecture RISC du futur.
    [2] Henri Lilen - René-Véran Honorat "Microprocesseurs PowerPC" ed. Dunod, 1995, ISBN 2 10 002464 7
            Ecrit en francais, ce livre présente le modèle de programmation de la famille PowerPC et s'attarde sur les membres commercialisés avant la sortie du livre. Plusieurs techniques architecturales sont expliquées comme l'exécution dans le désordre, mais la suite est plut�t une traduction des documents anglais. On comprend donc le PPC sans vraiment en savoir plus...
    [3] David A Patterson - John L Hennessy "Computer Organisation & Design: the hardware/software interface", Morgan Kaufmann, 1994, ISBN 1 55860 282 8
            C'est LE "Patterson & Hennessy", qui explique clairement les fondements de l'architecture des presque tous les ordinateurs. Il raconte leurs aléas et leurs avancées et permet de mieux comprendre l'importance de la relation entre le logiciel et le matériel qui le fait tourner, en fonction de leur rapport performance/prix.
    Il ne faut pas confondre ce livre avec leur précédent ouvrage "A quantitative approach" (le "QA") qui le précède.
    [4] Gilles Deghilage "Architectures et programmation parallèles", Addison-Wesley, 1992, ISBN 2087908 023 1
            "Approche pratique en environnement scientifique sur multiprocesseurs Silicon Graphics", ou comment tirer le meilleur de architectures MIMD, des compilateurs, des algorithmes... Les aspects théoriques et pratiques sont abordés et les résultats sont comparés aux autres plateformes existantes. Il introduit dans leur contexte les techniques de parallélisation de code comme le strip mining.
    [5] Hans-Peter Messmer "Pentium et compagnie", Addison-Wesley, 1994, ISBN 2 87908 074 6
            Bien qu'entaché de quelques erreurs et plein de détails inutiles, l'intérêt de ce gros livre est de présenter sous toutes ses coutures le monstre CISC de 3 millions de transistors, ainsi que ses relations avec ses voisins directs: contr�leur de cache, de mémoire, de bus PCI... Cette synthèse met le doigt sur énormément d'aspects, électroniques, architecturaux ou de programmation, qui sont nécessaires pour développer efficacement, mais il vaut mieux se référer aux constructeurs et aux sites x86.org et PCguide.com pour avoir une information plus fiable.
    [6] Alfred Aho - Ravi Sethi - Jeffrey Ullman et al. "Compilateurs : principes, techniques et outils", InterEditions, 1989, ISBN 2 7296 0295 X
            Le "dragon book", c'est la raison pour laquelle je n'utilise pas de compilateur. C'est aussi la raison pour laquelle j'en utilise un. Seulement, je sais maintenant quand je peux m'y fier. Accessoirement, permettrait de faire un compilateur optimiseur pour le PII en MMX si cela en valait la peine...
    [7] Michael Abrash "Le Zen de l'optimisation du code", Sybex, ISBN 2-7361-2128-7
            Devrait être lu par toute personne considérant coder "correctement", bien que l'aspect "assembleur" puisse repousser les habitués du "tout C". Quand on va à la chasse à la performance, "on ne fait pas d'omelette sans casser d'oeufs", et l'auteur nous apprend à faire enfin fonctionner le merveilleux compilateur qui est entre nos deux oreilles. En plus, ce livre est facile à lire.
    [8] Ronald J. Tocci "Circuits Numériques : théorie et applications", Dunod, 1992, ISBN 2-10-001576-1
            Présente entre autres les techniques de base de simplification manuelle d'équations booléennes. Malheureusement insuffisant avec plus de 5 ou 6 variables d'entrée et plus d'une variable en sortie. De plus, l'analyse se réduit aux sommes de produits alors qu'on dispose souvent du XOR.
    [9] Daniel H. Rothman et Stéphane Zaleski "Lattice-gas cellular automata", Collection Aléa Saclay, Cambridge University Press, 1997, ISBN 0-521-55201-X
            Sous-titré "Simple models of complex hydrodynamics", ce livre anglais de physique statistique est écrit par deux spécialistes et fournit des bases importantes sur la théorie des gaz sur réseaux. Après un exposé complet, les domaines de recherche des auteurs transparaissent dans l'étude des infiltrations des milieux poreux et de la transition de phase. Niveau doctorat.
    [10] Valérie Guimet "Analyse numérique et simulation de problèmes d'interaction fluide-structure en régime incompressible", thèse soutenue le 20 octobre 1998
            Cette thèse pour le doctorat de Mathématiques Appliquées de l'université Paris VI explique des méthodes classiques de simulation de couplage entre des objets déformables (en 1D et 2D) et des fluides turbulents (en 2D et 3D). Bien que le domaine du calcul intensif soit abordé (ressources informatiques de l'ONERA), aucune explication pratique n'est donnée.
    [11] Jean-Pierre Rivet "Hydrodynamique par la méthode des gaz sur réseaux", thèse #88NICE4215 en Mécanique fondamentale et appliquée
            Dirigée par Uriel Frisch, cette thèse communique une grande somme de connaissances théoriques (par l'explication des modèles) et pratiques (par l'explication des algorithmes) sur les gaz sur réseaux bi et tridimensionnels. Le RAP-1 est décrit mais surtout des simulations tridimensionnelles sur CRAY-2 sont effectuées et expliquées. Pas de code source pourtant mais un intérêt certain pour l'efficacité.
    [12] Pierre Audibert "Méthodes de grille pour le traitement des problèmes de mécanique des fluides", mémoire de maitrise de l'université Paris 8
            Cet exposé présente clairement 3 méthodes différentes avec explications et programmes sources commentés. Bien que le modèle FHP soit utilisé en dehors de ses limites, le mémoire montre clairement les avantages et inconvénients pratiques et théoriques de chaque approche (les équations différentielles classiques et la méthode des tourbillons sont aussi présentées). L'efficacité est implicitement limitée par la plateforme (compatible PC sous MS-DOS, programmé en Turbo C).
    [13] Yue Hong Qian "Gaz sur réseaux et théorie cinétique sur réseaux appliquée à l'équation de Navier-Stockes", thèse #90PA06 658 de mécanique et physique statistique
            Dirigée par D. d'Humières et P. Lallemand, cette thèse commence par l'étude spectrale d'un gaz sur réseau unidimensionnel pour extrapoler vers 2 dimensions (FHP, D2Q9 etc) puis 3 dimensions (FCHC et similaires). L'intérêt est principalement de consolider et d'explorer les travaux théoriques effectués 5 ans plus t�t.
    [14] Umberto d'Ortona "Hydrodynamique et Gaz sur réseau", thèse
            Explication claire, malgré quelques détails ambigus, des gaz sur réseau classiques dans les premiers chapitres. Les néophytes aprécieront de pouvoir comprendre certains détails et les solutions apportées. La thèse étudie entre autres les phénomènes de capillarité (interfaces entre une goutte d'eau et un autre fluide).
    [15] Valérie Pot "Etude Microscopique du transport et du changement de phase en milieu poreux par la méthode des gaz sur réseaux", thèse #94PA06 233
            Ces travaux font l'objet d'un chapitre entier dans le livre de Stéphane Zaleski. Beaucoup de formules et pas de code.
    [16] Stéphane Zaleski "Les transitions de phase calculées", Pour la science #183, janvier 1993
            Article de présentation (2 pages) annonçant les résultats encourageants de recherches sur la transition de phase en 3D, améliorant les techniques présentées par Jean-Pierre Rivet et pour des règles d'interaction non locales.
    [17] Bernard Derrida "Dynamique d'un gaz sur réseau", Pour la science #184, février 1993
            Cette "récréation informatique" présente un algorithme 2D pour simuler l'évaporation ou la condensation d'une goutte d'eau. Rien de commun avec FHP mais il simule une transition de phase (liquide/gaz) sans utiliser les intéractions non locales utilisées par Zaleski, ce qui fait de cet automate cellulaire une alternative intéressante.
    [18] Pierre Lallemand "Les gaz sur réseau : un nouveau médium pour le calcul des écoulements", Revue du Palais de la Découverte, avril 1987, vol. 15, numéro 147
            C'est cet article qui m'a fait découvrir le domaine des LGA. La théorie y est exposée ludiquement et le modèle FHPII est succintement expliqué, suggestivement mais sans aider pour la programmation pratique. En particulier les règles de collisions sont expliquées mais la mise en pratique n'est pas évidente (création de la table des collision).
    [19] U. Frisch, B. Hasslacher, Y. Pomeau "Lattice gas automata for the Navier-Stockes equation", Physical Review Letters, 7 avril 1986, vol.56, pp 1505-1508.
            C'est l'article de référence cité par tout papier ou document portant sur les gaz sur réseaux. Appelé dans cet article "HLG" pour "Hexagonal Lattice Gas", le modèle présenté retiendra les initiales des auteurs pour la postérité. Le passage du modèle HPP (carré) au voisinage hexagonal est expliqué, trois règles de collisions sont introduites (frontale, triangulaire et avec particule immobile) et il est prouvé que cela est suffisant pour correspondre aux équations de Navier-Stockes. Pas de code mais l'existence de calculateurs dédiés est évoquée (RAP-1 ?)
    [20] Gary Doolen (éditeur) "Lattice gas methods for partial differential equations", Santa Fe Institute, Studies in the sciences of complexity, Addison-Wesley 1990, ISBN 0-201-15679-2 ou 0-201-13232-X
            Probablement l'un des ouvrages les plus intéressants qui existe. Tous les acteurs du domaine de la première décade sont présents dans cette collection de papiers, traitant de tous les domaines, pratiques et théoriques. Par exemple on y trouve le modèle FHP4, sur 8 bits, qui restaure l'invariance galliléenne (en ralentissant le fluide). La variété des points de vue et des sujets abordés rend sa consultation impérative, mais pourtant il n'y a pas de code.
    [21] J. A. Somers & P. C. Rem "Obtaining numerical results from the 3D FCHC lattice gas" dans Lecture Notes in Physics, T. M. M. Verheggen (ed.), "Numerical methods for the simulation of multi-phase and complex flows" (1990) Springer-Verlag, ISBN 0-387-55278-2
            Les auteurs proposent une amélioration de la technique de J. P. Rivet pour réduire la taille de la table des collisions du modèle FCHC par une analyse poussée des 1152 isométries des collisions : la table contient seulement 106496 entrées mais le code Pascal est assez complexe. Performance de 2Mc/s sur un Transputer à 400 noeuds.
    [22] Jean-Christophe Culioli "Introduction � l'optimisation" (1994) Ed. Marketing/Ellipses, ISBN 2-7298-9428-4, ref 519.8 CUL
            Sous-titre : "Analyse num�rique de syst�mes complexes". Pr�sente les techniques de Newton-Raphson, de dichotomie, de programmation lin�aire et dynamique.

     

    Autres papiers :

    [23] Christopher Adler, Bruce M. Boghosian, Eirik G. Flekkoy, Norman Margolus, Daniel H. Rothman : "Simulating Three-Dimensional Hydrodynamics on a Cellular-Automata Machine"
                à paraître dans Journal of Statistical Physics (1995)
                r�f�rence preprint : chaos-dyn/9508001 ou comp-gas/9508001
    [24] Quian et.al. : Lattice BGK Models for Navier-Stokes Equation,
                Europhys.Lett., 17 (6), pp. 479-484 (1992)
    [25] Norman Margolus : "Integer Lattice Gases",
                Phys. Rev. E 55 (April, 1997) 4137-4147.
    [26] Ales Alajbegovic, Chris Teixeira, David Hill, Andrew Anagnost, Sudheer Nayani and Ram Iyer : "The study of benchmark laminar flows using DIGITAL PHYSICS"
                1997 ASME Fluids Engineering Division Summer Meeting, FEDSM'97,
                June 22-26, 1997, FEDSM97-3648
    [27] Jean-Pierre Boon, Uriel Frisch et Dominique d'Humi�res : "L'hydrodynamiqe mod�lis�e sur r�seau"
                dans La Recherche n� 253, avril 1993, volume 54, pages 390-399.
    [28] Dominique d'Humi�res, Pierre Lallemand : "Numerical simulations of hydrodynamics with Lattice Gas Automata in two dimensions"
                dans Complex Systems 1 (1987) 599-632
    [29] Dominique d'Humi�res, Pierre Lallemand, Geoffrey Searby : "Numerical experiments on Lattice Gases : mixtures and galilean invariance"
                dans Complex Systems 1 (1987) 633-647
    [30] Norman Margolus (+?) : "An embedded DRAM architecture for large-scale spatial-lattice computations" (1999)
                � para�tre (?)
    [31] Kristian Lindgren, Cristopher Moore et Mats G. Nordahl "Predicting Lattice Gases is P-complete"
                Santa Fe Institute Working Paper 97-04-034.
    [32] D. d' Humières and P. Lallemand : "Numerical simulations of hydrodynamics with lattice gas automata in two dimensions."
                dans Complex Systems, 1:599, 1987.
    [33] "GA-586ATE users manual, 1st edition"
                manuel de carte m�re pour PC, 1995.
    [34] Intel : "Pentium II Processor Developper's Manual"
                r�f�rence 243502-001, octobre 1997
    [35] Bruce M. Boghosian, Jeffrey Yepez, Francis J. Alexander, Norman H. Margolus : "Integer Lattice Gases"
                comp-gas 9602001 (15 fevrier 1996)
                mise � jour le 22 novembre 1998
    [36] "Benchmark for the simulation of the incompressible flow around a cylinder", 1996
                http://gaia.iwr.uni-heidelberg.de/~ture/papers.html
                ou in Flow Simulation with High-Performance Computers II,
                Notes on Numerical Fluid Mechanics, Vol 52, Vieweg 1996
    [37] J. Hardy, Y. Pomeau & O. de Pazzis : "Time evolution of two-dimensional model system. I. Invariant states and time correlation functions", 1973
                J. Math. Phys. 14, pp. 1746-1759.
    [38] Fung Funh Lee : "A Scalable Computer Architecture for Lattice Gas Simulations", 1993
                Technical Reports : CSL-TR-93-576
                d�crit "ALGE", un "superordinateur SIMD"
                M�moire de Doctorat de Philosphie, Universit� de Stanford, d�partements EE/CS
    [39] Intel : "Intel Architecture Software Developer�s Manual Volume 2: Instruction Set Reference", 1999
                24319102.pdf
    [40] Kohring, G.A. "Parallelization of short- and long-range cellular automata on scalar, vector, SIMD and MIMD machines" 1991
                Inter. Jour. Modern Phys. 2, 755-772.
    [41] Brosa, U. and Stauffer, D. "Vectorized multisite coding for hydrodynamic cellular automata" 1989
                Jour. Stat. Phys. 57, 399-403.

     

     

    Liens

     

                    Aujourd'hui une grande partie de l'information scientifique circule sur le Web, pour des raisons de co�ts et de facilité d'accès. Une bibliographie est donc incomplète et il faut mentionner les très nombreuses ressources en ligne que l'on peut trouver plus ou moins par hasard, et qui ont été accumulées dans les "bookmarks" du navigateur.

                    Pour des raisons évidentes, les URL collectionnées ici ne sont ni exhaustives ni garanties pour leur fraîcheur, puisque le travail présenté dans le mémoire a commencé vers 1995, au début de l'émergence d'Internet comme média pour le grand public. Internet était cependant déjà utilisé et très utile pour la communauté des chercheurs sur les LGA et on peut remarquer que les sites comme les pratiques ont peu changé. Les URL ont été vérifiées en mai 2000 et on peut penser que la plus grande partie sera valable encore pendant plusieurs années.

     

     

    Programmation PC et architecture :

     

    Usenet :
    news:comp.lang.asm.x86 (ou "clax")
    C'est là que les "hackeurs", les "demo makers" et autres "code gurus" apprennent à écrire leurs premières lignes de code en assembleur, configurer les registres de la carte vidéo, lire et contr�ler les périphériques. C'est ce newsgroup qui a engendré le travail coopératif sur NASM. Le "rapport signal/bruit" et le niveau peu avancé fait qu'on se tourne ensuite rapidement vers d'autres ressources plus pointues comme news:comp.arch.

    [email protected] :
    la "pmode-l", mailing list dédiée à la programmation avancée en mode protégé. On y apprend à passer en mode protégé "à la main" ou à profiter des trous de sécurité d'un certain système propriétaire grand public. Plus sérieusement, c'est un point de rencontre de tous les développeurs de kernel.

    http://www.cryogen.com/Nasm/
    Le site officiel de NASM, l'assembleur fait par et pour les gens qui programment les x86 en assembleur.

    Contributeurs de NASM et autres gurus de la programmation en assembleur (ne sont ici que les meilleurs) :

  • http://www.geocities.com/SiliconValley/Peaks/8600/device.html,
  • http://www.erols.com/johnfine/ : John S. Fine" ([email protected])
  • Alex Verstak ([email protected])
  • http://bphantom.hypermart.net/ : "Black Phantom" ([email protected])
  • http://www.azillionmonkeys.com/qed/asm.html : Paul Hsieh ([email protected])
  • http://www.azillionmonkeys.com/qed/cpujihad.shtml : la jihad des CPU de 7ème génération
  • http://www.azillionmonkeys.com/qed/optimize.html : discussion sur la supériorité du codage en assembleur
  • http://www.azillionmonkeys.com/qed/p5opt.html : astuces de codage pour le Pentium par Paul Hsieh
  • Terje Mathisen ([email protected]) (voir sur comp.arch)

    http://www.x86.org/,
    http://www.sandpile.org/ :
    ressources indépendantes sur les architectures x86 (à consulter absolument avant de programmer !)

    http://www.ddj.com/ftp/ :
    Dr. Dobb's Source Code archive : plein de morceaux croustillants !

    http://www.simtel.net/simtel.net/msdos/index-msdos.html et http://oak.oakland.edu/simtel.net/ :
    Simtel.net FTP shareware archive (certains avec source commentés)

    http://www.agner.org/assem :
    Les précieux conseils d'Agner Fog

    http://www.cs.virginia.edu/stream/ :
    John McCalpin ([email protected]) développe depuis 1991 le benchmark STREAM, permettant de comparer des architectures de manière totalement objective : en mesurant la bande passante de la machine, disponible à partir de sources en C non optimisés. On dispose ainsi non pas de la puissance de "crête" mais de la puissance "brute" du système, celle qu'un utilisateur moyen accède dans la pratique.

    http://www.senet.com.au/~cpeacock :
    page de Craig Peacock sur la programmation des interfaces et périphériques (PDF et HTML pour contr�ler le port parallèle, le clavier, la souris, le port USB, les interruptions...)

    http://www.cs.wisc.edu/~glew/ :
    Andy Glew ([email protected]), impliqué dans l'acceptation du MMX par Intel et dans le coeur du P6, est une des figures de comp.arch. Ses opinions sur la programmation et les architectures des ordinateurs le placent en opposition de la culture "Patterson & Hennessy". Oui, il y a quelqu'un de compétent travaillant pour Intel... Si au moins il était écouté !

    http://research.microsoft.com/~gbell/Computer_Structures__Readings_and_Examples/contents.html :
    Gordon Bell (qui a créé le prix du même nom) a mis en ligne un de ses livres, introuvable actuellement, qui est une sorte de pierre de Rosette pour la paléoinformatique comparée. L'histoire des ordinateurs et l'étude de nombreux cas devrait être un module obligatoire dans une formation d'informaticien !

    http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html :
    Ralph Brown a créé et entretenu LA référence sur l'architecture logicielle des PC, en réunissant et en documentant des milliers d'appels systèmes de MSDOS et d'autres logiciels similaires (Windows, TSR, Virus, utilitaires, DOS-extenders...). Indispensable.

    Intel:
    http://developer.intel.com/drg/pentiumii/appnotes/index.htm : Notes d'applications pour le PentiumII.
    http://developer.intel.com/design/pentiumII/manuals/243502.htm : Manuel du développeur pour le PentiumII
    http://developer.intel.com/design/mmx/manuals/ : Manuels pour développer avec les instructions MMX

    VESA :
    http://www.monstersoft.com/tutorial1/VESA_info.html
    http://mirriwinni.cse.rmit.edu.au/~steve/vbe/vbe20.htm :
    "VESA BIOS EXTENSION(VBE) Core Functions with DJGPP Code" ou comment accéder aux modes vidéo haute résolution en assembleur...

    http://www.gdsoft.com/swag/downloads.html :
    "SWAG" pour "SourceWare Archive Group", plein d'algorithmes et d'utilitaires pour Turbo Pascal/PC. Un des derniers vestiges de la culture "shareware" et "BBS". Au lieu de réinventer la roue, il suffit de la copier :-)

    http://www.phoenix.gb.net/x86/ :
    Page de Win32NASM, pour programmer en assembleur sous Windows, mais en mieux !

     

     

    Automates cellulaires et Gaz sur Réseau :

     

    Usenet :
    news:comp.theory.cell-automata et news:comp.theory.dynamic-sys

    http://www.cs.runet.edu/~dana/ca/cellular.html :
    Page dédiée aux automates cellulaires et à Cellang

    Page de Bruce Boghossian, travaillant pour Thinking Machines Corp (avant sa fermeture) et responsable de la CA-list
    http://physics.bu.edu/~bruceb/
    http://physics.bu.edu/~bruceb/MolSim/ : "Mesoscale Modeling of Amphiphilic Fluid Dynamics" (transition de phase en 3D)

    Homepage d'Oleh Baran, travaillant sur les LGA :
    http://www.physics.mcgill.ca/WWW/oleh/Welcome.html

    pre-print archive :
    Avant d'être envoyés à des publications périodiques sur papier, les chercheurs soumettent leurs papiers à ces sites permettant d'effectuer des recherches documentaires sur des sujets pointus. Les serveurs sont souvent chargés car les documents comme les pages sont générés à la volée à partir d'une base de donnée et transformés en une grande variété de formats (PS, PDF, DOC etc) avant d'être transférés.
    http://www.arc.umn.edu/publications/preprints/, http://xyz.lanl.gov, http://xxx.lanl.gov/archive/cond-mat
    miroir à Jussieu :
    http://xxx.lpthe.jussieu.fr, http://fr.arXiv.org/, http://fr.arXiv.org/find/cond-mat/

    http://www.ph.ed.ac.uk/~jmb/thesis/tot.html :
    thèse de James M. Buick, calculant FHP-3 sur une CM200 à Edinburgh.

    http://poseidon.ulb.ac.be/lga.html :
    "CNLPCS: Unité Automates de Gaz sur Réseau". L'Université Libre de Bruxelles a un département actif dans le domaine des gaz sur réseaux, les systèmes dynamiques, non linéaires et adaptatifs.

    Site web de la CAM8 :
    http://www-im.lcs.mit.edu/
    http://www.im.lcs.mit.edu/broch/ (quelques exemples hauts en couleurs)

    http://zanzibar.mit.edu/ (serveur sporadiquement éteint)
    dédié aux applications géophysiques des LGA (infiltration dans les roches etc)

    http://www.wizard.com/~hwstock/saltfing.htm
    Exposé des travaux de Haarlan Stockman. C'est probablement le seul scientifique qui soit aussi impliqué dans la vitesse de son code, car c'est aussi un codeur système engagé (il a écrit pour la première fois un code de calcul de l'ensemble de Mandelbrot en virgule fixe pour 386 en 1986, paru au Doctor Dobb's Journal)

    http://www.fuji-ric.co.jp/complex/complex/LGA/result/flatplate.html : (en japonais)
    "Behind Flat Plate Flow", travaux des laboratoires Fuji au Japon : même les Japonais utilisent les LGA !

    http://www.tele.unit.no/akustikk/person/kristiansen/sudosparrow.html
    "The Sudo/Sparrow lattice gas model" : application des LGA à l'acoustique.

    http://www.obs-nice.fr/cassini/HTML_FR/rivet.html
    "NON-LINEAR DYNAMICS AND TURBULENCE APPLIED TO FLUIDS IN ASTRO- AND GEO-PHYSICS"
    L'observatoire de Nice a été parmi les premiers laboratoires, avec l'Ecole de Physique-Chimie de Paris, à travailler sur les modèles "FHP" et "FCHC" vers 1980. Ils ont activement participé à l'élaboration et à la validation de la théorie FHP (voir thèse 1982 à Jussieu).

    http://www.tu-bs.de/institute/WiR/weimar/ZAscript/ :
    "Simulation with Cellular Automata" par J�rg Weimar, une étude générale des possibilités et des recherches sur les automates cellulaires.

    http://www.exa.com :
    Spinoff du MIT, exploite une version contestée de Lattice Bolzman en 3D pour des applications industrielles. En pratique les résultats sont à la hauteurs des milliers d'heures-CPU qui sont souvent nécessaires à une simulation à grand nombre de Reynolds...

    http://amber.aae.uiuc.edu/~m-selig/ads/coord_database.html
    "UIUC Airfoil Coordinates Database" : base de donnée de profils vectoriels d'ailes d'avions. J'y ai contribué avec un repackaging des données avec visualisation sous X et MSDOS.

    Divers :

    OSZAR »