Is It Really Important?
|"…We are in the middle of a revolution right now! It is a parallel revolution, and this time it is for real." Michael Suess, ThinkingParallel.com|
|"Multicore is bringing multiprocessing to the masses, which means that the average developer will now need to be more aware of how their application will behave in that environment." Allen Bauer, Codegear chief scientist|
In recent, separate presentations by Bill Gates and Microsoft's S. "Soma" Somasegar (vice president of developer tools), both took time to lead off by stating that multicore, and thus parallelism, were important topics for developers. Both indicated that this technology is going to change the way many programs are created.
Similarly, Allen Bauer, Codegear's chief scientist (Codegear is the tools divestiture by Borland that took place in the fall of 2006), said, "Multicore is bringing multiprocessing to the masses, which means that the average developer will now need to be more aware of how their application will behave in that environment."
He added: "Generally, I'd say that most developers depend on their tools to isolate them from any changes or advances in processor architecture."
While Borland, Microsoft, and others have acknowledged this change in the programming paradigm caused by multicore processors, they've also admitted that the tools aren't there today to make this shift as easy as it needs to be. In fact, most key changes to tools to support this paradigm change are still a couple of years away.
Nevertheless, there is some support today. Additionally, there are approaches you can take to help your applications be more flexible in the future. For example, Intel has released a number of tools to help with programming to multiple cores. These tools include the Intel Thread Profiler, Intel Thread Checker, Intel VTune, and others.
James Reinders of Intel, as well as several others familiar with this area, have said there are two key themes regarding programming for multicore that are important to consider. The first is that you have to stop and think before jumping into application development. You have to plan the design; you have to architect your applications up front before you start coding. Just as object-oriented programming (OOP) is different from the prior procedural method, so too is the approach to developing for multicore.
The second theme is to avoid direct threaded programming. According to a survey by Evans Data, 37 percent of people in North America are doing multithreading currently (Evans Data Corportaion: North American Development Survey 2006, Winter 2006). A Jupitermedia survey of developers indicated that the number may be closer to 70 percent. Regardless, it is important to be aware that direct thread programming is too low level for what you really ought to be doing. Instead, abstract the threading from the core programming that you are doing. As tools evolve this abstraction will be done for you. Therefore, it is a best practice for you to be migrating that way from the beginning. Intel has already released OpenMP, which does some of this abstraction. Expect other tools to do the same in the future. In the meantime, it's best for you to use abstraction if you are using threading in your applications.
Putting It Off
The warning has now been raised. Can you put off learning to tap into multicore? Sure you can! But be aware that after this year it is likely that no more single-core processors will be released for standard personal computers and notebooks. The default will be multicore. Also, be aware that if Moore's Law holds true, then you can expect that while four cores are being released now, it won't be too long before there are eight-core and sixteen-core machines. The number of cores is expected to continue to grow and evolve.
You can ignore this evolution, but those that don't will be the first to tap into the possible speed gains. Often these speed gains equate to competitive advantage. You can ignore the warnings if you want to ignore them, but take heed: chances are you will eventually have to understand how to tap into multiple cores, just as many people have to understand OOP today.
The bottom line is that processors are changing, and developers need to be aware of these changes. Until a serious change occurs in the underlying technology of processors, you can no longer expect a doubling of speed, but rather you should expect increases in the number of cores in a processor. You'll need to gain the speed by redesigning your application to use these cores.