Sophie

Sophie

distrib > * > 2010.0 > * > by-pkgid > a412ceb851151854794ced2a242192bb > files > 2726

howto-html-fr-20080722-1mdv2010.0.noarch.rpm

<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>1.&nbsp;Introduction</title><link href="style.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.68.1" name="generator"><link rel="start" href="index.html" title="Le traitement en parall&egrave;le sous Linux"><link rel="up" href="index.html" title="Le traitement en parall&egrave;le sous Linux"><link rel="prev" href="index.html" title="Le traitement en parall&egrave;le sous Linux"><link rel="next" href="ar01s02.html" title="2.&nbsp;Linux sur SMP"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">1.&nbsp;Introduction</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="index.html">Pr&eacute;c&eacute;dent</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="ar01s02.html">Suivant</a></td></tr></table><hr></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N10073"></a>1.&nbsp;Introduction</h2></div></div></div><p>

L'<span class="emphasis"><em>ex&eacute;cution en parall&egrave;le</em></span> 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Parallel Processing</em></span></span>&nbsp;&raquo;) se 
rapporte &agrave; l'id&eacute;e d'acc&eacute;l&eacute;rer l'ex&eacute;cution d'un programme en le divisant 
en plusieurs fragments pouvant &ecirc;tre ex&eacute;cut&eacute;s simultan&eacute;ment, chacun sur 
son propre processeur. Un programme ex&eacute;cut&eacute; sur <span class="emphasis"><em>N</em></span> 
processeurs pourrait alors fonctionner <span class="emphasis"><em>N</em></span> fois plus 
vite qu'il ne le ferait en utilisant un seul processeur.

</p><p>

Traditionnellement, les processeurs multiples sont fournis avec un 
&laquo;&nbsp;<span class="quote">ordinateur en parall&egrave;le</span>&nbsp;&raquo; sp&eacute;cialement con&ccedil;u. De ce fait, 
Linux g&egrave;re d&eacute;sormais les syst&egrave;mes <span class="emphasis"><em>SMP</em></span> (souvent 
vendus en tant que &laquo;&nbsp;<span class="quote">serveurs</span>&nbsp;&raquo;) dans lesquels plusieurs 
processeurs partagent le m&ecirc;me bus et la m&ecirc;me m&eacute;moire au sein d'un m&ecirc;me 
ordinateur. Il est &eacute;galement possible &agrave; un groupe d'ordinateurs (par 
exemple un groupe de PC fonctionnant chacun avec Linux) d'&ecirc;tre 
interconnect&eacute;s par un r&eacute;seau pour former un ensemble de traitement en 
parall&egrave;le (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">cluster</em></span></span>&nbsp;&raquo;). La 
troisi&egrave;me alternative pour l'ex&eacute;cution parall&egrave;le sous Linux est 
l'utilisation du jeu d'instructions multim&eacute;dias &eacute;tendu (MultiMedia 
Extend&nbsp;: MMX) pour agir en parall&egrave;le sur des vecteurs de donn&eacute;es 
enti&egrave;res. Il est enfin possible d'utiliser un syst&egrave;me Linux comme 
&laquo;&nbsp;<span class="quote">h&ocirc;te</span>&nbsp;&raquo; h&eacute;bergeant un moteur de calcul en parall&egrave;le 
<span class="emphasis"><em>d&eacute;di&eacute;</em></span>. Toutes ces approches sont trait&eacute;es en d&eacute;tails 
dans ce document.

</p><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N1009A"></a>1.1.&nbsp;Le traitement en parall&egrave;le correspond-il &agrave; mes besoins&nbsp;?</h3></div></div></div><p>
Bien que l'emploi de multiples processeurs puisse acc&eacute;l&eacute;rer nombre
d'op&eacute;rations, la plupart des applications ne peuvent encore tirer
profit du traitement en parall&egrave;le. A la base, le traitement en
parall&egrave;le est appropri&eacute; si&nbsp;:
</p><p>

<div class="itemizedlist"><ul type="disc"><li><p>
Votre application est suffisamment parall&eacute;lis&eacute;e pour faire bon
usage de multiples processeurs. C'est, en partie, une question
d'identification des diff&eacute;rentes portions du programme pouvant
&ecirc;tre ex&eacute;cut&eacute;es ind&eacute;pendamment et simultan&eacute;ment sur des processeurs
s&eacute;par&eacute;s, mais vous d&eacute;couvrirez aussi que certaines choses qui
<span class="emphasis"><em>peuvent</em></span> &ecirc;tre ex&eacute;cut&eacute;es en parall&egrave;le
ralentissent le traitement si elles sont ex&eacute;cut&eacute;es en parall&egrave;le
sur un syst&egrave;me particulier. Par exemple, un programme qui
s'ex&eacute;cute en quatre secondes sur une machine unique pourrait
&ecirc;tre capable de n'occuper qu'une seconde du temps de chacune
de quatre machines, mais n'apportera pourtant aucun gain de
temps s'il faut trois secondes ou plus &agrave; ces machines pour
coordonner leurs actions.

</p></li><li><p>

Soit l'application qui vous int&eacute;resse en particulier a &eacute;t&eacute;
<span class="emphasis"><em>parall&eacute;lis&eacute;e</em></span>, c'est-&agrave;-dire r&eacute;&eacute;crite
pour tirer profit du traitement en parall&egrave;le, soit vous comptez
produire au moins un peu de code original qui le fasse.

</p></li><li><p>

Vous &ecirc;tes int&eacute;ress&eacute; par la recherche de nouvelles solutions impliquant 
un traitement en parall&egrave;le, ou au moins souhaitez vous familiariser 
avec. Le traitement en parall&egrave;le sous Linux n'est pas forc&eacute;ment 
difficile, mais ce n'est pas une notion famili&egrave;re &agrave; beaucoup 
d'utilisateurs, et il n'existe pas de livre intitul&eacute; &laquo;&nbsp;<span class="quote">Le 
<span class="foreignphrase"><em class="foreignphrase">Parallel Processing</em></span> pour les 
nuls</span>&nbsp;&raquo;, en tout cas pas encore. Ce guide est un bon point de 
d&eacute;part, mais il ne contient pas l'int&eacute;gralit&eacute; de ce que vous devez 
conna&icirc;tre.

</p></li></ul></div>

</p><p>

La bonne nouvelle, c'est que si tout ce qui vient d'&ecirc;tre dit est vrai, 
vous d&eacute;couvrirez cependant que le traitement en parall&egrave;le sous Linux 
peut apporter les performances d'un supercalculateur &agrave; des programmes 
effectuant des op&eacute;rations complexes ou travaillant sur de tr&egrave;s grandes 
quantit&eacute;s de donn&eacute;es. Mais en plus, cela peut &ecirc;tre fait en utilisant du 
mat&eacute;riel peu on&eacute;reux et que vous poss&eacute;dez s&ucirc;rement d&eacute;j&agrave;. Avec &ccedil;&agrave;, il 
reste ais&eacute; d'utiliser un syst&egrave;me de traitement en parall&egrave;le sous Linux &agrave; 
d'autres choses lorsqu'il n'est pas en train d'accomplir un traitement 
en parall&egrave;le.

</p><p>

Si le traitement en parall&egrave;le ne correspond <span class="emphasis"><em>pas</em></span> &agrave; 
vos besoins, mais que vous souhaitez tout de m&ecirc;me am&eacute;liorer sensiblement 
les performances de votre machine, il reste des choses que vous pouvez 
faire. Par exemple, vous pouvez am&eacute;liorer les performances d'un 
programme s&eacute;quentiel en rempla&ccedil;ant votre processeur par un plus rapide, 
en ajoutant de la m&eacute;moire, en rempla&ccedil;ant un disque IDE par un 
&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">fast wide SCSI</em></span></span>&nbsp;&raquo;, et c&aelig;tera. 
Si c'est ce qui vous int&eacute;resse, sautez directement &agrave; la section 6.2, 
sinon poursuivez votre lecture.

</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N100C3"></a>1.2.&nbsp;Terminologie</h3></div></div></div><p>

Bien que le traitement en parall&egrave;le ait &eacute;t&eacute; utilis&eacute; pendant de 
nombreuses ann&eacute;es par de nombreux syst&egrave;mes, il reste &eacute;tranger &agrave; la 
plupart des utilisateurs. Aussi, avant de traiter des diff&eacute;rentes 
alternatives, il est important de se familiariser avec une poign&eacute;e de 
termes usuels&nbsp;:

</p><div class="variablelist"><dl><dt><span class="term">SIMD&nbsp;:</span></dt><dd><p>

SIMD (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Single Instruction stream, Multiple Data stream</em></span></span>&nbsp;&raquo;, ou
&laquo;&nbsp;<span class="quote">Un seul flot d'instruction, plusieurs flots de donn&eacute;es</span>&nbsp;&raquo;),
fait r&eacute;f&eacute;rence &agrave; un mod&egrave;le d'ex&eacute;cution en parall&egrave;le dans
lequel tous les processeurs traitent la m&ecirc;me op&eacute;ration &agrave;
la fois, mais o&ugrave; chaque processeur est autoris&eacute; &agrave; agir sur
sa propre donn&eacute;e. Ce mod&egrave;le convient naturellement au concept
o&ugrave; l'on applique le m&ecirc;me traitement sur chaque &eacute;l&eacute;ment d'un
tableau, et est ainsi souvent associ&eacute; &agrave; la manipulation de
vecteurs ou de tableaux. Toutes les op&eacute;rations &eacute;tant
implicitement synchronis&eacute;es, les interactions entre processeurs
SIMD tendent &agrave; &ecirc;tre facilement et efficacement mises en &#339;uvre.

</p></dd><dt><span class="term">MIMD&nbsp;:</span></dt><dd><p>

MIMD (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Multiple Instruction stream, Multiple Data stream</em></span></span>&nbsp;&raquo;,
ou &laquo;&nbsp;<span class="quote">Plusieurs flots d'instructions, plusieurs flots de donn&eacute;es</span>&nbsp;&raquo;),
se rapporte au mod&egrave;le d'ex&eacute;cution en parall&egrave;le dans lequel chaque
processeur agit essentiellement seul. C'est le mod&egrave;le qui convient
le mieux &agrave; la d&eacute;composition d'un programme pour une ex&eacute;cution en
parall&egrave;le sur une base fonctionnelle. Par exemple, une processeur
peut mettre &agrave; jour une base de donn&eacute;es pendant qu'un autre produit
l'affichage graphique de la nouvelle entr&eacute;e. C'est un mod&egrave;le plus
flexible que l'ex&eacute;cution en SIMD, mais qui s'accomplit au risque
d'un cauchemar pour le d&eacute;bogueur, les &laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">race conditions</em></span></span>&nbsp;&raquo;
ou &laquo;&nbsp;<span class="quote">acc&egrave;s concurrents</span>&nbsp;&raquo;, dans lesquels un programme peut planter
de fa&ccedil;on intermittente &agrave; cause des diff&eacute;rences de minutage entre
les op&eacute;rations des diff&eacute;rents processeurs lorsque celles d'un de ces
processeurs sont r&eacute;organis&eacute;es en fonction de celles d'un autre.

</p></dd><dt><span class="term">SPMD&nbsp;:</span></dt><dd><p>

SPMD (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Single Program, Multiple Data</em></span></span>&nbsp;&raquo;),
ou &laquo;&nbsp;<span class="quote">Un seul programme, plusieurs donn&eacute;es</span>&nbsp;&raquo;, est une version
restreinte du MIMD dans laquelle tous les processeurs
ex&eacute;cutent le m&ecirc;me programme. Contrairement au SIMD, chaque
processeur peut suivre un chemin diff&eacute;rent dans le programme.

</p></dd><dt><span class="term">Bande passante&nbsp;:</span></dt><dd><p>

La bande passante 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">bandwidth</em></span></span>&nbsp;&raquo;) d'un syst&egrave;me 
de communication correspond &agrave; la quantit&eacute; maximum de donn&eacute;es que l'on 
peut transmettre en une unit&eacute; de temps&hellip; une fois que la 
transmission de donn&eacute;es a commenc&eacute;. La bande passante des connexions 
s&eacute;rie est souvent mesur&eacute;e en <span class="emphasis"><em>bauds</em></span> ou en 
<span class="emphasis"><em>bits par seconde (b/s)</em></span>, ce qui correspond en 
g&eacute;n&eacute;ral &agrave; huit fois ou dix fois le nombre d'<span class="emphasis"><em>octets par 
secondes (O/s ou B/s</em></span>, B = 
&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Byte</em></span></span>&nbsp;&raquo; = 
&laquo;&nbsp;<span class="quote">Octet</span>&nbsp;&raquo;). Par exemple, un modem &agrave; 1200 bauds (N.D.T.&nbsp;: 
comme celui du Minitel) peut transf&eacute;rer environ 120 octets &agrave; la seconde 
(B/s), tandis qu'une connexion r&eacute;seau ATM &agrave; 155 Mb/s est environ 
130&nbsp;000 fois plus rapide, en transf&eacute;rant environ 17&nbsp;Mo/s. Une bande 
passante &eacute;lev&eacute;e permet un transfert efficace de larges blocs de donn&eacute;es 
entre processeurs.

</p></dd><dt><span class="term">Latence&nbsp;:</span></dt><dd><p>

La latence d'un syst&egrave;me de communication repr&eacute;sente le temps minimum 
n&eacute;cessaire pour la transmission d'un objet, en incluant toutes les 
donn&eacute;es &laquo;&nbsp;<span class="quote">forfaitaires</span>&nbsp;&raquo; logicielles pour l'&eacute;mission et la 
r&eacute;ception (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">overhead</em></span></span>&nbsp;&raquo;). Le 
temps de latence est tr&egrave;s important dans les traitements en parall&egrave;le 
car il d&eacute;termine la <span class="emphasis"><em>granularit&eacute;</em></span>, la 
dur&eacute;e minimum d'ex&eacute;cution d'un segment de code pour gagner en vitesse 
d'ex&eacute;cution gr&acirc;ce au traitement en parall&egrave;le. Concr&egrave;tement, si un 
segment de code s'ex&eacute;cute en moins de temps qu'il n'en faut pour 
transmettre son r&eacute;sultat (ce d&eacute;lai-ci formant la latence), ex&eacute;cuter ce 
segment en s&eacute;rie plut&ocirc;t qu'en parall&egrave;le sera plus rapide puisqu'il n'y 
aura pas de d&eacute;lai de transmission.

</p></dd><dt><span class="term">Envoi de messages (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Message passing</em></span></span>&nbsp;&raquo;)&nbsp;:</span></dt><dd><p>

Les envois de message sont un mod&egrave;le d'interaction entre les diff&eacute;rents 
processeurs d'un syst&egrave;me parall&egrave;le. En g&eacute;n&eacute;ral, un message est construit 
logiciellement sur un processeur et envoy&eacute; via une interconnexion r&eacute;seau 
&agrave; un autre processeur. Bien que le surco&ucirc;t en temps 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">overhead</em></span></span>&nbsp;&raquo;) engendr&eacute; par la 
gestion de chaque message (ce d&eacute;lai formant la latence) soit &eacute;lev&eacute;, 
typiquement, il n'y a que peu de restrictions quant &agrave; la quantit&eacute; 
d'informations que ce message peut contenir. Ainsi, l'envoi de messages 
peut assurer une bande passante &eacute;lev&eacute;e en apportant une m&eacute;thode efficace 
pour transmettre de grandes quantit&eacute;s d'informations d'un processeur &agrave; 
un autre. En revanche, afin de r&eacute;duire les besoins en co&ucirc;teuses 
op&eacute;rations d'envoi de message, les structures de donn&eacute;es &agrave; l'int&eacute;rieur 
d'un programme doivent &ecirc;tre r&eacute;parties &agrave; travers tous les processeurs de 
fa&ccedil;on &agrave; ce que la plupart des donn&eacute;es r&eacute;f&eacute;renc&eacute;es par chaque processeur 
se trouve dans sa m&eacute;moire locale&hellip; Cette t&acirc;che porte le nom de 
&laquo;&nbsp;<span class="quote">r&eacute;partition des donn&eacute;es</span>&nbsp;&raquo; (&laquo;&nbsp;<span class="quote"><span class="emphasis"><em>data 
layout</em></span></span>&nbsp;&raquo;).

</p></dd><dt><span class="term">M&eacute;moire partag&eacute;e&nbsp;:</span></dt><dd><p>

La m&eacute;moire partag&eacute;e est elle aussi un mod&egrave;le d'interaction entre les 
processeurs d'un syst&egrave;me parall&egrave;le. Les syst&egrave;mes comme les machines 
biprocesseurs Pentium faisant fonctionner Linux partagent 
<span class="emphasis"><em>physiquement</em></span> la m&ecirc;me m&eacute;moire entre tous leurs 
processeurs, si bien qu'une valeur &eacute;crite par un processeur est 
directement accessible par un autre processeur. A l'inverse, la m&eacute;moire 
partag&eacute;e <span class="emphasis"><em>logiquement</em></span> peut &ecirc;tre impl&eacute;ment&eacute;e sur les 
syst&egrave;mes o&ugrave; chaque processeur dispose d'une m&eacute;moire qui lui est propre, 
en convertissant chaque r&eacute;f&eacute;rence &agrave; une zone non locale de la m&eacute;moire en 
une communication inter-processeur appropri&eacute;e. Cette impl&eacute;mentation de 
la m&eacute;moire partag&eacute;e est g&eacute;n&eacute;ralement consid&eacute;r&eacute;e comme &eacute;tant plus facile 
&agrave; utiliser que les files de messages. La m&eacute;moire partag&eacute;e physiquement 
peut pr&eacute;senter &agrave; la fois une bande passante &eacute;lev&eacute;e et des temps de 
latence tr&egrave;s bas, mais seulement lorsque les diff&eacute;rents processeurs 
n'essaient pas d'acc&eacute;der au bus simultan&eacute;ment. Ainsi, le mod&egrave;le de 
r&eacute;partition des donn&eacute;es peut avoir une s&eacute;rieuse influence sur les 
performances, et les effets de cache et autres peuvent rendre tr&egrave;s 
difficile la d&eacute;termination du meilleur mod&egrave;le.

</p></dd><dt><span class="term">Fonctions d'agr&eacute;gation (<span class="foreignphrase"><em class="foreignphrase">Aggregate Functions</em></span>)&nbsp;:</span></dt><dd><p>

Dans le mod&egrave;le des files de messages comme dans celui de la m&eacute;moire 
partag&eacute;e, une communication est initi&eacute;e par un processeur seul. Par 
contraste, une fonction d'agr&eacute;gation est un mod&egrave;le implicitement 
parall&egrave;le dans lequel tous les processeurs d'un groupe agissent 
ensemble. Le cas le plus simple est celui des <span class="emphasis"><em>barri&egrave;res de 
synchronisation</em></span>, dans lequel chaque processeur se met en 
attente jusqu'&agrave; ce que le groupe entier ait atteint la barri&egrave;re. Si 
chaque processeur &eacute;met une donn&eacute;e en atteignant une barri&egrave;re, il est 
possible de demander &agrave; l'&eacute;lectronique responsable des communications 
d'&eacute;mettre en retour une valeur &agrave; chaque processeur, valeur qui pourrait 
&ecirc;tre fonction des donn&eacute;es collect&eacute;es sur tous les processeurs. Par 
exemple, la valeur de retour pourrait &ecirc;tre la r&eacute;ponse &agrave; la question 
&laquo;&nbsp;<span class="quote">Est-ce qu'un processeur a trouv&eacute; la r&eacute;ponse&nbsp;?</span>&nbsp;&raquo; ou 
pourrait &ecirc;tre la somme d'une valeur propre &agrave; chaque processeur. Les 
temps de latence peuvent &ecirc;tre bas, mais la bande passante a tendance &agrave; 
&ecirc;tre basse elle aussi. Traditionnellement, ce mod&egrave;le est surtout utilis&eacute; 
pour contr&ocirc;ler l'ex&eacute;cution en parall&egrave;le, plut&ocirc;t que pour distribuer les 
donn&eacute;es.

</p></dd><dt><span class="term">Communication collective&nbsp;:</span></dt><dd><p>

C'est un autre nom pour les fonctions d'agr&eacute;gation, utilis&eacute; le plus 
souvent en r&eacute;f&eacute;rence &agrave; celles qui sont construites en utilisant de 
multiples op&eacute;rations d'envoi de message.

</p></dd><dt><span class="term">SMP&nbsp;:</span></dt><dd><p>

SMP (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Symmetric 
Multi-Processor</em></span></span>&nbsp;&raquo;) se rapporte au concept d'un 
groupe de processeurs travaillant ensemble en tant qu'homologues, si 
bien que chaque partie d'un travail peut &ecirc;tre effectu&eacute;e de la m&ecirc;me fa&ccedil;on 
par n'importe quel processeur de ce groupe. Typiquement, le SMP implique 
la combinaison du MIMD et de la m&eacute;moire partag&eacute;e. Dans l'univers IA32, 
SMP signifie souvent &laquo;&nbsp;<span class="quote">compatible MPS</span>&nbsp;&raquo; 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Intel MultiProcessor 
Specification</em></span></span>&nbsp;&raquo;). &Agrave; l'avenir, cela pourrait 
signifier 
&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Slot&nbsp;2</em></span></span>&nbsp;&raquo;&hellip;

</p></dd><dt><span class="term">SWAR&nbsp;:</span></dt><dd><p>

SWAR (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">SIMD Within A 
Register</em></span></span>&nbsp;&raquo;, ou &laquo;&nbsp;<span class="quote">SIMD &agrave; l'int&eacute;rieur d'un 
registre</span>&nbsp;&raquo;) est un terme g&eacute;n&eacute;rique qui d&eacute;signe le concept 
consistant &agrave; partitionner un registre en plusieurs champs entiers et &agrave; 
effectuer des op&eacute;rations sur toute la largeur du registre pour faire du 
calcul en parall&egrave;le SIMD sur tous les champs &agrave; la fois. En consid&eacute;rant 
une machine avec des registres longs de <span class="emphasis"><em>k</em></span> bits (et 
donc autant pour les chemins de donn&eacute;es, et les unit&eacute;s des fonctions), 
on sait depuis longtemps que les op&eacute;rations sur les registres ordinaires 
peuvent fonctionner comme des op&eacute;rations parall&egrave;le SIMD sur 
<span class="emphasis"><em>n</em></span> champs de <span class="emphasis"><em>k/n</em></span>&nbsp;bits. Bien que ce 
type de parall&eacute;lisme puisse &ecirc;tre mis en &#339;uvre en utilisant les 
registres entiers et les instructions ordinaires, plusieurs mod&egrave;les 
r&eacute;cents de microprocesseurs int&egrave;grent des instructions sp&eacute;cialis&eacute;es pour 
am&eacute;liorer les performances de cette technique pour des t&acirc;ches orient&eacute;es 
multim&eacute;dia. En plus du <span class="emphasis"><em>MMX</em></span> 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">MultiMedia eXtension</em></span></span>&nbsp;&raquo;) 
d'Intel/AMD/Cyrix, il existe&nbsp;: <span class="emphasis"><em>MAX</em></span> 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">MultimediA eXtension</em></span></span>&nbsp;&raquo;) sur 
l'Alpha de Digital, <span class="emphasis"><em>MAX</em></span> 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Multimedia Acceleration 
eXtension</em></span></span>&nbsp;&raquo;) sur le PA-RISC de Hewlett-Packard, 
<span class="emphasis"><em>MDMX</em></span> (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Digital Media 
eXtension</em></span></span>&nbsp;&raquo;, prononc&eacute; &laquo;&nbsp;<span class="quote">Mad&nbsp;Max</span>&nbsp;&raquo;) 
sur MIPS, et <span class="emphasis"><em>VIS</em></span> (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Visual 
Instruction Set</em></span></span>&nbsp;&raquo;) sur le SPARC V9 de Sun. En 
dehors des trois constructeurs qui ont adopt&eacute; le MMX, tous ces jeux 
d'instructions sont comparables, mais incompatibles entre eux.

</p></dd><dt><span class="term">Processeur auxiliaires, d&eacute;di&eacute;s. (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Attached Processors</em></span></span>&nbsp;&raquo;)&nbsp;:</span></dt><dd><p>

Les processeurs auxiliaires sont essentiellement des calculateurs d&eacute;di&eacute;s 
&agrave; une t&acirc;che particuli&egrave;re, reli&eacute;s &agrave; un syst&egrave;me <span class="emphasis"><em>h&ocirc;te</em></span> 
et servant &agrave; acc&eacute;l&eacute;rer certains types de calculs. Par exemple, de 
nombreuses cartes vid&eacute;o et son pour PC embarquent des processeurs d&eacute;di&eacute;s 
con&ccedil;us pour acc&eacute;l&eacute;rer respectivement les op&eacute;rations graphiques et le 
<span class="emphasis"><em>DSP</em></span> audio (DSP&nbsp;: &laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Digital 
Signal Processing</em></span></span>&nbsp;&raquo;, soit &laquo;&nbsp;<span class="quote">Traitement 
Num&eacute;rique du Signal</span>&nbsp;&raquo;). Il existe aussi une large vari&eacute;t&eacute; de 
<span class="emphasis"><em>processeurs de tableaux</em></span> 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">array processors</em></span></span>&nbsp;&raquo;), nomm&eacute;s 
ainsi car ils sont con&ccedil;us pour acc&eacute;l&eacute;rer les op&eacute;rations arithm&eacute;tiques 
sur les tableaux. &Agrave; dire vrai, un certain nombre de supercalculateurs 
commerciaux sont en r&eacute;alit&eacute; form&eacute;s de processeurs d&eacute;di&eacute;s rattach&eacute;s &agrave; des 
stations de travail h&ocirc;tes.

</p></dd><dt><span class="term">RAID&nbsp;:</span></dt><dd><p>

RAID (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Redundant Array of Inexpensive 
Disks</em></span></span>&nbsp;&raquo;, soit &laquo;&nbsp;<span class="quote">Batterie Redondante de 
Disques Peu Co&ucirc;teux</span>&nbsp;&raquo;) est une technologie simple servant &agrave; 
am&eacute;liorer tant la bande passante que la fiabilit&eacute; des acc&egrave;s disque. M&ecirc;me 
si le RAID se d&eacute;cline en plusieurs variantes, toutes ont en commun deux 
concepts-cl&eacute;s&nbsp;: D'abord, chaque bloc de donn&eacute;es est 
<span class="emphasis"><em>d&eacute;coup&eacute;</em></span> en segments distribu&eacute;s &agrave; un groupe de 
<span class="emphasis"><em>n+k</em></span> disques de fa&ccedil;on &agrave; ce que chaque disque n'ait &agrave; 
lire que <span class="emphasis"><em>1/n</em></span>i&egrave;me de la donn&eacute;e&hellip; offrant ainsi 
<span class="emphasis"><em>n</em></span> fois la bande passante d'un seul disque. Ensuite, 
des donn&eacute;es redondantes sont &eacute;crites pour que les donn&eacute;es puissent &ecirc;tre 
recouvr&eacute;es si un des disques vient &agrave; d&eacute;faillir. C'est important car 
autrement, si l'un des <span class="emphasis"><em>n+k</em></span> disques tombait en 
panne, le syst&egrave;me de fichiers entier pourrait &ecirc;tre perdu. Il existe une 
bonne pr&eacute;sentation du syst&egrave;me RAID sur <a href="http://www.dpt.com/uraiddoc.html" target="_top">http://www.dpt.com/uraiddoc.html</a>, ainsi que des informations 
concernant le RAID pour Linux sur <a href="http://linas.org/linux/raid.html" target="_top">http://linas.org/linux/raid.html</a>. Hormis la prise en charge du 
mat&eacute;riel RAID sp&eacute;cialis&eacute;, Linux g&egrave;re aussi le RAID logiciel 0, 1, 4 et 5 
&agrave; travers plusieurs disques h&eacute;berg&eacute;s sur un syst&egrave;me Linux unique. 
Reportez-vous aux Software RAID mini-HOWTO et Multi-Disk System Tuning 
mini-HOWTO pour plus de d&eacute;tails. Le RAID au travers de plusieurs disques 
<span class="emphasis"><em>sur plusieurs machines en clusters</em></span> n'est pas 
directement pris en charge.

</p></dd><dt><span class="term">IA32&nbsp;:</span></dt><dd><p>

L'IA32 (&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Intel 
Architecture</em></span></span>&nbsp;&raquo;, 32 bits) n'a rien &agrave; voir avec le 
traitement en parall&egrave;le, mais se r&eacute;f&egrave;re &agrave; la classe de processeurs dont 
les instructions sont compatibles avec celles de l'Intel 386. 
Concr&egrave;tement, tout processeur Intel x86 apr&egrave;s le 286 est compatible avec 
le mod&egrave;le de m&eacute;moire &laquo;&nbsp;<span class="quote">&agrave;&nbsp;plat<sup>[<a href="#ftn.N101F7" name="N101F7">1</a>]</sup></span>&nbsp;&raquo; qui caract&eacute;rise l'IA32. AMD et Cyrix font eux 
aussi une multitude de processeurs compatibles IA32. Comme Linux a 
&eacute;volu&eacute; principalement sur des processeurs IA32 et que c'est l&agrave; qu'est 
centr&eacute; le march&eacute; de la grande consommation, il est commode d'utiliser le 
terme IA32 pour distinguer ce type de processeur des PowerPC, Alpha, 
PA-RISC, MIPS, SPARC, et c&aelig;tera. La future IA64 (64 bits avec EPIC, 
&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Explicitly Parallel Instruction 
Computing</em></span></span>&nbsp;&raquo;) va certainement compliquer les 
choses, mais la production de Merced, le premier processeur IA64, n'est 
pas envisag&eacute;e avant 1999.

</p></dd><dt><span class="term">Produits du commerce&nbsp;:</span></dt><dd><p>

Depuis la mort de plusieurs fabricants de supercalculateurs en parall&egrave;le,
les solutions commerciales toutes faites et pr&ecirc;tes &agrave; l'emploi (en 
anglais &laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">Commercial Off-The-Shelf</em></span></span>&nbsp;&raquo;
ou <span class="foreignphrase"><em class="foreignphrase">COTS</em></span>, pour &laquo;&nbsp;<span class="quote">disponibles en 
rayons</span>&nbsp;&raquo;) sont couramment consid&eacute;r&eacute;es comme une n&eacute;cessit&eacute; dans le 
monde des syst&egrave;mes de calcul en parall&egrave;le. En &eacute;tant totalement puriste, les 
seuls moyens de traitement en parall&egrave;le disponibles sous forme de 
produits du commerce utilisant des PC sont des choses comme les serveurs 
Windows NT en SMP et les diff&eacute;rentes applications Windows utilisant le 
MMX. &Ecirc;tre aussi puriste ne m&egrave;ne &agrave; rien. L'id&eacute;e fondamentale de 
l'utilisation de produits du commerce est de r&eacute;duire les co&ucirc;ts et les 
temps de d&eacute;veloppement. Ainsi, une mani&egrave;re plus compl&egrave;te et plus utile 
de comprendre l'utilisation de ce type de produit serait de dire que 
la plupart des sous-syst&egrave;mes tirent profit du march&eacute; de masse mais que 
d'autres technologies sont utilis&eacute;es l&agrave; o&ugrave; elles servent vraiment. Le 
plus souvent, les produits du commerce pour le traitement en parall&egrave;le
sont utilis&eacute;s au sein d'un groupe de machines 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">cluster</em></span></span>&nbsp;&raquo;) dans lequel les 
postes sont des PC courants, mais dont l'interface r&eacute;seau et les 
logiciels ont &eacute;t&eacute; quelque peu <span class="emphasis"><em>personnalis&eacute;s</em></span>&hellip; 
classiquement, fonctionnant sous Linux avec des applications dont le 
code source est libre et disponible (par exemple sous
<span class="foreignphrase"><em class="foreignphrase">copyleft</em></span> ou dans le domaine public), mais 
pas litt&eacute;ralement des produits du commerce.

</p></dd></dl></div></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N1021D"></a>1.3.&nbsp;Algorithme d'exemple</h3></div></div></div><p>
Afin de bien comprendre l'usage des diff&eacute;rentes approches de
programmation en parall&egrave;le mises en &eacute;vidence dans ce guide,
il est utile d'&eacute;tudier cet exemple. Bien qu'un algorithme
simple de traitement en parall&egrave;le e&ucirc;t suffi, si l'on en choisit
un qui a d&eacute;j&agrave; &eacute;t&eacute; utilis&eacute; pour faire la d&eacute;monstration d'autres
syst&egrave;mes de programmation parall&egrave;le, il devient un peu plus facile
de comparer et mettre en &eacute;vidence les caract&eacute;ristiques de ces diff&eacute;rentes approches. le livre
de M. J. Quinn, <span class="foreignphrase"><em class="foreignphrase">Parallel Computing Theory And Practice</em></span>
(&laquo;&nbsp;<span class="quote">Th&eacute;orie et Pratique du Calcul en Parall&egrave;le</span>&nbsp;&raquo;), seconde &eacute;dition, &eacute;dit&eacute;
par McGraw Hill, New York en 1994, utilise un algorithme parall&egrave;le
qui calcule la valeur de Pi pour pr&eacute;senter diff&eacute;rents environnements
de programmation sur supercalculateurs parall&egrave;les (par exemple, le
<span class="foreignphrase"><em class="foreignphrase">message passing</em></span> du nCube ou la m&eacute;moire partag&eacute;e des Sequent). Dans ce
guide, nous utiliserons le m&ecirc;me algorithme.
</p><p>
Cet algorithme calcule la valeur approch&eacute;e de Pi en faisant la
somme de l'aire situ&eacute;e sous <span class="emphasis"><em>x</em></span> au carr&eacute;. En
tant que programme C purement s&eacute;quentiel, l'algorithme ressemble &agrave;&nbsp;:
</p><p>

<pre class="programlisting">
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;

main(int argc, char **argv)
{
  register double largeur, somme;
  register int intervalles, i;

  /* Lit le nombre d'intervalles d&eacute;sir&eacute; */
  intervalles = atoi(argv[1]);
  largeur = 1.0 / intervalles;

  /* fait le calcul */
  somme = 0;
  for (i=0; i&lt;intervalles; ++i) {
    register double x = (i + 0.5) * largeur;
    somme += 4.0 / (1.0 + x * x);
  }
  somme *= largeur;

  printf("Estimation de la valeur de pi: %f\n", somme);

  return(0);
}
</pre>

</p><p>

En revanche, cet algorithme s&eacute;quentiel conduit facilement &agrave; une 
impl&eacute;mentation &laquo;&nbsp;<span class="quote">parall&egrave;le et embarrassante</span>&nbsp;&raquo;. L'aire est 
subdivis&eacute;e en intervalles, et un nombre quelconque de processeurs peut 
faire la somme de l'intervalle qui lui est assign&eacute; ind&eacute;pendamment des 
autres, sans n&eacute;cessit&eacute; d'interaction entre les processeurs. Une fois que 
les sommes locales ont toutes &eacute;t&eacute; calcul&eacute;es, elles sont additionn&eacute;es 
pour former la somme globale. Cette &eacute;tape requiert un certain niveau de 
coordination et de communication entre les diff&eacute;rents processeurs. 
Enfin, cette somme globale est renvoy&eacute;e &agrave; l'&eacute;cran par un seul 
processeur, en tant que valeur approximative de Pi.

</p><p>
Dans ce guide, les diff&eacute;rentes impl&eacute;mentations parall&egrave;les de cet algorithme
apparaissent l&agrave; ou les diff&eacute;rentes m&eacute;thodes de programmation sont trait&eacute;es.
</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N1023D"></a>1.4.&nbsp;Structure du document</h3></div></div></div><p>
Le reste de ce document est divis&eacute; en cinq parties. Les sections
2, 3, 4 et 5 correspondent aux trois diff&eacute;rents types de configuration
mat&eacute;rielle pouvant assumer le traitement en parall&egrave;le en utilisant
Linux.
</p><div class="itemizedlist"><ul type="disc"><li><p>

La section 2 traite des syst&egrave;mes Linux sur SMP, lesquels prennent
directement en charge l'ex&eacute;cution MIMD en utilisant la m&eacute;moire
partag&eacute;e, m&ecirc;me si les files de messages sont facilement mises en
place, elles aussi. Bien que Linux sache g&eacute;rer les configurations
SMP jusqu'&agrave; 16 processeurs, la plupart des ordinateurs SMP de type PC
sont dot&eacute;s soit de deux, soit de quatre processeurs identiques.

</p></li><li><p>

La section 3 traite des batteries d'ordinateurs en r&eacute;seau 
(&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">clusters</em></span></span>&nbsp;&raquo;), chaque machine 
fonctionnant sous Linux. Un <span class="foreignphrase"><em class="foreignphrase">cluster</em></span> peut 
&ecirc;tre utilis&eacute; comme un syst&egrave;me de traitement en parall&egrave;le g&eacute;rant 
directement l'ex&eacute;cution en MIMD et l'&eacute;change de messages, et peut-&ecirc;tre 
m&ecirc;me aussi la m&eacute;moire partag&eacute;e logique. L'ex&eacute;cution SIMD simul&eacute;e et la 
communication des fonctions d'agr&eacute;gation peuvent aussi &ecirc;tre prises en 
charge, selon le r&eacute;seau exploit&eacute;. Le nombre de processeurs compris dans 
un <span class="foreignphrase"><em class="foreignphrase">cluster</em></span> peut s'&eacute;tendre de deux &agrave; 
plusieurs milliers, la principale limitation &eacute;tant le c&acirc;blage physique 
du r&eacute;seau. Dans certains cas, des machines de diff&eacute;rents types peuvent 
&ecirc;tre m&eacute;lang&eacute;es au sein d'un <span class="foreignphrase"><em class="foreignphrase">cluster</em></span>. Par 
exemple, un r&eacute;seau qui combinerait des Alpha DEC et des Pentium sous 
Linux serait appel&eacute; <span class="foreignphrase"><em class="foreignphrase">cluster</em></span> 
<span class="emphasis"><em>h&eacute;t&eacute;rog&egrave;ne</em></span>.

</p></li><li><p>

La section 4 traite du SWAR, le &laquo;&nbsp;<span class="quote">SIMD dans un registre</span>&nbsp;&raquo;. 
C'est une forme tr&egrave;s restrictive d'ex&eacute;cution en parall&egrave;le, mais d'un 
autre cot&eacute;, c'est une possibilit&eacute; int&eacute;gr&eacute;e aux processeurs ordinaires. 
Ces derniers temps, les extensions MMX et autres des processeurs 
modernes ont rendu cette approche encore plus efficace.

</p></li><li><p>

La section 5 traite de l'utilisation de PC sous Linux comme h&ocirc;tes pour 
des syst&egrave;mes de calcul parall&egrave;le simples. Sous forme de carte 
d'extension ou de bo&icirc;tiers externes, les processeurs auxiliaires peuvent 
apporter &agrave; des syst&egrave;mes Linux une formidable puissance de traitement 
pour des applications sp&eacute;cifiques. Par exemple, des cartes ISA 
disponibles &agrave; peu de frais fournissent de multiples processeurs DSP, 
offrant plusieurs centaines de M&eacute;gaFLOP aux calculs de grande envergure. 
En revanche, ces cartes ne sont <span class="emphasis"><em>que</em></span> des 
processeurs. Elle n'embarquent g&eacute;n&eacute;ralement pas de syst&egrave;me 
d'exploitation, de disque dur, ou de connecteur pour terminal de 
contr&ocirc;le, et c&aelig;tera. Pour rendre ces syst&egrave;mes exploitables, 
l'&laquo;&nbsp;<span class="quote">h&ocirc;te</span>&nbsp;&raquo; Linux doit fournir ces facilit&eacute;s.

</p></li></ul></div><p>

La section finale de ce document couvre les aspects d'int&eacute;r&ecirc;t g&eacute;n&eacute;ral 
concernant le traitement en parall&egrave;le sous Linux, non sp&eacute;cifique &agrave; l'une 
des approches list&eacute;es ci-dessus.

</p><p>

En lisant ce document, gardez &agrave; l'esprit que nous n'avons pas tout 
test&eacute;, et que beaucoup de choses rapport&eacute;es dans ce document ont 
toujours &laquo;&nbsp;<span class="quote">un caract&egrave;re exp&eacute;rimental</span>&nbsp;&raquo; (une jolie mani&egrave;re de 
dire que cela ne fonctionne pas tout &agrave; fait comme esp&eacute;r&eacute; ;-) ). Cela 
dit, le traitement en parall&egrave;le sous Linux est d&eacute;sormais exploitable, et 
un groupe incroyablement vaste de personnes travaille &agrave; le rendre encore 
meilleur.

</p><p>

L'auteur de la version originale de ce guide est le Dr (Ph.D) Hank 
Dietz, actuellement Professeur Associ&eacute; de l'<span class="foreignphrase"><em class="foreignphrase">Electrical 
and Computer Engineering</em></span> &agrave; l'universit&eacute; de Purdue, West 
Lafayette, IN, 47907-1285. Dietz est propri&eacute;taire des droits sur ce 
document, conform&eacute;ment aux r&egrave;gles du <span class="foreignphrase"><em class="foreignphrase">Linux Documentation 
Project</em></span> (LDP). Bien qu'un effort ait &eacute;t&eacute; fait pour 
assurer l'exactitude de cette pr&eacute;sentation, ni Dietz ni l'Universit&eacute; de 
Purdue ne peuvent &ecirc;tre tenus responsables d'&eacute;ventuels probl&egrave;mes ou 
erreurs, et l'Universit&eacute; de Purdue n'endosse la responsabilit&eacute; d'aucun 
produit ou travaux trait&eacute;s dans ce document.

</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N1027A"></a>1.5.&nbsp;Note du traducteur</h3></div></div></div><p>

Chers lecteurs, avant de poursuivre la lecture de ce guide, il est 
important de revenir, notament au vu de la date de publication de cette 
version fran&ccedil;aise, sur plusieurs points&nbsp;:

</p><div class="itemizedlist"><ul type="disc"><li><p>

Le Professeur Henry G. Dietz (dit &laquo;&nbsp;<span class="quote">Hank</span>&nbsp;&raquo;), apr&egrave;s avoir 
enseign&eacute; plusieurs ann&eacute;es &agrave; l'Universit&eacute; de Purdue et y avoir d&eacute;velopp&eacute; 
la plupart de ce qui forme ce document, <span class="emphasis"><em>m&egrave;ne aujourd'hui ses recherches &agrave; 
l'Universit&eacute; du Kentucky</em></span>. Son site personnel se trouve 
d&eacute;sormais ici: <a href="http://aggregate.org/hankd/" target="_top">http://aggregate.org/hankd/</a>. Cela signifie 
&eacute;galement que la plupart des r&eacute;f&eacute;rences &agrave; l'Universit&eacute; de Purdue sont 
d&eacute;sormais caduques. Toutefois, un certain nombre de ces r&eacute;f&eacute;rences ont 
&eacute;t&eacute; conserv&eacute;es en l'&eacute;tat dans ce guide, ce lorsque le contenu r&eacute;f&eacute;renc&eacute; 
&eacute;tait toujours disponible sur le site de l'Universit&eacute; sans avoir &eacute;t&eacute; 
transf&eacute;r&eacute; vers le nouveau site. En tout &eacute;tat de cause, dirigez-vous en 
priorit&eacute; sur le site de l'Universit&eacute; du Kentucky pour tout contact ou 
pour obtenir les informations les plus r&eacute;centes.

</p></li><li><p>

La totalit&eacute; des termes, notament techniques, employ&eacute;s dans ce documents 
ont &eacute;t&eacute; traduits en fran&ccedil;ais, &agrave; quelques exceptions pr&egrave;s. C'est par 
exemple le cas du mot 
&laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">cluster</em></span></span>&nbsp;&raquo;, qui d&eacute;signe en 
informatique la mise en parall&egrave;le de plusieurs machines individuelles et 
coordonn&eacute;es de mani&egrave;re &agrave; les faire agir comme un seul super-ordinateur. 
Le terme fran&ccedil;ais homologue est &laquo;&nbsp;<span class="quote">grappe</span>&nbsp;&raquo;. Toutefois, la 
fr&eacute;quence &agrave; laquelle ce mot est employ&eacute; tant dans ce document (un 
chapitre entier est consacr&eacute; &agrave; ce sujet pr&eacute;cis) que dans la communaut&eacute; 
du traitement en parall&egrave;le en g&eacute;n&eacute;ral est telle que le terme original a 
&eacute;t&eacute; conserv&eacute; dans la pr&eacute;sente version fran&ccedil;aise. Dans le m&ecirc;me esprit, la 
notion de &laquo;&nbsp;<span class="quote">bande passante</span>&nbsp;&raquo; se retrouve tr&egrave;s fr&eacute;quement tout 
au long de ce guide. C'est &agrave; la base un abus de langage, mais la 
popularit&eacute; de cette formule est &eacute;galement suffisament grande pour la 
conserver en l'&eacute;tat.

</p></li><li><p>

La version originale de ce document a &eacute;t&eacute; &eacute;crite en 1998, la version 
fran&ccedil;aise est parue en 2004. Il va sans dire qu'au cours d'une aussi 
longue p&eacute;riode, le paysage informatique a beaucoup &eacute;volu&eacute;, sp&eacute;cialement 
en ce qui concerne le d&eacute;veloppement du noyau Linux. Certaines 
technologies r&eacute;seau (telles que ATM, FireWire, ou Fiber Channel) ou de 
<span class="foreignphrase"><em class="foreignphrase">clustering</em></span> (comme MOSIX), recens&eacute;es comme 
indisponibles en 1998, ont depuis int&eacute;gr&eacute; le noyau, ou sont devenues 
disponibles. En revanche, il est tr&egrave;s peu probable qu'une technologie 
connue pour fonctionner sous Linux lors de la r&eacute;daction de ce document 
soit devenue inutilisable depuis.

</p></li><li><p>

Plus encore que celui de l'industrie informatique, le paysage du 
<span class="foreignphrase"><em class="foreignphrase">World Wide Web</em></span> s'est transform&eacute; de fa&ccedil;on 
&agrave; rendre la plupart des liens propos&eacute;s obsol&egrave;tes. Un effort a &eacute;t&eacute; fait 
pour assurer leur mise &agrave; jour ou leur remplacement, ainsi que la 
pertinence de leur contenu. En d&eacute;pit de cela, un certain nombre d'entre eux,
en particulier ceux dont les projets &eacute;taient h&eacute;berg&eacute;s sur les 
pages personnelles d'&eacute;tudiants de grandes &eacute;coles, n'ont pu &ecirc;tre corrig&eacute;s 
et ont &eacute;t&eacute; retir&eacute;s du document.

</p></li></ul></div><p>

Malgr&eacute; toutes ces r&eacute;serves, les techniques couvertes par ce document 
sont suffisament g&eacute;n&eacute;rales pour rester valables au cours du temps et au 
travers des diff&eacute;rents mod&egrave;les de machines, et son contenu pr&eacute;sente 
toujours un int&eacute;r&ecirc;t &agrave; la fois p&eacute;dagogique et historique, qui restera encore 
longtemps profitable au lecteur. Tout ceci justifie une publication m&ecirc;me 
tardive.

</p><p>

Enfin, le traducteur s'est efforc&eacute; de rendre le pr&eacute;sent document aussi 
correct et fid&egrave;le &agrave; son original que possible, mais n'est pas 
infaillible. Tout signalement d'un contresens, d'une erreur technique, 
ou tout autre d&eacute;faut de traduction sera appr&eacute;ci&eacute; &agrave; sa juste valeur &agrave; 
l'adresse suivante&nbsp;:

<code class="email">&lt;<a href="mailto:dvandenbroeck CHEZ free POINT fr">dvandenbroeck CHEZ free POINT fr</a>&gt;</code>.

</p><p>

Bonne lecture&nbsp;!

</p></div><div class="footnotes"><br><hr align="left" width="100"><div class="footnote"><p><sup>[<a href="#N101F7" name="ftn.N101F7">1</a>] </sup>

N.D.T.&nbsp;: &laquo;&nbsp;<span class="quote"><span class="foreignphrase"><em class="foreignphrase">flat memory 
model</em></span></span>&nbsp;&raquo;, dans lequel toute la m&eacute;moire se trouve 
dans le m&ecirc;me plan m&eacute;moire, par opposition aux segments, m&eacute;moire pagin&eacute;e, 
et tout autre mod&egrave;le compos&eacute;.

</p></div></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="index.html">Pr&eacute;c&eacute;dent</a>&nbsp;</td><td align="center" width="20%">&nbsp;</td><td align="right" width="40%">&nbsp;<a accesskey="n" href="ar01s02.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">Le traitement en parall&egrave;le sous Linux&nbsp;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%">&nbsp;2.&nbsp;Linux sur SMP</td></tr></table></div></body></html>