kes additional cycles and reduces performance. Pass function arguments by value instead of by reference. The compiler can store parameters passed by value in a register for faster access than it could if it had to dereference a pointer and fetch the value. Create a global variable for values that must be referenced by many routines. This avoids the overhead of repeatedly pushing the value on the stack. But care must be taken to prevent contention issues when using this approach. 326 Open Radio Access Network (O-RAN) Systems Architecture and Design Use variable sizes that are intrinsic to the processor (typically 32 or 64 bit) when possible. Declaring variables as byte or half-word types can cause the compiler to generate additional code when it is referenced, or when operations are performed on that variable. Additional cycles are needed to mask off bits when it is loaded to a register, or to properly calculate overflow in math operations with other data types. Avoid serializing tasks where possible. Try to identify independent tasks that can be performed concurrently and initiate them without waiting for them to complete. The completion logic can be more complex because it must accept one of several resulting events, but this can significantly increase performance. Avoid superfluous context switches. Do not automatically put a context switch at termination of a block of processing, such as at the end of a receive or transmit function. Only place them where there is no further processing that can be performed. Consider not doing a context switch during accelerator/DMA calls that have relatively fixed latencies. Instead, try to perform a block of processing that matches that latency period. Do as much work as possible prior to checking for the completion of operations. Get as much processing done before performing a check on the completion of an asynchronous request, which, if not completed, would result in a context switch. This would include operations such as Protocol Data Unit (PDU) payload completed, queue op