1. A method, comprising: performing by a computer: receiving one or more applications configured for parallel execution on the computer; for each application: associating a respective software thread for the application with each of multiple hardware contexts in the computer; determining one or more of the multiple hardware contexts to allocate to the associated software threads for the application, dependent on collective resource demands of the one or more applications; and allocating the one or more determined hardware contexts to the software threads for the application that are associated with the determined hardware contexts; and the software threads for the one or more applications that are associated with the determined hardware contexts beginning to perform work on behalf of the one or more applications on the determined and allocated hardware contexts; and prior to completing execution of the one or more applications, and in response to detecting a change in the collective resource demands of the one or more applications: re-allocating at least one of the determined hardware contexts to an associated software thread of an application other than the application for which it was previously allocated to a software thread.