Com o avanço do desenvolvimento de processadores, as limitações físicas dificultam cada vez mais o desenvolvimento de unidades de processamento mais poderosas. Para contornar essa limitação, sistemas computacionais modernos fazem uso de diversas unidades de processamento. Isso resulta não só em processadores com múltiplos cores, mas também em unidades de processamento vetoriais, clusters de processamento que agregam diversos computadores em uma única rede etc.
Para explorar múltiplas unidades de processamento, é necessário empregar técnicas de decomposição, distribuição e coordenação no desenvolvimento do programa, geralmente dividindo o problema em diversas partes que podem ser executadas de forma simultânea e coordenada por diversas unidades de processamento.