This file is indexed.

/usr/share/doc/HOWTO/fr-html/Beowulf-HOWTO.html is in doc-linux-fr-html 2013.01-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.69">
<title>Beowulf HOWTO</title>
</head>
<body>
<h1>Beowulf HOWTO</h1>
<h2>Jacek Radajewski and Douglas Eadline (traduction&nbsp;:
Emmanuel PIERRE, epierre@e-nef.com&nbsp;)</h2>
v1.1.1, 22 Novembre 1998
<hr>
<em>Ce document est une introduction &agrave; l'architecture
Beowulf Supercomputeur. Il fournit les informations de base sur la
programmation parall&egrave;le, et inclut des liens vers des
documents plus sp&eacute;cifiques et des pages web.</em>
<hr>
<h2><a name="s1">1. Pr&eacute;ambule</a></h2>
<h2><a name="ss1.1">1.1 Mise en garde</a></h2>
<p>Nous n'accepterons aucune responsabilit&eacute; pour toute
information incorrecte pr&eacute;sente dans ce document, ni pour
aucun des dommages qui pourraient en r&eacute;sulter.</p>
<h2><a name="ss1.2">1.2 Copyright</a></h2>
<p>Copyright &copy; 1997 - 1998 Jacek Radajewski et Douglas
Eadline. Le droit de distribuer et de modifier ce document est
autoris&eacute; sous la licence GNU General Public License.</p>
<h2><a name="ss1.3">1.3 Au sujet de ce HOWTO</a></h2>
<p>Jacek Radajewski a commenc&eacute; &agrave; travailler sur ce
document en novembre 1997 et a &eacute;t&eacute; ensuite rejoint
par Douglas Eadline. En quelques mois, le HOWTO Beowulf est devenu
un document consistant, et en ao&ucirc;t 1998, il a
&eacute;t&eacute; d&eacute;coup&eacute; en trois: Beowulf HOWTO,
Beowulf Architecture Design HOWTO, the Beowulf Installation and
Administration HOWTO. La Version 1.0.0 de ce document a
&eacute;t&eacute; soumise au Linux Documentation Project le 11
novembre 1998. Nous esp&eacute;rons que ce ne soit que le
d&eacute;but de ce qui deviendra une documentation compl&egrave;te
du Projet de Documentation Beowulf (Beowulf Documentation
Project).</p>
<h2><a name="ss1.4">1.4 Au sujet des auteurs</a></h2>
<ul>
<li>Jacek Radajewski est Administrateur R&eacute;seau, et
pr&eacute;pare un degr&eacute; honorifique en Informatique &agrave;
l'Universit&eacute; du Southern Queensland, Australie. Le premier
contact de Jacek avec Linux eut lieu en 1995 et il en tomba
amoureux du premier coup. Jacek construisit son premier cluster
Beowulf en Mai 1997 et a jou&eacute; avec cette technologie depuis,
toujours &agrave; la recherche de la meilleure mani&egrave;re de
tout organiser. Vous pouvez joindre Jacek par courriel &agrave;
<a href="mailto:jacek@usq.edu.au">jacek@usq.edu.au</a></li>
<li>Douglas Eadline, Ph.D. est le President et le Principal
Scientifique (Principal Scientist) &agrave; Paralogic, Inc.,
Bethlehem, PA, USA. Form&eacute; en tant que Chimiste
Physique/Analytique, il s'est investi dans les ordinateurs depuis
1978, ann&eacute;e o&ugrave; il a construit sa premi&egrave;re
machine pour l'utiliser avec l'instrumentation chimique. A
ujourd'hui, le Dr. Eadline s'int&eacute;resse &agrave; Linux, aux
clusters Beowulf, et aux algorithmes parall&egrave;les. Le Dr.
Eadline peut &ecirc;tre joint par courriel &agrave; <a href=
"mailto:deadline@plogic.com">deadline@plogic.com</a></li>
</ul>
<h2><a name="ss1.5">1.5 Remerciements</a></h2>
<p>L'&eacute;criture du HOWTO Beowulf a &eacute;t&eacute; longue,
et il est finalement complet gr&acirc;ce &agrave; de nombreuses
personnes. Nous voudrions remercier celles qui suivent pour leur
aide et leurs contributions &agrave; ce HOWTO:</p>
<ul>
<li>Becky pour son amour, son soutien, et sa
compr&eacute;hension.</li>
<li>Tom Sterling, Don Becker, et les autres personnes de la NASA
qui furent &agrave; l'origine du projet Beowulf.</li>
<li>Thanh Tran-Cong et la Faculty of Engineering and Surveying pour
avoir donn&eacute; la machine Beowulf <i>topcat</i> pour les tests
de Beowulf.</li>
<li>Mon sup&eacute;rieur Christopher Vance pour de nombreuses
bonnes id&eacute;es.</li>
<li>Mon ami Russell Waldron pour de grandes id&eacute;es de
programmation, son int&eacute;r&ecirc;t g&eacute;n&eacute;ral pour
le projet, et son soutien.</li>
<li>Mon ami David Smith pour la relecture de ce document.</li>
<li>Et de nombreuses autres personnes sur la liste de diffusion
Beowulf qui nous ont fournis beaucoup de retour et
d'id&eacute;es.</li>
<li>Toutes les personnes qui sont responsables du syst&egrave;me
d'exploitation Linux et de tous les autres outils gratuits
utilis&eacute;s sur <i>topcat</i> et les diverses machines
Beowulf.</li>
</ul>
<h2><a name="s2">2. Introduction</a></h2>
<p>Au fur et &agrave; mesure que les niveaux de performance et de
commodit&eacute; des ordinateurs et des r&eacute;seaux augmentent,
il devient de plus en plus facile de construire des syst&egrave;mes
informatiques parall&egrave;les &agrave; partir de composants
facilement disponibles, plut&ocirc;t que de construire des
processeurs sur de tr&egrave;s co&ucirc;teux Superordinateurs. En
fait, le rapport prix/performances d'une machine de type Beowulf
est de trois &agrave; dix fois meilleur que celui des
superordinateurs traditionnels. L'architecture Beowulf
s'&eacute;chelonne bien, elle est facile &agrave; construire et
vous ne payez que pour le mat&eacute;riel, puisque la pluspart des
logiciels sont gratuits.</p>
<h2><a name="ss2.1">2.1 A qui s'adresse ce HOWTO ?</a></h2>
<p>Ce HOWTO s'adresse aux personnes qui ont d&eacute;j&agrave; eu
au moins des contacts avec le syst&egrave;me d'exploitation Linux.
La connaissance de la technologie Beowulf ou d'un syst&egrave;me
d'exploitation plus complexe et de concepts r&eacute;seaux n'est
pas essentielle, mais des aper&ccedil;us de la programmation
parall&egrave;le sont bienvenus (apr&egrave;s tout, vous devez
avoir de bonnes raisons de lire ce document). Ce HOWTO ne
r&eacute;pondra pas &agrave; toutes les questions que vous pourriez
vous poser au sujet de Beowulf, mais, esp&eacute;rons-le, vous
donnera des id&eacute;es et vous guidera dans la bonne direction.
Le but de ce HOWTO est de fournir des informations de base, des
liens et des r&eacute;f&eacute;rences vers des documents plus
approfondis.</p>
<h2><a name="ss2.2">2.2 Qu'est-ce que Beowulf ?</a></h2>
<p><i>Famed was this Beowulf: far flew the boast of him, son of
Scyld, in the Scandian lands. So becomes it a youth to quit him
well with his father's friends, by fee and gift, that to aid him,
aged, in after days, come warriors willing, should war draw nigh,
liegemen loyal: by lauded deeds shall an earl have honor in every
clan.</i> Beowulf est le po&egrave;me &eacute;pique le plus ancien
en Anglais qui ait &eacute;t&eacute; conserv&eacute;. C'est
l'histoire d'un h&eacute;ros d'une grande force et d'un grand
courage qui a d&eacute;fait un monstre appel&eacute; Grendel. Voir
l' <a href="#history">Historique</a> pour en savoir plus sur le
h&eacute;ros Beowulf.</p>
<p>Il y a peut-&ecirc;tre de nombreuses d&eacute;finitions de
Beowulf, autant que de personnes qui construisent ou utilisent des
Superordinateurs Beowulf. Certains disent qu'ils peuvent appeler
leur syst&egrave;me Beowulf seulement s'il est construit de la
m&ecirc;me fa&ccedil;on que la machine d'origine de la NASA.
D'autres vont &agrave; l'extr&ecirc;me inverse et appellent ainsi
n'importe quel syst&egrave;me de stations qui ex&eacute;cutent du
code parall&egrave;le. Ma d&eacute;finition d'un Beowulf se situe
entre ces deux avis, et est fond&eacute;e sur de nombreuses
contributions dans la liste de diffusion Beowulf.</p>
<p>Beowulf est une architecture multi-ordinateurs qui peut
&ecirc;tre utilis&eacute;e pour la programmation parall&egrave;le.
Ce syst&egrave;me comporte habituellement un noeud serveur, et un
ou plusieurs noeuds clients connect&eacute;s entre eux &agrave;
travers Ethernet ou tout autre r&eacute;seau. C'est un
syst&egrave;me construit en utilisant des composants
mat&eacute;riels existants, comme tout PC capable de faire tourner
Linux, des adaptateurs Ethernet standards, et des switches. Il ne
contient aucun composant mat&eacute;riel propre et est
ais&eacute;ment reproductible. Beowulf utilise aussi des
&eacute;l&eacute;ments comme le syst&egrave;me d'exploitation
Linux, Parallel VirtualMachine (PVM) et Message Passing Interface
(MPI). Le noeud serveur contr&ocirc;le l'ensemble du cluster et
sert de serveur de fichiers pour les noeuds clients. Il est aussi
la console du cluster et la passerelle (gateway) vers le monde
ext&eacute;rieur. De grandes machines Beowulf peuvent avoir plus
d'un noeud serveur, et &eacute;ventuellement aussi d'autres noeuds
d&eacute;di&eacute;s &agrave; des t&acirc;ches
particuli&egrave;res, par exemple comme consoles ou stations de
surveillance. Dans de nombreux cas, les noeuds clients d'un
syst&egrave;me Beowulf sont idiots (dumb): plus ils sont idiots,
mieux ils sont. Les noeuds sont configur&eacute;s et
contr&ocirc;l&eacute;s par le noeud serveur, et ne font que ce
qu'on leur demande de faire. Dans une configuration client sans
disque (diskless), les noeuds clients ne connaissent m&ecirc;me pas
leur adresse IP ou leur nom jusqu'&agrave; ce que le serveur leur
dise qui ils sont. Une des principales diff&eacute;rences entre
Beowulf et un Cluster de Stations de travail (COW) est le fait que
Beowulf se comporte plus comme une simple machine plut&ocirc;t que
comme plusieurs stations de travail. Dans de nombreux cas, les
noeuds clients n'ont pas de claviers ni de moniteurs, et on n'y
acc&egrave;de que par une connection distante ou par un terminal
s&eacute;rie. Les noeux Beowulf peuvent &ecirc;tre envisag&eacute;s
comme un CPU + des ensembles de m&eacute;moires qui peuvent
&ecirc;tre branch&eacute;s dans le cluster, exactement comme un CPU
ou un module m&eacute;moire peut &ecirc;tre branch&eacute; dans une
carte m&egrave;re.</p>
<p>Beowulf n'est pas un ensemble de mat&eacute;riels
sp&eacute;cialis&eacute;s, une nouvelle topologie r&eacute;seau ou
le dernier hack du kernel. Beowulf est une technologie de
clustering d'ordinateurs Linux pour former un superordinateur
parall&egrave;le, virtuel. M&ecirc;me s'il y a de nombreux
paquetages comme des patches du noyau, PVM, les librairies MPI, et
des outils de configuration qui rendent l'architecture Beowulf plus
rapide, plus facile &agrave; configurer, et plus facilement
utilisable, on peut construire une machine de classe Beowulf en
utilisant une distribution Standard de Linux sans ajouter d'autres
logiciels. Si vous avez deux Linux en r&eacute;seau qui partagent
au moins le m&ecirc;me syst&egrave;me de fichier
<code>racine</code> via NFS, et qui se font confiance pour
ex&eacute;cuter des sessions distantes (rsh), alors on peut dire
que vous avez un simple Beowulf de deux noeuds.</p>
<h2><a name="ss2.3">2.3 Classification</a></h2>
<p>Les syst&egrave;mes Beowulf ont &eacute;t&eacute; construits
&agrave; partir de nombreux constituants. Pour des
consid&eacute;rations de performances, des composants moins communs
(i.e. produits par un seul fabricant) ont &eacute;t&eacute;
utilis&eacute;s. Afin de recenser les diff&eacute;rents types de
syst&egrave;mes et de rendre les discussions au sujet des machines
un peu plus faciles, nous proposons la m&eacute;thode simple de
classification suivante:</p>
<p>CLASSE I BEOWULF:</p>
<p>Cette classe concerne des machines faites
d'&eacute;l&eacute;ments globalement disponibles. Nous devrons
utiliser les tests de certification "Computer Shopper" pour
d&eacute;finir les composants d'assemblage. ("Computer Shopper" est
un mensuel sur les PC et leurs composants.) [NdT: US seulement ;
pour un &eacute;quivalent, on peut &eacute;voquer par exemple "PC
Direct".] Le test est le suivant:</p>
<p>Un Beowulf CLASSE I est une machine qui peut &ecirc;tre
assembl&eacute;e &agrave; partir de pi&egrave;ces trouv&eacute;es
dans au moins quatre journaux de publicit&eacute; de grande
diffusion.</p>
<p>Les avantages des syst&egrave;mes de CLASS I sont:</p>
<ul>
<li>le mat&eacute;riel est disponible de noubreuses sources (faible
co&ucirc;t, maintenance facile)</li>
<li>ne d&eacute;pendant pas d'un seul vendeur de
mat&eacute;riel</li>
<li>support des drivers par les commodit&eacute;s Linux</li>
<li>bas&eacute; habituellement sur des standards (SCSI, Ethernet,
etc.)</li>
</ul>
<p>Les d&eacute;savantages d'un syst&egrave;me de CLASSE I
sont:</p>
<ul>
<li>de meilleures performances peuvent n&eacute;cessiter du
mat&eacute;riel de CLASSE II</li>
</ul>
<p>CLASSE II BEOWULF</p>
<p>Un Beowulf CLASSE II Beowulf est simplement une machine qui ne
passe pas le test de certification "Computer Shopper". Ce n'est pas
une mauvaise chose. D'autre part, il s'agit plut&ocirc;t d'une
classification de la machine.</p>
<p>Les avantages d'un syst&egrave;me de CLASSE II sont:</p>
<ul>
<li>les performances peuvent &ecirc;tre assez bonnes !</li>
</ul>
<p>Les d&eacute;savantages des syst&egrave;mes de CLASSE II
sont:</p>
<ul>
<li>le support des drivers peut varier</li>
<li>reposent sur un seul vendeur de mat&eacute;riel</li>
<li>peuvent &ecirc;tre plus chers que les syst&egrave;mes de CLASSE
I.</li>
</ul>
<p>Une CLASSE n'est pas n&eacute;cessairement meilleure qu'une
autre. Cela d&eacute;pend surtout de vos besoins et de votre
budget. Cette classification des syst&egrave;mes sert seulement
&agrave; rendre les discussions sur les syst&egrave;mes Beowulf un
peu plus succintes. La "Conception du Syst&egrave;me" peut aider
&agrave; d&eacute;terminer quelle sorte de syst&egrave;me est le
plus appropri&eacute; &agrave; vos besoins.</p>
<h2><a name="s3">3. Aper&ccedil;u de l'Architecture</a></h2>
<h2><a name="ss3.1">3.1 A quoi cela ressemble-t-il ?</a></h2>
<p>Je pense que la meilleure fa&ccedil;on de d&eacute;crire
l'architecture d'un superordinateur Beowulf est d'utiliser un
exemple qui est tr&egrave;s proche du vrai Beowulf, mais aussi
familier &agrave; beaucoup d'administrateurs syst&egrave;mes.
L'exemple le plus proche d'une machine Beowulf est un Unix de
laboratoire avec un serveur et un certain nombre de clients. Pour
&ecirc;tre plus sp&eacute;cifique, j'utiliserai le DEC Alpha au
laboratoire d'informatique de la Facult&eacute; des Sciences de
l'USQ comme exemple. Le serveur est appel&eacute; <i>beldin</i> et
les machines clientes sont <i>scilab01</i>, <i>scilab02</i>,
<i>scilab03</i>, jusqu'&agrave; <i>scilab20</i>. Tous les clients
ont une copie locale du syst&egrave;me d'exploitation Digital Unix
4.0 install&eacute;, mais ont l'espace disque utilisateur
(<code>/home</code>) et <code>/usr/local</code> du serveur via NFS
(Network File System). Chaque client a une entr&eacute;e pour le
serveur et tous les autres clients dans son fichier
<code>/etc/hosts.equiv</code>: ainsi tous les clients peuvent
ex&eacute;cuter une cession distante (rsh) vers tout autre. La
machine serveur est un serveur NIS pour tout le laboratoire, ainsi
les informations des comptes sont les m&ecirc;mes sur toutes les
machines. Une personne peut s'asseoir &agrave; la console de
<i>scilab02</i>, se logue, et a le m&ecirc;me environnement que
s'il &eacute;tait logu&eacute; sur le serveur, ou <i>scilab15</i>.
La raison pour laquelle les clients ont la m&ecirc;me
pr&eacute;sentation est que le syst&egrave;me d'exploitation est
install&eacute; et configur&eacute; de la m&ecirc;me fa&ccedil;on
sur toutes les machines, les espaces <code>/home</code> et
<code>/usr/local</code> sont physiquement sur le m&ecirc;me serveur
et les clients y acc&egrave;dent via NFS. Pour plus d'informations
sur NIS et NFS, reportez-vous &agrave; <a href=
"http://sunsite.unc.edu/LDP/HOWTO/NIS-HOWTO.html">NIS</a> et
<a href=
"http://sunsite.unc.edu/LDP/HOWTO/NFS-HOWTO.html">NFS</a>.</p>
<h2><a name="ss3.2">3.2 Comment utiliser les autres noeuds
?</a></h2>
<p>Maintenant que nous avons une vision correcte de l'architecture
du syst&egrave;me, regardons comment nous pouvons utiliser les
cycles CPU des machines dans le laboratoire. Toute personne peut se
loguer sur n'importe laquelle des machines, et lancer un programme
dans son r&eacute;pertoire de base, mais peut aussi &eacute;clater
la m&ecirc;me t&acirc;che sur diff&eacute;rentes machines
simplement en ex&eacute;cutant un shell distant. Par exemple, si
nous voulons calculer la somme des racines carr&eacute;es de tous
les entiers inclus strictement entre 1 et 10, nous &eacute;crivons
un simple programme appel&eacute; <code>sigmasqrt</code> (voir
<a href="#sigmasqrt">code source</a>) qui fait cela exactement.
Pour calculer la somme des racines carr&eacute;es des nombres de 1
&agrave; 10, nous ex&eacute;cutons :</p>
<pre>
[jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 10
22.468278

real    0m0.029s
user    0m0.001s
sys     0m0.024s
</pre>
La commande <code>time</code> nous permet de v&eacute;rifier le
temps mis en ex&eacute;cutant cette t&acirc;che. Comme nous pouvons
le voir, cet exemple a pris seulement une petite fraction de
seconde (0.029 sec) pour s'ex&eacute;cuter, mais que se passe-t-il
si je veux ajouter la racine carr&eacute;e des entiers de 1
&agrave; 1 000 000 000 ? Essayons ceci, et calculons le temps
&eacute;coul&eacute;:
<pre>
[jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 1000000000
21081851083600.559000

real    16m45.937s
user    16m43.527s
sys     0m0.108s
</pre>
<p>Cette fois, le temps d'ex&eacute;cution de ce programme est
consid&eacute;rablement sup&eacute;rieur. La question
&eacute;vidente qui se pose est: est-il possible de diminuer le
temps d'ex&eacute;cution de cette t&acirc;che et comment ? La
r&eacute;ponse &eacute;vidente est de d&eacute;couper la
t&acirc;che en un ensemble de sous-t&acirc;ches et
d'ex&eacute;cuter ces sous-t&acirc;ches en parall&egrave;le sur
tous les ordinateurs. Nous pouvons s&eacute;parer la grande
t&acirc;che d'addition en 20 parties en calculant un intervalle de
racines carr&eacute;es et en les additionnant sur un seul noeud.
Quand tous les noeuds ont fini les calculs et retournent leurs
r&eacute;sultats, les 20 nombres peuvent &ecirc;tre
additionn&eacute;s ensemble et fournir la solution finale. Avant de
lancer ce processus, nous allons cr&eacute;er un "named pipe" qui
sera utilis&eacute; par tous les processus pour &eacute;crire leurs
r&eacute;sultats:</p>
<pre>
[jacek@beldin sigmasqrt]$ mkfifo output
[jacek@beldin sigmasqrt]$ ./prun.sh &amp; time cat output | ./sum
[1] 5085
21081851083600.941000
[1]+  Done                    ./prun.sh

real    0m58.539s
user    0m0.061s
sys     0m0.206s
</pre>
<p>Cette fois, cela prend 58.5 secondes. C'est le temps qui a
&eacute;t&eacute; n&eacute;cessaire entre le d&eacute;marrage du
processus et le moment o&ugrave; les noeuds ont fini leurs calculs
et &eacute;crit leurs r&eacute;sultats dans la pipe. Ce temps
n'inclut pas l'addition finale des 20 nombres, mais il
repr&eacute;sente une petite fraction de seconde et peut &ecirc;tre
ignor&eacute;. Nous pouvons voir qu'il y a un avantage significatif
&agrave; ex&eacute;cuter une t&acirc;che en parall&egrave;le. En
fait la t&acirc;che en parall&egrave;le s'est
ex&eacute;cut&eacute;e 17 fois plus vite, ce qui est tr&egrave;s
raisonnable pour un facteur 20 d'augmentation du nombre de CPU. Le
but de l'exemple pr&eacute;c&eacute;dent est d'illustrer la
m&eacute;thode la plus simple de parall&eacute;liser du code
concurrent. En pratique, des exemples aussi simples sont rares et
diff&eacute;rentes techniques (les API de PVM et PMI) sont
utilis&eacute;es pour obtenir le parall&eacute;lisme.</p>
<h2><a name="ss3.3">3.3 En quoi un Beowulf diff&egrave;re-t-il d'un
COW ?</a></h2>
<p>Le laboraroire d'informatique d&eacute;crit plus haut est un
exemple parfait d'un cluster de stations (COW). Qu'est-ce qui rend
donc Beowulf si sp&eacute;cial et en quoi diff&egrave;re-t-il d'un
COW ? En r&eacute;alit&eacute; il n'y a pas beaucoup de
diff&eacute;rence, mais un Beowulf a quelques
caract&eacute;ristiques uniques. La premi&egrave;re est que dans la
plupart des cas, les noeuds clients dans un cluster Beowulf n'ont
pas de clavier, de souris, de carte graphique ni de moniteur. Tous
les acc&egrave;s aux noeuds clients sont faits par une connection
distante du noeud serveur, un noeud d&eacute;di&eacute; &agrave;
une console, ou une console s&eacute;rie. Cela parce qu'il n'y a
aucun besoin pour un noeud client d'acc&eacute;der &agrave; des
machines en dehors du cluster, ni pour des machines en dehors du
cluster d'acc&eacute;der &agrave; des noeuds clients directement;
c'est une pratique habituelle que les noeuds clients utilisent des
adresses IP priv&eacute;es comme les plages d'adresses 10.0.0.0/8
ou 192.168.0.0/16 (RFC 1918 <a href=
"http://www.alternic.net/rfcs/1900/rfc1918.txt.html">http://www.alternic.net/rfcs/1900/rfc1918.txt.html</a>).
D'habitude la seule machine qui est aussi connect&eacute;e au monde
externe en utilisant une seconde carte r&eacute;seau est le noeud
serveur. La fa&ccedil;on la plus habituelle d'acc&eacute;der au
syst&egrave;me est soit d'utiliser la console du serveur
directement, soit de faire un telnet ou un login distant (rlogin)
sur le noeud serveur d'une station personnelle. Une fois sur
celui-ci, les utilisateurs peuvent &eacute;diter et compiler leur
code, et aussi distribuer les t&acirc;ches sur tous les noeuds du
cluster. Dans la plupart des cas, les COW sont utilis&eacute;es
pour des calculs parall&egrave;les la nuit et les week-ends, quand
les stations ne sont pas utilis&eacute;es pendant les
journ&eacute;es de travail, utilisant ainsi les p&eacute;riodes de
cycles libres des CPU. D'autre part, le Beowulf est une machine
d&eacute;di&eacute;e au calcul parall&egrave;le, et
optimis&eacute;e pour cette t&acirc;che. Il donne aussi un meilleur
rapport prix/performance puisqu'il est constitu&eacute; de
composants grand public et qu'il tourne principalement &agrave;
partir de logiciels libres. Beowulf donne aussi davantage l'image
d'une seule machine, ce qui permet aux utilisateurs de voir le
cluster Beowulf comme une seule station de calcul.</p>
<h2><a name="s4">4. Conception du Syst&egrave;me</a></h2>
<p>Avant d'acheter du mat&eacute;riel, il serait de bon aloi de
consid&eacute;rer le design de votre syst&egrave;me. Il y a deux
approches mat&eacute;rielles qui sont impliqu&eacute;es dans le
design d'un syst&egrave;me Beowulf: le type de noeuds ou
d'ordinateurs que vous allez utiliser, et la m&eacute;thode que
vous allez utiliser pour vous connecter aux noeuds d'ordinateurs.
Il n'y a qu'une seule approche logicielle qui puisse affecter votre
choix mat&eacute;riel: la librairie de communication ou API. Une
discussion plus d&eacute;taill&eacute;e sur le mat&eacute;riel et
les logiciels de communication est fournie plus loin dans ce
document.</p>
<p>Alors que le nombre de choix n'est pas grand, il y a des
consid&eacute;rations de conception qui doivent &ecirc;tre prises
pour la construction d'un cluster Beowulf. La science (ou art) de
la "programmation parall&egrave;le" &eacute;tant l'objet de
nombreuses interpr&eacute;tations, une introduction est fournie
plus bas. Si vous ne voulez pas lire les connaissances de base,
vous pouvez survoler cette section, mais nous vous conseillons de
lire la section <a href="#suitability">Convenance</a> avant tout
choix d&eacute;fninitif de mat&eacute;riel.</p>
<h2><a name="ss4.1">4.1 Brefs rappels sur la programmation
parall&egrave;le</a></h2>
<p>Cette section fournit des informations g&eacute;n&eacute;rales
sur les concepts de la programmation parall&egrave;le. Ceci n'est
PAS exhaustif, ce n'est pas une description compl&egrave;te de la
programmation parall&egrave;le ou de sa technologie. C'est une
br&egrave;ve description des enjeux qui peuvent influer fortement
sur le concepteur d'un Beowulf, ou sur son utilisateur.</p>
<p>Lorsque vous d&eacute;ciderez de construire votre Beowulf, de
nombreux points d&eacute;crits plus bas deviendront importants dans
votre processus de choix. A cause de la nature de ses "composants",
un Superordinateur Beowulf n&eacute;cessite de prendre de nombreux
facteurs en compte, car maintenant ils d&eacute;pendent de nous. En
g&eacute;n&eacute;ral, il n'est pas du tout difficile de comprendre
les objectifs impliqu&eacute;s dans la programmation
parall&egrave;le. D'ailleurs, une fois que ces objectifs sont
compris, vos attentes seront plus r&eacute;alistes, et le
succ&egrave;s plus probable. Contrairement au "monde
s&eacute;quentiel", o&ugrave; la vitesse du processeur est
consid&eacute;r&eacute;e comme le seul facteur important, la
vitesse des processeurs dans le "monde parall&egrave;le" n'est que
l'un des param&egrave;tres qui d&eacute;termineront les
performances et l'efficacit&eacute; du syst&egrave;me dans son
ensemble.</p>
<h2><a name="ss4.2">4.2 Les m&eacute;thodes de programmation
parall&egrave;le</a></h2>
<p>La programmation parall&egrave;le peut prendre plusieurs formes.
Du point de vue de l'utilisateur, il est important de tenir compte
des avantages et inconv&eacute;nients de chaque
m&eacute;thodologie. La section suivante tente de fournir quelques
aper&ccedil;us sur les m&eacute;thodes de programmation
parall&egrave;le et indique o&ugrave; la machine Beowulf fait
d&eacute;faut dans ce continuum.</p>
<h3>Pourquoi plus d'un CPU ?</h3>
<p>R&eacute;pondre &agrave; cette question est important. Utiliser
8 CPU pour lancer un traitement de texte sonne comme "trop inutile"
-- et ce l'est. Et qu'en est-il pour un serveur web, une base de
donn&eacute;es, un programme de ray-tracing, ou un planificateur de
projets ? Peut-&ecirc;tre plus de CPU peuvent-ils am&eacute;liorer
les performances. Mais qu'en est-il de simulations plus complexes,
de la dynamique des fluides, ou d'une application de Fouille de
Donn&eacute;es (Data Mining) ? Des CPU suppl&eacute;mentaires sont
absolument n&eacute;cessaires dans ces situations. D'ailleurs, de
multiples CPU sont utilis&eacute;s pour r&eacute;soudre de plus en
plus de probl&egrave;mes.</p>
<p>La question suivante est habituellement: "Pourquoi ai-je besoin
de deux ou quatre CPU ? Je n'ai qu'&agrave; attendre le m&eacute;ga
super rapide processeur 986." Il y a de nombreuses raisons:</p>
<ol>
<li>Avec l'utilisation de syst&egrave;mes d'exploitations
multi-t&acirc;ches, il est possible de faire plusieurs choses en
m&ecirc;me temps. Cela est un "parall&eacute;lisme" naturel qui est
exploit&eacute; par plus d'un CPU de bas prix.</li>
<li>La vitesse des processeurs double tous les 18 mois mais qu'en
est-il de la vitesse de la m&eacute;moire ? Malheureusement,
celle-ci n'augmente pas aussi vite que celle des processeurs.
Gardez &agrave; l'esprit que beaucoup d'applications ont besoin de
m&eacute;moire autre que celle du cache processeur et de
l'acc&egrave;s disque. Faire les choses en parall&egrave;le est une
fa&ccedil;on de contourner ces limitations.</li>
<li>Les pr&eacute;dictions indiquent que la vitesse des processeurs
ne continuera pas &agrave; doubler tous les 18 mois apr&egrave;s
l'an 2005. Il y a divers obstacles &agrave; surmonter pour
maintenir ce rythme.</li>
<li>Suivant l'application, la programmation parall&egrave;le peut
acc&eacute;l&eacute;rer les choses de 2 &agrave; 500 fois (et
m&ecirc;me plus dans certains cas). De telles performances ne sont
pas disponibles sur un seul processeur. M&ecirc;me les
Superordinateurs qui utilisaient &agrave; un moment un seul
processeur sp&eacute;cialis&eacute; tr&egrave;s rapide sont
maintenant constitu&eacute;s de nombreux CPU plus banals.</li>
</ol>
<p>Si vous avez besoin de vitesse -- &agrave; cause d'un
probl&egrave;me li&eacute; au calcul et/ou aux
entr&eacute;es/sorties --, il vaut la peine de consid&eacute;rer
l'approche parall&egrave;le. Comme le calcul parall&egrave;le est
impl&eacute;ment&eacute; selon de nombreuses voies, r&eacute;soudre
votre probl&egrave;me en parall&egrave;le n&eacute;cessitera de
prendre quelques d&eacute;cisions importantes. Ces d&eacute;cisions
peuvent affecter dramatiquement la protabilit&eacute;, la
performance, et le co&ucirc;t de votre application.</p>
<p>Avant d'&ecirc;tre par trop technique, regardons un vrai
"probl&egrave;me de calcul parall&egrave;le" en utilisant un
exemple qui nous est familier: faire la queue &agrave; une
caisse.</p>
<h3>La "caisse" en programmation parall&egrave;le</h3>
<p>Consid&eacute;rons un grand magasin avec 8 caisses
regroup&eacute;es devant le magasin. Imaginons que chaque caisse
est un CPU et chaque client un programme informatique. La taille du
programme (quantit&eacute; de calcul) est la taille de la commande
de chaque client. Les analogies suivantes peuvent &ecirc;tre
utilis&eacute;es pour illustrer les concepts de la programmation
parall&egrave;le:</p>
<h3>Syst&egrave;mes d'exploitation Mono-T&acirc;che:</h3>
<p>Une caisse ouverte (et en service) qui ne peut traiter qu'un
client &agrave; la fois.</p>
<p>Exemple en Informatique : MS DOS</p>
<h3>Syst&egrave;mes d'exploitation Multi-T&acirc;ches:</h3>
<p>Une caisse ouverte, mais maintenant nous pouvons traiter une
partie de chaque commande &agrave; un instant donn&eacute;, aller
&agrave; la personne suivante et traiter une partie de sa commande.
Tout le monde "semble" avancer dans la queue en m&ecirc;me temps,
mais s'il n'y a personne dans la queue, vous serez servi plus
vite.</p>
<p>Exemple en Informatique : UNIX, NT avec un seul CPU</p>
<h3>Syst&egrave;mes d'exploitation Multi-T&acirc;ches avec
plusieurs CPU:</h3>
<p>Maintenant on ouvre plusieurs caisses dans le magasin. Chaque
commande peut &ecirc;tre trait&eacute;e par une caisse
diff&eacute;rente et la queue peut avancer plus vite. Ceci est
appel&eacute; SMP - Gestion Multiple Sym&eacute;trique (Symmetric
Multi-processing). M&ecirc;me s'il y a plus de caisses ouvertes,
vous n'avancerez pas plus vite dans la queue que s'il n'y avait
qu'une seule caisse.</p>
<p>Exemple en Informatique : UNIX, NT avec plusieurs CPU</p>
<h3>Sous-t&acirc;ches (Threads) sur les autres CPU d'un
Syst&egrave;me d'exploitation Multi-T&acirc;ches:</h3>
<p>Si vous "s&eacute;parez" les objets de votre commande, vous
pouvez &ecirc;tre capable d'avancer plus vite en utilisant
plusieurs caisses en m&ecirc;me temps. D'abord, nous postulons que
vous achetez une grande quantit&eacute; d'objets, parce que le
temps que vous investirez pour "s&eacute;parer" votre commande doit
&ecirc;tre regagn&eacute; en utilisant plusieurs caisses. En
th&eacute;orie, vous devriez &ecirc;tre capables de vous
d&eacute;placer dans la queue "n" fois plus vite qu'avant,
o&ugrave; "n" est le nombre de caisses. Quand les caissiers ont
besoin de faire des sous-totaux, ils peuvent &eacute;changer
rapidement les informations visuellement et en discutant avec
toutes les autres caisses "locales". Ils peuvent aussi aller
chercher directement dans les registres des autres caisses pour
trouver les informations dont ils ont besoin pour travailler plus
vite. La limite &eacute;tant le nombre de caisses qu'un magasin
peut effectivement installer.</p>
<p>La loi de Amdals montre que l'acc&eacute;l&eacute;ration de
l'application est li&eacute;e &agrave; la portion
s&eacute;quentielle la plus lente ex&eacute;cut&eacute;e par le
programme (NdT: i.e. major&eacute;e par la t&acirc;che la plus
lente).</p>
<p>Exemple en Informatique : UNIX ou NT avec plusieurs CPU sur la
m&ecirc;me carte-m&egrave;re avec des programmes multi-threads.</p>
<h3>Envoyer des messages sur des Syst&egrave;mes d'exploitation
Multi-T&acirc;ches avec plusieurs CPU:</h3>
<p>De fa&ccedil;on &agrave; am&eacute;liorer la performance, la
Direction ajoute 8 caisses &agrave; l'arri&egrave;re du magasin.
Puisque les nouvelles caisses sont loin du devant du magasin, les
caissiers doivent t&eacute;l&eacute;phoner pour envoyer leurs
sous-totaux vers celui-ci. La distance ajoute un d&eacute;lai
suppl&eacute;mentaire (en temps) dans la communication entre
caissiers, mais si la communication est minimis&eacute;e, cela ne
pose pas de probl&egrave;me. Si vous avez vraiment une grosse
commande, une qui n&eacute;cessite toutes les caisses, alors comme
avant votre vitesse peut &ecirc;tre am&eacute;lior&eacute;e en
utilisant toutes les caisses en m&ecirc;me temps, le temps
soppl&eacute;mentaire devant &ecirc;tre pris en compte. Dans
certains cas, le magasin peut n'avoir que des caisses (ou des
&icirc;lots de caisses) localis&eacute;s dans tout le magasin :
chaque caisse (ou &icirc;lot) doit communiquer par
t&eacute;l&eacute;phone. Puisque tous les caissiers peuvent
discutter par t&eacute;l&eacute;phone, leur emplacement importe
peu.</p>
<p>Exemple en Informatique : Une ou plusieurs copies d'UNIX ou NT
avec plusieurs CPU sur la m&ecirc;me, ou diff&eacute;rentes
cartes-m&egrave;res communiquant par messages.</p>
<p>Les sc&eacute;narios pr&eacute;c&eacute;dents, m&ecirc;me s'ils
ne sont pas exacts, sont une bonne repr&eacute;sentation des
contraintes qui agissent sur les syst&egrave;mes parall&egrave;les.
Contrairement aux machines avec un seul CPU (ou caisse), la
communication est importante.</p>
<h2><a name="ss4.3">4.3 Architectures pour le calcul
parall&egrave;le</a></h2>
<p>Les m&eacute;thodes et architectures habituelles de la
programmation parall&egrave;le sont repr&eacute;sent&eacute;es
ci-dessous. M&ecirc;me si cette description n'est en aucun cas
exhaustive, elle est suffisante pour comprendre les
imp&eacute;ratifs de base dans la conception d'un Beowulf.</p>
<h3>Architectures Mat&eacute;rielles</h3>
<p>Il y a typiquement deux fa&ccedil;ons d'assembler un ordinateur
parall&egrave;le:</p>
<ol>
<li>La m&eacute;moire locale des machines qui communiquent par
messages (Clusters Beowulf)</li>
<li>Les machines &agrave; m&eacute;moire partag&eacute;e qui
communiquent &agrave; travers la m&eacute;moire (machines SMP)</li>
</ol>
<p>Un Beowulf typique est une collection de machines
mono-processeurs connect&eacute;es utilisant un r&eacute;seau
Ethernet rapide, et qui est ainsi une machine &agrave;
m&eacute;moire locale. Une machine &agrave; 4 voies SMP est une
machine &agrave; m&eacute;moire partag&eacute;e et peut &ecirc;tre
utilis&eacute;e pour du calcul parall&egrave;le -- les applications
parall&egrave;les communiquant via la m&eacute;moire
partag&eacute;e. Comme pour l'analogie du grand magasin, les
machines &agrave; m&eacute;moire locale (donc &agrave; caisse
individuelle) peuvent &ecirc;tre scalairis&eacute;es jusqu'&agrave;
un grand nombre de CPU ; en revanche, le nombre de CPU que les
machines &agrave; m&eacute;moire partag&eacute;e peuvent avoir (le
nombre de caisses que vous pouvez placer en un seul endroit) peut
se trouver limit&eacute; &agrave; cause de l'utilisation (et/ou de
la vitesse) de la m&eacute;moire.</p>
<p>Il est toutefois possible de connecter des machines &agrave;
m&eacute;moire partag&eacute;e pour cr&eacute;er une machine
&agrave; m&eacute;moire partag&eacute;e "hybride". Ces machines
hybrides "ressemblent" &agrave; une grosse machine SMP pour
l'utilisateur et sont souvent appel&eacute;es des machines NUMA
(acc&egrave;s m&eacute;moire non uniforme) parce que la
m&eacute;moire globale vue par le programmeur et partag&eacute;e
par tous les CPU peut avoir diff&eacute;rents temps d'acc&egrave;s.
A un certain niveau d'ailleurs, une machine NUMA doit "passer des
messages" entre les groupes de m&eacute;moires
partag&eacute;es.</p>
<p>Il est aussi possible de connecter des machines SMP en tant que
noeuds de m&eacute;moire locale. Typiquement, les
cartes-m&egrave;res de CLASSE I ont soit 2 ou 4 CPU et sont souvent
utilis&eacute;es comme moyens pour r&eacute;duire le co&ucirc;t
global du syst&egrave;me. L'arrangeur (scheduler) interne de Linux
d&eacute;termine combien de ces CPU sont partag&eacute;s.
L'utilisateur ne peut (&agrave; ce jour) affecter une t&acirc;che
&agrave; un processeur SMP sp&eacute;cifique. Cet utilisateur peut
quand m&ecirc;me d&eacute;marrer deux processus ind&eacute;pendants
ou un programme multi-threads et s'attendre &agrave; voir une
am&eacute;lioration de performance par rapport &agrave; un
syst&egrave;me &agrave; simple CPU.</p>
<h3>Architectures Logicielles et API</h3>
<p>Il y a basiquement deux fa&ccedil;ons d'"exprimer" la
concurrence dans un programme:</p>
<ol>
<li>En envoyant des Messages entre les processeurs</li>
<li>En utilisant les threads du syst&egrave;me d'exploitation
(natives)</li>
</ol>
<p>D'autres m&eacute;thodes existent, mais celles-l&agrave; sont le
plus g&eacute;n&eacute;ralement employ&eacute;es. Il est important
de se souvenir que l'expression de concurrence n'est pas
n&eacute;cessairement contr&ocirc;l&eacute;e par la couche
mat&eacute;rielle. Les Messages et les Threads peuvent &ecirc;tre
impl&eacute;ment&eacute;s sur des SMPn NUMA-SMP, et clusters --
m&ecirc;me si, comme expliqu&eacute; ci-dessous,
l'efficacit&eacute; et la portabilit&eacute; sont des facteurs
importants.</p>
<h3>Messages</h3>
<p>Historiquement, la technologie de passage de messages
refl&eacute;tait les d&eacute;buts des ordinateurs
parall&egrave;les &agrave; m&eacute;moire locale. Les messages
n&eacute;cessitent la copie des donn&eacute;es tandis que les
Threads utilisent des donn&eacute;es &agrave; la place. Le temps de
latence et la vitesse &agrave; laquelle les messages peuvent
&ecirc;tre copi&eacute;s sont les facteurs limitants des
mod&egrave;les de passage de messages. Un message est assez simple:
des donn&eacute;es et un processeur de destination. Des API de
passage de messages r&eacute;pandues sont entre autres <a href=
"http://www.epm.ornl.gov/pvm">PVM</a> ou <a href=
"http://www.mcs.anl.gov/Projects/mpi/index.html">MPI</a>. Le
passage de Messages peut &ecirc;tre impl&eacute;ment&eacute; avec
efficacit&eacute; en utilisant ensemble des Threads et des Messages
entre SMP et machines en cluster. L'avantage d'utiliser les
messages sur une machine SMP, par rapport aux Threads, est que si
vous d&eacute;cidez d'utiliser des clusters dans le futur, il est
facile d'ajouter des machines ou de scalairiser vos
applications.</p>
<h3>Threads</h3>
<p>Les Threads ont &eacute;t&eacute; d&eacute;velopp&eacute;s sur
les syst&egrave;mes d'exploitation parce que la m&eacute;moire
partag&eacute;e des SMP (moutiprocessorage symm&eacute;trique)
permettait une communication tr&egrave;s rapide et une
synchronisation de la m&eacute;moire partag&eacute;e entre les
parties d'un programme. Les Threads marchent bien sur les
syst&egrave;mes SMP parce que la communication a lieu &agrave;
travers la m&eacute;moire partag&eacute;e. Pour cette raison,
l'utilisateur doit isoler les donn&eacute;es locales des
donn&eacute;es globales, sinon les programmes ne fonctionneront pas
correctement. Cela est en contraste avec les messages: une grande
quantit&eacute; de copie peut &ecirc;tre &eacute;limin&eacute;e
avec les threads car les donn&eacute;es sont partag&eacute;es entre
les processus (threads). Linux impl&eacute;mente les Threads POSIX.
Le probl&egrave;me avec les Threads vient du fait qu'il est
difficile de les &eacute;tendre au-del&agrave; d'une machine SMP,
et, comme les donn&eacute;es sont partag&eacute;es entre les CPU,
la gestion de la coh&eacute;rence du cache peut contribuer &agrave;
le charger. Etendre les Threads au-del&agrave; des limites des
performances des SMP n&eacute;cessite la technologie NUMA qui est
ch&egrave;re et n'est pas nativement support&eacute;e par Linux.
Impl&eacute;menter des Threads par dessus les messages a
&eacute;t&eacute; fait ( <a href=
"http://syntron.com/ptools/ptools_pg.htm">(http://syntron.com/ptools/ptools_pg.htm)</a>),
mais les Threads sont souvent inefficients une fois
impl&eacute;ment&eacute;s en utilisant des messages.</p>
<p>On peut r&eacute;sumer ainsi les performances:</p>
<pre>
          performance        performance
          machine SMP     cluster de machines  scalabilit&eacute;
          -----------     -------------------  -----------
messages     bonne             meilleure        meilleure

threads    meilleure           mauvaise*        mauvaise*

* n&eacute;cessite une technologie NUMA co&ucirc;teuse.
</pre>
<h3>Architecture des Applications</h3>
<p>Pour ex&eacute;cuter une application en parall&egrave;le sur des
CPU multiples, celle-ci doit &ecirc;tre explicitement
d&eacute;coup&eacute;e en parties concurrentes. Une application
standard mono-CPU ne s'ex&eacute;cutera pas plus rapidement
m&ecirc;me si elle est ex&eacute;cut&eacute;e sur une machine
multi-processeurs. Certains outils et compilateurs peuvent
d&eacute;couper les programmesn mais la parall&eacute;lisation
n'est pas une op&eacute;ration "plug and play". Suivant
l'application, la parall&eacute;lisation peut &ecirc;tre facile,
extr&ecirc;mement difficile, voire impossible suivant les
contraintes de l'algorithme.</p>
<p>Avant de parler des besoins applicatifs, il nous faut introduire
le concept de Convenance (Suitability).</p>
<h2><a name="suitability"></a> <a name="ss4.4">4.4
Convenance</a></h2>
<p>Beaucoup de questions au sujet du calcul parall&egrave;le ont la
m&ecirc;me r&eacute;ponse:</p>
<p>"Cela d&eacute;pend enti&egrave;rement de l'application."</p>
<p>Avant de passer directement aux opportunit&eacute;s, il y a une
distinction tr&egrave;s importante qui doit &ecirc;tre faite: la
diff&eacute;rence entre CONCURRENT et PARALLELE. Pour clarifier
cette discussion, nous allons d&eacute;finir ces deux termes
ainsi:</p>
<p>les parties CONCURRENTES d'un programme sont celles qui peuvent
&ecirc;tre calcul&eacute;es ind&eacute;pendamment.</p>
<p>Les parties PARALLELES d'un programme sont celles qui sont
ex&eacute;cut&eacute;es sur des &eacute;l&eacute;ments de calculs
au m&ecirc;me moment.</p>
<p>La distinction est tr&egrave;s importante, parce que la
CONCURRENCE est une propri&eacute;t&eacute; d'un programme et
l'efficacit&eacute; en PARALLELISME est une propri&eacute;t&eacute;
de la machine. Id&eacute;alement, l'ex&eacute;cution en
parall&egrave;le doit produire des performances plus grandes. Le
facteur limitant les performances en parall&egrave;le est la
vitesse de communication et le temps de latence entre les noeuds de
calcul. (Le temps de latence existe aussi dans les applications TMP
thread&eacute;es &agrave; cause de la coh&eacute;rence du cache).
De nombreux tests de performances communs sont hautement
parall&egrave;les, et ainsi la communication et le temps de latence
ne sont pas les points importants. Ce type de probl&egrave;me peut
&ecirc;tre appel&eacute; "&eacute;videmment parall&egrave;le".
D'autres applications ne sont pas si simples et ex&eacute;cuter des
parties CONCURRENTES du programme en PARALLELE peut faire en sorte
que le programme fonctionne plus lentement, et ainsi d&eacute;caler
toute performance de gain dans d'autres parties CONCURRENTES du
programme. En termes plus simples, le co&ucirc;t en temps de
communication doit en p&acirc;tir au profit de celui gagn&eacute;
en temps de calcul, sinon l'ex&eacute;cution PARALLELE des parties
CONCURRENTES est inefficace.</p>
<p>La t&acirc;che du programmeur est de d&eacute;terminer quelles
parties CONCURRENTES le programmeur DOIT ex&eacute;cuter en
PARALLELE et pour quelles parties il NE DOIT PAS le faire. Sa
r&eacute;ponse d&eacute;terminera l'EFFICACITE de l'application. Le
graphe suivant r&eacute;sume la situation pour le programmeur:</p>
<pre>



         | *
         | *
         | *
 % des   | *
 appli-  |  *
 cations |  *
         |  *
         |  *
         |    *
         |     *
         |      *
         |        ****
         |            ****
         |                ********************
         +-----------------------------------
          temps de communication/temps de calcul
</pre>
<p>Dans un ordinateur parall&egrave;le parfait, le rapport
communication/calcul devrait &ecirc;tre &eacute;gal et tout ce qui
est CONCURRENT pourrait &ecirc;tre impl&eacute;ment&eacute; en
PARALLELE. Malheureusement, les vrais ordinateurs
parall&egrave;les, incluant les machines &agrave; m&eacute;moire
partag&eacute;e, sont sujets aux effets d&eacute;crits dans ce
graphe. En concevant un Beowulf, l'utilisateur devrait garder
celui-ci en t&ecirc;te parce que la performance d&eacute;pend du
rapport entre le temps de communication et le temps de calcul pour
un ORDINATEUR PARALLELE SPECIFIQUE. Les applications peuvent
&ecirc;tre portables entre les ordinateurs parall&egrave;les, mais
il n'y a aucune garantie qu'elles seront efficaces sur une
plateforme diff&eacute;rente.</p>
<p>EN GENERAL, IL N'EXISTE PAS DE PROGRAMME PORTABLE EFFICACE EN
PARALLELE</p>
<p>Il y a encore une autre cons&eacute;quence au graphe
pr&eacute;c&eacute;dent. Puisque l'efficacit&eacute; d&eacute;pend
du rapport communication/calcul, changer juste un composant du
rapport ne signifie pas n&eacute;cessairement qu'une application
s'ex&eacute;cutera plus rapidement. Un changement de vitesse
processeur, en gardant la m&ecirc;me vitesse de communication, peut
avoir des effets inattendus sur votre programme. Par exemple,
doubler ou tripler la vitesse du processeur, en gardant la
m&ecirc;me vitesse de communication, peut maintenant rendre des
parties de votre programme qui sont efficaces en PARALLELE, plus
efficaces si elles &eacute;taient ex&eacute;cut&eacute;es
SEQUENTIELLEMENT. Cela dit, il se peut qu'il soit plus rapide
maintenant d'ex&eacute;cuter les parties qui &eacute;taient avant
PARALLELES en tant que SEQUENTIELLES. D'autant plus
qu'ex&eacute;cuter des parties inefficaces en PARALLELE
emp&ecirc;chera votre application d'atteindre sa vitesse maximale.
Ainsi, en ajoutant un processeur plus rapide, vous avez
peut-&ecirc;tre ralenti votre application (vous enp&ecirc;chez
votre nouveau CPU de fonctionner &agrave; sa vitesse maximale pour
cette application).</p>
<p>UPGRADER VERS UN CPU PLUS RAPIDE PEUT REELLEMENT RALENTIR VOTRE
APPLICATION</p>
<p>Donc, en conclusion, pour savoir si oui ou non vous pouvez
utiliser un environnement mat&eacute;riel parall&egrave;le, vous
devez avoir un bon aper&ccedil;u des capacit&eacute;s d'une machine
particuli&egrave;re pour votre application. Vous devez tenir compte
de beaucoup de facteurs: vitesse de la CPU, compilateur, API de
passage de messages, r&eacute;seau... Notez que se contenter
d'optimiser une application ne donne pas toutes les informations.
Vous pouvez isoler une lourde partie de calcul de votre programme,
mais ne pas conna&icirc;tre son co&ucirc;t au niveau de la
communication. Il se peut que pour un certain syst&egrave;me, le
co&ucirc;t de communication ne rende pas efficace de
parall&eacute;liser ce code.</p>
<p>Une note finale sur une erreur commune: on dit souvent qu'"un
programme est PARALLELISE", mais en r&eacute;alit&eacute; seules
les parties CONCURRENTES ont &eacute;t&eacute; identifi&eacute;es.
Pour toutes les raisons pr&eacute;c&eacute;dentes, le programme
n'est pas PARALLELISE. Une PARALLELISATION efficace est une
propri&eacute;t&eacute; de la machine.</p>
<h2><a name="ss4.5">4.5 Ecrire et porter des logiciels
parall&egrave;les</a></h2>
<p>A partir du mmoment o&ugrave; vous avez d&eacute;cid&eacute; de
concevoir et de construire un Beowulf, consid&eacute;rer un instant
votre application en accord avec les observations
pr&eacute;c&eacute;dentes est une bonne id&eacute;e.</p>
<p>En g&eacute;n&eacute;ral, vous pouvez faire deux choses:</p>
<ol>
<li>Y aller et construire un Beowulf CLASSE I et apr&egrave;s y
ajuster votre application. Ou ex&eacute;cuter des applications
parall&egrave;les que vous savez fonctionner sur votre Beowulf
(mais attention &agrave; la portabilit&eacute; et &agrave;
l'efficacit&eacute; en accord avec les informations cit&eacute;es
ci-dessus).</li>
<li>Examiner les applications dont vous avez besoin sur votre
Beowulf, et faire une estimation quant au type de mat&eacute;riel
et de logiciels qu'il vous faut.</li>
</ol>
<p>Dans chaque cas, vous devrez consid&eacute;rer les besoins en
efficacit&eacute;. En g&eacute;n&eacute;ral, il y a trois choses
&agrave; faire:</p>
<ol>
<li>D&eacute;terminer les parties concurrentes de votre
programme</li>
<li>Estimer le parall&eacute;lisme efficacement</li>
<li>D&eacute;crire les parties concurrentes de votre programme</li>
</ol>
<p>Examinons-les successivement:</p>
<h3>D&eacute;terminer les parties concurrentes de votre
programme</h3>
<p>Cette &eacute;tape est couvent consid&eacute;r&eacute;e comme
"parall&eacute;liser votre programme". Les d&eacute;cisions de
parall&eacute;lisation seront faites &agrave; l'&eacute;tape 2.
Dans cette &eacute;tape, vous avez besoin de d&eacute;terminer les
liens et les besoins dans les donn&eacute;es.</p>
<p>D'un point de vue pratique, les applications peuvent
pr&eacute;senter deux types de concurrence: calcul (travaux
num&eacute;riques) et E/S (Bases de Donn&eacute;es). M&ecirc;me si
dans de nombreux cas, la concurrence entre calculs et E/S est
orthogonale, des applications ont besoin des deux. Des outils
existants peuvent faire l'analyse de la concurrence sur des
applications existantes. La plupart de ces outils sont
con&ccedil;us pour le FORTRAN. Il y a deux raisons pour lesquelles
le FORTRAN est utilis&eacute;: historiquement, la majorit&eacute;
des applications gourmandes en calculs num&eacute;riques
&eacute;taient &eacute;crites en FORTRAN et c'&eacute;tait donc
plus facile &agrave; analyser. Si aucun de ces outils n'est
disponible, alors cette &eacute;tape peut &ecirc;tre quelque peu
difficile pour des applications existantes.</p>
<h3>Estimer le parall&eacute;lisme efficacement</h3>
<p>Sans l'aide d'outils, cette &eacute;tape peut n&eacute;cessiter
un cycle de tests et erreurs, ou seulement de bons vieux
r&eacute;flexes bien &eacute;duqu&eacute;s. Si vous avez une
application sp&eacute;cifique en t&ecirc;te, essayez de
d&eacute;terminer la limite du CPU (li&eacute;e au calcul) ou les
limites des disques (li&eacute;es aux E/S). Les
sp&eacute;cifit&eacute;s de votre Beowulf peuvent beaucoup
d&eacute;pendre de vos besoins. Par exemple, un probl&egrave;me
li&eacute; au calcul peut ne n&eacute;cessiter qu'un petit nombre
de CPU tr&egrave;s rapides et un r&eacute;seau tr&egrave;s rapide
&agrave; faible temps de latence, tandis qu'un probl&egrave;me
li&eacute; aux E/S peut mieux travailler avec des CPU plus lents et
un Ethernet rapide.</p>
<p>Cette recommandation arrive souvent comme une surprise pour
beaucoup, la croyance habituelle &eacute;tant que plus le
processeur est rapide, mieux c'est. Mais cela n'est vrai que si
vous avez un budget illimit&eacute;: les vrais syst&egrave;mes
peuvent avoir des contraintes de co&ucirc;ts qui doivent &ecirc;tre
optimis&eacute;es. Pour les probl&egrave;mes li&eacute;s aux E/S,
il existe une loi peu connue (appel&eacute;e la loi de
Eadline-Dedkov) qui est assez utile:</p>
<p>Soient deux machines parall&egrave;les avec le m&ecirc;me index
de performance CPU cumul&eacute;e, celle qui a les processeurs les
plus lents (et probablement un r&eacute;seau de communication
interprocesseur plus lent) aura les meilleures performances pour
des applications domin&eacute;es par les E/S.</p>
<p>M&ecirc;me si les preuves de cette r&egrave;gle vont
au-del&agrave; de ce document, vous pouvez trouver
int&eacute;ressant de lire l'article <i>Performance Considerations
for I/O-Dominant Applications on Parallel Computers</i> (format
Postscript 109K) <a href=
"ftp://www.plogic.com/pub/papers/exs-pap6.ps">(ftp://www.plogic.com/pub/papers/exs-pap6.ps)</a></p>
<p>Une fois que vous aurez d&eacute;termin&eacute; quel type de
concurrence vous avez dans votre application, vous devrez estimer
&agrave; quel point elle sera efficace en parall&egrave;le. Voir la
Section <a href="#software">Logiciels</a> pour une description des
outils Logiciels.</p>
<p>En l'absence d'outils, il vous faudra peut-&ecirc;tre improviser
votre chemin lors de cette &eacute;tape. Si une boucle li&eacute;e
aux calculs est mesur&eacute;e en minutes et que les donn&eacute;es
peuvent &ecirc;tre transf&eacute;r&eacute;es en secondes, alors
c'est un bon candidat pour la parall&eacute;lisation. Mais
souvenez-vous que si vous prenez une boucle de 16 minutes et la
coupez en 32 morceaux, et que vos transferts de donn&eacute;es ont
besoin de quelques secondes par partie, alors cela devient plus
r&eacute;duit en termes de performances. Vous atteindrez un point
de retours en diminution.</p>
<h3>D&eacute;crire les parties concurrentes de votre programme</h3>
<p>Il y a plusieurs fa&ccedil;ons de d&eacute;crire les parties
concurrentes de votre programme:</p>
<ol>
<li>L'ex&eacute;cution parall&egrave;le explicite</li>
<li>L'ex&eacute;cution parall&egrave;le implicite</li>
</ol>
<p>La diff&eacute;rence principale entre les deux est que le
parall&eacute;lisme explicite est d&eacute;termin&eacute;
parl'utilisateur, alors que le parall&eacute;lisme implicite est
d&eacute;termin&eacute; par le compilateur.</p>
<h3>Les m&eacute;thodes explicites</h3>
<p>Il y a principalement des m&eacute;thodes o&ugrave;
l'utilisateur peut modifier le code source sp&eacute;cifique pour
une machine parall&egrave;le. L'utilisateur doit soit ajouter des
messages en utilisant <a href="http://www.epm.ornl.gov/pvm">PVM</a>
ou <a href=
"http://www.mcs.anl.gov/Projects/mpi/index.html">MPI</a>, soit
ajouter des threads POSIX. (Souvenez vous que les threads ne
peuvent se d&eacute;placer entre les cartes-m&egrave;res SMP).</p>
<p>Les m&eacute;thodes explicites tendent &agrave; &ecirc;tre les
plus difficiles &agrave; impl&eacute;menter et &agrave;
d&eacute;boguer. Les utilisateurs ajoutent typiquement des appels
de fonctions dans le code source FORTRAN 77 standard ou C/C++. La
librairie MPI a ajout&eacute; des fonctions pour rendre certaines
m&eacute;thodes parall&egrave;les plus faciles &agrave;
impl&eacute;menter (i.e. les fonctions scatter/gather). De plus, il
est aussi possible d'ajouter des librairies standard qui ont
&eacute;t&eacute; &eacute;crites pour des ordinateurs
parall&egrave;les. Souvenez-vous quand m&ecirc;me du compromis
efficacit&eacute;/portabilit&eacute;.</p>
<p>Pour des raisons historiques, beaucoup d'applications gourmandes
en calculs sont &eacute;crites en FORTRAN. Pour cette raison,
FORTRAN dispose du plus grand nombres de supports pour le calcul
parall&egrave;le (outils, librairies ...). De nombreux programmeurs
utilisent maintenant C ou r&eacute;&eacute;crivent leurs
applications FORTRAN existantes en C, avec l'id&eacute;e que C
permettra une ex&eacute;cution plus rapide. M&ecirc;me si cela est
vrai puisque C est la chose la plus proche du code machine
universel, il a quelques inconv&eacute;nients majeurs.
L'utilisation de pointeurs en C rend la d&eacute;termination des
d&eacute;pendances entre donn&eacute;es et l'analyse automatique
des pointeurs extr&ecirc;mement difficiles. Si vous avez des
applications existantes en FORTRAN et que vous voudrez les
parall&eacute;liser dans le futur - NE LES CONVERTISSEZ PAS EN C
!</p>
<h3>M&eacute;thodes Implicites</h3>
<p>Les m&eacute;thodes implicites sont celles dans lesquelles
l'utilisateur abandonne quelques d&eacute;cisions de
parall&eacute;lisation (ou toutes) au compilateur. Par exemple le
FORTRAN 90, High Performance FORTRAN (HPF), Bulk Synchronous
Parallel (BSP), et toute une s&eacute;rie de m&eacute;thodes qui
sont en cours de d&eacute;veloppement.</p>
<p>Les m&eacute;thodes implicites n&eacute;cessitent de la part de
l'utilisateur des informations concernant la nature concurrente de
leur application, mais le compilateur prendra quand m&ecirc;me
beaucoup de d&eacute;cicions sur la mani&egrave;re
d'ex&eacute;cuter cette concurrence en parall&egrave;le. Ces
m&eacute;thodes procurent un niveau de portabilit&eacute; et
d'efficacit&eacute;, mais il n'y a pas de "meilleure fa&ccedil;on"
de d&eacute;crire un probl&egrave;me concurrent pour un ordinateur
parall&egrave;le.</p>
<h2><a name="s5">5. Ressources Beowulf</a></h2>
<h2><a name="ss5.1">5.1 Points de d&eacute;part</a></h2>
<ul>
<li>Liste de diffusion US Beowulf. Pour s'inscrire, envoyer un
courriel &agrave; <a href=
"mailto:beowulf-request@cesdis.gsfc.nasa.gov">beowulf-request@cesdis.gsfc.nasa.gov</a>
avec le mot <i>subscribe</i> dans le corps du message.</li>
<li>Homepage Beowulf <a href=
"http://www.beowulf.org">http://www.beowulf.org</a></li>
<li>Extreme Linux <a href=
"http://www.extremelinux.org">http://www.extremelinux.org</a></li>
<li>Extreme Linux Software pour Red Hat <a href=
"http://www.redhat.com/extreme">http://www.redhat.com/extreme</a></li>
</ul>
<h2><a name="ss5.2">5.2 Documentation</a></h2>
<ul>
<li>La derni&egrave;re version du Beowulf HOWTO en Anglais <a href=
"http://www.sci.usq.edu.au/staff/jacek/beowulf">http://www.sci.usq.edu.au/staff/jacek/beowulf</a>.</li>
<li>La derni&egrave;re version du Beowulf HOWTO en Fran&ccedil;ais
<a href=
"http://www.e-nef.com/linux//beowulf">http://www.e-nef.com/linux/beowulf</a>.</li>
<li>Construire un syst&egrave;me Beowulf <a href=
"http://www.cacr.caltech.edu/beowulf/tutorial/building.html">http://www.cacr.caltech.edu/beowulf/tutorial/building.html</a></li>
<li>Les liens de Jacek sur Beowulf <a href=
"http://www.sci.usq.edu.au/staff/jacek/beowulf">http://www.sci.usq.edu.au/staff/jacek/beowulf</a>.</li>
<li>Beowulf Installation and Administration HOWTO (DRAFT) <a href=
"http://www.sci.usq.edu.au/staff/jacek/beowulf">http://www.sci.usq.edu.au/staff/jacek/beowulf</a>.</li>
<li>Linux Parallel Processing HOWTO <a href=
"http://yara.ecn.purdue.edu/~pplinux/PPHOWTO/pphowto.html">http://yara.ecn.purdue.edu/~pplinux/PPHOWTO/pphowto.html</a></li>
</ul>
<h2><a name="papers"></a> <a name="ss5.3">5.3 Publications</a></h2>
<ul>
<li>Chance Reschke, Thomas Sterling, Daniel Ridge, Daniel Savarese,
Donald Becker, and Phillip Merkey <i>A Design Study of Alternative
Network Topologies for the Beowulf Parallel Workstation</i>.
Proceedings Fifth IEEE International Symposium on High Performance
Distributed Computing, 1996. <a href=
"http://www.beowulf.org/papers/HPDC96/hpdc96.html">http://www.beowulf.org/papers/HPDC96/hpdc96.html</a></li>
<li>Daniel Ridge, Donald Becker, Phillip Merkey, Thomas Sterling
Becker, and Phillip Merkey. <i>Harnessing the Power of Parallelism
in a Pile-of-PCs</i>. Proceedings, IEEE Aerospace, 1997. <a href=
"http://www.beowulf.org/papers/AA97/aa97.ps">http://www.beowulf.org/papers/AA97/aa97.ps</a></li>
<li>Thomas Sterling, Donald J. Becker, Daniel Savarese, Michael R.
Berry, and Chance Res. <i>Achieving a Balanced Low-Cost
Architecture for Mass Storage Management through Multiple Fast
Ethernet Channels on the Beowulf Parallel Workstation</i>.
Proceedings, International Parallel Processing Symposium, 1996.
<a href=
"http://www.beowulf.org/papers/IPPS96/ipps96.html">http://www.beowulf.org/papers/IPPS96/ipps96.html</a></li>
<li>Donald J. Becker, Thomas Sterling, Daniel Savarese, Bruce
Fryxell, Kevin Olson. <i>Communication Overhead for Space Science
Applications on the Beowulf Parallel Workstation</i>.
Proceedings,High Performance and Distributed Computing, 1995.
<a href=
"http://www.beowulf.org/papers/HPDC95/hpdc95.html">http://www.beowulf.org/papers/HPDC95/hpdc95.html</a></li>
<li>Donald J. Becker, Thomas Sterling, Daniel Savarese, John E.
Dorband, Udaya A. Ranawak, Charles V. Packer. <i>BEOWULF: A
PARALLEL WORKSTATION FOR SCIENTIFIC COMPUTATION</i>. Proceedings,
International Conference on Parallel Processing, 95. <a href=
"http://www.beowulf.org/papers/ICPP95/icpp95.html">http://www.beowulf.org/papers/ICPP95/icpp95.html</a></li>
<li>Publications sur le site de Beowulf <a href=
"http://www.beowulf.org/papers/papers.html">http://www.beowulf.org/papers/papers.html</a></li>
</ul>
<h2><a name="software"></a> <a name="ss5.4">5.4 Logiciels</a></h2>
<ul>
<li>PVM - Parallel Virtual Machine/Machine Parall&egrave;le
Virtuelle <a href=
"http://www.epm.ornl.gov/pvm/pvm_home.html">http://www.epm.ornl.gov/pvm/pvm_home.html</a></li>
<li>LAM/MPI - Local Area Multicomputer / Message Passing Interface
Multi-Ordinateurs locaux / Interface de Transmission de Messages
<a href=
"http://www.mpi.nd.edu/lam">http://www.mpi.nd.edu/lam</a></li>
<li>BERT77 - outil de conversion FORTRAN <a href=
"http://www.plogic.com/bert.html">http://www.plogic.com/bert.html</a></li>
<li>logiciels Beowulf de la page du Projet Beowulf <a href=
"http://beowulf.gsfc.nasa.gov/software/software.html">http://beowulf.gsfc.nasa.gov/software/software.html</a></li>
<li>Jacek's Beowulf-outils <a href=
"ftp://ftp.sci.usq.edu.au/pub/jacek/beowulf-utils">ftp://ftp.sci.usq.edu.au/pub/jacek/beowulf-utils</a></li>
<li>bWatch - logiciel de surveillance de cluster <a href=
"http://www.sci.usq.edu.au/staff/jacek/bWatch">http://www.sci.usq.edu.au/staff/jacek/bWatch</a></li>
</ul>
<h2><a name="ss5.5">5.5 Machines Beowulf</a></h2>
<ul>
<li>Avalon consiste en 140 processeurs Alpha, 36 Go de RAM, et est
probablement la machine Beowulf la plus rapide, allant &agrave;
47.7 Gflops et class&eacute;e 114&egrave;me sur la liste du Top
500. <a href=
"http://swift.lanl.gov/avalon/">http://swift.lanl.gov/avalon/</a></li>
<li>Megalon-A Massively PArallel CompuTer Resource (MPACTR)
consiste en 14 quadri CPU Pentium Pro 200 noeuds, et 14 Go de RAM.
<a href=
"http://megalon.ca.sandia.gov/description.html">http://megalon.ca.sandia.gov/description.html</a></li>
<li>theHIVE - Highly-parallel Integrated Virtual Environment est un
autre Superordinateur Beowulf rapide. theHIVE est de 64 noeuds, une
machine de 128 CPU avec un total de 4 Go de RAM. <a href=
"http://newton.gsfc.nasa.gov/thehive/">http://newton.gsfc.nasa.gov/thehive/</a></li>
<li>Topcat est une machine beaucoup plus petite, constitu&eacute;e
de 16 CPU et 1.2 Go de RAM. <a href=
"http://www.sci.usq.edu.au/staff/jacek/topcat">http://www.sci.usq.edu.au/staff/jacek/topcat</a></li>
<li>MAGI cluster -- c'est un tr&egrave;s bon site avec de nombreux
liens de qualit&eacute;. <a href=
"http://noel.feld.cvut.cz/magi/">http://noel.feld.cvut.cz/magi/</a></li>
</ul>
<h2><a name="ss5.6">5.6 D'autres Sites Int&eacute;ressants</a></h2>
<ul>
<li>Linux SMP <a href=
"http://www.linux.org.uk/SMP/title.html">http://www.linux.org.uk/SMP/title.html</a></li>
<li>Paralogic - Achetez un Beowulf <a href=
"http://www.plogic.com">http://www.plogic.com</a></li>
</ul>
<h2><a name="history"></a> <a name="ss5.7">5.7 Histoire</a></h2>
<ul>
<li>L&eacute;gendes - Beowulf <a href=
"http://legends.dm.net/beowulf/index.html">http://legends.dm.net/beowulf/index.html</a></li>
<li>Les Aventures de Beowulf <a href=
"http://www.lnstar.com/literature/beowulf/beowulf.html">http://www.lnstar.com/literature/beowulf/beowulf.html</a></li>
</ul>
<h2><a name="s6">6. Code Source</a></h2>
<h2><a name="sum"></a> <a name="ss6.1">6.1 sum.c</a></h2>
<pre>
/* Jacek Radajewski jacek@usq.edu.au */
/* 21/08/1998 */

#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main (void) {

  double result = 0.0;
  double number = 0.0;
  char string[80];
  

  while (scanf("%s", string) != EOF) {

    number = atof(string);
    result = result + number;
  }
    
  printf("%lf\n", result);
  
  return 0;
  
}
</pre>
<h2><a name="sigmasqrt"></a> <a name="ss6.2">6.2
sigmasqrt.c</a></h2>
<pre>
/* Jacek Radajewski jacek@usq.edu.au */
/* 21/08/1998 */

#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main (int argc, char** argv) {

  long number1, number2, counter;
  double result;
  
  if (argc &lt; 3) {
    printf ("usage : %s number1 number2\n",argv[0]);
    exit(1);
  } else {
    number1 = atol (argv[1]);
    number2 = atol (argv[2]);
    result = 0.0;
  }

  for (counter = number1; counter &lt;= number2; counter++) {
    result = result + sqrt((double)counter);
  }
    
  printf("%lf\n", result);
  
  return 0;
  
}
</pre>
<h2><a name="prun"></a> <a name="ss6.3">6.3 prun.sh</a></h2>
<pre>
#!/bin/bash
# Jacek Radajewski jacek@usq.edu.au
# 21/08/1998

export SIGMASQRT=/home/staff/jacek/beowulf/HOWTO/example1/sigmasqrt

# $OUTPUT doit &ecirc;tre un canal nomm&eacute; (named pipe)
# mkfifo output

export OUTPUT=/home/staff/jacek/beowulf/HOWTO/example1/output

rsh scilab01 $SIGMASQRT         1  50000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab02 $SIGMASQRT  50000001 100000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab03 $SIGMASQRT 100000001 150000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab04 $SIGMASQRT 150000001 200000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab05 $SIGMASQRT 200000001 250000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab06 $SIGMASQRT 250000001 300000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab07 $SIGMASQRT 300000001 350000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab08 $SIGMASQRT 350000001 400000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab09 $SIGMASQRT 400000001 450000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab10 $SIGMASQRT 450000001 500000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab11 $SIGMASQRT 500000001 550000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab12 $SIGMASQRT 550000001 600000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab13 $SIGMASQRT 600000001 650000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab14 $SIGMASQRT 650000001 700000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab15 $SIGMASQRT 700000001 750000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab16 $SIGMASQRT 750000001 800000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab17 $SIGMASQRT 800000001 850000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab18 $SIGMASQRT 850000001 900000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab19 $SIGMASQRT 900000001 950000000 &gt; $OUTPUT &lt; /dev/null&amp;
rsh scilab20 $SIGMASQRT 950000001 1000000000 &gt; $OUTPUT &lt; /dev/null&amp;
</pre>
</body>
</html>