Immersed in Multi-Core

It has been a while since I have had the opportunity to blog, since I have spent nearly the entire month of September traveling to a number of conferences, customer visits, and internal meetings that have for the most part had a common thread of conversation; that is "Why Multi-Core?"

As I expect most of you have already heard, "multi-core" is a term used to describe a CPU with multiple cores on the same die, each with a memory cache. It is a way to get multiple microprocessors in one chip. The key advantage is that with a multi-core CPU tasks can be carried out in simultaneous, parallel streams which can decrease overall processing time for properly written software.

The shift to dual-core has happened and quad-core is literally months away. At the Fall IDF in San Francisco last week there were approximately a dozen presentations on "Tera-scale" computing which outlines a vision to how we will get the I/O, memory and compute bandwidth of a teraflop supercomputer through nearly one hundred cores.

I think the top-line value proposition of "Why Multi-core?" is simple: A continuous order-of-magnitude increase in computing capability while at the same time being energy-efficient. For this value proposition to be realized, the architecture and code of applications have to be geared to take advantage of these independent cores to realize that increased computing performance.

From an enterprise and software architecture perspective, if you are not in the gaming or scientific computing industry the paradigm shift that this technology offers might be elusive.

However, I believe if you think of possible architectures with the following point of view it might spur many ideas:

  • Instead of spending your day multi-tasking (like most of us do at varying levels of effectiveness J) what if you could really clone yourself 2-4+ times?



  • Such as: being able to drop the kids off at school while at the same time delivering that early morning presentation? Golfing while mowing the lawn? Watching your favorite movie with your favorite people while doing your taxes?


Now it's likely you won't get your dual-or-quad core CPU to cut your grass, but the analogy is similar " run in parallel those things you really want to do while still doing those things you just have to do:

  • Dedicating a core to media processing such as audio/video capture and playback without any effect on system responsiveness for other applications



  • Dedicating cores to background and batch scheduling tasks like virus scanning, disk backup, large file move/copy, database I/O pre-fetch or post clean-up, and security certificate packaging/un-packaging without any effect on system responsiveness for other applications



  • Spreading compute threads across multiple cores for rendering images or running financial calculations (like Monte Carlo simulations) to achieve near-real time processing performance



  • Optimized cores for specific data processing functions like XML transforms, video encode/decode, graphics acceleration, and math libraries


I also think if multi-core is combined with other technology advances you can achieve additional interesting capabilities:

  • Combining multi-core with 64-bit memory addressing, it is effective to create large-scale in-memory databases/cubes for doing near real-time advanced business intelligence and increased OLTP transaction throughput.



  • Combining multi-core with virtualization at the server is able to substantially consolidate the data center increasing utilization, drive down capital and energy costs as well as provide for increased flexibility in configuration management.



  • Combining multi-core with virtualization on the client allows for creating segmented partitions of functionality that can apply the best software stack for the job. For example, creating a biz apps user partition for email and documents, gaming/media partition for entertainment, and management partition for virus scanning, network security, backup, remediation, etc.. These individual partitions as virtual machines can have differing O/S builds and if they fail don't impact the fundamental operation of the other partitions providing a more flexible and robust client.


I am very interested in your thoughts regarding new software and systems architectures that are enabled by multi-core computing " please send them along. I have equal interest in those that have worked well and those that were good ideas but ended up not having all the expected benefits when put into practical use.

Thanks for getting this far and I look forward to hearing from you.

Joe
Para obtener más información sobre las optimizaciones del compilador, consulte el aviso sobre la optimización.