| The most difficult problems that confront the field of parallel computing are: Determining how to partition a computing task into a form that can be sub-divided across multiple processors. Creating arbitration methods in software and hardware that allow processors to communicate the status of a task and their availability for task assignment. Creating arbitration methods that allow processors to read and write a shared data pool, without improperly overwriting data in that pool that was written there by another processor. Handling the asynchronous timing issues that occur when processors are separated by large geographical distances in an efficient manner. The first problem is one of the hardest. If a task has a lot of serial dependencies in its execution steps, it is very difficult to partition the task into a format that can be distributed across multiple processors. A task is serially dependent if each execution step must wait on the previous execution step before continuing. Think about trying to walk through a door before opening it. Conversely, a task that is well suited to parallel processing is any large data set that needs to be crunched. Given a set of 10 processors, it is very easy to take a database of 100 records and assign 10 records to each processor for co-processing. One of the most intriguing and important fields of study involved in parallel computing it is that of devising automatic ways to partition computing tasks without needing the design intervention of human programmers. A famous example of a parallel computing project is the SETI@home project, managed by The Search for Extraterrestrial Intelligence group, located in Berkeley, CA. Millions of computer users have donated computing time to processing SETI's huge data sets, to help find signs of alien life. Their computers run screensavers that cooperate with SETI's servers, requesting data chunks for processing and returning the results of their computations to the servers. |