 run to its logical completion point but has intermediate "cutoff" points where it checks for compliance with a time deadline. Consider MAC delivery of Functional Application Platform Interface information to the Physical Layer or RU delivery of an OFDM symbol over the air as an example-in both cases, it is preferred to send a partially empty (dummy) frame instead of late delivery of a complete frame. Development environment optimization Contrary to the "implement first, optimize later" mantra, we feel that it is imperative to "ground-up" architect the solution to be implemented in an architecturally optimized way. This means, for example, a memcpy-free U-plane, and other optimization techniques shown in this book. Development teams that are under pressure to add features do often not have time to change an existing implementation, SO the up-front architecture work is worthwhile investment! At the same time, it is important not to miss any low-hanging fruit and ensure that hardware, development environment, and system software are set up for achieving maximum performance: Compiler and flags. First, even though GNU Compiler Collection (GCC) is the most used compiler, for reasons of familiarity and availability, use of a proprietary compiler can be a very easy way to get a double-digit percentage performance bumping with minimum effort. Also, within the GCC family, we suggest using the latest compiler version. For example, some of our internal benchmarking showed around 5% performance improvement moving from a very old GCC 3.4.x to GCC 4.4.x, and another 5% moving to GCC4.7.2. Optimized libraries for key functions. The practice of pushing for optimized basic libraries such as memset/memcpy is well established in the embedded industry. Often, other libraries (e.g., math) are used sporadically in a software stack, but still often enough to have a significant performance impact. Implementing such libraries in an optimized matter (optimization to the use case, precision, etc.) can offer significant performance gains. 3