The CPU market is now flooded with multi-core and multi-threaded CPUs. We see them in everything from smartphones (with Dual Core Cortex A9 from ARM) to the highest end notebooks and desktops where the Core i7-980X is now king. But the question many people are asking is; what will more cores give me? - So let's take a brief look at why even with 6 and 12 core CPUs in the channel we do not see better multi-thread and multi-tasking support in our applications and operating systems.
The question of what does more cores get me is an important one and one that needs to be answered by the big software companies. If you go back a few years (like around 10), you will see that it was not until very recently that even the big names like Microsoft began to seriously consider multiple CPUs or cores in their products. True, you had Windows NT that would support more than one CPU, but the scheduler that handled the tasks was very basic, though it still achieved the end result and allowed you to use more than one CPU through the OS.
In the professional space this was great and helped with production and content creation. In the consumer space there were very few applications that could deal with this, so it was up to the very immature task scheduler to deal with these in what it felt was the most efficient manner. From Windows NT we moved to Windows 2000 then to Windows XP (yes, I know, I am skipping over a few years here). Of these two, only XP had rudimentary support for consumer level SMP and SMT systems. But, again this was not a very mature or efficient product.
In fact, there was quite a large issue with the Home version of XP and anything with more than one CPU. The problem centered on the poorly written task scheduler and the power management. If you had a dual core CPU (or dual CPU system) and only one core was active, the PWM system would still try to throttle down both cores. This caused many systems to slow down dramatically or simply lockup. This was one of the reasons that most gamers and enthusiasts used Windows XP Professional over Home (there were others, but this was a big one).
Again, even with support for more than one CPU in Windows XP, it was very limited. In fact, the original Kernel only had support for two CPUs, the same type of SMP support that existed since the days of Windows NT workstation. This was still going on while Quad Core CPUs from Intel and AMD were hitting the market. It was very interesting to see reviews on quad core CPUs using software and games that could not even deal with two, especially considering that Windows XP was still not able to efficiently deal with them. Some of that changed when many sites moved to the Server 2003 Kernel based Windows XP x64 OS. You still did not have many applications outside the professional world that would allow you to use more than two cores, but the platform was getting better.
With the release of Windows Vista we saw MS try its hand at SMT/SMP for the masses again. The Scheduler in Vista was much more efficient and was a big improvement over anything (other than server operating systems) that had been available on the consumer market before. However, Vista was not received well and due to some internal issues combined with terrible press, it was not widely adopted across the consumer space. It can also be said that Microsoft's insistence on making 50 different SKUs for the OS hurt. When people think of an OS, they think of it by name. They have Vista, not Vista Basic, or Vista Home, or Vista Home Basic Premium Lite. This caused major confusion and only hurt the adoption of better SMT and SMP support in the consumer space.
It is only now in the beginnings of 2010 that we see a widely adopted operating system with good solid multi-thread and multi-CPU support in the consumer market space. Windows 7 has a great task scheduler; it is very efficient at managing the applications and giving them CPU time based on demand and application need. It's not 100% perfect, but it is pretty damn good compared to what we had before. There are some things I would like to see in future versions; preset core affinity would be nice, as would being able to set application priority at launch vs. having to do it after the fact in task manager, but I am digressing here.
The reason I touched on the path of SMT and SMP in the operating system is to cover the major reason why most consumer applications have almost no support for multi core systems. To put it simply and rather bluntly, they have not seen the need to spend the money on it. After all, if the OS does not support it, why should they? I have said this over and over again; money drives the market. You can put any friendly name on it you want. Consumer demand, adoption rate, call it what you will; both equal sales and money.
Software development costs money, so to add in even rudimentary support for multiple CPUs or threads to an existing application that does not already have it, is not worth the time for most companies. They will happily continue to push out the same core product with a few minor updates, all the while unknowingly limiting their own customer's performance on their new systems. After all, if you think about it; every application that was pushed out to the consumer while XP was king was fighting for the same single CPU core and its resources. You had to rely on the dodgy task scheduler in Windows XP to hopefully open up the new application instance on another free CPU core, but that did not always happen. The same issue was present in almost every game. I mean come on guys; we saw SMP and SMT support going all the way back to Quake III and Half Life! Why can't we see that now when a dual core is the standard and quad cores are not far behind? It makes no sense at all to be honest.