As a general rule, complicated functions speed up more than simple functions. The operation is not memory-bound processing time is not dominated by memory access time. For example, most functions speed up only when the array contains several thousand elements or more. The data size is large enough so that any advantages of concurrent execution outweigh the time required to partition the data and manage separate execution threads. They should require few sequential operations.
These sections must be able to execute with little communication between processes. The function performs operations that easily partition into sections that execute concurrently.