1. A method to manage a multi-processor system with one or more multiple-core coprocessors, comprising: intercepting coprocessor offload infrastructure application program interface (API) calls; scheduling user processes to run on one of the coprocessors; selecting cores for the group of threads such that the number of selected cores previously used by the thread group is maximized by: selecting allocated cores assigned to at least one earlier active phase of the thread group but not assigned to other thread groups; if more cores are needed, selecting cores that are free and not currently assigned to any thread group; and if still more cores are needed, selecting cores that are free but have already been assigned to other thread groups; scheduling offloads within user processes to run on one of the coprocessors; binding threads of offloads to predetermined cores within one of the coprocessors by selecting and allocating cores to an offload, and obtaining an affinity setting from a user; applying an aging-based first-fit for process and offload scheduling; and applying thread and memory over-scheduling factors to enhance performance.