Systolic arrays are arrangements of processors where data flows synchronously between neighboring processors. Each processor receives data from neighbors, processes it, and outputs results to opposite neighbors. This allows certain problems to be solved much more efficiently, such as reducing the n-body problem from n^2 to n time. Matrix multiplication can also be performed in linear rather than cubic time using a systolic array. While powerful for specific applications, systolic arrays are also expensive and specialized, and not needed for most problems.