Pergunta

Estou tentando escrever um programa que resolve o desafio da RSA (sim, eu tenho objetivos interessantes) e atualmente não tenho uma caixa Linux de 64 bits e não quero passar meu tempo escrevendo um programa que não tem uma chance de terminar. Portanto, embora eu possa fazer alguma programação de montador, prefiro usar o C ++. No entanto, eu também estaria interessado em usar a montagem embutida para fazer a mesma coisa. O plano aqui é usar os registros gerais de 5 64 bits e os registros SSE de 128 bits para fazer (realmente muito tempo) matemática inteira. Portanto, qualquer ajuda sobre como fazer isso seria muito apreciada.

Foi útil?

Solução

Com base no seu comentário ao Barsmonsters Anser, você não precisa se aproximar da CPU, precisa de uma biblioteca inteira grande.

Uma opção é o GMP, que inclui aritmética inteira arbitrária. Possui bons algoritmos para coisas como multiplicação de números inteiros e um bom compilador fará um trabalho melhor ao otimizar isso do que a maioria das pessoas.

A questão principal que pode fazer você procurar uma alternativa é que ele suporta aritmética de precisão variável, o que pode ser uma sobrecarga que você prefere evitar se você tiver certeza de que seus números têm no máximo 512 dígitos binários. Mesmo assim, você provavelmente deseja olhar para os algoritmos mais do que truques de baixo nível (a longa multiplicação já pode ser uma má escolha nesse tamanho), e estou bastante confiante de que você ficará melhor deixando o compilador fazer sua otimização.

Meu conselho - gaste seu tempo fazendo as coisas que exigem inteligência humana, não as coisas que uma máquina pode fazer com muito mais consistência e um bilhão de vezes mais rapidamente.

E se você realmente pode otimizar o código da máquina melhor do que um compilador pode, baixar o LLVM e implementar essa lógica como um passe de otimização para que todos possamos obter o benefício ;-)

Outras dicas

Todos os compositores modernos são muito bons em reutilizar todos os registros disponíveis para produzir o código mais rápido possível.

Especialmente Intel C ++ e GCC3 - Eles geralmente criam código imbatível manualmente.

BTW, confira isto: Por que o MSVC não suporta a montagem em linha para alvos AMD64 e Itanium?

Se você deseja apenas fazer alguma matemática de precisão, melhor tentará o Intel C ++ Compiler e usaria sua matemática, é muito poderoso e otimizado demais. O mesmo para aumentar a biblioteca matemática. Isso pode reduzir seu trabalho em 90% :-) Eles suportam números de precisão arbitrários.

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