Desafortunadamente, incluso diferentes partes de la misma compilación pueden ser óptimas con valores de factor j en conflicto, dependiendo de lo que se está construyendo, cómo, cuáles de los recursos del sistema son el cuello de botella en ese momento, qué más está sucediendo en la máquina de compilación, qué está sucediendo en la red (si usa técnicas de compilación distribuidas), estado / ubicación / rendimiento de los muchos sistemas de almacenamiento en caché involucrados en una compilación, etc.
Compilar 100 archivos C pequeños puede ser más rápido que compilar uno solo, o viceversa. La creación de código pequeño muy complicado puede ser más lento que la creación de grandes cantidades de código directo / lineal.
Incluso el contexto de la compilación es importante: el uso de un factor aj optimizado para compilaciones en servidores dedicados ajustados para compilaciones exclusivas y no superpuestas puede producir resultados muy decepcionantes cuando los desarrolladores lo usan en paralelo en el mismo servidor compartido (cada compilación puede tomar más tiempo que todos ellos combinados si se serializan) o en servidores con diferentes configuraciones de hardware o virtualizados.
También está el aspecto de la corrección de la especificación de compilación. Las construcciones muy complejas pueden tener condiciones de carrera que causan fallas de construcción intermitentes con tasas de ocurrencia que pueden variar enormemente con el aumento o disminución del factor j.
Puedo seguir y seguir. El punto es que debe evaluar realmente su compilación en el contexto en el que desea optimizar el factor j. Se aplica el comentario de @Jeff Schaller: itera hasta que encuentres tu mejor ajuste. Personalmente, comenzaría desde el valor nproc, intente hacia arriba primero y hacia abajo solo si los intentos hacia arriba muestran una degradación inmediata.
Puede ser una buena idea medir primero varias construcciones idénticas en contextos supuestamente idénticos solo para tener una idea de la variabilidad de sus mediciones; si es demasiado alta, podría poner en peligro todo su esfuerzo de optimización (una variabilidad del 20% eclipsaría por completo una mejora del 10% / lectura de degradación en la búsqueda del factor j).
Por último, en mi humilde opinión, es mejor usar un servidor de trabajo (adaptativo) si es compatible y está disponible en lugar de un factor j fijo: proporciona un mejor rendimiento de compilación en un rango más amplio de contextos.
ccache
para la reconstrucción posterior, pero esto es OT