Applications typically have several potential sources of parallelism, and in choosing a particular parallelization, the programmer must balance the beneets of each source of parallelism with the corresponding overhead. The tradeoos are often diicult to analyze, as they may depend on the hardware architecture, software environment, input data, and properties of the algorithm. An example of this ...