Speeding it up involves overlapping the times spent waiting for these devices.

You program spends most of its time doing CPU operations.
Speeding it up involves finding ways to do more computations in the same amount of time.