【密码学】最近遇到的一些小坑

 有两天没写东西了,这两天主要在搞一些个人觉得麻烦又意义不大的事情。椭圆曲线对数(ecdlp)的赛题,基于miracl库写了一个非并行的pollard-rho算法,代码也就七十多行,经过不懈的算法上的尝试和优化,最小的数据十秒钟就能出解了,但对于稍微大一些的数据明显力不从心。后来翻到miracl库文档之中有提到它包含的comba方法和kcm方法。尤其是comba,专门对椭圆曲线上点坐标频繁的取模运算进行优化,据说运用得当的话效率能提升四倍。然而要使用这个方法可真费了我不少功夫,首先机子是64位的,基础类型我设置的是long long,但是comba方法需要一个双长度类型,很自然地我设置了一个__int128,后来才发现微软的编译器是不支持这个类型的。我又不想把自己的库搞成32位的,估计那样效率会低不少。于是为了这个四倍效率,我下了一个VMware,装了CentOs的虚拟机,再在上面搞了一个GCC4.8,正好能支持C++11和__int128类型。
 我发现Visual Studio有一个远程生成linux解决方案的扩展功能。处于对VS的喜爱,我没有用命令行来做操作,而是在CentOs上装了SSH,再用本机的VS连接到CentOs来编译链接。这中间真的是遭遇了无数的坑。首先终于编译出了我需要的、包含comba方法的静态库miracl.a文件。然后让我的算法代码编译时,发现编译能通过,但是链接到库时不知道为什么出问题了。后来才发现不是VS的错,我下的GCC里的ld链接方式似乎有不同,无论怎么-L -l它都说找不到库,但是直接g++ 加上源文件和库名,它就能生成.out程序。无奈之下我只好舍弃了VS,捣鼓了一下命令行,千幸万苦后终于得到了优化之后的程序。
 实测了一下效率确实有提高,但是很不明显,不排除只是不同编译器产生的效果。效率大概优化到了原来86%这样子。为了这么点优化花费了不少时间,不得不说还是很不值得的,毕竟常数级别效率优化的事情,稍微找个好一点的机子,或者换个ICC编译器,都能有不错的效果,自己还是别钻牛角尖,乖乖优化好算法吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值