2011-01-04 10 views
7

Spesso vedo programmi come this, dove Int64 è un killer di prestazioni assoluto su piattaforme a 32 bit. La mia domanda è:Quali prestazioni posso aspettarmi da Int32 e Int64?

Se ho bisogno di una lunghezza di parola specifica per il mio compito (nel mio caso un RNG), è Int64 efficiente su piattaforme a 64 bit o utilizzerà ancora le C-call? E quanto è efficiente la conversione di un in un Int?

+0

Si consiglia di utilizzare 'Integer' come prima volta. – Gabe

+0

Ho bisogno di una dimensione di parola fissa per implementare Xorshift, quindi l'intero non è una scelta. – fuz

+4

Userei qualsiasi cosa di 'Int32' e' Int64' è più adatto per il tuo algoritmo RNG. Creare un sinonimo di tipo in modo da poterlo testare facilmente in seguito. Sappi anche che un 'Int' non è lo stesso di' Int32' (la specifica Haskell garantisce solo che un 'Int' sia di almeno 31 bit). –

risposta

2

su un sistema a 64 bit Int64 dovrebbe andrebbe bene, non so per certo però.

Ancora più importante se si sta facendo Crypto o generazione di numeri casuali è DEVE utilizzare il tipo di dati che l'algoritmo dice di usare, fare anche attenzione alla firma. Se non lo fai, otterrai risultati errati, il che potrebbe significare che la tua crittografia non è sicura o il tuo generatore di numeri casuali non è realmente casuale (gli RNG sono difficili e molti sembrano casuali ma non lo sono).

Per qualsiasi altro tipo di lavoro, utilizzare l'intero ovunque sia possibile, o ancora meglio, rendere il programma polimorfico utilizzando la classe di tipo integrale. Quindi, se ritieni che il tuo programma sia più lento di quanto dovrebbe essere profilato per determinare dove dovresti concentrarti quando cerchi di accelerarlo. se usi la classe di classe integrale che cambia da Integer a Int è facile. Haskell dovrebbe essere abbastanza intelligente da specializzare (la maggior parte) codice che usa il polimorfismo per evitare i costi generali.

1

Interessante articolo sulle prestazioni a 64 bit qui:

Isn’t my code going to be faster on 64-bit???

Come afferma l'articolo, il grande collo di bottiglia non è il processore, è la cache e della memoria di I/O.

+2

Innanzitutto, per il mio scopo, ho solo un singolo numero che desidero manipolare, quindi l'accesso alla memoria non dovrebbe essere un problema. Il vero problema è che GHC è noto per fare molte cose su chiamate C che non è sempre chiaro. – fuz

+0

La domanda sembra essere specifica per Haskell. –

Problemi correlati