Tech
Filtragem Sem Ramificações Acelera Filtragem de Fatias Numéricas

O autor, greyblake, estava otimizando um caminho crítico em código que filtra uma fatia de números maiores que um limite, um problema comum em bancos de dados. Benchmarks em um laptop Intel i7-10875H com um milhão de valores f64 aleatórios mostraram que o caso de filtro de 50% era o mais lento, apesar de copiar apenas metade dos dados, porque ramificações imprevisíveis causavam previsões incorretas no pipeline da CPU, custando 15-20 ciclos cada. Ordenar a entrada tornou o mesmo código mais rápido, mas ordenar não é uma correção prática.
Em vez disso, a abordagem sem ramificações sempre escreve o elemento e usa o resultado da comparação como um número para decidir onde colocá-lo, transformando uma dependência de controle em uma dependência de dados. O pior caso melhorou de 3,87 ms para cerca de 1 ms, e o desempenho tornou-se constante independentemente da distribuição dos dados. A desvantagem é que a versão sem ramificações sempre escreve, potencialmente aumentando o tráfego de memória, mas o ganho de velocidade é significativo.
Fonte: Hacker News