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
ATX in favor of the more modern Universal Serial Bus. Other legacy connectors that are slowly being phased out of modern ATX motherboards include 25-pin parallel ports and 9-pin RS-232 serial ports. In their place are onboard peripheral ports such as Ethernet, FireWire, eSATA, audio ports (both analog and S/PDIF), video (analog D-sub, DVI, HDMI, or DisplayPort), extra USB ports, and Wi-Fi. Several ATX-derived designs have been specified that use the same power supply, mountings and basic back panel arrangement, but set different standards for the size of the board and number of expansion slots. Standard ATX provides seven slots at