I haven't seen the use of --onthefly_shifts discussed anywhere on this list, or recommended in the tutorials. If you're performing particle movie alignment without rotational searches, and the performance isn't IO-limited, using this option will increase the performance quite a bit. Without it, Relion spends most of its time pre-calculating shifted images, which are then only used once. The most expensive part is the use of sin/cos functions to do the shifts in Fourier space, but those values are identical for all particles. --onthefly_shifts calculates the phase shifts only once, thus saving a lot of time.
It also reduces memory consumption, which I believe might be wrongly reported for movie alignment with pre-calculated shifts by this line in ml_optimiser.cpp (1650-ish):
mem_pool += Gb * nr_pix * 2 * sampling.NrTranslationalSamplings(adaptive_oversampling);
This should be multiplied by the number of frames, right?
Please note that --onthefly_shifts will have the reverse effect for normal 3D refinements with rotational searches, so it's off by default. It also won't make things faster if you're already IO-limited, but then you can reduce the number of MPI processes and do something else with the remaining cores.
Can someone else please comment on their experience with this option? Maybe I just hit a really weird case where it helped.