Pergunta

Eu sei que o X87 tem maior precisão interna, o que é provavelmente a maior diferença que as pessoas veem entre as operações de TI e SSE. Mas tenho que me perguntar, há algum outro benefício em usar o x87? Eu tenho o hábito de digitar -mfpmath=sse automaticamente em qualquer projeto e me pergunto se estou perdendo mais alguma coisa que o X87 FPU oferece.

Foi útil?

Solução

Para o ASM escrito à mão, o X87 possui algumas instruções que não existem no conjunto de instruções SSE.

No topo da minha cabeça, é tudo trigonométrico como FSIN, FCOS, Fatan, Fatan2 e algumas coisas exponenciais/logaritmo.

Com gcc -O3 -ffast-math -mfpmath=387, GCC9 vai Ainda é realmente embutido sin(x) Como um fsin Instrução, independentemente do que a implementação no LIBM teria usado. (https://godbolt.org/z/euc5gp).

Chamadas MSVC __libm_sse2_sin_precise Ao compilar para x86 de 32 bits.


Se o seu código gasta a maior parte do tempo fazendo trigonometria, você poderá ver um pequeno ganho ou perda de desempenho se usar o X87, dependendo se a implementação padrão da biblioteca matemática usando SSE1/SSE2 é mais rápida ou mais lenta que o microcódigo lento para fsin em qualquer CPU que você esteja usando.

Os fornecedores da CPU não se esforçam muito para otimizar o microcódigo para instruções x87 nas gerações mais recentes de CPUs, porque geralmente é considerada obsoleta e raramente usada. (Veja as contagens de UOP e a taxa de transferência para as instruções complexas x87 em Tabelas de instrução de Agner Fog Nas gerações recentes de CPUs: mais ciclos do que nas CPUs mais antigas). Quanto mais recente a CPU, mais provável que o X87 seja mais lento do que muitas funções SSE ou AVX para calcular as funções de log, exp, pow ou trig.

Mesmo quando o x87 está disponível, nem todas as bibliotecas de matemática optam por usar instruções complexas como fsin Para implementar funções como sin(), ou especialmente exp/log onde truques inteiros para manipular os padrões de bits FP baseados em log são úteis.

Alguns algoritmos DSP usam muito tatão, mas normalmente beneficiam um muito da vetorização automática com as bibliotecas de matemática SIMD.

No entanto, para o código de matemática, onde você gasta a maior parte do tempo fazendo adições, multiplicações etc. O SSE geralmente é mais rápido.


Também relacionado: Intel subestima os limites de erro em 1,3 quintilhão - o pior caso para fsin (Cancelamento catastrófico para fsin entradas muito próximas pi) é muito ruim. O software pode fazer melhor, mas apenas com técnicas lentas de precisão estendida.

Outras dicas

  1. Está presente em máquinas realmente antigas.

EOF

As instruções da FPU são menores que as instruções do SSE, por isso são ideais para coisas de demosceno

  • Existe considerável legado e compatibilidade de pequeno sistema com o X87: SSE é um recurso de processador relativamente novo. Se o seu código for executado em um microcontrolador incorporado, há uma boa chance de não suportar instruções SSE.

  • Mesmo os sistemas que não possuem uma FPU instalados geralmente fornecem emuladores 80x87 que tornarão o código funcionar de forma transparente (mais ou menos). Não conheço nenhum emulador SSE - certamente um dos meus sistemas não possui, então as versões mais recentes do Adobe Photoshop Elements se recusam a executar.

  • As instruções 80x87 têm boas características de operação paralelas que foram minuciosamente exploradas e analisadas desde sua introdução em 1982. Vários clones do X86 podem parar em uma SSE Instruções.

Conversão entre float e double é mais rápido com x87 (geralmente livre) do que com SSE. Com x87, você pode carregar e armazenar um float, double ou long double para ou para a pilha de registro e é convertida para ou a partir de precisão estendida sem custo extra. Com a SSE, são necessárias instruções adicionais para fazer a conversão de tipo se os tipos forem misturados, porque os registros contêm float ou double valores. Essas instruções de conversão são bastante rápidas, mas demoram mais tempo.

A verdadeira correção é abster -se de misturar float e double excessivamente, não usar o x87, é claro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top