EditHint: this page title is UgLy. Maybe move?
From SynchronizationStrategies:
One way to look at parallelization is to consider the serial program to already be a parallel program, but one that acquires a single global lock at the start of execution, then releases it just before terminating.
From this perspective (sometimes called ``Giant Locks''), the idea is to move toward finer-grained locking until you reach the point where where the SpeedUp and ConTention forces balance the OverHead, Economics, and DevMaintCost forces. Each finer ``grain'', or CriticalSection, are usually identified by looking at the data structures used by the program, since the data is what must be protected from concurrent access. One approach is to provide a lock for the code accessing the data (CodeLocking), and another is to provide locks for the data items themselves (ParTition).
Other approaches (e.g., AtomicInstructions?, WaitFreeSynchronization, DataOwnership, ReadWriteLock) are also possible. These approaches are subject to other forces from the application (such as ReadToWriteRatio).
Parallelization efforts will often be subject to LaTency?, BandWidth?, and CacheArchitecture? forces (or maybe they are contexts, I am never sure, is there a ForceContextDuality?) from the underlying machine. In addition, parallelization efforts can easily lead to well-hidden DeadLock.
CurtSchimmel presents an excellent and thorough coverage of CacheArchitecture? forces in his book on parallelizing Unix kernels.
The GuideToParallelProgramming?, available from Sequent gives a good overview of software aspects of parallelization.
One need in patterns for parallelism, as (IMHO) patterns everywhere is a good way to index into them -- to find the pattern you need based on the context of the problem that you are trying to solve or the attributes of the job you are trying to get done. One possible index displays the hierarchy of concurrency primitives for a given computer system and application. The hierarchies that I have looked at tend to have few branch-points and therefore resemble saguaro cacti, hence, CactiOfConcurrency.
Book: PatternsForParallelProgramming