With traditional parallel programming models (e.g., MPI), the developer shoulders the burden of explicitly managing concurrency.
a significant amount of the programmer's attention is devoted to system-level details, leaving less time for focusing on the actual problem.