Domanda

sto cercando di scrivere un programma che risolve la sfida rsa (sì ho obiettivi interessanti) e attualmente non ho una macchina Linux a 64 bit e non ho davvero voglia di passare il mio tempo a scrivere un programma che doesn 't hanno la possibilità di finire mai. Così, mentre io posso fare un po 'di programmazione assembler, preferirei in C ++. Tuttavia, vorrei anche essere interessati a come utilizzare assembly inline per fare la stessa cosa. il piano è quello di utilizzare i registri di uso generale 16 64 bit e il bit SSE 128 registri fare (molto molto lungo) integer matematica. quindi ogni aiuto su come farlo sarebbe molto apprezzato.

È stato utile?

Soluzione

In base a tuo commento BarsMonsters Anser, non è necessario per avvicinarsi alla CPU, è necessario un grande biblioteca intero.

Una possibilità è GMP, che comprende arbitraria aritmetica intera. Ha buoni algoritmi per moltiplicare le cose come grandi numeri interi, e un buon compilatore farà un lavoro migliore di ottimizzare questo che la maggior parte delle persone.

Il problema principale che potrebbe farvi sembrare un'alternativa è che supporta l'aritmetica precisione variabile, che può essere un overhead si preferisce evitare se si sa per certo che i numeri hanno a più di 512 cifre binarie. Anche così, probabilmente avrete bisogno di guardare gli algoritmi più di trucchi di basso livello (lungo moltiplicazione potrebbe già essere una cattiva scelta in quel formato), e sono abbastanza sicuri che sarà meglio lasciare che il compilatore fare la tua ottimizzazione.

Il mio consiglio - trascorrere il vostro tempo a fare le cose che richiedono l'intelligenza umana, non le cose che una macchina può fare molto di più coerente e un miliardo di volte più veloce

.

E se è davvero possibile ottimizzare il codice macchina meglio di un compilatore può, scaricare LLVM e realizzare che la logica come un passaggio di ottimizzazione modo che tutti possano ottenere il beneficio; -)

Altri suggerimenti

Tutti i compillers moderni sono molto bravi a riutilizzare tutti i registri disponibili per produrre codice più veloce possibile.

In particolare Intel C ++ e gcc3 -. Che spesso creano codice imbattibile manualmente

A proposito, controlla questo: Perché MSVC non supporta il montaggio in linea per AMD64 e Itanium obiettivi?

Se si vuole fare solo alcuni precission matematica, si sarebbe meglio provare il compilatore Intel C ++ e utilizzare è la matematica lib, molto potente e overoptimized. Lo stesso vale per la matematica libreria Boost. Questo potrebbe tagliare il lavoro del 90% :-) Essi supportano numeri precission arbitrari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top