The process of parallelize a sequential program can be broken down into four discrete steps.<sup>[[Loop-level parallelism#cite note-Solihin-1|[1]]]</sup>
{| class="wikitable"
|-
! Type
! Description
|-
| Decomposition
| The program is broken down into tasks, the smallest exploitable unit of concurrence.
|-
| Assignment
| Tasks are assigned to processes.
|-
| Orchestration
| Data access, communication, and synchronization of processes.