A method for graphics processing, comprising: executing a plurality of kernels using a plurality of graphics processing units, GPUs, wherein each kernel comprises a respective index space, wherein each index space is a N-dimensional space comprising a plurality of indices to be executed, wherein responsibility for executing a first plurality of portions of a first kernel is assigned to corresponding GPUs, wherein each portion of the first plurality of portions comprises one or more indices of the first kernel, wherein the first plurality of portions of the first kernel is dynamically allocated to the plurality of GPUs as the first kernel is executed, wherein allocation of the first plurality of portions of the first kernel to the plurality of GPUs references one or more predefined orders each of which is different for each GPU, wherein a predefined order that is referenced is a space filling curve in the dimensions of the index space of the first kernel, the space filling curve defining an order in which the first plurality of portions of the first kernel are to be sequentially executed, wherein a given GPU, after having executed a current portion allocated thereto, executes the next portion along the given GPU's predefined order that is not being or already has been executed by one of the other GPUs by the time the given GPU has completed execution of the current portion; generating a plurality of dependency data at the first kernel as each of the first plurality of portions of the first kernel completes processing; checking dependency data from one or more portions of the first kernel prior to execution of a portion of a second kernel; and delaying execution of the portion of the second kernel as long as the corresponding dependency data of the first kernel has not been met. executing a plurality of kernels using a plurality of graphics processing units, GPUs, wherein each kernel comprises a respective index space, wherein each index space is a N-dimensional space comprising a plurality of indices to be executed, wherein responsibility for executing a first plurality of portions of a first kernel is assigned to corresponding GPUs, wherein each portion of the first plurality of portions comprises one or more indices of the first kernel, wherein the first plurality of portions of the first kernel is dynamically allocated to the plurality of GPUs as the first kernel is executed, wherein allocation of the first plurality of portions of the first kernel to the plurality of GPUs references one or more predefined orders each of which is different for each GPU, wherein a predefined order that is referenced is a space filling curve in the dimensions of the index space of the first kernel, the space filling curve defining an order in which the first plurality of portions of the first kernel are to be sequentially executed, wherein a given GPU, after having executed a current portion allocated thereto, executes the next portion along the given GPU's predefined order that is not being or already has been executed by one of the other GPUs by the time the given GPU has completed execution of the current portion; generating a plurality of dependency data at the first kernel as each of the first plurality of portions of the first kernel completes processing; checking dependency data from one or more portions of the first kernel prior to execution of a portion of a second kernel; and delaying execution of the portion of the second kernel as long as the corresponding dependency data of the first kernel has not been met.