• 全部
  • 问答

【讨论】开发我们自己的“Super PI”,支持的进来

gxqcn 2007-12-18 10:02:24
开发我们自己的“Super PI”,支持的进来

一、问题提出

在帖子“200秒,可以做什么?——测测你的电脑精确计算能力”中曾提到:
“大家知道,CPU的浮点计算能力可以用 Super PI 去测试,那么整型计算能力如何测试呢?”

大家在该帖中纷纷给出了自己的测试数据,并由此可以对比出各自配置的优劣。

一个灵感突然闪现出来:为何不直接开发我们自己的“Super PI”?


二、切入时机
一直有人建议我开发一款计算圆周率的程序,但我认为时机尚不成熟:因为当时算法库尚未稳定,我还有许多想法有待实现验证。

及至现在的 HugeCalc V8.0.0.0 的问世,稳定而高效的算法,是到了水到渠成、瓜熟蒂落的时候了。


三、优势所在
1、可专注于CPU整型指令的测试(※);
2、可支持多核/多CPU的协同测试(※);
3、可自动识别CPU相关参数,自动调整算法;
4、可自行修改配置档进行DIY测试;
5、测试对内存占用相对较低。


四、设计目标
设计要求:“模仿”super_pi_mod V1.5,由用户选定指定的测试长度,并将测试时间加密进行“CheckSum”进行防伪。
设计目标:最终打造成一款CPU通用的检测软件之一!


五、众人拾薪火焰高
1、软件命名:欢迎大家给出有创意的软件名,谢谢!
2、算法讨论:相关软件用的是什么算法?哪种最高效?
3、经验传承:曾经开发过圆周率计算的网友,欢迎将其间的酸甜苦辣与大家分享;
4、开源与否:是否采用开源模式(我没有这方面经验)?欢迎讨论。
5、测试推广:这是后话了。。。


六、泼泼冷水
如果您是反对者,并专程点击进来,我亦表示由衷感谢,
如果您认为这个项目不切合实际,注定无果而终,请给出具体理由,
因为现在尚处于酝酿论证阶段,您的批评也许会让我们少走弯路!

...全文
951 1 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Super Pi用的其实是CPU的整数计算,好像绝大多数人都认为是浮点计算了……
作者自己说的。当中的浮点变量仅仅是用来计算时间的。
回复
yaos 2008-02-06
算圆周率的真正难度在于控制精度方面

至于算法,一抓一大把

100万位,随便用二次迭代和四次迭代都能算出来

建议二次迭代和四次迭代都实现一次
比较实现的效率
回复
medie2005 2008-01-13
呵呵,不用补了,以前都没顶,怎么好意思啊。
我是职业混分人,应该可以混到分吧。
回复
gxqcn 2008-01-13
对不起ls的,结贴时没有刷新,以后补给你吧:)
回复
medie2005 2008-01-13
纯jf.
回复
gxqcn 2008-01-13
刚接到系统自动发出的催促结贴消息,所以本贴即将关闭。

非常感谢各位的热情参与,尤其是一些提供算法和参考链接的网友,谢谢你们了!

由于近段时间很忙,所以开发我们自己的“Super PI”尚未有任何实质性地付诸行动,有点对不住大家。

关于本话题的进一步讨论,请移步到http://bbs.emath.ac.cn/thread-4-1-1.html
回复
gxqcn 2007-12-20
高精度(或曰多精度)计算主要是“大整数+指数偏移”,
π虽然是个超越数,但要计算它上亿位的精度,却可以避免使用任何浮点指令。
回复
tanmeining 2007-12-20
支持,我知道有种计算浮点乘除比较近似的方法,不知道对楼主有没帮助
比如0.1026*0.2044,因为浮点数在计算机内部存储的两个分别不同的寄存器中,寻找的时候比较浪费时间,所以我们就将这两个数分别扩大1000倍,让其成为整数
就等于这样
1026 * 2044 / 1000 * 1000,又因1026与1024相近,1024刚好为字节换算的进制,所以可以整个字节这样的来寻址,所以我们将整个式子变成这个样子 1024 * 2048 / 1000 * 1000
经过测试发现,如果是1000次的循环中,做浮点的运算,在双核,64位的机子上大约会花费10--15分钟,经过第二种方法的变形,大约花费3-4分钟,再经过第三种方法的变形,最后测试出来的时间为15秒,效果是很明显的...

希望对大家有所帮助
回复
gxqcn 2007-12-18
谢谢大家!尤其是 liangbch 提供的参考资料非常有价值,谢谢!

对计算圆周率一直以敬畏的态度,而今想自己做一个,并且要做出色,心中难免忐忑,感谢大家的支持!
回复
Minkey 2007-12-18
做个记号先...
回复
liangbch 2007-12-18
计算圆周率是一个热门话题, 好多人都编写了计算圆周率的程序。其中包括 Super PI,super PI 使用了最为常用的AGM算法,这个算法并不难,仅需要实现大数的乘法,倒数,平方根,除法(可用倒数和乘法算法实现)。值得注意的是,Super PI并不是一个最快的算法。π calculation programs 给出了好多个圆周率计算器一些信息,包括作者,运行速度,算法,来源。可见(http://myownlittleworld.com/miscellaneous/computers/pilargetable.html)

在这些程序中,由 Hanhong Xue 写的使用 GMP 库的程序是最快的。在Core 2 3.0G 的电脑上 计算100万位圆周率 仅需1.68秒。关于这个程序的一些信息请参阅:Computing billions of π digits using GMP (http://gmplib.org/pi-with-gmp.html)

关于 计算圆周率 的一些知识,我最早见于 http://www.jason314.com。 时间大约是:2000年左右,关于计算圆周率的算法可从这个网站上得到一些帮助。

我曾在编程爱好者网站上讨论过计算圆周率的算法,请参阅 http://www.programfan.com/club/post-223320-3.html
回复
scq2099yt 2007-12-18
楼主是高手,学习先
回复
oo 2007-12-18
支持
回复
http://hi.baidu.com/wys97e3/blog/item/b23b727f3251ec0b29388a14.html

同意楼上的意见,算法比较重要。算法本身的效率只是一方面,作为一款性能测试软件,什么样的算法才能让测试数据更有说服力?
回复
ckc 2007-12-18
这个是数学问题,算法问题
先找到好的算法再说吧
回复
pptor 2007-12-18
回复
a0002 2007-12-18
支持
回复
Tiger_Zhao 2007-12-18
这里的公式用图片表示,比较容易阅读http://www.hoodong.com/wiki/%E5%9C%86%E5%91%A8%E7%8E%87
回复
NowCan 2007-12-18
数学功底不够,纯支持。
回复
housisong 2007-12-18
支持楼主的计划


测试项目建议分为: x86整数性能测试、x87浮点测试、MMX整数测试、SSE整数测试、SSE浮点测试 (都是用计算PI来测试,但使用多个内部实现)
可以选择单核心测试和并行测试

用AGM公式来计算比较简单; ( http://www.jason314.com/ 主页上的那个公式可以用以挑战记录 )
这种软件开不开源关系应该不大;(个人当然想看看源代码:)

我的计算PI的源代码: http://blog.csdn.net/housisong/archive/2005/11/08/525215.aspx
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2007-12-18 10:02
社区公告
暂无公告