¿Es posible forzar a una aplicación Java existente a usar no más de x núcleos?

Estamos evaluando los progtwigs Java existentes. Son aplicaciones de subprocesos diseñadas para beneficiarse de CPU multinúcleo. Nos gustaría medir el efecto del número de núcleos en la velocidad de ejecución, pero no estamos dispuestos (y no podemos) a cambiar el código de estas aplicaciones.

Por supuesto, podríamos probar el software en diferentes máquinas, pero esto es costoso y complicado. Preferiríamos tener una solución de software.

Nota: puede suponer que la plataforma de prueba es Windows, Linux o Mac. Idealmente, nos gustaría poder ejecutar las pruebas en cualquiera de estas plataformas.

Se llama establecer afinidad de CPU, y es una configuración de sistema operativo para procesos, no específicos para Java.

En Linux: http://www.cyberciti.biz/tips/setting-processor-affinity-certain-task-or-process.html

En Windows: http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an-application-in-windows/

En Mac, no parece que puedas configurarlo: https://superuser.com/questions/149312/how-to-set-processor-affinity-on-os-x

Pon el problema al revés; en lugar de descubrir cómo restringir la aplicación para que solo use n núcleos en una máquina de m núcleo, averigüe cómo asegurarse de que solo haya n núcleos disponibles para su aplicación. Podrías escribir un progtwig muy simple que consum un núcleo haciendo algo como while (true); e inicie mn instancias de ese progtwig que se ejecutan con la mayor prioridad, asegurando así que su código solo tenga n núcleos disponibles.

Alternativamente, si su BIOS u OS permite deshabilitar núcleos de CPU, eso también funciona. Sé que las herramientas de CHUD en Mac OS X solían hacerlo, pero no he tocado esas herramientas desde la era G5, por lo que podría no funcionar más.