What’s the Killer App for Multicore?
Posted by Bob Warfield on September 11, 2007
I saw this question posed on MulticoreEra, so I thought I’d take a crack at it.
Let me start out with a contrarian view of the whole Multicore Thing. Many have called it the Multicore Crisis, and I am definitely part of the “Crisis” crowd because I think software is not keeping up with hardware. It’s too hard to write software that takes advantage of a lot of cores. So here is my contrarian proposition: if it’s too hard, maybe the first killer app won’t be parallel at all. Maybe it takes a lot of serial killer apps and just a few parallel killers to get us started.
Your desktop suddenly sprouts 4 cores. Windows uses 1, your current app uses another, maybe something in the background uses a third, but what do you do with the 4th core? And next year, what to do with cores 5, 6, 7, and 8? I suggest we look for the Killer App to be something that runs in the background all the time, has an insatiable appetite for cpu cycles, and is completely indispensible: once we get it, we can’t live without it. That app may or may not be parallel itself. If its not, we’ll just run a bunch of differnet ones on the different cores to take advantage.
One last disclaimer: lots of Multicore Killer App possibilities for the server end, this post is focused on the desktop.
Without further ado, here is my list of possibilities:
What if your computer was always one step ahead? Speculative execution has been a mainstay of cpu design for a long time, but this would be speculative execution of software on your PC. What the system needs is some idea of what you might want to do next. This could be as simple as knowing which files you’ve accessed recently. Based on that, the system would know which apps you’re most likely to run. Imagine if on startup, each core took one of the most popular apps you like to run and started to bring it up behind the scenes. If you actually ask for the app, it pops up immediately because it was already there.
The same trick can be employed with data. Let’s get the data I’m likely to want into RAM and off the disk (or off the Net). It will be much faster to access it there if it’s called for.
Programmers Need Compiler Farms/Testers Need Test Farms
This is one of those insatiable desire problems if ever there was one. Make the compile of a single file parallel or running a single test script in parallel might be hard. However, most programs have many files and many test scripts. With a little creative scheduling, we can do a lot of that work in parallel even though most of the software uses only one core at a time.
If you’re like me, anything that makes it easier to find what you’re looking for on your computer would be indispensible. But since we’re talking about exotic multicore stuff, how about getting a little more exotic and creative? I’m thinking of a background task that trolls through your digital photos and uses face recognition to provide an index of who is in the picture. How cool would that be? You’d start this program out with a nucleus of starter definitions. Perhaps your family members and closest friends would be identified manually in a few pictures. The program would then go off looking at pictures and looking to do a couple of things:
1) Identify the face regions. It creates a list of cropped rectangles for each picture, one rectangle per face.
2) Identify faces. It matches the regions to known faces. There’d be a relevancy ranking: 72% chance this one Aunt Jane and only 17% chance its really Uncle Joe.
3) It asks the user to confirm any faces where the relevancy is too low. In so doing, it would learn how to identify a particular face better. Likewise, you’d be able to easily correct its mistakes and it would learn there too.
4) It builds a list of unidentified faces and ranks them by frequency. Periodically, it would ask you to identify those that are the most common unknown persons.
Now, any time you want to look at your photos, you’d get captions to go with the photos telling who the people are. The technology to do this exists today, and it seems to me would make for a killer app.
Tend the Garden
While we’re indexing, there’s a lot of other tasks one could undertake tending the garden of local data. Clearly I can be on the lookout for malicious offenders: viruses, spyware, and all that sort of thing. I can rearrange the data on the disk to defrag it and optimize it for better performance. I can back it up over the web to keep it safe. I can prune by looking for candidates for deletion. I can encrypt to keep prying eyes from accessing the data too easily.
Hang Out a Shingle
Even if you don’t have software to take advantage of extra cores, maybe someone else does. You can hang out a shingle (digitally, of course) whenever you have idle cores for rent. Anyone whom you allow to share your cores gets to use some of them. Perhaps it works along the lines of a Hadoop. Heck, you could envision a search firm letting it’s users do both the web crawling and the search indexing during the normal course of their web browsing. What a good opportunity to periodically ask them a question to help make results better.
Endless Possibilities, OS Help Wanted
There are endless possibilities here. Right away it seems that we’ll want some sort of OS help to enable proper sharing of system resources among all these different apps that have suddenly sprouted. The thing I’d worry most about is disk access. When my antivirus program fires up it ruins performance of most other apps by hogging the disk. The OS knows which app has focus and needs to be smart about parceling out that scarce disk resource. Greater sophistication will be needed there to fully maximize the Multicore Experience.