Google

Monday, September 3, 2007

means of Computation

A Super Computer is a large computer which is often misunderstood to be a “very fast computer”. However this is a misconception. A Super Computer only does more activity in parallel. It might be hard to digest how doing more in parallel does not necessarily make a Computer faster in operation. So lets take it 1 step at a time.

Let us consider that a factory gets an order to create a “Pen” and say the factory has only 4 production units. Now suppose the Pen’s construction was compartmentalized, we could parallely create different parts in the different production units, say we can create the refill, cap, body, and the ink barrel in separate production units. Now all that remains is to assemble the individual parts. So hypothetically the total time taken would be the time of production of 2 separate units — 1 for the production of the various units and 1 more for the assembling.

Now let us consider the case where the pen is a non modular design i.e. it is 1 single piece and not separate pieces. Now the same factory will have to idle 3 of the production units while only 1 is in operation. So in effect it would take 4 unit times.

So Now we see that the parallelism is the reason a Super Computer is faster and it is *highly* dependant on parallelism of the problem. A scalar processor is one which executes a set of instructions one after the other. A vector processor on the other hand is a processor which acts on a large set of data elements in parallel. In simple terms while a scalar processor acts on simple data types like integer, character, floating points, etc, The vector processor acts on large sets of these basic data types.

This helps in recuding the number of clock cycles for each instruction. These types of vector operations are especially useful when matrix computation is used. This kind of increased hardware complexity formed the first range of super computers.
The Super Computers as produced by the big production companies are the hollywood style computers spanning rows and rows of computers (sometimes even rooms ;-)). They are often called the `Big Iron’, for their massive size. However the latest trend is to go for a more Distributed approach to Super Computing. This is where the concepts of Clusters and Grids come into place.

A Cluster is a group of seperate computers connected by means of a high bandwidth network which work in parallel. The parallelism is achieved either by making use of special Libraries like MPI/PVM or by using multi threaded programs.

A Grid on the other hand is a more distributed form of Super Computing. The different nodes (Computers) may be connected to each other over lesser bandwidth links, say even the internet. SETI@HOME is one of the most popular GRID projects. SETI@HOME is an attempt to identify extra-terrestrial life. Also to be noted is that a GRID is much more scalable in the sense that 1000s of nodes may be connected together whereas a cluster is typically restricted to 10-100 nodes.

A Grid is a heterogenous mixture of nodes. What heterogenous means in simple terms is that each node of the grid need not be individual computers, but it could be individual computers, clusters, mini grids or even super computers. Another feature of this “heterogenous property” is that the nodes can run different computing environments, say one node might be running Linux, while another a Windows environment and while yet another node might be running a UNIX variant like AIX or System V, etc.

The Basic Difference between Grids and Clusters however remain in that clusters are closely connected (in which case a single master node has a central view of the cluster) while grids are a set of loosely connected nodes (in which case each node of the system is a seperate individual unit with information reagarding other nodes too). The history of Super Computing can be traced from Main Frame computers to mini computers to Work station Clusters to the high volume PC clusters of today. But what is the use of this kind of Super Computing?

1. High Availability Computing (and Load Balancing)

Many servers require that they have 99.9999999(…)% uptimes. This might be hard if a single server was to serve all requests. Popular websites for instance get millions and billions of hits per day. It would be virtually impossible for a single computer to serve each request. Here is where Server Farms come into place. A job scheduler will dispatch the requests between different nodes of the cluster/grid based on the `idleness’ of the node. In this manner a large number of nodes will provide backup to service the nodes even if a few nodes were to fail. This provides extensive availability (Quality of Service) of data.

2. High Performance Computing

Also required in many situations (as the title suggests) is the need for High levels of performance. As described above, if a single job can be dispatched between different nodes to be processed in parallel. It provides a very reliable and fast means of Computation of Computationally Intensive tasks like protein folding, climate modelling and various simulations like natural disasters and man made disasters like nuclear bombs, etc.