All modern CPUs have powerful hardware prefetchers, which are insufficiently documented.
On any modern CPU (i.e. from the last 20 years), explicit prefetching is very seldom useful.
What is important is to organize your memory accesses in such orders so that they will occur in one of the patterns that triggers the hardware prefetcher, which will then take care to provide the data on time.
The patterns recognized by the hardware prefetchers vary from CPU to CPU, but all of them include the accesses where the addresses are in arithmetic progressions, going either forwards or backwards, so usually all array operations will be accelerated automatically by the hardware prefetchers.