There are several factors that you are supposed to give more attention before you make a decision to optimizing time programming.
The machine that you intend to use is a key factor. Time programming may not be done some machine or such machines require an upgrade. It is because sometimes its possible, by all means, to parameterize factor dependent to the machine. A single compiler can be used to in optimizing machines of different types by only changing parameters description of a machine.
Another factor is the target CPU architecture. If the number of CPU registers is high, then it is very easy for optimizing time programming. Variable that are local can be in the registers and at the same not found in the stack.
Pipelines are just broken up CPU into line of assembly. They allow to use CPU for various broken executions in several stages like address decode, instruction decode, register fetch, memory fetch, register store and compute, among others. The instructions might be in different stages and this helps you to work with your programming efficiently. A conflict might occur in the pipeline. If one instruction is in one stage must depend on the other in the same pipeline ahead of the previous one which is not yet completed. This leads to pipeline stall and the CPU may waste a lot of cycles in an effort to wait for the conflict to be resolved.
The other factor is the number of the CPU functional units. Several CPUs have few ALUs as well as FPUs which allow them to complete simultaneous instructions. However, there may exist restrictions in the pairing of instructions. This happens on which CPU functional unit will complete which instruction.
Timing programming might be difficult but with these and other factors in consideration, every step will be smooth.