The convergence effect - its challenges and oppurtunities

Date:   Friday , February 01, 2008

Hardware design and Software development used to be disciplines so far apart in nature that I have often heard them described as different as building bridges (hardware) and writing books (software). The rationale was that while most hardware, whether PC board or IC chips, were designed meticulously using tried and tested methodologies to eliminate any risk of failure, software development was often akin to writing a book where each chapter has to be rewritten several times, throwing away the previous versions, before getting it right.

With the lines between hardware and software blurring so rapidly, how do you then put together the process of developing a system, whether it is a consumer device such as a cell phone or PDA or a mobile entertainment device, or a multi-core PC where the software has to run in multiple threads to be more efficient?

Hardware engineers are used to thinking of events happening concurrently. After all, most devices on an integrated circuit are awake all the time. Things happen at the same time, in parallel. Most software programmers think sequentially, where one line of program is active at a time. While debugging a hardware design one uses concurrent, event driven simulation and when debugging programs, one usually steps through a debugger one line at a time.

This all worked when there was only one central processing unit executing one instruction at a time. Today it is as difficult to find single-core computing platforms as it was to find multi-core platforms just a few years ago. What this means is that parallelism is everywhere. If you cannot write software that can take advantage of multiple threads and multiple processors, whether it is low level firmware or application software, your programs likely will not run efficiently.

An added complexity is the issue of power dissipation. With multiple streams of processes executing in parallel, there is a higher chance of wasting power (energy) unless the idle units are turned off when not in use. This can occur in large units such as CPUs, GPUs and image and audio processing cores, or they can occur in extremely low level elements such as registers and gates.

Such shift in programming methodology could be both a challenge and opportunity for a country like India. Traditionally skilled in programming and also with strong skill sets in IC design, it needs to build skill sets in these two key disciplines concurrent and parallel programming as well as power efficient hardware design in order to stay ahead in the new market where the line between hardware and software is blurring rapidly.