我正在开发一个bignum图书馆:http://pastebin.com/nFgF3zjW
我实现了Miller-Rabin算法(isprime()
),但与OpenSSL的BN_is_prime_fasttest相比,它非常慢。
我尝试过分析,执行次数最多的函数是bn_shr_atomic
和bn_cmp
。
知道如何让它更快吗?
答案 0 :(得分:1)
GNU多精度算术库实现了Miller-Rabin。它的文档位于:
http://gmplib.org/manual/Number-Theoretic-Functions.html#Number-Theoretic-Functions
我建议检查它们的实现,以加快计算速度。但是,任意精度算术本身都比使用适合寄存器的数字要慢。
编辑:
在所使用的算法与所得概率的质量之间还存在权衡。也就是说,我不确定OpenSSL使用什么测试。
答案 1 :(得分:0)
大猜测:如果你真的想使用你自己的库,我首先用长除法替换除法算法。
验证我的猜测:你的divison的内循环中有cmp和shr,那些调用是你个人资料中的主要贡献者还是来自其他地方?一般来说,当你分析时,你应该首先看一下更高级别的功能,这些功能是很大的贡献者,改变算法通常比调整低级功能更有益。