Frage

Ich versuche, ein Programm zu schreiben, dass löst die rsa Herausforderung (ja ich habe interessante Ziele) und zur Zeit ich keine 64-Bit-Linux-Box habe, und ich weiß nicht wirklich, meine Zeit will zu verbringen, ein Programm zu schreiben, dass doesn ‚t haben eine Chance, jemals zu beenden. also, während ich einige Assembler-Programmierung zu tun, würde ich es vorziehen, C ++. Ich würde aber auch interessieren, wie Montag zu verwenden inline, das Gleiche zu tun. der Plan hier ist die 16 64-Bit-Universalregister und die 128-Bit-Register sse zu verwenden (wirklich lange wirklich) zu tun integer math. so dass jede Hilfe, wie das zu tun, würde sehr geschätzt werden.

War es hilfreich?

Lösung

Basierend auf Ihren Kommentar zu BarsMonsters Anser, die Sie nicht näher an die CPU benötigen, müssen Sie eine große Integer-Bibliothek.

Eine Option ist gmp, die beliebige Integer-Arithmetik enthält. Es hat eine gute Algorithmen für Dinge wie große Zahlen multiplizieren, und ein guter Compiler, einen besseren Job zu optimieren dies als die meisten Menschen tun.

Die wichtigste Frage, die Sie für eine Alternative aussehen könnte, ist, dass es variable Genauigkeit arithmetische unterstützt, die ein Overhead sein kann, die Sie lieber vermeiden, wenn Sie sicher sind, dass Ihre Zahlen haben höchstens 512 Binärzahlen. Trotzdem möchten Sie wahrscheinlich auf Algorithmen suchen mehr als Low-Level-Tricks (lange Multiplikation bereits eine schlechte Wahl in dieser Größe sein kann), und ich bin ziemlich sicher, dass Sie besser sein wird der Compiler tun, um Ihre Optimierung ausgeschaltet zu lassen.

Mein Rat -. Verbringen Sie Ihre Zeit, um die Dinge zu tun, die die menschliche Intelligenz erfordern, nicht die Dinge, die eine Maschine konsequent weit mehr tun können, und eine Milliarde mal schneller

Und wenn Sie wirklich können Maschinencode besser als ein Compiler optimieren können, herunterladen LLVM und implementieren diese Logik als Optimierungs Pass, so dass wir alle den Nutzen erhalten können; -)

Andere Tipps

Alle modernen compillers sind sehr gut auf alle verfügbaren Register Wiederverwendung der schnellstmöglichen Code zu erzeugen.

Vor allem Intel C ++ und GCC3 -. Sie oft Code unschlagbar manuell erstellen

BTW, lesen Sie in diesem: Warum MSVC unterstützt Inline-Assembly für AMD64 und Itanium Ziele nicht?

Wenn Sie wollen einfach nur etwas precission Mathematik tun, würden Sie besser versuchen, Intel C ++ Compiler und Mathe lib verwenden, ist es sehr leistungsfähig und overoptimized. Das Gleiche gilt für Boost-Mathematik-Bibliothek. Dies könnte Ihre Arbeit um 90% gesenkt werden :-) Sie unterstützen beliebige precission Zahlen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top