Quais métodos de matemática são implementados no hardware da FPU com .NET?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

Alguém sabe quais métodos de matemática são implícitos pelo hardware do processador para .NET? Por exemplo, eu tenho um algoritmo que faz muito uso do ATAN. Posso escrever facilmente uma tabela de pesquisa para isso, mas se o Math.net implementar isso usando uma FPU ou outras extensões de hardware, não valerá a pena.

Foi útil?

Solução

Se os métodos são ou não implementados usando as instruções de hardware X87, não é o problema, porque as instruções da função transcendental de hardware são lentas.

O manual de referência de otimização de arquiteturas "Intel 64 e IA-32" (download aqui) listas fpatan como tendo uma latência de 150-300 ciclos em hardware recente. Uma implementação de software bem escrita pode oferecer uma precisão total de precisão de dupla precisão em substancialmente menos tempo-de fato, as bibliotecas de matemática de alta qualidade fazem exatamente isso.

Outras dicas

Por que não apenas comparar sua abordagem da tabela de pesquisa contra o ATAN () fornecido com .NET. Então você poderá dizer claramente quanto diferença de velocidade usando uma tabela de pesquisa realmente faz.

Armado com isso, você não precisará saber como a VM subjacente faz as coisas para identificar o método mais rápido. Você até poderá quantificar a aceleração.

De acordo com este blog, o compilador JIT da Microsoft faz Aproveite as instruções da FPU na plataforma X86:

http://blogs.msdn.com/davidnotario/archive/2004/10/26/247792.aspx

É uma coisa bastante elementar a se fazer, já que as FPUs são padrão nas CPUs X86 há mais de uma década.

Com um pequeno aplicativo de referência, parece que, mesmo que a FPU seja usada, o desempenho de matemática.atan2 não é tão bom quanto uma função de aproximação alternativa.

Na minha referência simples, o loop Math.atan2 está levando 8 segundos, enquanto a versão aproximada está levando 5,5 segundos.

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