Por que não são de Ponto Flutuante Decimal números acelerado por hardware como de ponto flutuante números binários?

StackOverflow https://stackoverflow.com/questions/1447215

  •  22-07-2019
  •  | 
  •  

Pergunta

Vale a pena implementá-lo em hardware? Se sim por quê? Se não, por que não?


Desculpe, eu pensei que é claro que eu estou falando decimais Números Racionais! Ok algo como decNumber ++ para C ++, decimal for .NET ... a esperança é claro agora: )

Foi útil?

Solução

A última revisão do IEEE 754: 2008 padrão , de fato, definir decimal hardware flutuante apontar números, usando as representações apresentadas no software mencionado na pergunta. A versão anterior da norma ( IEEE 754: 1985 ) não forneceu decimal números de ponto flutuante . A maioria dos instrumentos de hardware atual do padrão 1985 e não o padrão de 2008, mas os computadores da IBM iSeries Utilizando Power6 fichas têm esse apoio, e assim fazer o z10 mainframes.

O esforço de padronização de ponto flutuante decimal foi liderado por Mike Cowlishaw da IBM Reino Unido, que tem um web site cheio de informações úteis (incluindo o software em questão). É provável que, no devido tempo, outros fabricantes de hardware também irá introduzir decimal unidades de ponto flutuante em suas fichas, mas eu não ouvi uma declaração de direção para quando (ou se) Intel pode adicionar um. Intel faz ter otimizado bibliotecas de software para -lo.

O C Standards Committee está olhando para adicionar suporte para ponto flutuante decimal e que o trabalho é TR 24732.

Outras dicas

Alguns processadores IBM têm hardware decimal dedicado incluído (Decimal de ponto flutuante | DFP- unidade).

Na contribuição de responderam setembro 18 em 23:43 Daniel Pryden

a razão principal é que o DFP-unidades precisam de mais transistores em um chip, em seguida, BFP-unidades. O motivo é o código BCD para números decimais calcular em um ambiente de binário. O IEEE754-2008 tem vários métodos para minimizar a sobrecarga. Parece que o hxxp DPD: método //en.wikipedia.org/wiki/Densely_packed_decimal é mais eficaz em comparação com o hxxp BID:. Método //en.wikipedia.org/wiki/Binary_Integer_Decimal

Normalmente, você precisa de 4 bits para cobrir a gama decimal de 0 a 9. Bit de 10 a 15 são inválidos, mas ainda é possível com BCD. Portanto, a DPD compressa 3 * 4 = 12 bits para 10 bits para cobrir a gama de 000-999 com 1024 (10 ^ 2) possibilidades.

Em geral, é dizer, que BFP é mais rápido, então DFP. E BFP necessidade de menos espaço em um chip, em seguida, o DFP.

A pergunta por que a IBM implementou uma unidade DFP é bastante simples respondeu: Eles constroem servidores para o mercado financeiro. Se os dados representa o dinheiro, ele deve ser confiável.

Com hardware acelerado aritmética decimal, alguns erros não accour como em binário. 1/5 = 0,2 => 0,0110011001100110011001100110 ... em binário assim fracções recorrentes poderia ser evitado.

função

E a rodada overhelming () no Excel seria inútil mais: D (-> função = 1 * (0,5-0,4-0,1) wtf)

esperança de que explicar a sua pergunta um pouco!

Não é (um pouco de) aceleração string decimal, mas ...

Esta é uma boa pergunta. Minha primeira reação foi "ops macro sempre não conseguiu provar a" , mas depois de pensar sobre isso, o que você está falando iria muito mais rápido se implementado em uma unidade funcional. Eu acho que se resume a saber se essas operações são feitas suficiente para importa. Há uma história bastante lamentável de op macro e instruções especiais para fins de aplicação específica, e em particular as tentativas mais velhos em formatos financeiros decimais são apenas bagagem legado agora. Por exemplo, duvido que eles são usados ??muito, mas cada PC tem a BCD Intel opcodes , que consistem em

DAA, AAA, AAD, AAM, DAS, AAS

Era uma vez, instruções de string decimais eram comuns em hardware high-end. Não é claro que eles já fez muita diferença benchmark. Programas gastar muito tempo testando e ramificação e mover as coisas e calcular endereços. Ele normalmente não faz sentido colocar macro-operações no conjunto de instruções, porque as coisas globais parecem ir mais rápido se você der o CPU o menor número de coisas fundamentais para fazer, então ele pode colocar todos os seus recursos para fazê-las como mais rápido possível.

Hoje em dia, nem mesmo todos os ops binárias são realmente no real ISA. O cpu traduz o ISA legado em micro-ops em tempo de execução. É tudo parte de ir rápido, especializada em operações centrais. Por enquanto a esquerda-over transisters parecem estar à espera de alguns gráficos e trabalho em 3D, ou seja, a MMX, SSE, 3DNow!

Acho que é possível que um design de folha limpa pode fazer algo radical e unificar o atual (HW) científica e formatos de ponto (SW) decimal flutuante, mas não prenda a respiração.

Não, eles são muito memória ineficiente. E os cálculos estão também em hardware não é fácil de implementar (é claro que pode ser feito, mas também pode usar um monte de tempo). Outra desvantagem do formato decimal é, não é largamente utilizado, antes pesquisa mostrou que os números formatado-binários foram mais precisos o formato era popular por um tempo. Mas agora os programadores sabem melhor. O formato decimal is't eficiente e é mais perdas. Também hardware-representações adicionais requerem instrução de conjuntos adicionais, que podem levar a um código mais difícil.

O hardware que você quer costumava ser bastante comum.

BCD hardware teve de CPU mais velhos (Binaray decimal codificado) aritmética. (Os pequenos chips Intel teve um pouco de apoio como observado por cartazes anteriores)

BCD Hardware era muito bom em acelerar Fortran que usou 80 bit BCD para os números.

computação

Scientific usado para fazer uma percentagem significativa do mercado em todo o mundo.

Uma vez que todos (relativamente falando) tem PC em casa executando o windows, o mercado ficou minúsculo como uma percentagem. Então, ninguém faz mais isso.

Desde que você não me importo de ter 64 bits (ponto binário flutuante) duplos para a maioria das coisas, principalmente funciona.

Se você usar ponto flutuante de 128 bits binário em unidades vetor de hardware moderno não é muito ruim. Ainda menos preciso do que BCD 80bit, mas você conseguir isso.

Em um trabalho anterior, um colega anteriormente da JPL foi surpreendeu ainda usado Fortran. "Nós convertido em C e C ++, ele nos disse." Perguntei-lhe como eles resolveram o problema da falta de precisão. Eles não tinha notado. (Eles também não têm a mesma precisão sonda espacial pouso eles costumavam ter. Mas qualquer um pode perder um planeta.)

Então, basicamente 128 bits duplos na unidade vector são mais bem, e amplamente disponível.

Os meus vinte centavos. Por favor, não representá-lo como um número de ponto flutuante:)

Decimal padrão de ponto flutuante (IEEE 754-2008) já está implementado em hardware por duas empresas; IBM 's servidores Power 6/7 com base, e SilMinds baseada em PCIe SilAx placa de aceleração.

SilMinds publicou um estudo de caso sobre a conversão a execução aritmética decimal para usar sua soluções HW . Um grande impulso no tempo e no consumo de energia reduziu são apresentados.

Além disso várias publicações por "Michael J. Schulte" e outros revelam valores de referência muito positivos resultados, e alguns comparação entre os formatos de DPD e BID (ambos definidos na norma IEEE 754-2008)

Você pode encontrar pdfs para:

  1. Análise de desempenho de bibliotecas decimal de ponto flutuante e seu impacto sobre as soluções de hardware e software decimal

  2. Uma pesquisa de hardware projeta para decimal aritmética

  3. Melhoria Energia e Delay via Decimal de ponto flutuante Unidades

Esses 3 papéis deve ser mais do que suficiente para as suas perguntas!

Eu especulam que não existem aplicações de computação intensiva de números decimais. Por outro lado, o número de pontos flutuantes são amplamente utilizados em aplicações de engenharia, que deve lidar com enormes quantidades de dados e não precisam de resultados exatos, só precisa ficar dentro de uma precisão desejada.

decimais (e mais geralmente, as fracções) são relativamente fáceis de aplicar como um par de números inteiros. bibliotecas de uso geral são onipresentes e facilmente rápido o suficiente para a maioria das aplicações.

Quem precisa o máximo em velocidade vai tune-mão a sua execução (por exemplo, alterando o divisor para atender um uso particular, algebraicly combinando / reordenação das operações, o uso inteligente de embaralha SIMD ...). Apenas codificar a maioria das funções comuns em um ISA hardware certamente não satisfazê-los -. Com toda a probabilidade, ele não ajuda em tudo

A resposta simples é que os computadores são máquinas binárias. Eles não têm dedos dez, eles têm dois. Assim, a construção de hardware para números binários é consideravelmente mais rápido, mais fácil e mais eficiente do que a construção de hardware para números decimais.

A propósito: decimal e binário são bases numéricas, enquanto ponto fixo e de ponto flutuante são mecanismos de aproximação números racionais. Os dois são completamente ortogonais: você pode ter números decimais de ponto flutuante (do .NET System.Decimal é implementado desta forma) e os números de ponto fixo binários (inteiros normais são apenas um caso especial deste)

.

matemática de ponto flutuante é essencialmente uma tentativa de implementar decimais em hardware. É problemático, motivo pelo qual os tipos decimais são criados, em parte, no software. É uma boa pergunta, por CPUs não suportam mais tipos, mas acho que ele vai voltar para CISC vs. processadores RISC -. RISC ganhou a batalha performance, por isso eles tentam manter as coisas simples nos dias de hoje eu acho

Os computadores modernos são geralmente de propósito geral. Aritmética de ponto flutuante é o propósito muito geral, enquanto Decimal tem um muito mais propósito específico. Acho que isso é parte da razão.

Você quer dizer o típico tipos integrais numéricas "int", "longo", "short" (etc.)? Como as operações sobre esses tipos são definitivamente implementado em hardware. Se você está falando de precisão arbitrária grandes números ( "bignums" e "decimais" e tal), é provavelmente uma combinação de raridade de operações que utilizam estes tipos de dados e a complexidade de construção de hardware para lidar com arbitrariamente grandes formatos de dados.

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