[Technology Report]
The Multicore Era Seeks A Parallel Paradigm
Scalability, simpler debugging, and easier coding are essential to developing a successful parallel-programming approach.
Likewise, Scheme, a dialect of Lisp, employs the functions delay and force to implement the idea of futures. A function’s computation can be delayed until a result is forced, though it may only be the part of the result that’s being examined. If the result is a list and the value of the first item is forced, then only that item needs to be computed.
This approach as well as other parallelprogramming methods such as scattergather are used in a range of applications already, from database servers to disk queuing to memory caching, with the well-accepted look-ahead methods. These features need to be incorporated into programming languages, but deciding how and when is a difficult task. Various features do find their way into the mainstream eventually. For example, lambda expressions are cropping up in C# and Java (see “Lambda: Reclaiming An Old Concept,” ED Online 18099).
While researchers may be scurrying to move parallel language enhancements into the mainstream, some platforms are already there. National Instruments’ Lab- VIEW has been supporting parallel dataflow semantics since its inception, as well as time-based programming aspects that blend well because of LabVIEW’s graphical nature.
LabVIEW isn’t the only graphical programming language that supports dataflow semantics, but it’s one of the more mature products. It brings parallel processing semantics down to the graphical statement level. In fact, LabVIEW tends to push parallel processing to the other extreme, where hundreds of expressions may be pending evaluation.
Prioritizing computation tends to be more difficult compared to sequential textbased programming languages, but that’s the tradeoff. Every language has its own advantages and disadvantages, and none of them—not even LabVIEW—answers all problems equally well.
One aspect handled well by National Instruments with its LabVIEW implementation is splitting a model/program across platforms. This is critical for parallel programming because many architectures are hybrids with multiple instances of multiplecore platforms. Multiple-core platforms are normally linked by shared memory while instances are normally linked using other techniques. Many other approaches tend to fall down in this area because they address only a single architecture.