La mejor opción depende del sistema. Entonces, lo que desea hacer es ejecutar ambas versiones en un sistema real y luego verificar cómo responde el sistema. ¿Todavía puede usar el navegador, el editor de texto, otras cosas en su sistema? ¿Y el rendimiento es mejor cuando se usan n hilos y no n-1? ¿Qué sucede si ejecuta la aplicación junto con otra aplicación que intenta usar todas las CPU?
Y luego debes considerar hyperthreading. Con cuatro núcleos más hyperthreading, puede usar 8 núcleos o 7 núcleos. Nuevamente, pruebe la capacidad de respuesta del sistema y el tiempo para terminar.
Y finalmente, considere dividir su trabajo en más bloques que hilos. La razón es que diferentes subprocesos terminarán el trabajo en diferentes momentos, y luego querrá que quede algo de trabajo para los subprocesos más rápidos. De lo contrario, tendrá que esperar hasta que finalice el último hilo.
PD. "Hyperthreading no puede ayudar con el código intensivo de FPU porque solo hay una FPU". Absolutamente equivocado Es increíblemente difícil, incluso con código intensivo de FPU, hacer un uso completo de la FPU debido a las latencias. Hyperthreading ayuda porque hay dos veces más operaciones independientes disponibles para la programación.