【问题标题】:how to use processor registers in visual studio?如何在 Visual Studio 中使用处理器寄存器?
【发布时间】:2010-02-18 04:29:39
【问题描述】:

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

【问题讨论】:

    标签: c++ visual-studio cpu-registers


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我不确定您是否熟悉 rsa 挑战,但我的处理方法与最近成功的方法不同。无论哪种方式,我都会将 2 个数字相乘,然后将结果与我想要考虑的数字进行比较。我要考虑的数字大约有 750 个二进制数字。无论哪种方式,gmp 看起来很有希望,只是不确定是否有办法在 Visual Studio 中使用它。
    • 它应该是可移植 C++ 包装器中的可移植 C 代码。我自己还没有使用过 - 侥幸,这是我最近下载但还没有开始使用的东西 - 但如果你不能使用它,我会感到惊讶。
    • 实际上有一个端口应该可以与 Visual Studio 一起使用,我现在正在尝试它....需要 yasm,但安装后解决方案加载没有问题(对不起,但是到目前为止,我已经做到了)。链接:mpir.org
    【解决方案2】:

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

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

    顺便说一句,看看这个:Why does MSVC not support inline assembly for AMD64 and Itanium targets?

    【讨论】:

    • 这里的重点是我不能使用变量,因为我想用 300 多个数字进行数学运算。或者更确切地说,我想将两个数字与最多 512 个二进制数字相乘,所以 64 位整数并不能让我很接近。
    • 所以?使用其中的 8 个。这正是您需要一个擅长使用可用寄存器的编译器的原因,因为您需要其中的很多。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2016-05-13
      相关资源
      最近更新 更多