Intel: an expensive many-core future is ahead of us
arstechnica.com
arstechnica.com
To put it another way, parallelization is a cost-benefit analysis; having more cores changes the "benefit" side of the equation but not the "cost" side, and I don't see any magic bullet coming that will drastically alter the "cost" side. Increased use of multiple cores at the lowest level will only happen thanks to better tools and frameworks that keep people from having to think about threading/parallelization themselves. As soon as you have to worry about ordering dependencies, you've entered a world where implementation is very difficult and testing/verification is nearly impossible. Most applications right now are "fast enough" to make correctness and implementation ease far more important concerns than raw speed.
So you might see people migrate to frameworks that allow for easier parallelization, and web applications will obviously benefit, but I doubt you'll see any fundamental change in how people write software.
many programming tasks simply don't break down neatly into highly-parallelizable chunks.
You're exactly right. The answer to multi-core programming isn't to run serial programs in parallel. The answer to multi-core programming is to solve a different class of problems.There are large categories of problems that have been known to be embarassingly parallel for decades. It's those problems where the growth will be in the computer industry: graphics rendering, video and audio processing, data mining, etc...
My bet is that OS's are going to have a lot more eye candy in the next decade or so.
It IS, however, great news for great languages. Our existing set of programming languages are great for abstracting away the nuts and bolts of registers and processor commands, but not so great for making it straightforward for programming on a cluster instead of a single processor.
Long live Erlang! :)
Since when is writing multi threaded applications an "alien" concept. haven't preemptive multi tasking operating systems been around for decades?
EDIT: It provides more power to the programmer. Power that is useless for a programmer that wants to develop functional software. This is why new languages and more CS/EE research will be involved. More power == more levels of abstraction. It depends on the level of abstraction that you're working with to decide whether you're going to benefit from performance or expressiveness (code expressiveness, which I like to directly correlate to software functionality independent of code performance).
I love shitting my brains out on this type of stuff; Could be right, could be wrong. All I know is that the future is undef... and I enjoy it...
It makes writing apps that take advantage of multi-core architectures almost trivial. We've benchmarked it on our machines and on Amazon EC2 with very impressive results.
Also, RapidMind has some nice libraries that allow you to fairly easily parallelize code to optimally take advantage of multi-cores and GPUs. Although their licensing is obscenely expensive at the moment.
For instance, my usage of multi-threaded code is to to keep the UI alive and responsive while firing off threads in the background to accomplish different things. A thread for each independent procedure being done in the background - but the problem is that there simply aren't enough procedures happening at once to go around!
Not all programs are just a single big mathematical problem being analyzed that can be split to an arbitrary number of threads, most of the time, most of the software, you just can't spread your code to an infinite number of CPUs - it would be stupid to even try.
Instead of getting into a pissing contest over core counts (anyone remember the tri-core AMDs?!?) the chip giants should be focus on better instruction sets, improved pipelining, lowered energy consumption, and - yes - even faster clock speeds... just not at the cost of performance as they had in the past.
Correct me if I'm wrong, but a great many of the techniques you use to scale to multiple cores in one machine can be used to scale to multiple machines. So you can practice your parallel processing skills and improve your tools in that area by just buying one computer instead of buying or leasing, say, 32. Programming for clusters won't be quite so arcane anymore.
Video games? Ripping a DVD? Editting video?
And what does this mean? As a hacker, am I forced to target my tiny little application to multiple cores?
Now that CPU time is really cheap, memory is expensive again. For example, I have a $30/month slicehost and only get 512M of RAM. Even though I have 4 cores on that box, my application uses too much memory per instance for me to be able to run 4 separate processes. So if I needed to scale, I would either need to buy more memory, or design my app better. Buying more memory works for 4 cores, but what about 128? Probably not.
If you use thread-based model for handling web requests (JVM or .NET application), you won't have this problem. I think even Python processes would share most of their memory.