Computer scientists simplify parallel programming
Modern software takes computational speed for granted. But modern microprocessors can only speed up by increasing the number of cores. To take full advantage of multiple cores, software developers have to arrange their code in such a way that it is executable in parallel—an error-prone and expensive task. Computer scientists from Saarland University have developed a tool that parallelizes the necessary code sections automatically, and also gives developers programming advice.
The researchers will present their system at the Cebit computer fair in Hanover (Hall 9, Booth E13).
"Multicore architectures are becoming more and more important, even in netbooks and mobile phones," says Andreas Zeller. "While devices are shrinking, they are also optimized to use as little energy as possible, which makes multicore ever more necessary." Zeller, professor for software engineering at Saarland University, developed the tool together with his doctoral students, Kevin Streit and Clemens Hammacher. Their system, called "Sambamba", automatically converts conventionally programmed code into code that is executable in parallel. "The aim is to find several parallelization options for every individual function in the examined application, and then select the best one during runtime," says Sebastian Hack, professor of programming at Saarland University. He and his doctoral student Johannes Doerfert also took part in the Sambamba project.
Computer scientists describe runtime as the time that elapses between initialization and completion of a program. To identify sections where parallelization is possible and to exclude others, Sambamba analyzes the code even before it is executed. But with these preliminary analyses, it is hard to find parallelization options that are input-dependent and therefore appear just occasionally. "That's why Sambamba consists of two modules: a comprehensive program analysis tool that examines the code for its parallelization potential before runtime, and a second module that can then utilize these results and optimize the code with additional information obtained at runtime." Sebastian Hack explains.
In this way, the computer scientists of Saarland University elegantly avoided some of the problems that researchers so far have not been able to solve: While different methods usually work fine for particular forms of parallelization, none of these procedures fits all. "Even if we were to construct a kind of translator application that has mastered every single technique ever devised and tested, we would still be lacking the type of cost model that can determine the best method in each case automatically," Hack continues. With their integrative technique, they therefore try to gather as much information as possible in advance, and then collect additional information during the runtime of the program. This way, additional parallelization opportunities can be exposed and the program can "learn" which parallelization method works best.
Sambamba works well for programs written in languages that are widespread in practice but hard to analyze, like C++. But the more complex a program is, the more important the analysis at runtime becomes, independent of the language. "Sambamba can parallelize code entirely automatically. But in some cases, developers might want to verify different options, or choose one themselves. So our system can also communicate with the user and make suggestions on how to parallelize the code," Zeller explains. At the upcoming CeBIT computer fair, the researchers will be presenting the programming environment they designed around Sambamba, in which developers can additionally get direct support on parallelization issues.