iendly manner, this can lead to large potential performance gains from modern CPU architectures with 128, 256, or 512-bit vector support. The next step is to find the set of utility metrics for which j has the highest values, which indicates the users that are selected for the next stages: time-domain and frequency-domain user allocation. This involves making an efficient implementation of the arg(max) function, which we are showing in the next section. Time-domain user selection and frequency-domain allocation. Both of software algorithms are in practically implemented as greedy algorithms as we discussed, where the "best" user time/frequency allocation is selected and allocated after which this user is removed from the pool and the next best user is selected. This is again a variety of an arg(max) implementation and subject to performance improvement by SIMD vectorization. Secondary and remainder user selection/MIMO pairing which involves matrix operation (matrix multiplication, absolute value calculation, etc.) and SIMD vectorized implementations are widely discussed on, and available from the Internet. Example: arg(max) vectorization We saw earlier that arg(max) is one example of a commonly used function to optimize the CPU cost of a large user-count scheduler algorithm. To showcase how vectorization helps execution speed, look at this example: consider an array of values (utility metrics, SNR values, or similar), conveniently stored in a linear array in memory (32 entries shown in the example in Fig. 7-13). The target of the algorithm is to efficiently find the highest value in this array (and, left as an exercise to the reader, the index of where in the array that value is located). Note that the target value is on the second row (value: 31). In a vectorized implementation, we start by loading a reference vector (all zeroes), as well as the first vector of array values (the first row from the figure above), and perform a Vector Compare Greater Than operation as shown in Fig. 7-14. FIGURE 7-13 Example of inp