Yesterday I ran into this article about reverse hyperthreading. Intrigued, I reviewed the suggested links and found another article with more info. It got me thinking what could be the idea behind all this.
You have to somehow combine multiple CPUs (cores) and present them to the OS as a single CPU. That way all applications that are currently designed to run only on a single CPU will be able to benefit from multiple CPUs.
The problem is, I don’t see how this can be achieved. You just can’t give 5 people to write a single sentence. There’s a limit to how small a unit of work can be. CPUs already have multiple pipelines, out of order executions etc. Some instructions just have to be executed in sequence and cannot be parallelized.
If this technology is implemented in a similar way to hard disk RAID, then I wonder how would that affect application behaviour? RAID requires multiple IO requests in the queue to be effective. How would that work with the CPU? Multiple instructions? Perhaps only complex instructions that require multiple CPU cycles can be parallelized, similar to large IO requests where multiple disk spindles provide chunks of data. If this is the case, then this technology will be quite limited. When a single session in Oracle is doing an INDEX RANGE SCAN, there is no way to produce a disk IO queue bigger then 1, simply because the information about the location of the next block to be read is in the yet-to-be read block. RAID does not help single index range scan. It doesn’t matter how many spindles you have, if all you do is running a single INDEX RANGE SCAN, it will not go faster.
If this ever works, I wonder what Oracle will do with parallel query licensing!