1

我正在尝试编写一个解决 rsa 挑战的程序(是的,我有有趣的目标),目前我没有 64 位 linux 机器,我真的不想花时间编写一个没有的程序有机会完成。所以虽然我可以做一些汇编程序编程,但我更喜欢使用 C++。但是,我也会对如何使用内联汇编来做同样的事情感兴趣。这里的计划是使用 16 个 64 位通用寄存器和 128 位 sse 寄存器来做(真的很长)整数数学运算。所以任何关于如何做到这一点的帮助将不胜感激。

4

3 回答 3

3

根据您对 BarsMonsters anser 的评论,您不需要靠近 CPU,您需要一个大型整数库。

一种选择是 gmp,它包括任意整数运算。它有很好的算法来处理像大整数相乘这样的事情,一个好的编译器在优化这方面会比大多数人做得更好。

可能让您寻找替代方案的主要问题是它支持可变精度算术,如果您确定您的数字最多有 512 个二进制数字,这可能是您宁愿避免的开销。即便如此,您可能更希望查看算法而不是低级技巧(长乘法在这种规模下可能已经是一个糟糕的选择),而且我非常有信心让编译器进行优化会更好。

我的建议——把时间花在需要人类智慧的事情上,而不是机器可以更一致、更快十亿倍地做的事情。

如果您真的可以比编译器更好地优化机器代码,请下载 LLVM 并将该逻辑实现为优化通道,这样我们都可以从中受益;-)

于 2010-02-18T05:08:59.863 回答
2

所有现代编译器都非常擅长重用所有可用寄存器来生成尽可能快的代码。

尤其是 Intel C++ 和 GCC3 - 他们经常手动创建无与伦比的代码。

顺便说一句,看看这个:为什么 MSVC 不支持 AMD64 和 Itanium 目标的内联汇编?

于 2010-02-18T04:34:51.393 回答
2

如果你只想做一些精确的数学,你最好尝试英特尔 C++ 编译器并使用它的数学库,它非常强大且过度优化。Boost 数学库也是如此。这可能会使您的工作减少 90% :-) 它们确实支持任意精度数。

于 2010-02-19T05:52:02.550 回答