1. A method for managing data loads on a cluster of processors that implement an iterative procedure through parallel processing of data for the procedure, the method comprising: for at least one iteration of the procedure, monitoring completion times of a plurality of different processing phases that are undergone by each of the processors in a given iteration; determining whether a load imbalance factor threshold is exceeded in the given iteration based on the completion times of each phase for the given iteration; if the load imbalance factor threshold is exceeded, repartitioning the original data load by reassigning the data to the processors based on predicted dependencies between assigned data units of the data and completion times of a plurality of the processers for at least two of the phases; and implementing the parallel processing on the cluster of processors in accordance with the reassigning; wherein the cluster of processors includes at least one processor with heterogeneous processing capability and processing speed, and at least one processor with heterogeneous communication capability and communication speed; wherein the determining further comprises computing an imbalance factor for the given iteration that is normalized by a total iteration time for the given iteration that includes each of the plurality of different processing phases; wherein the plurality of different processing phases are successive phases and include a computation phase, a data transfer phase, a synchronization phase and a convergence check phase; and wherein the imbalance factor is W ma ⁢ ⁢ x K - W m ⁢ ⁢ i ⁢ ⁢ n K T K * W m ⁢ ⁢ ax K , where K is the given iteration, W max K is a maximum completion time for the synchronization phase among the completion times monitored by the monitoring for the synchronization phase for the given iteration, W min K is a minimum completion time for the synchronization phase among the completion times monitored by the monitoring for the synchronization phase for the given iteration and T K is the total iteration time for the given iteration.