2010-02-18 312 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%:-)它們確實支持任意的精確數字。

相關問題