# On Implementing Technomorph Biology for Inefficient Computing
## 2 Notions of Computation
### Payload vs. Theoretical Efficiency  
We define _computing efficiency_, based on the execution times, as the ratio of the 'net computing' time to the 'total operating' time from utilizing the computing machinery. The 'net' computing time is the period our 'black box' elementary computing unit needs after we make its needed arguments available through its input unit and generate the event 'Begin computing' until it produces its result in its output section by generating the event 'End computing'. Since the data must be transferred from one unit's output section to another's input section, even if physically the same computing unit is used, chained computing inherently loses efficiency, given that transferring data has a finite (although large) speed. An operating time shorter than the clock period, a transfer time longer than the clock period, a delay in clock edges, or any other timing issue decreases payload efficiency. In contrast, the theoretical (theoretically possible) efficiency and raw computing power remain the same. When the operations follow each other without a break (i.e., the data transmission time can be omitted aside from the computing time, and all computing units receive in time the arguments they need to compute with), we have a 100% (or theoretical) efficiency. The payload efficiency depends on the system's operating mode, construction, and workload [57].  
Another way of defining efficiency is by determining the percentage of the available computing facilities used in the computation in the long run. Again, another way is to determine the percentage of power used directly for computation versus indirect computing (organizing the work or making non-payload computation) or the total power or the power needed for communication. Using a precise definition is important. When multiple-issue computing units are present but only part of them are used (say by out-of-order execution), or their result becomes obsolete (say by branch prediction), computing throughput (and power consumption) increases, but utilization of the available hardware decreases. Similarly, as we discuss in connection with deep learning (or other nonsense feedback), making obsolete and nonsense operations reduces computing efficiency.  
Figure 2: The diagram shows in the time–space diagram in a simple 1-bit adder, demonstrating how the payload times and operating times depend on the positioning of the gates. The times of the signals of the partial results and the times of the operands (the ‘input sections’) to the place of the actual logical operations are shown on axes \(X\) and \(Y\), respectively. The red arrows between circles are non-payload times.  
For the commonly used instruction-driven sequential systems, the computing time equals the total time only if the transfer time can be omitted and all computing units can be fully utilized. That was the case for the vacuum tube implementation and a single computing unit: the transfer time was in the \(\upmu\)s region, while the operation time and memory access time were in the ms region [53] (notice that when mentioning the so-called 'von Neumann bottleneck', the stored program concept, one must oppose the time of manually wiring the computing units to load the program in advance and have memory access per instruction).