It wasn't that long ago that all eyes were on processor clock speeds. It seemed like every week a faster processor was announced. First it was a mad scramble to 1GHz. Next, the race was on for 2GHz. When could we expect 10GHz? It was mesmerizing. Sadly, even though raw Megahertz is an unreliable predictor of performance, many design decisions were driven almost entirely by these numbers. Fortunately we've learned a bit from this, right?
We've now entered an era of focus on number of cores. First it was dual-core, then quad. Who will be the first company to offer one-hundred cores? When can we expect a thousand-core processor? Suddenly it's all about cores. Again, I feel the familiar draw to adopt a "more is better" approach to product comparison. Perhaps you do too. Let me offer the following tips to help resist this temptation.
Not all Processors are Created Equal
First and foremost, processors are designed with a purpose in mind: DSPs are designed to perform signal and image processing tasks, packet processors are best suited for manipulating network headers and routing traffic, etc. Processor specialization comes from unique instruction sets, architectural tuning, and hardware acceleration engines. The bottom line is that processors will perform best on the applications for which they were designed, and might perform quite poorly in other uses.
This isn't to say that a packet processor or communications processor can't run your server-class application; however, this should be approached with caution. You probably have an uphill battle ahead of you regardless of the number of cores available. Processor type, not number of cores, should be the first criteria in selecting a solution.
You Can't Get Something for Nothing
Secondly, processor designers have a limited number of transistors they can use (determined by semiconductor process) and more cores come at the expense of something else. A fifty-core processor designed using the same semiconductor technology as a four-core core processor must have gotten rid of something. In many cases, the processor cache is the first thing to go. After that, floating point, machine word width, and instruction set depth are all candidates for the chopping block. In order to make a reasonable comparison, you need to determine how important each of these features is to your design.
Selecting the right multicore processor for your application doesn't need to be a complicated process. Guided by these tips you can probably avoid the pitfalls associated with simply counting cores and hoping for the best. If however you would like to delve into this topic in more depth, I invite you to post to this blog or contact me directly.