Microsoft Tools Up for Parallelism

Microsoft sets its sights on helping developers build parallel applications.

The parallel computing concept Microsoft's Craig Mundie, chief research and strategy officer, calls the next great shift in technology is Microsoft's development focus on more fronts than one. Microsoft is addressing parallel computing from the operating system level, to its core developer platform to language support.

At the platform level, Microsoft released the first public beta of Microsoft Windows HPC Server 2008 in November. Microsoft Windows HPC Server 2008 is a server operating system and tools designed for the fast-growing high-performance computing (HPC) market. Microsoft also established the Parallel Computing Initiative, a program creating a set of common development tools across multicore desktops and clusters.

Microsoft spelled out its overall parallel computing strategy in a white paper entitled "The Manycore Shift White Paper" in November. The paper describes how Microsoft and industry partners are working together to enable businesses, software and hardware vendors and individuals to take advantage of what the company calls the "manycore shift."

In a blog post from last May, S. "Soma" Somasegar, senior vice president of Microsoft's developer division, explained the situation with an example of how things are evolving. Said Somasegar: "Chip manufacturers would tell us that the world is going to see an explosive growth of multi- and many cores in the next generation microprocessors and systems that ship them. This opens the doors for a world where we need to build the capability of building software solutions with parallel computing techniques to the broad developer base. Today, parallel computing is still restricted to a select few people working on select hardware and environments."

Somasegar added that Microsoft then began "doing some early incubation work to bring parallel computing power to the broad developer base to embrace this inflection shift through elegant software architectures, rich libraries and powerful tools and languages all aimed at our first and best customers, our developers."

Extensions to .Net

Meanwhile, at the end of November, Microsoft released an early preview of the Parallel Extensions to the .NET Framework technology. This release contains new APIs to make programming on the .NET Framework simpler as well as supporting documentation and samples.

The Parallel Extensions runs on the .NET Framework 3.5 and relies on features available in C# 3.0 and Visual Basic 9.0. The extensions include imperative data and task parallelism APIs; declarative data parallelism in the form of a data parallel implementation of Language Integrated Query-to Objects (LINQ-to-Objects); first class tasks that can be used to schedule, wait on and cancel parallel work; a new concurrency runtime used across the library; and examples of parallelism from real-world problems.

In a blog post from November, Somasegar said: "Our work on concurrent programming is another great example of close, ongoing collaboration between product teams and Microsoft Research. Although we understand the shift to parallel computing is a gradual road ahead for our whole industry, we are excited by the prospect and believe that the Parallel Extensions library is a large step in the right direction."

At the OOPSLA (Object-Oriented Programming, Systems and Languages) conference in Montreal in October, Anders Hejlsberg, a Microsoft distinguished engineer and creator of C#, said: "Going forward, the big challenge we have today is we have to really think deeply about programming for concurrency," Hejlsberg said. "The models we have today for concurrency don't work."

He said that only the top 10 percent of programmers can adequately program for concurrent environments and it is not something for the masses.

James Gosling, a Sun Microsystems Inc. fellow and the creator of the Java language, agreed.

"Going forward [with the programming paradigm] the big challenge will be to think about multi-threading," Gosling said. "What will you do with a 4,000-core machine?"

Language and Library

Meanwhile, Microsoft last fall introduced the Task Parallel Library (TPL), which is designed to make it much easier to write managed code that can automatically use multiple processors. Using the library, developers can express potential parallelism in existing sequential code, where the exposed parallel tasks will be run concurrently on all available processors. Typically this results in significant speedups in performance, the company said.

TPL is being created as a collaborative effort by Microsoft Research, the Microsoft Common Language Runtime (CLR) team and the Parallel Computing Platform team. TPL is a major component of the Parallel FX library, the next generation of concurrency support for the Microsoft .NET Framework. Moreover, TPL does not require any language extensions and works with the .NET Framework 3.5 and higher. In addition, TPL supports Visual Studio 2008 and all parallelism is expressed using normal method calls.

Microsoft also has delivered a parallel version of its Language Integrated Query technology that will enable code to run on multiple CPUs. Known as PLinq, the technology is a parallel implementation of LINQ that will help programs execute faster, said Hejlsberg, the creator of the LINQ technology.

Meanwhile, Microsoft also is hoping to help developers address the issue of concurrency with language support. Hejlsberg said Microsoft's F# language, pronounced "F sharp," can help developers build applications that support concurrency.

Mads Torgersen, program manager for Microsoft's C#, who was instrumental in getting F# moved from a research project to a product, said F# encourages developers to program in a "stateless way-you say what you want, but you don't say as much about how you want it. It's easier to abstract the how away. So that leaves you more wiggle room to define exactly how your code gets executed ... You can separate the execution logic from the code intent, and that's useful when you want fine-grained control over how concurrency is handled."