找回密码
 欢迎注册
楼主: gxqcn

[讨论] 重启大整数库 HugeCalc 的研发工作

 火.. [复制链接]
发表于 2020-2-24 17:27:43 | 显示全部楼层
观望……
我的大数库就写完了加减乘除输入输出,之后就没写了。
取模和除法还是同一个函数……
如果要继续的话就要开始写数论算法,gcd,模幂什么的。
但懒。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-25 09:13:10 | 显示全部楼层
大数库开发,繁琐而颇具技巧,对数学和计算机水平要求高,对硬件的要求也很高,要想达到上乘水平,并不容易。

从进大学起我就在琢磨这块,已近三十年了,
当前基本无需参考其它源码,可以很自然地写出相关代码,
只是工作量实在太大,为追求尽可能的高效,需要耗费极大的心力。

以天赋使命感,来挫败懈怠,克服懒惰,一天一点的雕琢,终会有大放光彩的那一天的。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-25 13:38:10 | 显示全部楼层
关于SIMD指令的使用,除了直接使用汇编指令外,还可以使用Intrinsic函数,请参阅zyl910的文章
跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)https://blog.csdn.net/zyl910/article/details/8100744
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-25 17:19:49 | 显示全部楼层
谢谢提供的参考资料!

我现在已在用这些头文件,见:x64 (amd64) intrinsics list

开发流程如下:
1、在 x86 平台下,验证技术,待完善后再向 x64 平台转移;
2、前期尽可能不写或少写汇编代码,先保证结果正确,再考虑效率问题;
3、汇编优化:所用指令集顾及用户 CPU 配置,低端尽可能够低,高端尽可能够新,以覆盖尽可能多的用户。

从现在开发的进度来看,先前计划略有变化:
1、继续提供 x86 版本,但接口全新改写
2、待32位版本相对稳定后,再同步推出 x64 版本;
3、未来的 x86 与 x64 的接口文件几乎一致:因为整型用的是 intptr_t / uintptr_t,可无感切换。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-26 12:29:20 | 显示全部楼层
gxqcn 发表于 2020-2-25 17:19
谢谢提供的参考资料!

我现在已在用这些头文件,见:x64 (amd64) intrinsics list


重新写意味着啥?
提升功能?
写个ElGamal加密算法(这个相对来说比较简单,基于离散对数算法),
或者写个椭圆曲线分解质因数算法吧,
你重新写一下,估计只是提升一点点速度,
有那个时间折腾,还不如多写几个别的功能,比如我上面说的功能

https://baike.baidu.com/item/Elgamal/856288?fr=aladdin
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-26 20:15:43 | 显示全部楼层
现在已有的数学软件已经很完备了,在大数运算方面。不知郭为什么还要自己写一套大数运算库
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-27 10:25:27 | 显示全部楼层
好吧,兼顾回答上述两位网友的问题。

1、重写意味着啥?
之前的 HugeCalc 是用 VC6.0 开发的,
随着业界 C++ 标准不断升级完善,之前 DLL 配套对应的 .LIB 文件,已与最新的 C++ 二进制不兼容,
也就是说,新用户在新的开发环境下,已无法正常调用 HugeCalc(但纯 C 接口还是能正常调用的)。
重新开发,还意味着更合理的接口,更强的功能,更快的速度。
当然,还有可持续性开发的考虑,这个下面会继续说。

2、是否重新造轮子?
既然“现在已有的数学软件已经很完备了”,就没必要再开发了吗?非也!
你的每一次网络交易,可能都涉及一次加解密运算,难道要把庞大的 Mathematica 塞进每一部手机?
有关大整数的算法,尤其是最核心的大数乘法,以及密码学常用的模幂算法,在网络上一搜一大堆,
有大学的毕业论文,教授的职称论文,也有国家自然基金支持的项目,有的还提报成了专利。
中文的繁多,外文的也不少,难道都是在沙漠中找金子?大家都傻吗?
方兴未艾,热点频出,正好说明这里有很多富矿可挖掘啊,
当然,不少论文的水准,在我看来,确实是只能“呵呵”。。。

3、可持续性开发
一颗小苗可以茁壮成参天大树,但长时间缺乏浇灌,也会让它枯萎。
近十年里,我一直有意开发 64 位的大数算法库,
可惜 CPU 的发展一直不能令我满意,算法需要的指令集迟迟未能面世,
在静心等待的过程中,C++ 的标准倒是进行了几次大升级,
为了与未来快速衔接上,所以才决定重构 HugeCalc

4、兴趣使然
算法库,要想做到好用、高效,
都是需要很高的设计和技巧的,
而涉及到数论的,则要求更高。
本人正好对此有兴趣,可以潜心多年去完善它,
既然有兴趣,也略有此能力,何乐而不为?无计回报与否。

5、回报?
提到回报,就显“功利心”;但我感觉,最大的反而应该是“福报”。

之前对 HugeCalc 的开发表明,
(1)首先,有助于快速提升个人水平
本人作为一名非计算机、非数学科班出身的人员,
通过业余时间持续开发这套算法库,迅速补齐相关短板,甚至超出了一些专业人士的水平,
当前,我碰到问题,在脑海中能迅速构思出算法框架,细节上能具体到 CPU 执行的汇编指令。

(2)其次,能广交天下挚友
上面说的是内练,现在说的是外联,也就是走出去,与更多的人交流,并从中吸取营养。
通过对外发布自己的业余作品,就当是自己的业余爱好的“副产品”,
会迎来质疑、批评、惊叹或是否定,这些都不重要,
重要的从中结交朋友,相互切磋,或获得高人指点,或与高人过招的机会,这是千金难买的!
与我私下交流的,有清华北大的学生、教授,也有一些专职研究人员求合作等。
再比如这次,重启研发 HugeCalc 的帖子发出后,立即就得到数位好友的响应及相助!

(3)最后,可回馈社会
古之人,得志,泽加于民;不得志,修身见于世。穷则独善其身,达则兼济天下。
现 HugeCalc 虽为个人开发,实则借力于多方,
我只是将它们适当整合,再加上自己的一点小创造而已,
所以成果应与大众分享,
待时机成熟时,甚至考虑开源给世界。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-27 10:45:39 | 显示全部楼层
两年前,即 2018 年初,我得了一场重病,病得非常重,那是一段灰色的日子,
在病房里,我甚至想到了,如果就此挂掉了,会有哪些遗憾?
对家人的遗憾自不必说,个人的抱负也不必说了,
最大的遗憾是:空有一个好算法,却未能公之与众!

之后,我辞职回家静养,思考人生;
再之后,与前同事、老同学创建公司(苏州谋迅智能科技有限公司),
公司主营数控系统开发,我负责核心的运动控制算法研究,
在这块上,我们国内与外界差距还是有些的,
但我相信,我们的算法并不逊色于那些上市的大公司,甚至优于他们!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-2-27 14:05:41 | 显示全部楼层
gxqcn 发表于 2020-2-27 10:45
两年前,即 2018 年初,我得了一场重病,病得非常重,那是一段灰色的日子,
在病房里,我甚至想到了,如果 ...

我好奇,mathematica软件也是重写的吗?
我感觉重写似乎很麻烦

点评

软件重构,不是说全盘否定原有的东西;一般来说是吃透了老架构,对老架构的优缺点都了如指掌了,才会去重构。另一种是历史包袱太重,限制了施展,这时也会考虑重构。  发表于 2020-2-27 22:14
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-2-27 15:06:55 | 显示全部楼层
即便大公司,必要时,也会重构的。
当然,重构的代价很大,但有时维护旧版的代价更大。
重构后,会有更好的架构,甩掉历史包袱,相当于版本的一次大升级。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 16:05 , Processed in 0.024434 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表