Abstract Parallel programming has been a difficult task since the first parallel computing architectures were introduced in the 60s. Many different programming metaphors, from shared memory to message-passing have been designed and implemented, but none have fully satisfied the programming community by their usability and efficiency in various problem domains. While SPMD programming is easy to understand, it lacks the expressiveness of multi-threading, which allows the programming to separate functionally distinct segments of control flow. Introduction Cheap, efficient, parallel computing has been a dream of computer scientists since the early pioneers in the 1960s. While great strides have been made in parallel architecture and hardware design, there hasn't been much progress in software.
Explicit parallelism tends to be expressed in two forms, SPMD or multi-threading.
SPMD programming has one thread per processing unit, each thread starting at the same time and running the same code. Communication and coordination happens through shared memory abstractions, explicit barriers and synchronization. Multi-threaded programs , on the other hand, have many dynamically created threads, each of this may start at an arbitrary time and may be running different code. Communication between threads happens via shared memory abstractions and explicit synchronization on shared locks. Titanium takes the SPMD approach to parallelism.