我正在尝试编写一个解决rsa挑战的程序(是的,我有有趣的目标),目前我没有64位的linux盒子,我真的不想花时间编写一个程序没有机会完成任务。 所以虽然我可以做一些汇编编程,但我更喜欢使用C ++。但是,我也有兴趣如何使用内联汇编来做同样的事情。 这里的计划是使用16个64位通用寄存器和128位sse寄存器来实现(真的很长)整数数学运算。所以任何有关如何做到这一点的帮助将不胜感激。
答案 0 :(得分:3)
根据你对BarsMonsters anser的评论,你不需要靠近CPU,你需要一个大的整数库。
一个选项是gmp,它包括任意整数算术。它有很好的算法,比如乘以大整数,好的编译器可以比大多数人更好地优化它。
可能让你寻找替代方案的主要问题是它支持变量精度算术,如果你确定你的数字最多有512个二进制数字,这可能是你要避免的开销。即便如此,你可能想要查看算法而不是低级别的技巧(在这个大小的长时间乘法可能已经是一个糟糕的选择),而且我非常有信心让编译器进行优化会更好。< / p>
我的建议 - 把时间花在做需要人工智能的事情上,而不是机器可以做得更持久,速度快十亿倍的事情。
如果您真的可以比编译器更好地优化机器代码,请下载LLVM并将该逻辑作为优化过程实现,这样我们都可以获得好处; - )
答案 1 :(得分:2)
所有现代编译器都非常擅长重用所有可用的寄存器来生成最快的代码。
特别是英特尔C ++和GCC3 - 他们经常手动创建代码。
BTW,请查看:Why does MSVC not support inline assembly for AMD64 and Itanium targets?
答案 2 :(得分:2)
如果你想做一些精确的数学运算,你最好尝试英特尔C ++编译器并使用它的数学库,它非常强大和过度优化。 Boost数学库也是如此。这可能会使你的工作减少90%:-)他们确实支持任意的精确数字。