1. A method of partitioning operations, comprising: determining respective priorities for a plurality of operations in a ready list containing operations to be partitioned; choosing, from the ready list, an operation that has a highest priority; adding the chosen operation to a current partition unless a hard constraint is violated; and adding successor operations that no longer have predecessor operations to the ready list.