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

有帮助吗?

解决方案

根据对BarsMonsters雁您的评论,你并不需要更接近CPU,你需要一个大的整数库。

一种选择是GMP,其包括任意的整数的运算。它有很好的东西算法如大整数相乘,和良好的编译器会做优化这比大多数人更好的工作。

您寻找一个替代的主要问题,可能使的是它支持可变精度算术,这可能是架空你宁愿避免,如果你肯定知道你的号码最多有512个二进制数字。即便如此,你可能想看看算法超过低级别的技巧(长乘法可能已经在该尺寸一个不错的选择),我非常有信心,你会更好让编译器做你的优化。

我的建议 - 花时间这样做,需要人类的智慧,而不是东西的东西,一台机器可以做的更一致和更快的十亿倍

如果你真的可以优化机器代码比编译器可以下载LLVM和执行逻辑优化传球更好,所以我们都可以得到好处; - )

其他提示

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

特别是 Intel C++ 和 GCC3 - 它们经常手动创建无与伦比的代码。

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

如果你只想做一些precission数学,你会更好的尝试英特尔C ++编译器和使用它的数学lib中,它非常强大和overoptimized。同为升压数学库。这可能是由90%削减你的工作:-)他们不支持任意precission号码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top