FERRAMENTAS LINUX: A Biblioteca GNU C está descartando vários caminhos de código otimizados do SSSE3

domingo, 17 de abril de 2022

A Biblioteca GNU C está descartando vários caminhos de código otimizados do SSSE3

 

Confira !!

O código de desenvolvimento mais recente da GNU C Library (Glibc) desta semana começou a descartar vários caminhos de código otimizados para SSSE3.

O Supplemental Streaming SIMD Extensions 3 (SSSE3) remonta a mais de uma década ao Intel Xeon 5100 / Core 2 days ou AMD Bobcat/Bulldozer como uma iteração do SSE. Mas com a Glibc também carregando caminhos de código otimizados para SSE2 ou SSE4.1 mais antigos da mesma época que SSSE3, além de caminhos de código AVX2 e EVEX para CPUs Intel/AMD mais recentes, os caminhos de código SSSE3 estão sendo eliminados.

Os desenvolvedores da Glibc determinaram que não vale mais a pena enviar caminhos de código otimizados para SSSE3, dados os caminhos de código SSE2 / SSE4.1 / AVX2 / EVEX também existentes, que poucas CPUs Intel / AMD são deixadas para a rota SSSE3. O custo do tamanho do código para carregar o SSSE3 é mensurável e, a partir desta semana, os desenvolvedores começaram a removê-lo.

Entre as remoções do SSSE3 estão descartando mem{move|cpy}-ssse3-back, str{p}{n}cpy-ssse3, str{n}cat-ssse3, str{n}{case}cmp-ssse3 e {w } caminhos de código memcmp-ssse3.

Há também uma redução no código SSSE3 em torno de memmove/mempcpy/memcpy. O commit explica:
O objetivo é remover a maioria das funções SSSE3, pois SSE4, AVX2 e EVEX são geralmente preferíveis. memcpy/memmove é uma exceção onde evitar cargas desalinhadas com `palignr` é importante para alguns alvos.

Este commit substitui o memmove-ssse3 por uma versão melhor otimizada de menor pegada de código. Também alias memcpy para memmove.
Além desta função, todas as outras funções SSSE3 devem ser removidas com segurança.
O desempenho não é alterado drasticamente, embora mostre melhorias gerais sem grandes regressões ou ganhos.
bench-memcpy geometric_mean(N=50) Novo / Original: 0,957
bench-memcpy-random geometric_mean(N=50) Novo / Original: 0,912
bench-memcpy-large geometric_mean(N=50) Novo / Original: 0,892
Benchmarks onde é executado o ZhaoxinKX-6840@2000MHz

Esta eliminação progressiva dos caminhos de código SSSE3 onde relevante está acontecendo para a versão Glibc 2.36.











Até a próxima !!

Nenhum comentário:

Postar um comentário