Articles of sse

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 […]

Vetorização com buffers desalinhados: usando VMASKMOVPS: gerando uma máscara a partir de uma contagem de desalinhamento? Ou não usar esse insn em tudo

O gcc 5.3 com -O3 -mavx -mtune=haswell para x86-64 -O3 -mavx -mtune=haswell código surpreendentemente volumoso para manipular inputs potencialmente desalinhadas para código como: // convenient simple example of compiler input // I’m not actually interested in this for any real program void floatmul(float *a) { for (int i=0; i<1024 ; i++) a[i] *= 2; } […]

Por que o sqr (x) escalar do SSE é mais lento que o rsqrt (x) * x?

Eu tenho perfilado alguns dos nossos principais matemática em um Intel Core Duo, e ao olhar para várias abordagens de raiz quadrada eu notei algo estranho: usando as operações escalares SSE, é mais rápido ter uma raiz quadrada recíproca e multiplicá-lo para obter o sqrt, do que usar o código de operação do sqrt nativo! […]

Multiplicação eficiente de vetor de matriz 4×4 com SSE: adição horizontal e produto de ponto – qual é o objective?

Eu estou tentando encontrar a implementação mais eficiente da multiplicação de matriz 4×4 (M) com um vetor (u) usando SSE. Quero dizer Mu = v. Tanto quanto eu entendo, existem duas maneiras principais de fazer isso: method 1) v1 = dot(row1, u), v2 = dot(row2, u), v3 = dot(row3, u), v4 = dot(row4, u) method […]

SIMD assinado com multiplicação sem sinal para 64 bits * 64 bits para 128 bits

Eu criei uma function que faz 64 bits * 64 bits para 128 bits usando SIMD. Atualmente eu o implementei usando o SSE2 (acertally SSE4.1). Isso significa que ele faz dois produtos 64b * 64b a 128b ao mesmo tempo. A mesma ideia poderia ser estendida para AVX2 ou AVX512, fornecendo quatro ou oito produtos […]

Por que esse código SSE é 6 vezes mais lento sem o VZEROUPPER no Skylake?

Eu tenho tentado descobrir um problema de desempenho em um aplicativo e finalmente reduzi-lo a um problema muito estranho. A parte de código a seguir é executada 6 vezes mais lentamente em uma CPU Skylake (i5-6500) se a instrução VZEROUPPER estiver comentado. Testei os CPUs Sandy Bridge e Ivy Bridge e as duas versões rodam […]

Como verificar se uma CPU suporta o conjunto de instruções SSE3?

O código a seguir é válido para verificar se uma CPU suporta o conjunto de instruções SSE3? Usando a function IsProcessorFeaturePresent() aparentemente não funciona no Windows XP (consulte http://msdn.microsoft.com/en-us/library/ms724482(v=vs.85).aspx ). bool CheckSSE3() { int CPUInfo[4] = {-1}; //– Get number of valid info ids __cpuid(CPUInfo, 0); int nIds = CPUInfo[0]; //– Get info for id […]

Quais são as melhores seqüências de instruções para gerar constantes vetoriais em tempo real?

“Melhor” significa poucas instruções (ou menos, se alguma instrução decodificar para mais de um uop). O tamanho do código de máquina em bytes é um desempatador para contagem de insensas igual. A geração constante é, por sua própria natureza, o começo de uma nova cadeia de dependência, portanto, é incomum que a latência importe. Também […]

AVX2 qual é a maneira mais eficiente de empacotar a esquerda com base em uma máscara?

Se você tem uma matriz de input e uma matriz de saída, mas deseja apenas gravar os elementos que passam por uma determinada condição, qual seria a maneira mais eficiente de fazer isso no AVX2? Eu vi no SSE onde foi feito assim: (From: https://deplinenoise.files.wordpress.com/2015/03/gdc2015_afredriksson_simd.pdf ) __m128i LeftPack_SSSE3(__m128 mask, __m128 val) { // Move 4 […]

Maneira mais rápida de fazer a sum vetorial do flutuador horizontal no x86

Você tem um vetor de três (ou quatro) carros alegóricos. Qual é o caminho mais rápido para resumi-los? O SSE (movaps, shuffle, add, movd) é sempre mais rápido que x87? As instruções de adição horizontal no SSE4.2 valem a pena? Qual é o custo para mudar para o FPU, então faddp, faddp? Qual é a […]