2010-02-18 311 views
1

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

回答

3

基于对BarsMonsters雁,你并不需要得到更接近CPU的评论,你需要一个大的整数库。

一个选项是gmp,其中包括任意整数运算。它具有很好的算法,例如乘以大整数,一个好的编译器会比大多数人更好地优化它。

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

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

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

+0

我不确定你是否熟悉rsa挑战,但是我对这件事的态度与最近成功的不同。无论哪种方式,我乘以2个数字,然后将结果与我想要的因子进行比较。我想要的数字大约有750个二进制数字。 无论如何,gmp看起来很有前途,只是不确定如何在Visual Studio中使用它。 – xyious 2010-02-18 05:28:06

+1

它应该是便携式C++包装中的可移植C代码。我自己并没有使用它 - 侥幸,这是我最近下载的东西,但还没有使用 - 但如果你不能使用它,我会感到惊讶。 – Steve314 2010-02-18 05:58:00

+0

实际上有一个端口,应该与视觉工作室,我现在正在尝试它....需要YASM它,但安装后,该解决方案加载没有问题(抱歉,但这是迄今为止,我得到了远)。 链接:http://www.mpir.org/ – xyious 2010-02-18 06:57:30

2

所有现代compillers都在重复使用所有可用的寄存器产生最快的代码非常好。

特别是英特尔C++和GCC3 - 他们通常手动创建代码无与伦比的代码。

BTW,看看这个:Why does MSVC not support inline assembly for AMD64 and Itanium targets?

+0

这里的重点是,我不能使用变量,因为我想用300+的数字来进行数学运算。或者更确切地说,我想将两个数字乘以多达512个二进制数字,所以64位整数并不能让我接近任何地方。 – xyious 2010-02-18 04:38:55

+1

那么?使用其中8个。这正是你需要一个善于使用可用寄存器的编译器的原因,因为你需要这么多的编译器。 – MSalters 2010-02-18 09:56:46

2

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

相关问题