Parallel computing those that use concurrency, are more difficult to write than sequential ones, because concurrency introduces several new classes of potential software bugs, of which race conditions are the most common. Communication and synchronization between the different subtasks are typically some of the greatest obstacles to getting good parallel program performance. A theoretical upper bound on the speed-up of a single program as a result of parallelization is given by Amdahl's law. Traditionally, computer software has been written for serial computation. To solve a problem, an algorithm is constructed and implemented as a serial stream of instructions. These instructions are executed
Parallel and counter parallel major and tL in minor. If chords may be formed by raising (major) or lowering (minor) the fifth a whole step ["parallel" or relative chords], they may also be formed by lowering (major) or raising (minor) the root a half-step to "wechsel", the leading tone or "leitton". For example, Am is the tonic parallel of C, thus, Em is the counter parallel of C. The usual parallel chord in a major key is a minor third below the root and the counter parallel is a major third above. In a minor key the intervals are reversed: the tonic parallel (e.g.