From time to time, one of my readers asks a question via email that just keeps me thinking. And sometimes, when I realize the question is not only interesting for me, but maybe for you as well, I may decide to post it and make an article out of it. Just like last week, when a reader asked: How much of the software industry will have to deal with the concurrent computing problem? This article contains my thoughts on the subject and also allows me to let my mind wander in search for the applications that this kind of power will allow.
The short answer to the question: Many people in the software industry need to deal with it. How many exactly, I cannot tell, because I don’t have the big picture (TM) on the software industry as a whole.
I can see two groups that will definitely embrace parallel programming: the first one is everyone with a program that has substantial calculations involved – or in other words: all compute-bound programs. Game programming is the premier example, but stuff like image-processing, multimedia applications and I don’t know what else will surely follow (or already do).
It’s quite easy to ignore the fact that there are two cores in today’s machines, as there are probably more than enough processes on the machine to keep them at least somewhat busy. Firewalls, anti-virus-software and things like that will happily work on the second core, keeping one core free for the program I am actually working in. The same thing probably somehow applies to the quadcore machines that will be sold next year (or already are sold right now).
Things get harder when we have 8, 16 or maybe 80 cores to keep busy. As many of you know, Intel is developing a machine with that many cores on a single chip. Every program that is not spending its entire time waiting on the user cannot afford to ignore this potential, as the users are going to wonder why they have to wait for their programs, while their task manager shows a lot of idle resources.
I would call this first group the performance group. They have performance problems and the only way to solve them on today’s machines is to embrace parallelism. As I said, I have no idea how big this group is, but I bet it is growing.
The second group of software developers that will embrace parallelism is probably even smaller, but if I were you I would try to watch it closely. For them, parallelism is not a burden – many people in the first group I mentioned probably think so, because in the good old days there was no need to parallelize programs, they would just get faster in time with no effort involved. This second group views parallelism as a chance to do new things and provide value that was not possible before.
I will try to explain it with an example: Your email application most likely already uses threads to keep the user interface responsive while connecting to your mailbox in the background. It also most likely has fancy search features included. What if both of these capabilities would be combined and your email application analyzed the text you are typing as you type it, looking for similar mails you have written or received in the background and keeps them at a handy place? An application like that is possible with today’s computing power – yet I have never seen it.
Searching through your whole hard drive using one of the desktop search programs that were all the hype a few years ago is another example – I don’t want to change my application and type in a search phrase into these programs, I want them to work in the background to provide me with the information I need know – without me explicitly asking them for it.
Let’s see what else I can come up with: While you are chatting with a friend using e.g. Skype, a voice recognition software could run in the background on a different core, analyze your conversation and try to understand key phrases. Or even the main nouns would be enough. And while you are busy talking about a certain topic, in a convenient location a few websites could automatically be loaded that are related to your conversation to make you appear more knowledgeable on a subject. Or present you with a few Ebay-listings. Wikipedia. Google search results. Related books on Amazon. The possibilities are endless and the computing power to make it possible is here today or will be available shortly.
Do the ideas presented here make sense? I don’t know. Maybe none of them would actually work and provide additional value. But I have put them down here so you can see what I mean when I am talking about innovation through parallel programming. People that are possibly a lot smarter than me will come up with creative ideas to use the cores and the tremendous computing power that will be available when there are 4, 8, 16 or even 80 cores in your machine. And these are the people and ideas I would keep a close eye on, as some of them may dramatically change the way we use our computers every day.
I want to close this article with a short challenge: what would you do, when you had 80 or so cores to spare? What kind of program do you crave for that this kind of parallel programming power makes possible in the first place? Thanks for sharing!