2011-01-04 7 views
7

Ich sehe oft pprograms wie this, wo Int64 ein absoluter Performance-Killer auf 32-Bit-Plattformen ist. Meine Frage ist jetzt:Welche Leistung kann ich von Int32 und Int64 erwarten?

Wenn ich eine bestimmte Wortlänge für meine Aufgabe brauche (in meinem Fall ein RNG), ist Int64 effizient auf 64-Bit-Plattformen oder wird es immer noch die C-Anrufe? Und wie effizient konvertiert ein Int64 in einen Int?

+0

Ich würde 'Integer' als ersten Versuch empfehlen. – Gabe

+0

Ich brauche eine feste Wortgröße für die Implementierung von Xorshift, also ist Integer keine andere Wahl. – fuz

+4

Ich würde verwenden, welche von "Int32" und "Int64" besser für Ihren RNG-Algorithmus geeignet ist. Erstellen Sie ein Typ-Synonym, damit Sie es später problemlos testen können. Beachten Sie auch, dass ein "Int" nicht das gleiche wie "Int32" ist (die Haskell-Spezifikation garantiert nur, dass ein "Int" mindestens 31 Bit lang ist). –

Antwort

2

auf einem 64-Bit-System Int64 sollte in Ordnung sein, weiß ich zwar nicht sicher.

Noch wichtiger, wenn Sie Crypto oder Random-Number-Generierung tun Sie MUSS verwenden Sie den Datentyp, den der Algorithmus sagt zu verwenden, auch vorsichtig sein, unterzeichnet-Ness. Wenn Sie dies nicht tun, haben Sie die falschen Ergebnisse, was bedeuten könnte, dass Ihre Kryptographie nicht sicher ist oder Ihr Zufallszahlengenerator nicht wirklich zufällig ist (Zufallszahlen sind hart, und viele sehen zufällig aus).

Für jede andere Art von Arbeit verwenden Sie Integer, wo immer Sie können, oder noch besser, machen Sie Ihr Programm polymorph mit der Integral-Klasse. Dann, wenn Sie denken, dass Ihr Programm langsamer ist als es sein sollte Profil es zu bestimmen, wo Sie konzentrieren sollten, wenn Sie versuchen, es zu beschleunigen. Wenn Sie die Integral-Klasse verwenden, ist der Wechsel von Integer zu Int einfach. Haskell sollte intelligent genug sein, um (den meisten) Code zu spezialisieren, der Polymorphismus verwendet, um Overheads zu vermeiden.

1

Interessanter Artikel auf 64-Bit-Leistung hier:

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

Da die Artikel heißt es, ist der große Engpass nicht der Prozessor, es ist der Cache-Speicher und I/O.

+2

Erstens, für meinen Zweck habe ich nur eine einzige Nummer, die ich möchte manipulieren, so sollte der Speicherzugriff kein Problem sein. Das eigentliche Problem ist, dass GHC viele Dinge über C-Anrufe macht, was nicht immer klar ist. – fuz

+0

Die Frage scheint wirklich Haskell-spezifisch zu sein. –

Verwandte Themen