No núcleo do Linux, a implementação do algoritmo CRC32C foi otimizada

Para inclusão na futura versão do núcleo do Linux 6.13, foi proposta uma correção com uma implementação reformulada do algoritmo de cálculo da soma de verificação CRC32C. O código da implementação do CRC32C foi reduzido em cerca de 10 vezes (de 4546 para 418 bytes). Com a proteção do retpoline desativada contra ataques do tipo Spectre, o ganho de desempenho com a nova implementação chega a 11,8% em processadores AMD Zen 2, 6,4% em Intel Emerald Rapids e 4,8% em Intel Haswell. Com o retpoline ativado, o aumento de desempenho é mais significativo, alcançando 66,8% em sistemas com processadores Intel Emerald Rapids, 35,0% em Intel Haswell e 29,5% em AMD Zen 2. retpoline enabled | 512 | 833 | 1024 | 2000 | 3173 | 4096 | ———————+——-+——-+——-+—— +——-+——-+ Intel Haswell | 35.0% | 20.7% | 17.8% | 9.7% | -0.2% | 4.4% | Intel Emerald Rapids | 66.8% | 45.2% | 36.3% | 19.3% | 0.0% | 5.4% | AMD Zen 2 | 29.5% | 17.2% | 13.5% | 8.6% | -0.5% | 2.8% | retpoline disabled: | 512 | 833 | 1024 | 2000 | 3173 | 4096 | ———————+——-+——-+——-+—— +——-+——-+ Intel Haswell | 3.3% | 4.8% | 4.5% | 0.9% | -2.9% | 0.3% | Intel Emerald Rapids | 7.5% | 6.4% | 5.2% | 2.3% | -0.0% | 0.6% | AMD Zen 2 | 11.8% | 1.4% | 0.2% | 1.3% | -0.9% | -0.2%

A versão original do CRC32C incluía 128 ciclos desdobrados (unroll), resultando em um código bastante extenso. Como processadores modernos com suporte para execução de instruções fora de ordem (out of order) podem executar comandos em paralelo, tal otimização de comandos de salto nos laços tornou-se redundante e resultou apenas em um código excessivamente grande. Em vez de 128 iterações, a nova variante manteve apenas 4, o que não só reduziu consideravelmente o volume de código, mas também acelerou a execução da operação.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster