读书人

好消息!HugeCalc 核心算法效率全面超

发布时间: 2012-02-14 19:19:19 作者: rapoo

好消息!HugeCalc 核心算法效率全面超出 GMP!开心,散分200!
好消息,在双核上测试,我的 HugeCalc 核心算法效率全面超出 GMP!:)

INIFile code
                                       GMP          HugeCalc-HI     HugeCalc-HXFib[100000000]( 69424191 Bits )      4.349451 s      3.702678 s      3.479291 sFib[200000000]( 138848382 Bits )     9.424257 s      7.230688 s      6.871886 sFib[400000000]( 277696765 Bits )    20.659469 s        15.330399 s     14.545750 s


测试代码如下:
C/C++ code
// DESCRIPTION for Fib.cpp :// Defines the entry point for the console application.// 目的:测试 GMP 与 HugeCalc 两大高精度算法库核心算法效率//       因为计算 Fibonacci 本身可优化的地方不多,关键是大数乘法及大数平方,//       故,通过测试 Fibonacci 效率而检测算法库最核心的大数乘法(平方)效率。//// 设计:郭先强 ( gxqcn@163.com; HugeCalc@Gmail.com )// 日期:2008-01-03//// Web: http://www.emath.ac.cn/// BBS: http://bbs.emath.ac.cn/////////////////////////////////////////////////////////////////////////////// Project -> Setting -> C/C++ -> Code Generation --> Use run-time library://      Win32 Debug:    Debug Multithreaded DLL//      Win32 Release:  Multithreaded DLL#include <iostream.h>#include <gmp.h>#include <HugeCalc.h>   // 公共接口#include <HugeInt.h>    // 10进制系统#include <HugeIntX.h>   // 16进制系统#pragma message( "automatic link to .../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )#pragma comment( lib, "gmp.lib" )#pragma comment( lib, "HugeCalc.lib" )#if 0#   define FIRST_INDEX  10000000L   /*1e7*/#else#   define FIRST_INDEX  100000000L  /*1e8*/#endifint main(int argc, char* argv[]){    cout << "Call " << HugeCalc::GetVer() << endl;    if ( HC_LICENSE_NONE == HugeCalc::GetLicenseLevel() )    {        cout << "\r\n警告:您未通过 HugeCalc.dll 的许可认证!\r\n" \            << "\r\n解决方案可选下列方案之一:" \            << "\r\n    一、请将本程序移动到“/CopyrightByGuoXianqiang/[../]”目录下运行;" \            << "\r\n    二、或请在 HugeCalc.chm 中进行注册(一劳永逸)。" \            << endl;    }    else    {        for ( UINT32 u32Index = FIRST_INDEX; u32Index <= FIRST_INDEX * 4; u32Index <<= 1 )        {            cout << "\r\n--------------------------------\r\n" << endl;            cout << "Calculate Fib[" << u32Index << "]:\r\n" << endl;#if 1            // 测试 GMP            {                mpz_t hugeFIB;                mpz_init( hugeFIB );                HugeCalc::EnableTimer( TRUE );                HugeCalc::ResetTimer();                mpz_fib_ui( hugeFIB, u32Index );                HugeCalc::EnableTimer( FALSE );                cout << "GMP used time: " << HugeCalc::GetTimerStr( FT_DOT06SEC_s ) << " ( " \                    << mpz_sizeinbase( hugeFIB, 2 ) << " Bits )" << endl;                mpz_clear( hugeFIB );            }#endif            // 测试 HI            {                CHugeInt hugeFIB;                HugeCalc::EnableTimer( TRUE );                HugeCalc::ResetTimer();                hugeFIB.Fibonacci( u32Index );                HugeCalc::EnableTimer( FALSE );                cout << "HI used time: " << HugeCalc::GetTimerStr( FT_DOT06SEC_s ) << " ( " \                    << hugeFIB.GetDigits() << " Digits )" << endl;            }            // 测试 HX            {                CHugeIntX hugeFIB;                HugeCalc::EnableTimer( TRUE );                HugeCalc::ResetTimer();                hugeFIB.Fibonacci( u32Index );                HugeCalc::EnableTimer( FALSE );                cout << "HX used time: " << HugeCalc::GetTimerStr( FT_DOT06SEC_s ) << " ( " \                    << hugeFIB.GetBits() << " Bits )" << endl;            }        }    }    cout << endl;    system( "pause" );    return 0;} 





[解决办法]
沙发,恭喜,接分!
[解决办法]
接分.
[解决办法]
接分
[解决办法]
接分
[解决办法]
恭喜楼主
[解决办法]
HI、HX是什么意思?
[解决办法]
jf
[解决办法]
做成lib或者SDK吧!

[解决办法]
哪天和Crypto++比较一下大整数运算。
[解决办法]
恭喜
[解决办法]
jf
[解决办法]
祝贺!接分
[解决办法]
庆贺
[解决办法]
祝贺!向楼主学习!
[解决办法]
祝贺!向楼主学习!
[解决办法]
顶,接分
[解决办法]
jf
[解决办法]
真的想和GMP较量一下,不妨公布一下源代码,让大家充分见识一下,另一方面也体验一下大教堂式开发,大家也可以帮你在各种机器上编译测试一下.

GMP在各种平台上匀有不错的表现,http://gmplib.org/gmpbench.html
楼主不妨也做一下实验,可以试一试sf.net的compile farm,上边有各类型的机器.
[解决办法]
恭喜恭喜
[解决办法]
看看
[解决办法]
接分
[解决办法]
公开接口和公开源码完全不是一个概念.

我想在AS400上测试一下,你能提供给我一个在AS400上用的动态链接库吗?如果你不公开源码,恐怕做不了...
[解决办法]
看看下边这段话.

The main target applications for GMP are cryptography applications and research, Internet security applications, algebra systems, computational algebra research, etc.

用于以上目的的机器恐怕没有几台是WINDOWS+x86的.可见楼主开发的库只能取之于民用之于民了...
而GMP则支持众多CPU,也在众多的CPU上提供优化.另外GMP从91年便开始开发,有众多的开发者...

楼主不妨和国家气象总局谈一谈...用你的库来提高一下天气预报的精确度和速度.
[解决办法]
这么好,这么强大?
mark留名
[解决办法]
沙发,恭喜,接分!
[解决办法]
沙发,恭喜,接分!
[解决办法]
恭喜,接分!
[解决办法]
恭喜,接分!
[解决办法]
恭喜,接分!
[解决办法]
恭喜

[解决办法]
恭喜啊 ,收分
[解决办法]
帮楼主顶下!!!!!!!!!!!1
[解决办法]
恭喜
[解决办法]
恭喜楼主
[解决办法]
楼主加油,呵呵
[解决办法]
这么多HugeCal的帖子,不过还是恭喜搂主啊!我也在搂主的数学研发论坛注册了,感觉学到了很多。真是个好论坛
[解决办法]
恭喜,顺便蹭点分.
[解决办法]
强人啊
[解决办法]
恭喜,接分!
[解决办法]
祝贺!向楼主学习!
[解决办法]
顶,接分
[解决办法]
恭喜恭喜!-_-,接分
[解决办法]
自从在我们区见过LZ讨论素数生成就感觉LZ数学很强

果然啊~

JF,同时感谢LZ的工具,密码学计算又一好东西啊!密码学计算更容易了~
[解决办法]
接分
[解决办法]
恭喜恭喜!-_-,接分
[解决办法]
恭喜,接分!
[解决办法]
恭喜恭喜!
[解决办法]
接分
[解决办法]
up
[解决办法]
up
[解决办法]
热烈祝贺!!
[解决办法]
恭喜楼主
[解决办法]
太牛了 !!
[解决办法]
ox

[解决办法]
向楼主学习:)
顺便支持一下
[解决办法]
恭喜
[解决办法]
KO!
[解决办法]
楼主强!
[解决办法]
恭喜 恭喜
[解决办法]
恭喜
[解决办法]
接分
[解决办法]
接分
[解决办法]
恭喜
[解决办法]
恭喜,接分,呵呵
------解决方案--------------------


恭喜
[解决办法]
jf
[解决办法]
支持
楼主如果有精力的话,移植到其他平台,比如龙芯,影响力会更大。
当然开源更好。:)

[解决办法]
恭喜!
[解决办法]


恭喜!!!
[解决办法]
学习学习~
[解决办法]
没有库的源码?
[解决办法]
学习~
[解决办法]
哈哈哈。
恭喜楼主。
顺便恭喜新年。
[解决办法]
我测试了下 我写的大数运算,与你的相比
ms 512位二进制的乘法 你的时间比我的代码花得要长呢???


[解决办法]
来接分,嘿嘿
[解决办法]
学习,jf
[解决办法]
MARK
[解决办法]
恭喜,接分!!
[解决办法]
俺还是要泼你的冷水

GMP和你算法的比较不应该这么做
建议参考密码编码学-加密方法的C于C++实现的比较方法

单纯比较
若干次加 减 乘 除 的时间

而不是比较阶乘和斐波那契数的生成

因为你也许内部针对这个阶乘和斐波那契数进行了优化

建议生成若干随机数字进行四则运算比较

[解决办法]
你不这么做

你说比GMP好

总会有人提出疑问的
[解决办法]
好吧

你就做个普通的测试如何

另外, 你该思考HugeCalc的定位了

GMP的目标是通用的高精度计算
MIRACL是加密解密
Maple是数学
Matlab是工程

那HugaCalc呢?

如果你用来加密解密
那不应该继续改进了,而是增加功能和稳定性

如果是用来通用数学计算
那你自己独立开发的格局应该终止了
作为数学软件包,你提供的功能太单一

用来做数论研究功能足够了
但提供的函数太少了太少了

[解决办法]
下面几点问题请考虑
1、GMP是通用跨平台库,你只是X86/win库
2、GMP已停止更新超过1年了,在准备推出版本5
3、你的代码严重依赖于MS编译器
4、你如果过度考虑优化,肯定带来代码的复杂度提升,在纠正Bug上很不好处理, 你应该稳定一个版本再迭代,你考虑过随机计算后的结果都是正确的么?


如果你想继续发展HugeCalc
请考虑这几个问题吧

祝你新年快乐

我还会继续和你讨论的!
[解决办法]
老大啊
不要过度敏感好不好啊

我哪里说你的算法速度不如GMP了啊

我就是说你能不能用普通方法比较下你的算法和GMP算法的时间差异
你做通用高精度运算库,可不是仅做阶乘和斐波那契数列的啊
如果你承认这点,你可以不做比较

我说下比较方法,比较乘法和加法,以二进制位数为比较依据,二进制数字均随机生成,可以32位为单位随机生成
比较的具体位数是
256 512 1024 1536 2048 3072 4096 8192 10240 16384 64000 65536 1048576 33554432
[解决办法]
加时间应该是线性增长的

乘应该涵盖了几种不同算法的位数范围
如果有遗漏,自己补充齐

另,你解决了超大数字的算法了么?
超大,超过2G二进制位的算法
非64位寻址

[解决办法]
有用处
有大用处

比如算圆周率
就用到了超大数字

另外
你实现了几种乘法?都是什么?

我觉得你应该公开代码
GMP代码都是公开的,也没见谁拿来赚钱
因为这个都是小应用范围的东西

没点技术准备不可能拿来直接充自己的

公开代码也能帮你自己找问题和Bug
况且,这个东西很难用来赚钱
之前的经历你自己也应该清楚这个了
[解决办法]
不是诘难
而是建议

什么叫时机成熟??

再说公开了,代码还是你的!

读书人网 >软件架构设计

热点推荐