home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / Beowulf-HOWTO < prev    next >
Text File  |  1998-11-29  |  51KB  |  1,387 lines

  1.   Beowulf HOWTO
  2.   Jacek Radajewski and Douglas Eadline
  3.   v1.1.1, 22 November 1998
  4.  
  5.   This document introduces the Beowulf Supercomputer architecture and
  6.   provides background information on parallel programming, including
  7.   links to other more specific documents, and web pages.
  8.   ______________________________________________________________________
  9.  
  10.   Table of Contents
  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.   1. Preamble
  68.  
  69.      1.1 Disclaimer
  70.      1.2 Copyright
  71.      1.3 About this HOWTO
  72.      1.4 About the authors
  73.      1.5 Acknowledgements
  74.  
  75.   2. Introduction
  76.  
  77.      2.1 Who should read this HOWTO ?
  78.      2.2 What is a Beowulf ?
  79.      2.3 Classification
  80.  
  81.   3. Architecture Overview
  82.  
  83.      3.1 What does it look like ?
  84.      3.2 How to utilise the other nodes ?
  85.      3.3 How does Beowulf differ from a COW ?
  86.  
  87.   4. System Design
  88.  
  89.      4.1 A brief background on parallel computing.
  90.      4.2 The methods of parallel computing
  91.         4.2.1 Why more than one CPU?
  92.         4.2.2 The Parallel Computing Store
  93.            4.2.2.1 Single-tasking Operating System
  94.            4.2.2.2 Multi-tasking Operating System:
  95.            4.2.2.3 Multitasking Operating Systems with Multiple CPUs:
  96.            4.2.2.4 Threads on a Multitasking Operating Systems extra CPUs
  97.            4.2.2.5 Sending Messages on Multitasking Operating Systems with extra CPUs:
  98.      4.3 Architectures for parallel computing
  99.         4.3.1 Hardware Architectures
  100.         4.3.2 Software API Architectures
  101.            4.3.2.1 Messages
  102.            4.3.2.2 Threads
  103.         4.3.3 Application Architecture
  104.      4.4 Suitability
  105.      4.5 Writing and porting parallel software
  106.         4.5.1 Determine concurrent parts of your program
  107.         4.5.2 Estimate parallel efficiency
  108.         4.5.3 Describing the concurrent parts of your program
  109.            4.5.3.1 Explicit Methods
  110.            4.5.3.2 Implicit Methods
  111.  
  112.   5. Beowulf Resources
  113.  
  114.      5.1 Starting Points
  115.      5.2 Documentation
  116.      5.3 Papers
  117.      5.4 Software
  118.      5.5 Beowulf Machines
  119.      5.6 Other Interesting Sites
  120.      5.7 History
  121.  
  122.   6. Source code
  123.  
  124.      6.1 sum.c
  125.      6.2 sigmasqrt.c
  126.      6.3 prun.sh
  127.  
  128.  
  129.   ______________________________________________________________________
  130.  
  131.  
  132.  
  133.   1.  Preamble
  134.  
  135.   1.1.  Disclaimer
  136.  
  137.   We will not accept any responsibility for any incorrect information
  138.   within this document, nor for any damage it might cause when applied.
  139.  
  140.  
  141.   1.2.  Copyright
  142.  
  143.   Copyright ⌐ 1997 - 1998 Jacek Radajewski and Douglas Eadline.
  144.   Permission to distribute and modify this document is granted under the
  145.   GNU General Public Licence.
  146.  
  147.  
  148.   1.3.  About this HOWTO
  149.  
  150.   Jacek Radajewski started work on this document in November 1997 and
  151.   was soon joined by Douglas Eadline.  Over a few months the Beowulf
  152.   HOWTO grew into a large document, and in August 1998 it was split into
  153.   three documents: Beowulf HOWTO, Beowulf Architecture Design HOWTO, and
  154.   the Beowulf Installation and Administration HOWTO.  Version 1.0.0 of
  155.   the Beowulf HOWTO was released to the Linux Documentation Project on
  156.   11 November 1998.  We hope that this is only the beginning of what
  157.   will become a complete Beowulf Documentation Project.
  158.  
  159.  
  160.   1.4.  About the authors
  161.  
  162.  
  163.   ╖  Jacek Radajewski works as a Network Manager, and is studying for an
  164.      honors degree in computer science at the University of Southern
  165.      Queensland, Australia.  Jacek's first contact with Linux was in
  166.      1995 and it was love at first sight.  Jacek built his first Beowulf
  167.      cluster in May 1997 and has been playing with the technology ever
  168.      since, always trying to find new and better ways of setting things
  169.      up.  You can contact Jacek by sending e-mail to jacek@usq.edu.au
  170.  
  171.   ╖  Douglas Eadline, Ph.D. is President and Principal Scientist at
  172.      Paralogic, Inc., Bethlehem, PA, USA.  Trained as
  173.      Physical/Analytical Chemist, he has been involved with computers
  174.      since 1978 when he built his first single board computer for use
  175.      with chemical instrumentation.  Dr. Eadline's interests now include
  176.      Linux, Beowulf clusters, and parallel algorithms.  Dr. Eadline can
  177.      be contacted by sending email to deadline@plogic.com
  178.  
  179.  
  180.   1.5.  Acknowledgements
  181.  
  182.   The writing of the Beowulf HOWTO was a long proces and is finally
  183.   complete, thanks to many individuals.  I would like to thank the
  184.   following people for their help and contribution to this HOWTO.
  185.  
  186.   ╖  Becky for her love, support, and understanding.
  187.  
  188.   ╖  Tom Sterling, Don Becker, and other people at NASA who started the
  189.      Beowulf project.
  190.  
  191.   ╖  Thanh Tran-Cong and the Faculty of Engineering and Surveying for
  192.      making the topcat Beowulf machine available for experiments.
  193.  
  194.   ╖  My supervisor Christopher Vance for many great ideas.
  195.  
  196.   ╖  My friend Russell Waldron for great programming ideas, his general
  197.      interest in the project, and support.
  198.  
  199.   ╖  My friend David Smith for proof reading this document.
  200.  
  201.   ╖  Many other people on the Beowulf mailing list who provided me with
  202.      feedback and ideas.
  203.  
  204.   ╖  All the people who are responsible for the Linux operating system
  205.      and all the other free software packages used on topcat and other
  206.      Beowulf machines.
  207.  
  208.  
  209.   2.  Introduction
  210.  
  211.  
  212.   As the performance of commodity computer and network hardware
  213.   increase, and their prices decrease, it becomes more and more
  214.   practical to build parallel computational systems from off-the-shelf
  215.   components, rather than buying CPU time on very expensive
  216.   Supercomputers.  In fact, the price per performance ratio of a Beowulf
  217.   type machine is between three to ten times better than that for
  218.   traditional supercomputers.  Beowulf architecture scales well, it is
  219.   easy to construct and you only pay for the hardware as most of the
  220.   software is free.
  221.  
  222.  
  223.   2.1.  Who should read this HOWTO ?
  224.  
  225.   This HOWTO is designed for a person with at least some exposure to the
  226.   Linux operating system.  Knowledge of Beowulf technology or
  227.   understanding of more complex operating system and networking concepts
  228.   is not essential, but some exposure to parallel computing would be
  229.   advantageous (after all you must have some reason to read this
  230.   document).  This HOWTO will not answer all possible questions you
  231.   might have about Beowulf, but hopefully will give you ideas and guide
  232.   you in the right direction.  The purpose of this HOWTO is to provide
  233.   background information, links and references to more advanced
  234.   documents.
  235.  
  236.  
  237.   2.2.  What is a Beowulf ?
  238.  
  239.   Famed was this Beowulf: far flew the boast of him, son of Scyld, in
  240.   the Scandian lands.  So becomes it a youth to quit him well with his
  241.   father's friends, by fee and gift, that to aid him, aged, in after
  242.   days, come warriors willing, should war draw nigh, liegemen loyal: by
  243.   lauded deeds shall an earl have honor in every clan. Beowulf is the
  244.   earliest surviving epic poem written in English.  It is a story about
  245.   a hero of great strength and courage who defeted a monster called
  246.   Grendel.  See ``History'' to find out more about the Beowulf hero.
  247.  
  248.   There are probably as many Beowulf definitions as there are people who
  249.   build or use Beowulf Supercomputer facilities.  Some claim that one
  250.   can call their system Beowulf only if it is built in the same way as
  251.   the NASA's original machine.  Others go to the other extreme and call
  252.   Beowulf any system of workstations running parallel code.  My
  253.   definition of Beowulf fits somewhere between the two views described
  254.   above, and is based on many postings to the Beowulf mailing list:
  255.  
  256.  
  257.   Beowulf is a multi computer architecture which can be used for
  258.   parallel computations.  It is a system which usually consists of one
  259.   server node, and one or more client nodes connected together via
  260.   Ethernet or some other network.  It is a system built using commodity
  261.   hardware components, like any PC capable of running Linux, standard
  262.   Ethernet adapters, and switches.  It does not contain any custom
  263.   hardware components and is trivially reproducible.  Beowulf also uses
  264.   commodity software like the Linux operating system, Parallel Virtual
  265.   Machine (PVM) and Message Passing Interface (MPI).  The server node
  266.   controls the whole cluster and serves files to the client nodes.  It
  267.   is also the cluster's console and gateway to the outside world.  Large
  268.   Beowulf machines might have more than one server node, and possibly
  269.   other nodes dedicated to particular tasks, for example consoles or
  270.   monitoring stations.  In most cases client nodes in a Beowulf system
  271.   are dumb, the dumber the better.  Nodes are configured and controlled
  272.   by the server node, and do only what they are told to do.  In a disk-
  273.   less client configuration, client nodes don't even know their IP
  274.   address or name until the server tells them what it is.  One of the
  275.   main differences between Beowulf and a Cluster of Workstations (COW)
  276.   is the fact that Beowulf behaves more like a single machine rather
  277.   than many workstations.  In most cases client nodes do not have
  278.   keyboards or monitors, and are accessed only via remote login or
  279.   possibly serial terminal.  Beowulf nodes can be thought of as a CPU +
  280.   memory package which can be plugged in to the cluster, just like a CPU
  281.   or memory module can be plugged into a motherboard.
  282.  
  283.  
  284.   Beowulf is not a special software package, new network topology or the
  285.   latest kernel hack.  Beowulf is a technology of clustering Linux
  286.   computers to form a parallel, virtual supercomputer.  Although there
  287.   are many software packages such as kernel modifications, PVM and MPI
  288.   libraries, and configuration tools which make the Beowulf architecture
  289.   faster, easier to configure, and much more usable, one can build a
  290.   Beowulf class machine using standard Linux distribution without any
  291.   additional software.  If you have two networked Linux computers which
  292.   share at least the /home file system via NFS, and trust each other to
  293.   execute remote shells (rsh), then it could be argued that you have a
  294.   simple, two node Beowulf machine.
  295.  
  296.  
  297.  
  298.   2.3.  Classification
  299.  
  300.   Beowulf systems have been constructed from a variety of parts.  For
  301.   the sake of performance some non-commodity components (i.e. produced
  302.   by a single manufacturer) have been employed.   In order to account
  303.   for the different types of systems and to make discussions about
  304.   machines a bit easier, we propose the following simple classification
  305.   scheme:
  306.  
  307.   CLASS I BEOWULF:
  308.  
  309.   This class of machines built entirely from commodity "off-the-shelf"
  310.   parts.  We shall use the "Computer Shopper" certification test to
  311.   define commodity "off-the-shelf" parts.  (Computer Shopper is a 1 inch
  312.   thick monthly magazine/catalog of PC systems and components.) The test
  313.   is as follows:
  314.  
  315.   A CLASS I Beowulf is a machine that can be assembled from parts found
  316.   in at least 3 nationally/globally circulated advertising catalogs.
  317.  
  318.   The advantages of a CLASS I system are:
  319.  
  320.   ╖  hardware is available form multiple sources (low prices, easy
  321.      maintenance)
  322.  
  323.   ╖  no reliance on a single hardware vendor
  324.  
  325.   ╖  driver support from Linux commodity
  326.  
  327.   ╖  usually based on standards (SCSI, Ethernet, etc.)
  328.  
  329.   The disadvantages of a CLASS I system are:
  330.  
  331.   ╖  best performance may require CLASS II hardware
  332.  
  333.   CLASS II BEOWULF
  334.  
  335.   A CLASS II Beowulf is simply any machine that does not pass the
  336.   Computer Shopper certification test.  This is not a bad thing.
  337.   Indeed, it is merely a classification of the machine.
  338.  
  339.   The advantages of a CLASS II system are:
  340.  
  341.   ╖  Performance can be quite good!
  342.  
  343.   The disadvantages of a CLASS II system are:
  344.  
  345.   ╖  driver support may vary
  346.  
  347.   ╖  reliance on single hardware vendor
  348.  
  349.   ╖  may be more expensive than CLASS I systems.
  350.  
  351.   One CLASS is not necessarily better than the other.  It all depends on
  352.   your needs and budget.  This classification system is only intended to
  353.   make discussions about Beowulf systems a bit more succinct.  The
  354.   "System Design" section may help determine what kind of system is best
  355.   suited for your needs.
  356.  
  357.  
  358.  
  359.  
  360.  
  361.   3.  Architecture Overview
  362.  
  363.  
  364.  
  365.   3.1.  What does it look like ?
  366.  
  367.   I think that the best way of describing the Beowulf supercomputer
  368.   architecture is to use an example which is very similar to the actual
  369.   Beowulf, but familiar to most system administrators.  The example that
  370.   is closest to a Beowulf machine is a Unix computer laboratory with a
  371.   server and a number of clients.  To be more specific I'll use the DEC
  372.   Alpha undergraduate computer laboratory at the Faculty of Sciences,
  373.   USQ as the example.  The server computer is called beldin and the
  374.   client machines are called scilab01, scilab02, scilab03, up to
  375.   scilab20.  All clients have a local copy of the Digital Unix 4.0
  376.   operating system installed, but get the user file space (/home) and
  377.   /usr/local from the server via NFS (Network File System).  Each client
  378.   has an entry for the server and all the other clients in its
  379.   /etc/hosts.equiv file, so all clients can execute a remote shell (rsh)
  380.   to all others.  The server machine is a NIS server for the whole
  381.   laboratory, so account information is the same across all the
  382.   machines.  A person can sit at the scilab02 console, login, and have
  383.   the same environment as if he logged onto the server or scilab15.  The
  384.   reason all the clients have the same look and feel is that the
  385.   operating system is installed and configured in the same way on all
  386.   machines, and both the user's /home and /usr/local areas are
  387.   physically on the server and accessed by the clients via NFS.  For
  388.   more information on NIS and NFS please read the NIS and NFS HOWTOs.
  389.  
  390.  
  391.  
  392.   3.2.  How to utilise the other nodes ?
  393.  
  394.  
  395.   Now that we have some idea about the system architecture, let us take
  396.   a look at how we can utilise the available CPU cycles of the machines
  397.   in the computer laboratory.  Any person can logon to any of the
  398.   machines, and run a program in their home directory, but they can also
  399.   spawn the same job on a different machine simply by executing remote
  400.   shell.  For example, assume that we want to calculate the sum of the
  401.   square roots of all integers between 1 and 10 inclusive. We write a
  402.   simple program called sigmasqrt (please see ``source code'') which
  403.   does exactly that.  To calculate the sum of the square roots of
  404.   numbers from 1 to 10 we execute :
  405.  
  406.   [jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 10
  407.   22.468278
  408.  
  409.   real    0m0.029s
  410.   user    0m0.001s
  411.   sys     0m0.024s
  412.  
  413.  
  414.   The time command allows us to check the wall-clock (the elapsed time)
  415.   of running this job.  As we can see, this example took only a small
  416.   fraction of a second (0.029 sec) to execute, but what if I want to add
  417.   the square root of integers from 1 to 1 000 000 000 ?  Let us try
  418.   this, and again calculate the wall-clock time.
  419.  
  420.  
  421.   [jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 1000000000
  422.   21081851083600.559000
  423.  
  424.   real    16m45.937s
  425.   user    16m43.527s
  426.   sys     0m0.108s
  427.  
  428.  
  429.  
  430.  
  431.   This time, the execution time of the program is considerably longer.
  432.   The obvious question to ask is what can we do to speed up the
  433.   execution time of the job?  How can we change the way the job is
  434.   running to minimize the wall-clock time of running this job?  The
  435.   obvious answer is to split the job into a number of sub-jobs and to
  436.   run these sub-jobs in parallel on all computers.  We could split one
  437.   big addition task into 20 parts, calculating one range of square roots
  438.   and adding them on each node.  When all nodes finish the calculation
  439.   and return their results, the 20 numbers could be added together to
  440.   obtain the final solution.  Before we run this job we will make a
  441.   named pipe which will be used by all processes to write their results.
  442.  
  443.  
  444.   [jacek@beldin sigmasqrt]$ mkfifo output
  445.   [jacek@beldin sigmasqrt]$ ./prun.sh & time cat output | ./sum
  446.   [1] 5085
  447.   21081851083600.941000
  448.   [1]+  Done                    ./prun.sh
  449.  
  450.   real    0m58.539s
  451.   user    0m0.061s
  452.   sys     0m0.206s
  453.  
  454.  
  455.  
  456.   This time we get about 58.5 seconds.  This is the time from starting
  457.   the job until all the nodes have finished their computations and
  458.   written their results into the pipe.  The time does not include the
  459.   final addition of the twenty numbers, but this time is a very small
  460.   fraction of a second and can be ignored.  We can see that there is a
  461.   significant improvement in running this job in parallel.  In fact the
  462.   parallel job ran about 17 times faster, which is very reasonable for a
  463.   20 fold increase in the number of CPUs.  The purpose of the above
  464.   example is to illustrate the simplest method of parallelising
  465.   concurrent code.  In practice such simple examples are rare and
  466.   different techniques (PVM and PMI APIs) are used to achieve the
  467.   parallelism.
  468.  
  469.  
  470.  
  471.   3.3.  How does Beowulf differ from a COW ?
  472.  
  473.   The computer laboratory described above is a perfect example of a
  474.   Cluster of Workstations (COW).  So what is so special about Beowulf,
  475.   and how is it different from a COW?  The truth is that there is not
  476.   much difference, but Beowulf does have few unique characteristics.
  477.   First of all, in most cases client nodes in a Beowulf cluster do not
  478.   have keyboards, mice, video cards nor monitors.  All access to the
  479.   client nodes is done via remote connections from the server node,
  480.   dedicated console node, or a serial console.  Because there is no need
  481.   for client nodes to access machines outside the cluster, nor for
  482.   machines outside the cluster to access client nodes directly, it is a
  483.   common practice for the client nodes to use private IP addresses like
  484.   the 10.0.0.0/8 or 192.168.0.0/16 address ranges (RFC 1918
  485.   http://www.alternic.net/rfcs/1900/rfc1918.txt.html).  Usually the only
  486.   machine that is also connected to the outside world using a second
  487.   network card is the server node.  The most common ways of using the
  488.   system is to access the server's console directly, or either telnet or
  489.   remote login to the server node from personal workstation.  Once on
  490.   the server node, users can edit and compile their code, and also spawn
  491.   jobs on all nodes in the cluster.  In most cases COWs are used for
  492.   parallel computations at night, and over weekends when people do not
  493.   actually use the workstations for every day work, thus utilising idle
  494.   CPU cycles.  Beowulf on the other hand is a machine usually dedicated
  495.   to parallel computing, and optimised for this purpose.  Beowulf also
  496.   gives better price/performance ratio as it is built from off-the-shelf
  497.   components and runs mainly free software.  Beowulf has also more
  498.   single system image features which help the users to see the Beowulf
  499.   cluster as a single computing workstation.
  500.  
  501.  
  502.  
  503.   4.  System Design
  504.  
  505.   Before you purchase any hardware, it may be a good idea to consider
  506.   the design of your system.  There are basically two hardware issues
  507.   involved with design of a Beowulf system: the type of nodes or
  508.   computers you are going to use; and way you connect the computer
  509.   nodes.  There is one software issue that may effect your hardware
  510.   decisions; the communication library or API. A more detailed
  511.   discussion of hardware and communication software is provided later in
  512.   this document.
  513.  
  514.   While the number of choices is not large, there are some important
  515.   design decisions that must be made when constructing a Beowulf
  516.   systems.  Because the science (or art) of "parallel computing" has
  517.   many different interpretations, an introduction is provided below.  If
  518.   you do not like to read background material, you may skip this
  519.   section, but it is advised that you read section  ``Suitability''
  520.   before you make you final hardware decisions.
  521.  
  522.  
  523.   4.1.  A brief background on parallel computing.
  524.  
  525.   This section provides background on parallel computing concepts.  It
  526.   is NOT an exhaustive or complete description of parallel computing
  527.   science and technology. It is a brief description of the issues that
  528.   may be important to a Beowulf designer and user.
  529.   As you design and build your Beowulf, many of these issues described
  530.   below will become important in your decision process. Due to its
  531.   component nature, a Beowulf Supercomputer requires that we consider
  532.   many factors carefully because they are now under our control. In
  533.   general, it is not all that difficult to understand the issues
  534.   involved with parallel computing.  Indeed, once the issues are
  535.   understood, your expectations will be more realistic and success will
  536.   be more likely. Unlike the "sequential world" where processor speed is
  537.   considered the single most important factor, processor speed in the
  538.   "parallel world" is just one of several factors that will determine
  539.   overall system performance and efficiency.
  540.  
  541.  
  542.  
  543.   4.2.  The methods of parallel computing
  544.  
  545.   Parallel computing can take many forms.  From a user's perspective, it
  546.   is important to consider the advantages and disadvantages of each
  547.   methodology.  The following section attempts to provide some
  548.   perspective on the methods of parallel computing and indicate where
  549.   the Beowulf machine falls on this continuum.
  550.  
  551.  
  552.   4.2.1.  Why more than one CPU?
  553.  
  554.   Answering this question is important.  Using 8 CPUs to run your word
  555.   processor sounds a little like "over-kill" -- and it is.  What about a
  556.   web server, a database, a rendering program, or a project scheduler?
  557.   Maybe extra CPUs would help.  What about a complex simulation, a fluid
  558.   dynamics code, or a data mining application.  Extra CPUs definitely
  559.   help in these situations.  Indeed, multiple CPUs are being used to
  560.   solve more and more problems.
  561.  
  562.   The next question usually is: "Why do I need two or four CPUs, I will
  563.   just wait for the 986 turbo-hyper chip." There are several reasons:
  564.  
  565.   1. Due to the use of multi-tasking Operating Systems, it is possible
  566.      to do several things at once.  This is a natural "parallelism" that
  567.      is easily exploited by more than one low cost CPU.
  568.  
  569.   2. Processor speeds have been doubling every 18 months, but what about
  570.      RAM speeds or hard disk speeds? Unfortunately, these speeds are not
  571.      increasing as fast as the CPU speeds.  Keep in mind most
  572.      applications require "out of cache memory access" and hard disk
  573.      access.  Doing things in parallel is one way to get around some of
  574.      these limitations.
  575.  
  576.   3. Predictions indicate that processor speeds will not continue to
  577.      double every 18 months after the year 2005. There are some very
  578.      serious obstacles to overcome in order to maintain this trend.
  579.  
  580.   4. Depending on the application, parallel computing can speed things
  581.      up by any where from 2 to 500 times faster (in some cases even
  582.      faster). Such performance is not available using a single
  583.      processor.  Even supercomputers that at one time used very fast
  584.      custom processors are now built from multiple "commodity- off-the-
  585.      shelf" CPUs.
  586.  
  587.   If you need speed - either due to a compute bound problem and/or an
  588.   I/O bound problem, parallel is worth considering.  Because parallel
  589.   computing is implemented in a variety of ways, solving your problem in
  590.   parallel will require some very important decisions to be made.  These
  591.   decisions may dramatically effect portability, performance, and cost
  592.   of your application.
  593.  
  594.  
  595.   Before we get technical, let's look take a look at a real "parallel
  596.   computing problem" using an example with which we are familiar -
  597.   waiting in long lines at a store.
  598.  
  599.  
  600.   4.2.2.  The Parallel Computing Store
  601.  
  602.   Consider a big store with 8 cash registers grouped together in the
  603.   front of the store.  Assume each cash register/cashier is a CPU and
  604.   each customer is a computer program.  The size of the computer program
  605.   (amount of work) is the size of each customer's order. The following
  606.   analogies can be used to illustrate parallel computing concepts.
  607.  
  608.  
  609.   4.2.2.1.  Single-tasking Operating System
  610.  
  611.   One cash register open (is in use) and must process each customer one
  612.   at a time.
  613.  
  614.   Computer Example: MS DOS
  615.  
  616.  
  617.   4.2.2.2.  Multi-tasking Operating System:
  618.  
  619.   One cash register open, but now we process only a part of each order
  620.   at a time, move to the next person and process some of their order.
  621.   Everyone "seems" to be moving through the line together, but if no one
  622.   else is in the line, you will get through the line faster.
  623.  
  624.   Computer Example: UNIX, NT using a single CPU
  625.  
  626.  
  627.   4.2.2.3.  Multitasking Operating Systems with Multiple CPUs:
  628.  
  629.   Now we open several cash registers in the store. Each order can be
  630.   processed by a separate cash register and the line can move much
  631.   faster.  This is called SMP - Symmetric Multi-processing.  Although
  632.   there are extra cash registers open, you will still never get through
  633.   the line any faster than just you and a single cash register.
  634.  
  635.   Computer Example: UNIX and NT with multiple CPUs
  636.  
  637.  
  638.  
  639.   4.2.2.4.  Threads on a Multitasking Operating Systems extra CPUs
  640.  
  641.   If you "break-up" the items in your order, you might be able to move
  642.   through the line faster by using several cash registers at one time.
  643.   First, we must assume you have a large amount of goods, because the
  644.   time you invest "breaking up your order" must be regained by using
  645.   multiple cash registers.   In theory, you should be able to move
  646.   through the line "n" times faster than before*; where "n" is the
  647.   number of cash registers.  When the cashiers need to get sub- totals,
  648.   they can exchange information quickly by looking and talking to all
  649.   the other "local" cash registers. They can even snoop around the other
  650.   cash registers to find information they need to work faster. There is
  651.   a limit, however, as to how many cash registers the store can
  652.   effectively locate in any one place.
  653.  
  654.   Amdals law will also limit the application speed-up to the slowest
  655.   sequential portion of the program.
  656.  
  657.   Computer Example: UNIX or NT with extra CPU on the same motherboard
  658.   running multi-threaded programs.
  659.  
  660.  
  661.   4.2.2.5.  Sending Messages on Multitasking Operating Systems with
  662.   extra CPUs:
  663.  
  664.   In order to improve performance, the store adds 8 cash registers at
  665.   the back of the store.  Because the new cash registers are far away
  666.   from the front cash registers, the cashiers must call on the phone to
  667.   send their sub-totals to the front of the store. This distance adds
  668.   extra overhead (time) to communication between cashiers, but if
  669.   communication is minimized, it is not a problem.   If you have a
  670.   really big order, one that requires all the cash registers, then as
  671.   before your speed can be improved by using all cash registers at the
  672.   same time, the extra overhead must be considered. In some cases, the
  673.   store may have single cash registers (or islands of cash registers)
  674.   located all over the store - each cash register (or island) must
  675.   communicate by phone.  Since all the cashiers working the cash
  676.   registers can talk to each other by phone, it does not matter too much
  677.   where they are.
  678.  
  679.   Computer Example: One or several copies of UNIX or NT with extra CPUs
  680.   on the same or different motherboard communicating through messages.
  681.  
  682.   The above scenarios, although not exact, are a good representation of
  683.   constraints placed on parallel systems.  Unlike a single CPU (or cash
  684.   register) communication is an issue.
  685.  
  686.  
  687.   4.3.  Architectures for parallel computing
  688.  
  689.   The common methods and architectures of parallel computing are
  690.   presented below.  While this description is by no means exhaustive, it
  691.   is enough to understand the basic issues involved with Beowulf design.
  692.  
  693.  
  694.   4.3.1.  Hardware Architectures
  695.  
  696.  
  697.   There are basically two ways parallel computer hardware is put
  698.   together:
  699.  
  700.  
  701.   1. Local memory machines that communicate by messages (Beowulf
  702.      Clusters)
  703.  
  704.   2. Shared memory machines that communicate through memory (SMP
  705.      machines)
  706.  
  707.   A typical Beowulf is a collection of single CPU machines connected
  708.   using fast Ethernet and is, therefore, a local memory machine.  A 4
  709.   way SMP box is a shared memory machine and can be used for parallel
  710.   computing - parallel applications communicate using shared memory.
  711.   Just as in the computer store analogy, local memory machines
  712.   (individual cash registers) can be scaled up to large numbers of CPUs,
  713.   while the number of CPUs shared memory machines (the number of cash
  714.   registers you can place in one spot) can have is limited due to memory
  715.   contention.
  716.  
  717.   It is possible, however, to connect many shared memory machines to
  718.   create a "hybrid" shared memory machine.  These hybrid machines "look"
  719.   like a single large SMP machine to the user and are often called NUMA
  720.   (non uniform memory access) machines because the global memory seen by
  721.   the programmer and shared by all the CPUs can have different
  722.   latencies.  At some level, however, a NUMA machine must "pass
  723.   messages" between local shared memory pools.
  724.  
  725.   It is also possible to connect SMP machines as local memory compute
  726.   nodes.  Typical CLASS I motherboards have either 2 or 4 CPUs and are
  727.   often used as a means to reduce the overall system cost. The Linux
  728.   internal scheduler determines how these CPUs get shared.  The user
  729.   cannot (at this point) assign a specific task to a specific SMP
  730.   processor.  The user can however, start two independent processes or a
  731.   threaded processes and expect to see a performance increase over a
  732.   single CPU system.
  733.  
  734.  
  735.   4.3.2.  Software API Architectures
  736.  
  737.   There basically two ways to "express" concurrency in a program:
  738.  
  739.   1. Using Messages sent between processors
  740.  
  741.   2. Using operating system Threads
  742.  
  743.   Other methods do exist, but these are the two most widely used. It is
  744.   important to remember that the expression of concurrency is not
  745.   necessary controlled by the underlying hardware.  Both Messages and
  746.   Threads can be implemented on SMP, NUMA-SMP, and clusters - although
  747.   as explained below efficiently and portability are important issues.
  748.  
  749.  
  750.   4.3.2.1.  Messages
  751.  
  752.   Historically, messages passing technology reflected the design of
  753.   early local memory parallel computers. Messages require copying data
  754.   while Threads use data in place.  The latency and speed at which
  755.   messages can be copied are the limiting factor with message passing
  756.   models. A Message is quite simple: some data and a destination
  757.   processor.  Common message passing APIs are PVM or MPI. Message
  758.   passing can be efficiently implemented using Threads and Messages work
  759.   well both on SMP machine and between clusters of machines.  The
  760.   advantage to using messages on an SMP machine, as opposed to Threads,
  761.   is that if you decided to use clusters in the future it is easy to add
  762.   machines or scale your application.
  763.  
  764.  
  765.   4.3.2.2.  Threads
  766.  
  767.   Operating system Threads were developed because shared memory SMP
  768.   (symmetrical multiprocessing) designs allowed very fast shared memory
  769.   communication and synchronization between concurrent parts of a
  770.   program.  Threads work well on SMP systems because communication is
  771.   through shared memory.  For this reason the user must isolate local
  772.   data from global data, otherwise programs will not work properly. In
  773.   contrast to messages, a large amount of copying can be eliminated with
  774.   threads because the data is shared between processes (threads). Linux
  775.   supports POSIX threads. The problem with threads is that it is
  776.   difficult to extend them beyond one SMP machine and because data is
  777.   shared between CPUs, cache coherence issues can contribute to
  778.   overhead. Extending threads beyond the SMP boundary efficiently
  779.   requires NUMA technology which is expensive and not natively supported
  780.   by Linux. Implementing threads on top of messages has been done
  781.   ((http://syntron.com/ptools/ptools_pg.htm)), but Threads are often
  782.   inefficient when implemented using messages.
  783.  
  784.   The following can be stated about performance:
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.             SMP machine     cluster of machines  scalability
  794.             performance        performance
  795.             -----------     -------------------  -----------
  796.   messages    good                best              best
  797.  
  798.   threads     best               poor*              poor*
  799.  
  800.   * requires expensive NUMA technology.
  801.  
  802.  
  803.  
  804.  
  805.   4.3.3.  Application Architecture
  806.  
  807.   In order to run an application in parallel on multiple CPUs, it must
  808.   be explicitly broken in to concurrent parts.  A standard single CPU
  809.   application will run no faster than a single CPU application on
  810.   multiple processors.  There are some tools and compilers that can
  811.   break up programs, but parallelizing codes is not a "plug and play"
  812.   operation.  Depending on the application, parallelizing code can be
  813.   easy, extremely difficult, or in some cases impossible due to
  814.   algorithm dependencies.
  815.  
  816.   Before the software issues can be addressed the concept of Suitability
  817.   needs to be introduced.
  818.  
  819.  
  820.   4.4.  Suitability
  821.  
  822.   Most questions about parallel computing have the same answer:
  823.  
  824.   "It all depends upon the application."
  825.  
  826.   Before we jump into the issues, there is one very important
  827.   distinction that needs to be made - the difference between CONCURRENT
  828.   and PARALLEL.  For the sake of this discussion we will define these
  829.   two concepts as follows:
  830.  
  831.   CONCURRENT parts of a program are those that can be computed
  832.   independently.
  833.  
  834.   PARALLEL parts of a program are those CONCURRENT parts that are
  835.   executed on separate processing elements at the same time.
  836.  
  837.   The distinction is very important, because CONCURRENCY is a property
  838.   of the program and efficient PARALLELISM is a property of the machine.
  839.   Ideally, PARALLEL execution should result in faster performance.  The
  840.   limiting factor in parallel performance is the communication speed and
  841.   latency between compute nodes. (Latency also exists with threaded SMP
  842.   applications due to cache coherency.) Many of the common parallel
  843.   benchmarks are highly parallel and communication and latency are not
  844.   the bottle neck. This type of problem can be called  "obviously
  845.   parallel".  Other applications are not so simple and executing
  846.   CONCURRENT parts of the program in PARALLEL may actually cause the
  847.   program to run slower, thus offsetting any performance gains in other
  848.   CONCURRENT parts of the program.   In simple terms, the cost of
  849.   communication time must pay for the savings in computation time,
  850.   otherwise the PARALLEL execution of the CONCURRENT part is
  851.   inefficient.
  852.  
  853.   The task of the programmer is to determining what CONCURRENT parts of
  854.   the program SHOULD be executed in PARALLEL and what parts SHOULD NOT.
  855.   The answer to this will determine the EFFICIENCY of application.  The
  856.   following graph summarizes the situation for the programmer:
  857.  
  858.  
  859.            | *
  860.            | *
  861.            | *
  862.    % of    | *
  863.    appli-  |  *
  864.    cations |  *
  865.            |  *
  866.            |  *
  867.            |    *
  868.            |     *
  869.            |      *
  870.            |        ****
  871.            |            ****
  872.            |                ********************
  873.            +-----------------------------------
  874.             communication time/processing time
  875.  
  876.  
  877.  
  878.   In a perfect parallel computer, the ratio of communication/processing
  879.   would be equal and anything that is CONCURRENT could be implemented in
  880.   PARALLEL.  Unfortunately, Real parallel computers, including shared
  881.   memory machines, are subject to the effects described in this graph.
  882.   When designing a Beowulf, the user may want to keep this graph in mind
  883.   because parallel efficiency depends upon ratio of communication time
  884.   and processing time for A SPECIFIC PARALLEL COMPUTER.  Applications
  885.   may be portable between parallel computers, but there is no guarantee
  886.   they will be efficient on a different platform.
  887.  
  888.   IN GENERAL, THERE IS NO SUCH THING AS A PORTABLE AND EFFICIENT
  889.   PARALLEL PROGRAM
  890.  
  891.   There is yet another consequence to the above graph.  Since efficiency
  892.   depends upon the comm./process. ratio, just changing one component of
  893.   the ratio does not necessary mean a specific application will perform
  894.   faster.  A change in processor speed, while keeping the communication
  895.   speed that same may have non- intuitive effects on your program.   For
  896.   example, doubling or tripling the CPU speed, while keeping the
  897.   communication speed the same, may now make some previously efficient
  898.   PARALLEL portions of your program, more efficient if they were
  899.   executed SEQUENTIALLY.  That is, it may now be faster to run the
  900.   previously PARALLEL parts as SEQUENTIAL.  Furthermore, running
  901.   inefficient parts in parallel will actually keep your application from
  902.   reaching its maximum speed. Thus, by adding faster processor, you may
  903.   actually slowed down your application (you are keeping the new CPU
  904.   from running at its maximum speed for that application)
  905.  
  906.   UPGRADING TO A FASTER CPU MAY ACTUALLY SLOW DOWN YOUR APPLICATION
  907.  
  908.   So, in conclusion, to know whether or not you can use a parallel
  909.   hardware environment, you need to have some insight into the
  910.   suitability of a particular machine to your application.  You need to
  911.   look at a lot of issues including CPU speeds, compiler, message
  912.   passing API, network, etc.  Please note, just profiling an
  913.   application, does not give the whole story.  You may identify a
  914.   computationally heavy portion of your program, but you do not know the
  915.   communication cost for this portion.  It may be that for a given
  916.   system, the communication cost as do not make parallelizing this code
  917.   efficient.
  918.  
  919.  
  920.   A final note about a common misconception. It is often stated that "a
  921.   program is PARALLELIZED", but in reality only the CONCURRENT parts of
  922.   the program have been located. For all the reasons given above, the
  923.   program is not PARALLELIZED.   Efficient PARALLELIZATION is a property
  924.   of the machine.
  925.   4.5.  Writing and porting parallel software
  926.  
  927.   Once you decide that you need parallel computing and would like to
  928.   design and build a Beowulf, a few moments considering your application
  929.   with respect to the previous discussion may be a good idea.
  930.  
  931.   In general there are two things you can do:
  932.  
  933.   1. Go ahead and construct a CLASS I Beowulf and then "fit" your
  934.      application to it.  Or run existing parallel applications that you
  935.      know work on your Beowulf (but beware of the portability and
  936.      efficiently issues mentioned above)
  937.  
  938.   2. Look at the applications you need to run on your Beowulf and make
  939.      some estimations as to the type of hardware and software you need.
  940.  
  941.   In either case, at some point you will need to look at the efficiency
  942.   issues.  In general, there are three things you need to do:
  943.  
  944.   1. Determine concurrent parts of your program
  945.  
  946.   2. Estimate parallel efficiently
  947.  
  948.   3. Describing the concurrent parts of your program
  949.  
  950.   Let's look at these one at a time.
  951.  
  952.  
  953.   4.5.1.  Determine concurrent parts of your program
  954.  
  955.   This step is often considered "parallelizing your program".
  956.   Parallelization decisions will be made in step 2.  In this step, you
  957.   need to determine data dependencies.
  958.  
  959.   >From a practical standpoint, applications may exhibit two types of
  960.   concurrency: compute (number crunching) and I/O (database). Although
  961.   in many cases compute and I/O concurrency are orthogonal, there are
  962.   application that require both. There are tools available that can
  963.   perform concurrency analysis on existing applications.  Most of these
  964.   tools are designed for FORTRAN.  There are two reasons FORTRAN is
  965.   used: historically most number crunching applications were written in
  966.   FORTRAN and it is easier to analyze.  If no tools are available, then
  967.   this step can be some what difficult for existing applications.
  968.  
  969.  
  970.   4.5.2.  Estimate parallel efficiency
  971.  
  972.   Without the help of tools, this step may require trial and error tests
  973.   or just a plain old educated guess.  If you have a specific
  974.   application in mind, try to determine if it is CPU limited (compute
  975.   bound) or hard disk limited (I/O bound).  The requirements of your
  976.   Beowulf may be quite different depending upon your needs.  For
  977.   example, a compute bound problem may need a few very fast CPUs and
  978.   high speed low latency network, while an I/O bound problem may work
  979.   better with more slower CPUs and fast Ethernet.
  980.  
  981.   This recommendation often comes as a surprise to most people because,
  982.   the standard assumption is that faster processor are always better.
  983.   While this is true if your have an unlimited budget, real systems may
  984.   have cost constraints that should be maximized.  For I/O bound
  985.   problems, there is a little known rule (called the Eadline-Dedkov Law)
  986.   that is quite helpful:
  987.  
  988.   For two given parallel computers with the same cumulative CPU
  989.   performance index, the one which has slower processors (and a probably
  990.   correspondingly slower interprocessor communication network) will have
  991.   better performance for I/O-dominant applications.
  992.  
  993.   While the proof of this rule is beyond the scope of this document, you
  994.   find it interesting to download the paper Performance Considerations
  995.   for I/O-Dominant Applications on Parallel Computers (Postscript format
  996.   109K ) (ftp://www.plogic.com/pub/papers/exs-pap6.ps)
  997.  
  998.   Once you have determined what type of concurrency you have in your
  999.   application, you will need to estimate how efficient it will be in
  1000.   parallel.  See Section ``Software'' for a description of Software
  1001.   tools.
  1002.  
  1003.   In the absence of tools, you may try to guess your way through this
  1004.   step.  If a compute bound loop measured in minutes and the data can be
  1005.   transferred in seconds, then it might be a good candidate for
  1006.   parallelization.  But remember, if you take a 16 minute loop and break
  1007.   it into 32 parts, and your data transfers require several seconds per
  1008.   part, then things are going to get tight.  You will reach a point of
  1009.   diminishing returns.
  1010.  
  1011.  
  1012.   4.5.3.  Describing the concurrent parts of your program
  1013.  
  1014.   There are several ways to describe concurrent parts of your program:
  1015.  
  1016.   1. Explicit parallel execution
  1017.  
  1018.   2. Implicit parallel execution
  1019.  
  1020.   The major difference between the two is that explicit parallelism is
  1021.   determined by the user where implicit parallelism is determined by the
  1022.   compiler.
  1023.  
  1024.  
  1025.   4.5.3.1.  Explicit Methods
  1026.  
  1027.   These are basically method where the user must modify source code
  1028.   specifically for a parallel computer.  The user must either add
  1029.   messages using PVM or MPI or add threads using POSIX threads. (Keep in
  1030.   mind however, threads can not move between SMP motherboards).
  1031.  
  1032.   Explicit methods tend to be the most difficult to implement and debug.
  1033.   Users typically embed explicit function calls in standard FORTRAN 77
  1034.   or C/C++ source code.  The MPI library has added some functions to
  1035.   make some standard parallel methods easier to implement (i.e.
  1036.   scatter/gather functions).  In addition, it is also possible to use
  1037.   standard libraries that have been written for parallel computers.
  1038.   Keep in mind, however, the portability vs. efficiently trade-off)
  1039.  
  1040.  
  1041.   For historical reasons, most number crunching codes are written in
  1042.   FORTRAN.  For this reasons, FORTRAN has the largest amount of support
  1043.   (tools, libraries, etc.) for parallel computing.  Many programmers now
  1044.   use C or re- write existing FORTRAN applications in C with the notion
  1045.   the C will allow faster execution.  While this may be true as C is the
  1046.   closest thing to a universal machine code, it has some major
  1047.   drawbacks.  The use of pointers in C makes determining data
  1048.   dependencies extremely difficult.  Automatic analysis of pointers is
  1049.   extremely difficult. If you have an existing FORTRAN program and think
  1050.   that you might want to parallelize it in the future - DO NOT CONVERT
  1051.   IT TO C!
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.   4.5.3.2.  Implicit Methods
  1058.  
  1059.   Implicit methods are those where the user gives up some (or all) of
  1060.   the parallelization decisions to the compiler.  Examples are FORTRAN
  1061.   90, High Performance FORTRAN (HPF), Bulk Synchronous Parallel (BSP),
  1062.   and a whole collection of other methods that are under development.
  1063.  
  1064.   Implicit methods require the user to provide some information about
  1065.   the concurrent nature of their application, but the compiler will then
  1066.   make many decisions about how to execute this concurrency in parallel.
  1067.   These methods provide some level of portability and efficiency, but
  1068.   there is still no "best way" to describe a concurrent problem for a
  1069.   parallel computer.
  1070.  
  1071.  
  1072.   5.  Beowulf Resources
  1073.  
  1074.  
  1075.  
  1076.   5.1.  Starting Points
  1077.  
  1078.  
  1079.  
  1080.   ╖  Beowulf mailing list.  To subscribe send mail to beowulf-
  1081.      request@cesdis.gsfc.nasa.gov with the word subscribe in the message
  1082.      body.
  1083.  
  1084.   ╖  Beowulf Homepage http://www.beowulf.org
  1085.  
  1086.   ╖  Extreme Linux http://www.extremelinux.org
  1087.  
  1088.   ╖  Extreme Linux Software from Red Hat http://www.redhat.com/extreme
  1089.  
  1090.  
  1091.  
  1092.   5.2.  Documentation
  1093.  
  1094.  
  1095.  
  1096.   ╖  The latest version of the Beowulf HOWTO
  1097.      http://www.sci.usq.edu.au/staff/jacek/beowulf.
  1098.  
  1099.   ╖  Building a Beowulf System
  1100.      http://www.cacr.caltech.edu/beowulf/tutorial/building.html
  1101.  
  1102.   ╖  Jacek's Beowulf Links
  1103.      http://www.sci.usq.edu.au/staff/jacek/beowulf.
  1104.  
  1105.   ╖  Beowulf Installation and Administration HOWTO (DRAFT)
  1106.      http://www.sci.usq.edu.au/staff/jacek/beowulf.
  1107.  
  1108.   ╖  Linux Parallel Processing HOWTO
  1109.      http://yara.ecn.purdue.edu/~pplinux/PPHOWTO/pphowto.html
  1110.  
  1111.  
  1112.  
  1113.   5.3.  Papers
  1114.  
  1115.  
  1116.  
  1117.   ╖  Chance Reschke, Thomas Sterling, Daniel Ridge, Daniel Savarese,
  1118.      Donald Becker, and Phillip Merkey A Design Study of Alternative
  1119.      Network Topologies for the Beowulf Parallel Workstation.
  1120.      Proceedings Fifth IEEE International Symposium on High Performance
  1121.      Distributed Computing, 1996.
  1122.      http://www.beowulf.org/papers/HPDC96/hpdc96.html
  1123.   ╖  Daniel Ridge, Donald Becker, Phillip Merkey, Thomas Sterling
  1124.      Becker, and Phillip Merkey. Harnessing the Power of Parallelism in
  1125.      a Pile-of-PCs.  Proceedings, IEEE Aerospace, 1997.
  1126.      http://www.beowulf.org/papers/AA97/aa97.ps
  1127.  
  1128.  
  1129.   ╖  Thomas Sterling, Donald J. Becker, Daniel Savarese, Michael R.
  1130.      Berry, and Chance Res. Achieving a Balanced Low-Cost Architecture
  1131.      for Mass Storage Management through Multiple Fast Ethernet Channels
  1132.      on the Beowulf Parallel Workstation.  Proceedings, International
  1133.      Parallel Processing Symposium, 1996.
  1134.      http://www.beowulf.org/papers/IPPS96/ipps96.html
  1135.  
  1136.  
  1137.   ╖  Donald J. Becker, Thomas Sterling, Daniel Savarese, Bruce Fryxell,
  1138.      Kevin Olson. Communication Overhead for Space Science Applications
  1139.      on the Beowulf Parallel Workstation.  Proceedings,High Performance
  1140.      and Distributed Computing, 1995.
  1141.      http://www.beowulf.org/papers/HPDC95/hpdc95.html
  1142.  
  1143.  
  1144.  
  1145.   ╖  Donald J. Becker, Thomas Sterling, Daniel Savarese, John E.
  1146.      Dorband, Udaya A. Ranawak, Charles V.  Packer. BEOWULF: A PARALLEL
  1147.      WORKSTATION FOR SCIENTIFIC COMPUTATION.  Proceedings, International
  1148.      Conference on Parallel Processing, 95.
  1149.      http://www.beowulf.org/papers/ICPP95/icpp95.html
  1150.  
  1151.   ╖  Papers at the Beowulf site
  1152.      http://www.beowulf.org/papers/papers.html
  1153.  
  1154.  
  1155.  
  1156.  
  1157.   5.4.  Software
  1158.  
  1159.  
  1160.   ╖  PVM - Parallel Virtual Machine
  1161.      http://www.epm.ornl.gov/pvm/pvm_home.html
  1162.  
  1163.  
  1164.  
  1165.   ╖  LAM/MPI (Local Area Multicomputer / Message Passing Interface
  1166.      http://www.mpi.nd.edu/lam
  1167.  
  1168.   ╖  BERT77 - FORTRAN conversion tool http://www.plogic.com/bert.html
  1169.  
  1170.   ╖  Beowulf software from Beowulf Project Page
  1171.      http://beowulf.gsfc.nasa.gov/software/software.html
  1172.  
  1173.   ╖  Jacek's Beowulf-utils ftp://ftp.sci.usq.edu.au/pub/jacek/beowulf-
  1174.      utils
  1175.  
  1176.   ╖  bWatch - cluster monitoring tool
  1177.      http://www.sci.usq.edu.au/staff/jacek/bWatch
  1178.  
  1179.  
  1180.  
  1181.  
  1182.   5.5.  Beowulf Machines
  1183.  
  1184.  
  1185.   ╖  Avalon consists of 140 Alpha processors, 36 GB of RAM, and is
  1186.      probably the fastest Beowulf machine, cruising at 47.7 Gflops and
  1187.      ranking 114th on the Top 500 list.  http://swift.lanl.gov/avalon/
  1188.  
  1189.   ╖  Megalon-A Massively PArallel CompuTer Resource (MPACTR) consists of
  1190.      14, quad CPU Pentium Pro 200 nodes, and 14 GB of RAM.
  1191.      http://megalon.ca.sandia.gov/description.html
  1192.  
  1193.   ╖  theHIVE - Highly-parallel Integrated Virtual Environment is another
  1194.      fast Beowulf Supercomputer.  theHIVE is a 64 node, 128 CPU machine
  1195.      with the total of 4 GB RAM.  http://newton.gsfc.nasa.gov/thehive/
  1196.  
  1197.   ╖  Topcat is a much smaller machine and consists of 16 CPUs and 1.2 GB
  1198.      RAM.  http://www.sci.usq.edu.au/staff/jacek/topcat
  1199.  
  1200.   ╖  MAGI cluster - this is a very interesting site with many good
  1201.      links. http://noel.feld.cvut.cz/magi/
  1202.  
  1203.  
  1204.  
  1205.  
  1206.   5.6.  Other Interesting Sites
  1207.  
  1208.  
  1209.  
  1210.   ╖  SMP Linux http://www.linux.org.uk/SMP/title.html
  1211.  
  1212.   ╖  Paralogic - Buy a Beowulf http://www.plogic.com
  1213.  
  1214.  
  1215.   5.7.  History
  1216.  
  1217.  
  1218.   ╖  Legends - Beowulf  http://legends.dm.net/beowulf/index.html
  1219.  
  1220.   ╖  The Adventures of Beowulf
  1221.      http://www.lnstar.com/literature/beowulf/beowulf.html
  1222.  
  1223.  
  1224.   6.  Source code
  1225.  
  1226.  
  1227.   6.1.  sum.c
  1228.  
  1229.  
  1230.   /* Jacek Radajewski jacek@usq.edu.au */
  1231.   /* 21/08/1998 */
  1232.  
  1233.   #include <stdio.h>
  1234.   #include <math.h>
  1235.  
  1236.   int main (void) {
  1237.  
  1238.     double result = 0.0;
  1239.     double number = 0.0;
  1240.     char string[80];
  1241.  
  1242.  
  1243.     while (scanf("%s", string) != EOF) {
  1244.  
  1245.       number = atof(string);
  1246.       result = result + number;
  1247.     }
  1248.  
  1249.     printf("%lf\n", result);
  1250.  
  1251.     return 0;
  1252.  
  1253.   }
  1254.  
  1255.   6.2.  sigmasqrt.c
  1256.  
  1257.  
  1258.   /* Jacek Radajewski jacek@usq.edu.au */
  1259.   /* 21/08/1998 */
  1260.  
  1261.   #include <stdio.h>
  1262.   #include <math.h>
  1263.  
  1264.   int main (int argc, char** argv) {
  1265.  
  1266.     long number1, number2, counter;
  1267.     double result;
  1268.  
  1269.     if (argc < 3) {
  1270.       printf ("usage : %s number1 number2\n",argv[0]);
  1271.       exit(1);
  1272.     } else {
  1273.       number1 = atol (argv[1]);
  1274.       number2 = atol (argv[2]);
  1275.       result = 0.0;
  1276.     }
  1277.  
  1278.     for (counter = number1; counter <= number2; counter++) {
  1279.       result = result + sqrt((double)counter);
  1280.     }
  1281.  
  1282.     printf("%lf\n", result);
  1283.  
  1284.     return 0;
  1285.  
  1286.   }
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.   6.3.  prun.sh
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.   #!/bin/bash
  1322.   # Jacek Radajewski jacek@usq.edu.au
  1323.   # 21/08/1998
  1324.  
  1325.   export SIGMASQRT=/home/staff/jacek/beowulf/HOWTO/example1/sigmasqrt
  1326.  
  1327.   # $OUTPUT must be a named pipe
  1328.   # mkfifo output
  1329.  
  1330.   export OUTPUT=/home/staff/jacek/beowulf/HOWTO/example1/output
  1331.  
  1332.   rsh scilab01 $SIGMASQRT         1  50000000 > $OUTPUT < /dev/null&
  1333.   rsh scilab02 $SIGMASQRT  50000001 100000000 > $OUTPUT < /dev/null&
  1334.   rsh scilab03 $SIGMASQRT 100000001 150000000 > $OUTPUT < /dev/null&
  1335.   rsh scilab04 $SIGMASQRT 150000001 200000000 > $OUTPUT < /dev/null&
  1336.   rsh scilab05 $SIGMASQRT 200000001 250000000 > $OUTPUT < /dev/null&
  1337.   rsh scilab06 $SIGMASQRT 250000001 300000000 > $OUTPUT < /dev/null&
  1338.   rsh scilab07 $SIGMASQRT 300000001 350000000 > $OUTPUT < /dev/null&
  1339.   rsh scilab08 $SIGMASQRT 350000001 400000000 > $OUTPUT < /dev/null&
  1340.   rsh scilab09 $SIGMASQRT 400000001 450000000 > $OUTPUT < /dev/null&
  1341.   rsh scilab10 $SIGMASQRT 450000001 500000000 > $OUTPUT < /dev/null&
  1342.   rsh scilab11 $SIGMASQRT 500000001 550000000 > $OUTPUT < /dev/null&
  1343.   rsh scilab12 $SIGMASQRT 550000001 600000000 > $OUTPUT < /dev/null&
  1344.   rsh scilab13 $SIGMASQRT 600000001 650000000 > $OUTPUT < /dev/null&
  1345.   rsh scilab14 $SIGMASQRT 650000001 700000000 > $OUTPUT < /dev/null&
  1346.   rsh scilab15 $SIGMASQRT 700000001 750000000 > $OUTPUT < /dev/null&
  1347.   rsh scilab16 $SIGMASQRT 750000001 800000000 > $OUTPUT < /dev/null&
  1348.   rsh scilab17 $SIGMASQRT 800000001 850000000 > $OUTPUT < /dev/null&
  1349.   rsh scilab18 $SIGMASQRT 850000001 900000000 > $OUTPUT < /dev/null&
  1350.   rsh scilab19 $SIGMASQRT 900000001 950000000 > $OUTPUT < /dev/null&
  1351.   rsh scilab20 $SIGMASQRT 950000001 1000000000 > $OUTPUT < /dev/null&
  1352.  
  1353.  
  1354.  
  1355.  
  1356.  
  1357.  
  1358.  
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.