1. A method to manage one or more multiple-core coprocessors, comprising: receiving a request for one or more cores to simultaneously execute one or more threads; selecting and assigning one or more idle cores to a group of threads so that the number of selected cores previously used by the group of threads is maximized; releasing the cores assigned to a thread group when the thread group becomes inactive.