Software is a fiction of our imagination forged into an actual physical representation, encased in a physical box called a computer. In the transition from an abstract imaginative form, to an actual representation in lines of code, several aspects limit the actual representation: limitation of the programmer’s imagination to cover all details and aspects of the software, and limitations imposed by the hardware. The limitations imposed by the hardware are the topic of this post, as a way of showing how different limits can guide you to different design decisions.
The hardware of the computer is a physical entity, with restrictions governed by physical phenomena’s, limiting the capacity or capabilities of a function. The limitations can be divided in two broad sections:
- Information transformation speed: computation of information, changing the nature of information using some kind of rules and abstractions. Normally, the capability of a CPU / silicon chip to process information is the limitation and can be measured in MIPS, polygons / sec, or other processing capability.
- Information transmission speed: moving the information from one entity to another, to be stored or processed. Normally measured in M Byte / sec but can be also be related to latency as in IO per Second.
Generalizing, computational limits affect the complexity of the algorithm that can be used, guiding the design into efforts of distributing the load among processors, using better algorithms and a tradeoff of memory usage. Such systems normally have little data, but a lot of processing to be done on the information. Some examples are image processing, mathematical analysis and simulations. Since CPU prices have come down according to moore’s law, many systems are becoming distributed computing clouds, turning the computational limit less restricting than transmission limits.
Transmission limits affect how much information can be moved from entity to entity, whether processing engines (CPU’s, Graphic cards) storage (memory, hard disks) or other components of the system (via network) in turn guiding the design into wider connection paths, optimization of transmission media and using better algorithms to minimize the required data. Transmission capabilities have increased but not as exponentially, where the last step of moving the information to / from hard disks has changed even less.
Why the differentiation is important?
It is important because each one affects different components and has different design decisions. In the end, the system design must take into account each of the limitations in each component and specify the dimensions accordingly.
If you read this far, you should follow me on twitter here.