Infelizmente, mesmo partes diferentes da mesma compilação podem ser ideais com valores conflitantes do fator j, dependendo do que está sendo construído, como, quais recursos do sistema são o gargalo naquele momento, o que mais está acontecendo na máquina de compilação, acontecendo na rede (se estiver usando técnicas de compilação distribuída), status / localização / desempenho dos muitos sistemas de cache envolvidos em uma compilação, etc.
Compilar 100 arquivos C minúsculos pode ser mais rápido do que compilar um único grande, ou vice-versa. Construir código pequeno e altamente complicado pode ser mais lento do que construir grandes quantidades de código direto / linear.
Até mesmo o contexto da compilação é importante - o uso de um fator otimizado para compilações em servidores dedicados ajustados para construções exclusivas e não sobrepostas pode gerar resultados muito decepcionantes quando usados por desenvolvedores construindo em paralelo no mesmo servidor compartilhado (cada um desses builds pode levar mais tempo do que todos eles combinados se serializados) ou em servidores com configurações de hardware diferentes ou virtualizados.
Há também o aspecto de correção da especificação de construção. Construções muito complexas podem ter condições de corrida causando falhas de construção intermitentes com taxas de ocorrência que podem variar muito com o aumento ou a diminuição do fator J.
Eu posso continuar e continuar. O ponto é que você tem que realmente avaliar a sua construção em seu próprio contexto para o qual você deseja que o fator j seja otimizado. O comentário de @Jeff Schaller se aplica: itere até encontrar o melhor ajuste. Pessoalmente eu começaria do valor nproc, tente primeiro para cima e para baixo somente se as tentativas para cima mostrarem degradação imediata.
Pode ser uma boa ideia primeiro medir várias construções idênticas em contextos supostamente idênticos apenas para ter uma ideia da variabilidade de suas medições - se muito alto, poderia comprometer todo o seu esforço de otimização (uma variabilidade de 20% eclipsaria completamente a 10 % de melhoria / degradação na busca do fator j).
Por último, IMHO, é melhor usar um (adaptativo) jobserver se houver suporte e estiver disponível em vez de um fator j fixo - ele fornece consistentemente um melhor desempenho de compilação em intervalos mais amplos de contextos.