Appendix C: Technology Overview
Appendix C describes some of the parallel computing resources offered by Microsoft® that are not covered in this guide. The "Further Reading" section includes URLs for websites that have more information. Figure 1 illustrates the different offerings and how they are related. (Note that a UMS thread is a user-mode scheduling thread. This is a mechanism that applications can use to schedule their own threads.)
This guide covers the Task Parallel Library (TPL) and Parallel LINQ (PLINQ), which are managed libraries that ship as part of the Microsoft .NET Framework 4. They rely on the .NET ThreadPool class and the concurrent data structures of .NET Framework 4.
The F# language also ships with the Microsoft Visual Studio® 2010 development system. It exposes a more functional approach to parallelism than do TPL or PLINQ, and it emphasizes immutable data types. However, F#'s runtime libraries build on and integrate with TPL, and the F# PowerPack includes parallelization support that is built on top of PLINQ. The samples in this guide have been ported to F#.
For Microsoft Visual C++® development system developers, there are the Parallel Pattern and Asynchronous Agents libraries. These use the native Concurrency Runtime, which includes a powerful scheduler and resource manager that are designed to efficiently execute native parallel workloads on multicore architectures. The Visual C++ version of this guide will be available soon.
Visual Studio 2010 contains several tools for debugging and profiling parallel applications. For examples of how to use them, see Appendix B, "Debugging and Profiling Parallel Applications." You can also use the CHESS tools from Microsoft Research to detect bugs in your parallel code.
In addition to the technologies that ship with Visual Studio 2010 and the .NET Framework 4, there are other interesting research projects that focus on parallelism and concurrency. They include the Axum language, the Reactive Extensions for .NET (Rx), and DryadLINQ. Axum is a concurrent programming language built on the principles of isolation, actors, and message-passing to increase application safety, responsiveness, scalability, and developer productivity. Rx is a library for composing asynchronous and event-based programs using observable collections. DryadLINQ is a programming environment for writing large-scale data parallel applications that run on large PC clusters. Accelerator (not shown in Figure 1) is a library that uses a data parallelism programming model and targets both graphics processing unit GPUs and multicore CPUs.
Axum, Rx, Accelerator, and DryadLINQ are incubation or research projects and Microsoft has made no commitment to ship them. However, they contain many new ideas and approaches that will interest anyone who has read this far in the book. You're encouraged to download them, evaluate them, and provide the respective teams with feedback.
All of the above technologies, with the exception of Axum and DryadLINQ, are largely for parallelism on a single computer. Windows High Performance Computing (HPC) Server 2008 targets clusters of servers and supports scale out across many computers. Although the technologies are very different for clustered computing, some of the fundamental patterns discussed in this book, such as Parallel Tasks and Parallel Aggregation, are still applicable.
The MSDN Parallel Computing Developer Center covers parallel development on both the managed and native concurrency runtimes, as well as the Visual Studio 2010 tools that support writing parallel programs:
For information about F# including the language reference and walkthroughs, see the Microsoft F# Developer Center:
F# versions of the samples in this guide are on CodePlex:
Windows HPC Server 2008 product information and developer resources are available on the Windows HPC Server site:
Details of the Microsoft Research projects Accelerator and DryadLINQ are available:
Descriptions and downloads for Rx, Axum, and CHESS, which are all part of the Microsoft DevLabs project, are available: