V důsledku změn v architektuře hardware se jedním z nejvýznamnějších problémů v oblasti produkce software stala absence vhodných prostředků k programování paralelních nebo paralelizovatelných aplikací. Kromě vhodné metodiky pro vyhnutí se chybám vyplývajícím z paralelismu musí takový systém umožnit plné využití výpočetního výkonu prostřednictvím reorganizace toku řízení i datových struktur.
Dosavadní paralelizační systémy buď nechávají většinu zátěže na programátorovi (C++/MPI apod.) nebo ve snaze o plně automatickou paralelizaci naopak příliš omezují programátorovy možnosti (FORTRAN). V reálném světě jsou zapotřebí všechny stupně zapojení programátora do procesu paralelizace; přitom pro střed tohoto spektra programovací prostředky chybí.
Tento článek shrnuje požadavky na programovací jazyk či systém, který by tuto mezeru zaplnil, a porovnává několik možností, jak tyto požadavky naplnit větší či menší úpravou existujících prostředků.