FERRAMENTAS LINUX: O GCC "-fparallel-jobs" enviados para compilar arquivos individuais em paralelo - aceleração de até ~ 1,9x

sexta-feira, 21 de agosto de 2020

O GCC "-fparallel-jobs" enviados para compilar arquivos individuais em paralelo - aceleração de até ~ 1,9x



Confira !!



Nos últimos dois verões, o estudante de desenvolvimento Giuliano Belinassi tem trabalhado sob o Google Summer of Code para lidar com gargalos de paralelização do GCC e, em última instância, com o objetivo de permitir que arquivos de origem única sejam divididos para compilação em paralelo pelo GCC. Em particular, ser capaz de dividir a compilação de grandes arquivos de origem em vários núcleos de CPU. Os patches mais recentes neste "-fparallel-jobs =" foram enviados hoje, conforme nos aproximamos do final do GSoC 2020.

O esforço de paralelização do GCC foi um sucesso e mostrou ser muito promissor, mesmo no final do ano passado. Neste verão, ele está trabalhando mais para permitir que mais trabalho do GCC aconteça em paralelo para grandes arquivos de origem e culminou esta semana com o envio de patches "-fparallel-jobs =".

Os patches paralelizam as otimizações intraprocessuais usando o mecanismo GCC LTO. Quando -fparallel-jobs = N é definido, o número máximo de trabalhos a serem usados ​​é especificado. O -fparallel-jobs também pode aceitar "jobserver" para se comunicar com o servidor GNU Make job para lançar jobs.

O novo código funciona dividindo a saída de um determinado arquivo de origem, procurando por símbolos que devem ser particionados juntos, cc1 se bifurcará para cada partição a ser compilada e o driver irá então vincular parcialmente cada arquivo particionado em um único arquivo de objeto . Dependendo do arquivo de origem, ele também tem a lógica para compilar potencialmente o arquivo em série se considerar uma compilação paralelizada ineficaz.

As acelerações em uma CPU móvel Core i7 variam de 0,95x a 1,9x ao testar dois grandes arquivos de origem no GCC. Sim, em alguns casos no momento existe a possibilidade de regressão e, portanto, por que essa paralelização está oculta por um flag do compilador por enquanto. Incluído neste trabalho está um novo particionador para compilação paralela, criando um mecanismo de paralelismo baseado em fork e outros bits relacionados.

Os patches em sua forma atual somam cerca de 2.500 linhas de código novo. Esperamos que seja revisado pontualmente e, idealmente, poderíamos finalmente ver esse novo suporte de paralelização dentro do GCC em um futuro não muito distante.

Ainda sobre o assunto de tempos de compilação do compilador, para aqueles interessados ​​nos requisitos de velocidade de compilação atuais de CPUs diferentes, o novo OpenBenchmarking.org tem algumas exibições fáceis de: tempos de compilação do kernel Linux para uma ampla variedade de CPUs, LLVM build times , GCC build times vezes e muito mais .


Ayé a próxima !!

Nenhum comentário:

Postar um comentário