1. A graphics processing unit controller configured to be communicatively coupled to one or more graphics processing units and one or more virtual machines, comprising: a unit collection module which is configured to store information regarding the available resources of one or more graphics processing units; and a scheduler module configured to allocate at least part of the one or more graphics processing units to the execution of a compute kernel in response to receipt of a request for the execution of the compute kernel, wherein the scheduler is configured to allocate at least part of the one or more graphics processing units based on a comparison between the available resources of the one or more graphics processing units and required resources for the execution of the compute kernel.