Multithreading
I’d like to clear the air surrounding multicore processors. They’re nice, yes. They’re fancy and expensive and have a lot of (potential) horsepower. But if we don’t utilize them properly, there’s no point.
Most applications you use daily are single threaded. For those unfamiliar with threading, I liken a thread to a single train of thought, and a processing core to a single brain. A single processing core (“brain”) can only work through a single thread (“train of thought”) at a time.
In a world of single threaded applications, multicore architectures are largely pointless. If a single threaded application can only use a single core at a time, what use is it to have two, four, or however many cores? Oh sure, if you have two intensely processing-intensive applications, and a dual core machine, you can run the two side by side at near* full steam, but how often does that happen?
We software developers need to be writing multithreaded applications, and taking advantage of the huge opportunity we have. It doesn’t seem unreasonable to suggest that the chipmakers are moving slowly in the direction of boasting chips with many, albeit individually slower, cores. I would not be surprised to see a 16 core CPU hit the market by the time I graduate college. Now, balancing the number of cores with clock speeds will be an ongoing battle, I think, unless some breakthrough is made, allowing us to sidestep the current thermodynamic hurdles for a while. It’s not uncommon for a GPU to have hundreds of smaller cores. Look at the NVIDIA’S CUDA technology.
This is no longer a chicken and egg problem. The chipmakers have built us – are building us – multicore processors, and we should learn to use them properly before someone decides there’s no substantial market for the technology and bails on the idea – there are no winners in that scenario.
* The most common design pattern for a multicore processor is to duplicate the Registers, Control Unit, and Arithmetic Logic Unit, but for the sister cores to share the same L2 cache and bus interface. And of course, from there on out, the rest of the machine is also (stretching the logic just a bit farther) shared by each core. So, while you may have 200% the raw processing power, your other system resources will become bottlenecks, thereby cutting back on the overall gain. Especially important to avoid overcrowding in this situation is the bandwidth of the main system bus.


