A method comprising: receiving , by one or more processors, a first request to allocate a first task to one or more of a plurality of processing devices, each processing device connected to a corresponding host server, at least some processing devices configured to communicate with one another via a peer-to-peer connection, the first request indicating a required bandwidth for performing the first task, the required bandwidth including each of a required host server bandwidth and a required peer-to-peer bandwidth for performing the first task; accessing , by the one or more processors, one or more lists of predefined processing device groups, each processing device group including one or more processing devices connected to a common corresponding host server, each list indicating availability of processing device groups of a respective server for allocation of tasks, indicating available bandwidth for each available processing device group, and further indicating, for each available processing device group, an amount of power needed for activating each available processing device group; assigning , by the one or more processors, the first task to a first processing device group having an available bandwidth greater than or equal to the required bandwidth for performing the first task and having a lowest amount of power needed; and updating , by the one or more processors, the list including the first processing device group to indicate that each of the first processing device group and any other processing device group sharing at least one processing device with the first processing device group is unavailable, wherein updating the list including the first processing device group includes updating the amount of power needed for activating one or more processing device groups sharing at least one hardware component or mechanical component with the first processing device group. receiving , by one or more processors, a first request to allocate a first task to one or more of a plurality of processing devices, each processing device connected to a corresponding host server, at least some processing devices configured to communicate with one another via a peer-to-peer connection, the first request indicating a required bandwidth for performing the first task, the required bandwidth including each of a required host server bandwidth and a required peer-to-peer bandwidth for performing the first task; accessing , by the one or more processors, one or more lists of predefined processing device groups, each processing device group including one or more processing devices connected to a common corresponding host server, each list indicating availability of processing device groups of a respective server for allocation of tasks, indicating available bandwidth for each available processing device group, and further indicating, for each available processing device group, an amount of power needed for activating each available processing device group; assigning , by the one or more processors, the first task to a first processing device group having an available bandwidth greater than or equal to the required bandwidth for performing the first task and having a lowest amount of power needed; and updating , by the one or more processors, the list including the first processing device group to indicate that each of the first processing device group and any other processing device group sharing at least one processing device with the first processing device group is unavailable, wherein updating the list including the first processing device group includes updating the amount of power needed for activating one or more processing device groups sharing at least one hardware component or mechanical component with the first processing device group. <EOS>