PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

转载个文章,关于SuperPi的

  [复制链接]
跳转到指定楼层
1#
royalk 发表于 2011-5-21 01:54 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
点击数:24740|回复数:96
很多人都搞不清楚SuperPi到底是整数还是浮点运算,就连许多媒体编辑也是瞎说。我可以肯定的告诉大家,是整数运算。在网上看到了一篇文章,转给大家看看:

如果有人比较精通编程的,欢迎使用其它语言编写,让我们都来跑跑看会有什么结果。

原文链接:http://www.cppblog.com/hktk/archive/2009/09/24/97148.aspx

不可否认,SuperPi历史非常悠久,用的人之多,其他同类软件难以匹敌。但是对其有更多了解的人却很少,下面这些细节你可能都不知道:
1.SuperPi发布日期是平成7年(1996年)
2.[もとのプログラムはFORTRANで書かれていますが、それをC言語に書き直しました。
原计划使用Fortran编写,最后使用C语言编写
3.ガウス・ルジャンドルのアルゴリズムを採用しています
采用Gauss-Legendre算法
4.创造纪录使用的大型机器是HITAC S-3800/480(95年的配置啊,当时看来可是绝对地强悍啊):
 主記憶容量    :1792.75 MB (主内存)
 拡張記憶容量   :25120 MB  (扩展内存)


アルゴリズム   :ボールウェインの 4 次の収束アルゴリズム
使用算法:Borwein四次迭代算法

注意!和SuperPi所用的算法并不相同!!
许多人都知道,开发SuperPi的作者用大型机跑出了42亿位的纪录,且都认为使用是和SuperPI一样的算法,但是事实并非如此!大家都是在以讹传讹!


6.Pentium 66MHz计算104万位需要 1小时13分22秒
HITAC S-3800/480计算104万位大约只需要5秒!
Pentium 66MHz计算3355万位需要 105小时35分17秒
HITAC S-3800/480计算3355万位大约只需要4分钟!

注意:由于使用算法和软件环境不同,大型机和PC没有绝对地可比性,况且还是95年的大型机,但是其性能优异在一定程度上是可以肯定的。
硬件和软件的发展都是很惊人的,1986年9月,创造42亿位纪录者之一的金田用HITAC S-810/20计算了3355万Pi值,这在当时就是一个世界记录了!但同年10月他们就把记录提高一倍到6千7百万位。
我用QPI使用SuperPi的AGM算法计算3355万位,花了3分47秒就完成了,就算是体验到当年大型机的速度了吧


7.关于Gauss-Legendre算法和Borwein四次迭代算法,SuperPI也给出了详细的介绍:

SuperPI所采用的Gauss-Legendre算法:(PS:又叫做AGM算法(Arithmetic-Geometric Mean))
1.初值确定
    a = 1
        b = 1 / sqrt( 2 )
        t = 1 / 4
        x = 1

2. a与b都取同样的精度,反复迭代计算下式:
      y = a
        a = ( a + b ) / 2
        b = sqrt( b ・ y )
        t = t - x ・ ( y - a )^2
        x = 2 ・ x

3.a和b迭代到足够精度后,根据下式可以计算出PI值
        Pi = ( a + b )^2 / ( 4 ・ t )

这个公式的特点是每迭代一次将得到比前一次迭代高一倍的精度,所以要计算104万位(2的22次方),迭代19次就够了,这就是为什么SuperPi的计算为数都是以2的倍数递增,且计算时会出现一条条的纪录,这就是每一次迭代所花费的时间!理论上每次花费的时间都应该是完全相同的。比较可笑的是 SuperPi MOD版本的汉化翻译,把19次迭代翻译成需要重复计算19次,明显存在着理解上的错误。

计算42亿位的巨型机所使用的Borwein四次迭代式:
1.初值确定:
        a[0] = 6 - 4 ・ sqrt( 2 )
        y[0] = sqrt( 2 ) - 1
   
2. 反复计算下式,提高精度
        y[k+1] = { 1-(1-y[k]^4 )^(1/4) } / { 1+(1-y[k]^4)^(1/4) }
        a[k+1] = a[k]・(1+y[k+1])^4 - 2^(2・k+3)・y[k+1]・(1+y[k+1]+y[k+1]^2)
  
3.当a[n]和b[n]达到足够精度后,可以确定Pi值
        Pi = 1 / a[n]
所以可以看出,该公式首先算出其实是Pi的倒数,算出a[n]后,要做一个“巨型”的除法才能得到真正的Pi值

另一方面必须要认识到,SuperPi的编写年代久远,现在看来实现的效率非常低。Qpi即使用完全同样的算法,在我的E6300机器上只需3.37秒就完成了104万位的计算的19次迭代!
计算过程(QPI4.5版 使用-agm3参数,和SuperPi完全相同算法 E6300未超频 Vista环境 ):
Starting 1st  iteration, time : 0.13
Starting 2nd  iteration, time : 0.19
Starting 3rd  iteration, time : 0.17
Starting 4th  iteration, time : 0.19
Starting 5th  iteration, time : 0.19
Starting 6th  iteration, time : 0.19
Starting 7th  iteration, time : 0.17
Starting 8th  iteration, time : 0.19
Starting 9th  iteration, time : 0.17
Starting 10th iteration, time : 0.19
Starting 11th iteration, time : 0.17
Starting 12th iteration, time : 0.19
Starting 13th iteration, time : 0.19
Starting 14th iteration, time : 0.17
Starting 15th iteration, time : 0.19
Starting 16th iteration, time : 0.19
Starting 17th iteration, time : 0.17
Starting 18th iteration, time : 0.17
Starting 19th iteration, time : 0.17

Total iteration time : 3.37
Computing final value, time : 0.14

Total time : 3.56 seconds
Total memory used : 12,003,171 (11.45 MB)

Processor utilization : 128.98%

CPU 利用率达到了128.98%说明其利用了第二个核心的28.98%的效率,发挥了了一定的双核优势,但即使是完全单核执行应该也不会慢到哪里去,比起 SuperPi漫长的30秒计算几乎达到了10倍速,而这个成绩也比超频榜上的那些个发烫的成绩要快得多了,如果使用最快的chudnovsky算法,只要1.5秒便结束了104万的战斗....如果换成超频榜上的那些牛机,只需零点几秒便解决了!

不知道用SuperPi的人中有几个人知道Pifast,有几个知道Qpi,还有几个人两个都知道的

SuperPi在历史舞台上的地位是永远存在的,但是考验CPU速度,还是换更先进的算法和程序感觉会更好,更能体验飞速的感觉!看着SuperPi的排行榜,我仿佛看到了喷火的跑车发动机装在了拖拉机上...

你真的老了SuperPi...
别了SuperPi....

评分

参与人数 1活跃度 +20 收起 理由
jasu30 + 20 我很赞同

查看全部评分

2#
royalk  楼主| 发表于 2011-5-21 11:31 | 显示全部楼层
有个疑问,FriZhess应该也是整数运算吧?计算步数。那按理说supper pi成绩和FRiZchess成绩应该成比例的吧? ...
llt_eva 发表于 2011-5-21 09:22


C++语言迭代算法对core架构开始优化就比较好,我也不知道为什么,我自己写的迭代程序当时用C2D跑起来就比K8快很多
象棋和WPRIME都是整数运算,但是加入了多线程情况就不一定一样了,就像WPRIME SNB就很差,不如同频的Nehalem,我也不知道为什么
3#
royalk  楼主| 发表于 2011-5-21 11:52 | 显示全部楼层
回复  royalk


    是不是可以这样理解?supper pi的迭代算法用到了IU优化过的整数计算指令,象棋的算法 ...
llt_eva 发表于 2011-5-21 11:39


那也不一定是算法的问题,有可能是整个C++编译的问题
就算你用C++编写一个1+1的100万次循环运行起来那还是IU快
浮点多了去了啊,任何渲染和解压缩、转码什么的都算是浮点
4#
royalk  楼主| 发表于 2011-5-21 12:10 | 显示全部楼层
回复  royalk


    哦,照这样说,那就是说IU比AU整数运算能力更强,所以同频同线程PI和象棋都是IU领先, ...
llt_eva 发表于 2011-5-21 11:57


象棋和WPRIME我觉得是做过了平衡处理所以才会显得AU和IU差不多,并不一定是AU的多线程效率高
K8的浮点强其实只是相对P4来说了,自从C2D之后K8就一直是落后了,当然整数落后得更多
5#
royalk  楼主| 发表于 2011-5-21 12:54 | 显示全部楼层
回复  royalk


    理想状况是:推土机单核整数性能是K10的2倍(单线程是2个整数单元协同工作,1+1),浮 ...
llt_eva 发表于 2011-5-21 12:15


推土机我拿到的未必比你们快。。不过想达到理论我觉得还是非常困难的,就像SNB的浮点能力已经是Nehalem的两倍了,实际上呢,你看看提升了多少
6#
royalk  楼主| 发表于 2011-5-21 13:02 | 显示全部楼层
回复  royalk


    你有渠道哈,咋会比我们慢呢?我们只能等开售了后才能买一个。还巴望着看完评测再出手 ...
llt_eva 发表于 2011-5-21 13:00


我哪有什么渠道,还不是一样跟你们买
7#
royalk  楼主| 发表于 2011-5-21 13:09 | 显示全部楼层
回复  royalk


AMD的公关太次了,居然不送EVA评测样品?这里评好了,很有影响力啊,起码国内的一波diyer ...
llt_eva 发表于 2011-5-21 13:08


AMD一向是很抠门,别指望他们。。
8#
royalk  楼主| 发表于 2011-5-21 13:23 | 显示全部楼层
听石头说的吧

AMD再扣,也比台系的厂家大方
台系的,我看就技嘉比较大方,安排什么还比较到位
其他...

...
hitclxy 发表于 2011-5-21 13:21


AMD确实很抠呀。。不光对我们来说,其它媒体也是 活动很少搞,一年最多搞一次。。
9#
royalk  楼主| 发表于 2011-5-21 13:25 | 显示全部楼层
回复  royalk


    看来还要自己想办法啊,不过R老师亲手评测调教过的推土机想必有收藏意义啊

推土 ...
llt_eva 发表于 2011-5-21 13:21


我现在关心的是推土机的8个核心实际上到底能用到几个,因为就目前来看单核浮点性能和K10是没两样的
就像Phenom II X6,我一直没觉得它有啥优势
所以可能两模块四核心的推土机会是家用的比较好的选择,但是可能也就跟现在的四核K10没啥两样了,190刀,我认为不值
10#
royalk  楼主| 发表于 2011-5-21 13:25 | 显示全部楼层
INTEL也不怎么搞活动
一般都是跟某个厂家一起搞

做CPU的,别指望了
现在国内DIY市场急剧荽缩
我感觉似 ...
hitclxy 发表于 2011-5-21 13:25


Intel的都是被公关公司卡着,剩下的不用我说你也知道了
11#
royalk  楼主| 发表于 2011-5-23 11:53 | 显示全部楼层
这个...好像在MATLAB时候学过
changchar 发表于 2011-5-23 02:41


求通俗解释~
12#
royalk  楼主| 发表于 2011-5-23 13:52 | 显示全部楼层
推土机一个模块只能算1.5个核心吧。。。。不是两个完整功能核心
plane501 发表于 2011-5-23 13:16


也不能算1.5,以目前摩托车的成绩来看还是比较接近2个核心的,不过当然了摩托车是浮点
13#
royalk  楼主| 发表于 2011-5-24 11:28 | 显示全部楼层
我说的是那两个算法:
changchar 发表于 2011-5-24 10:05


哦。。好像学复变函数的时候学过很多类似这样的算法
14#
royalk  楼主| 发表于 2011-6-14 23:40 | 显示全部楼层
1986年9月,创造42亿位纪录者之一的金田用HITAC S-810/20计算了3355万Pi值 这个有问题的吧, 不是说软件才9 ...
coocoo 发表于 2011-6-14 21:17


算法和软件是两码事
15#
royalk  楼主| 发表于 2011-6-15 14:21 | 显示全部楼层
算法是整数,但貌似pi实现的时候还是用到了非常多的x87浮点运算??? ...
plane501 发表于 2011-6-15 13:30


后边的mod版本精确到毫秒有使用浮点,但那些对性能毫无影响,核心还是整数的。
16#
royalk  楼主| 发表于 2011-6-15 21:54 | 显示全部楼层
。。。。。如果真的完全按照那个迭代式,算32m的话那年代内存都不够放中间变量吧 ...
plane501 发表于 2011-6-15 21:07


浮点更不够好么
17#
royalk  楼主| 发表于 2013-3-1 14:24 | 显示全部楼层
硬件哨兵 发表于 2013-3-1 14:00
这文章说了半天也没说清楚浮点和整数的区别。

如果SUPER PI是整数运算,

1. 第一句话我就有说是整数运算
2. 你难道不知道推土机一个核心只有2个ALU吗?
18#
royalk  楼主| 发表于 2013-3-1 14:48 | 显示全部楼层
硬件哨兵 发表于 2013-3-1 14:43
2.我记得推土机模块设计就是把两个核心做成一个核心用 应该是4个ALU, SNB的核心好像也才3个ALU

1.那么 ...

1. 整数浮点这种基础概念自己百度
2. 很遗憾superpi只能用半个模块跑,我指的一个核心是半个模块。
19#
royalk  楼主| 发表于 2013-3-1 18:07 | 显示全部楼层
硬件哨兵 发表于 2013-3-1 17:36
1.我百度就是说 SUPER PI就是浮点, 最明显特征整数就是1,浮点就是0.1。而AMD整数能力并不差
2.那么这 ...

1. 你百度的是错的,要不我也不用发这篇文章。整数和浮点并不是1和0.1那么简单,你看到的“浮点数”只不过是运算需要的时间而已,并不是运算结果。具体怎么算的自己仔细看文章,需要一点逻辑推理思维和递归概念,以及对Gauss-Legendre基本公式的了解。看不懂就直说等我得空再给你好好讲。
2. SNB每个核心是3个ALU,跟Core架构一样,只不过是基于指令调度、缓存和内存的优化使得superpi比core架构跑的更快。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部