Articles of sse

Rápido vetorizado rsqrt e recíproco com SSE / AVX dependendo da precisão

Suponha que seja necessário calcular a raiz quadrada recíproca ou recíproca para dados de ponto flutuante compactados. Ambos podem ser facilmente feitos por: __m128 recip_float4_ieee(__m128 x) { return _mm_div_ps(_mm_set1_ps(1.0f), x); } __m128 rsqrt_float4_ieee(__m128 x) { return _mm_div_ps(_mm_set1_ps(1.0f), _mm_sqrt_ps(x)); } Isso funciona perfeitamente bem, mas lento: de acordo com o guia , eles levam 14 e […]

SSE, intrínsecos e alinhamento

Eu escrevi uma class de vetor 3D usando um monte de intrínsecos do compilador SSE. Tudo funcionou bem até que comecei a instilar classs tendo o vetor 3D como membro com o novo. Eu experimentei falhas estranhas no modo de liberação, mas não no modo de debugging e vice-versa. Então eu li alguns artigos e […]

Como usar instruções Fused Multiply-Add (FMA) com SSE / AVX

Eu aprendi que alguns processadores Intel / AMD podem fazer multiplicação simultânea e adicionar com SSE / AVX: FLOPS por ciclo para ponte de areia e haswell SSE2 / AVX / AVX2 . Eu gosto de saber como fazer isso melhor em código e também quero saber como é feito internamente na CPU. Quero dizer […]

Usando instruções da CPU AVX: Baixo desempenho sem “/ arch: AVX”

Meu código C ++ usa o SSE e agora quero melhorá-lo para suportar o AVX quando ele estiver disponível. Então eu detecto quando o AVX está disponível e chamo uma function que usa comandos AVX. Eu uso Win7 SP1 + VS2010 SP1 e uma CPU com AVX. Para usar o AVX, é necessário include isso: […]

Como mesclar um escalar em um vetor sem o compilador desperdiçar uma instrução zerando os elementos superiores? Limitação de design nos intrínsecos da Intel?

Eu não tenho um caso de uso específico em mente; Eu estou perguntando se isso é realmente uma falha / limitação de design nos intrínsecos da Intel ou se estou apenas perdendo alguma coisa. Se você quiser combinar uma flutuação escalar com um vetor existente, não parece haver uma maneira de fazer isso sem zerar […]

SSE divisão inteira?

Há _mm_div_ps para divisão de valores de ponto flutuante, há _mm_mullo_epi16 para multiplicação de inteiro. Mas existe algo para divisão inteira (valor de 16 bits)? Como posso conduzir essa divisão?

Soma de prefixo SIMD na CPU da Intel

Eu preciso implementar um algoritmo de sum de prefixo e precisaria que fosse o mais rápido possível. Ex: [3, 1, 7, 0, 4, 1, 6, 3] should give [3, 4, 11, 11, 15, 16, 22, 25] Existe uma maneira de fazer isso usando SSE / mmx / SIMD cpu instrução? Minha primeira idéia é sumr […]

Maneira mais rápida de calcular o valor absoluto usando o SSE

Estou ciente de 3 methods, mas até onde sei, apenas os 2 primeiros são geralmente usados: 1) Mascare o bit de sinal usando andps ou andnotps . Prós: Uma instrução rápida se a máscara já estiver em um registrador, o que a torna perfeita para fazer isso muitas vezes em um loop. Contras: A máscara […]

Algum compilador JIT da JVM gera código que usa instruções de ponto flutuante vetorizadas?

Digamos que o gargalo do meu programa Java é realmente alguns loops apertados para computar um monte de produtos de pontos vetoriais. Sim, eu analisei, sim, é o gargalo, sim, é significativo, sim, é assim que o algoritmo é, sim, eu executei o Proguard para otimizar o código de bytes, etc. O trabalho é, essencialmente, […]

Como implementar o atoi usando o SIMD?

Eu gostaria de tentar escrever uma implementação atoi usando instruções SIMD, para ser incluído no RapidJSON (uma biblioteca leitor / gravador JSON C ++). Atualmente, ele possui algumas otimizações SSE2 e SSE4.2 em outros lugares. Se for um ganho de velocidade, múltiplos resultados podem ser feitos em paralelo. As strings são originalmente provenientes de um […]