﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-爱生活 爱技术-随笔分类-其他</title><link>http://www.cppblog.com/hktk/category/7151.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 25 Sep 2009 14:10:47 GMT</lastBuildDate><pubDate>Fri, 25 Sep 2009 14:10:47 GMT</pubDate><ttl>60</ttl><item><title>HTML表格线</title><link>http://www.cppblog.com/hktk/archive/2009/09/25/97189.html</link><dc:creator>海 阔 天 空</dc:creator><author>海 阔 天 空</author><pubDate>Thu, 24 Sep 2009 18:25:00 GMT</pubDate><guid>http://www.cppblog.com/hktk/archive/2009/09/25/97189.html</guid><description><![CDATA[<table style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; FONT-SIZE: 10pt; BORDER-LEFT: black 1px solid; COLOR: black; BORDER-BOTTOM: black 1px solid; BORDER-COLLAPSE: collapse" borderColor=black cellSpacing=1 cellPadding=1 border=1>
    <tbody>
        <tr>
            <td>测试1</td>
            <td>测试2</td>
            <td>测试3</td>
        </tr>
        <tr>
            <td>测试4</td>
            <td>测试5</td>
            <td>测试6</td>
        </tr>
    </tbody>
</table>
&lt;TABLE border=1 cellpadding=1 cellspacing=1 bordercolor="black" style="border:1px solid black; border-collapse:collapse; color:black; font-size:10pt;"&gt;<br>&lt;TR&gt;<br>&nbsp;&lt;TD&gt;测试1&lt;/TD&gt;<br>&nbsp;&lt;TD&gt;测试2&lt;/TD&gt;<br>&nbsp;&lt;TD&gt;测试3&lt;/TD&gt;<br>&lt;/TR&gt;<br>&lt;TR&gt;<br>&nbsp;&lt;TD&gt;测试4&lt;/TD&gt;<br>&nbsp;&lt;TD&gt;测试5&lt;/TD&gt;<br>&nbsp;&lt;TD&gt;测试6&lt;/TD&gt;<br>&lt;/TR&gt;<br>&lt;/TABLE&gt;<br><br>border=1 cellpadding=1 cellspacing=1 bordercolor="black" style="border:1px solid black; border-collapse:collapse; color:black; font-size:10pt;"<br>border=1 cellpadding=1 cellspacing=1 bordercolor="black" style="border:1px solid black; border-collapse:collapse; color:color:#4B4B4B; font-size:10pt;"<br><br>
<img src ="http://www.cppblog.com/hktk/aggbug/97189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hktk/" target="_blank">海 阔 天 空</a> 2009-09-25 02:25 <a href="http://www.cppblog.com/hktk/archive/2009/09/25/97189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SuperPi的幕后细节</title><link>http://www.cppblog.com/hktk/archive/2009/09/24/97148.html</link><dc:creator>海 阔 天 空</dc:creator><author>海 阔 天 空</author><pubDate>Thu, 24 Sep 2009 10:12:00 GMT</pubDate><guid>http://www.cppblog.com/hktk/archive/2009/09/24/97148.html</guid><description><![CDATA[&nbsp;不可否认，SuperPi历史非常悠久，用的人之多，其他同类软件难以匹敌。但是对其有更多了解的人却很少，下面这些细节你可能都不知道：<br><br><font color=blue>1.SuperPi发布日期是平成７年（1996年）</font><br><br><font size=1>2.[もとのプログラムはFORTRANで書かれていますが、それをC言語に書き直しました。</font><br><font color=blue>原计划使用Fortran编写，最后使用C语言编写</font><br><br><font size=1>3.ガウス・ルジャンドルのアルゴリズムを採用しています</font><br><font color=blue>采用Gauss-Legendre算法</font><br><br><font color=blue>4.创造纪录使用的大型机器是HITAC&nbsp;S-3800/480(95年的配置啊，当时看来可是绝对地强悍啊):<br>　主記憶容量　　　&nbsp;：1792.75&nbsp;MB&nbsp;（主内存)<br>　拡張記憶容量　　&nbsp;：25120&nbsp;MB&nbsp;&nbsp;（扩展内存）</font><br><font color=red>アルゴリズム　　&nbsp;：ボールウェインの&nbsp;4&nbsp;次の収束アルゴリズム</font><br>使用算法：Borwein四次迭代算法<br><br><font color=red>注意!和SuperPi所用的算法并不相同！！<br>许多人都知道，开发SuperPi的作者用大型机跑出了42亿位的纪录，且都认为使用是和SuperPI一样的算法，但是事实并非如此！大家都是在以讹传讹！</font><br><br><font color=blue>6.Pentium&nbsp;66MHz计算104万位需要</font>&nbsp;<font color=maroon>1小时13分22秒</font><br><font color=blue>HITAC&nbsp;S-3800/480计算104万位大约只需要</font><font color=red>5秒</font>!<br><font color=blue>Pentium&nbsp;66MHz计算3355万位需要</font>&nbsp;<font color=maroon>105小时35分17秒</font><br><font color=blue>HITAC&nbsp;S-3800/480计算3355万位大约只需要</font><font color=red>4分钟</font>!<br><br>注意：由于使用算法和软件环境不同，大型机和PC没有绝对地可比性，况且还是95年的大型机，但是其性能优异在一定程度上是可以肯定的。<br>硬件和软件的发展都是很惊人的，1986年9月，创造42亿位纪录者之一的金田用HITAC&nbsp;S-810/20计算了3355万Pi值，这在当时就是一个世界记录了！但同年10月他们就把记录提高一倍到6千7百万位。<br>我用QPI使用SuperPi的AGM算法计算3355万位，花了3分47秒就完成了，就算是体验到当年大型机的速度了吧<img src="http://www1.pconline.com.cn/itbbs/080506/old/emot//em301.gif"><br><br><br><font color=blue>7.关于Gauss-Legendre算法和Borwein四次迭代算法,SuperPI也给出了详细的介绍：</font><br><br>SuperPI所采用的Gauss-Legendre算法：（PS:又叫做AGM算法（Arithmetic-Geometric&nbsp;Mean））<br>１．初值确定<br>　　&nbsp;a&nbsp;=&nbsp;1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;1&nbsp;/&nbsp;sqrt(&nbsp;2&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;1&nbsp;/&nbsp;4<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;1<br><br>２．&nbsp;a与b都取同样的精度，反复迭代计算下式：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;a<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;(&nbsp;a&nbsp;＋&nbsp;b&nbsp;)&nbsp;/&nbsp;2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;sqrt(&nbsp;b&nbsp;･&nbsp;y&nbsp;)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;t&nbsp;－&nbsp;x&nbsp;･&nbsp;(&nbsp;y&nbsp;－&nbsp;a&nbsp;)^2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;2&nbsp;･&nbsp;x<br><br>３．a和b迭代到足够精度后，根据下式可以计算出PI值<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pi&nbsp;=&nbsp;(&nbsp;a&nbsp;＋&nbsp;b&nbsp;)^2&nbsp;/&nbsp;(&nbsp;4&nbsp;･&nbsp;t&nbsp;)<br><br><font color=red>这个公式的特点是每迭代一次将得到比前一次迭代高一倍的精度，所以要计算104万位(2的22次方)，迭代19次就够了，这就是为什么SuperPi的计算为数都是以2的倍数递增，且计算时会出现一条条的纪录，这就是每一次迭代所花费的时间！理论上每次花费的时间都应该是完全相同的。比较可笑的是 SuperPi&nbsp;MOD版本的汉化翻译，把19次迭代翻译成需要重复计算19次，明显存在着理解上的错误。</font><br><br>计算42亿位的巨型机所使用的Borwein四次迭代式：<br>１．初值确定：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[0]&nbsp;=&nbsp;6&nbsp;－&nbsp;4&nbsp;･&nbsp;sqrt(&nbsp;2&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y[0]&nbsp;=&nbsp;sqrt(&nbsp;2&nbsp;)&nbsp;－&nbsp;1<br>&nbsp;&nbsp;&nbsp;<br>２．&nbsp;反复计算下式，提高精度<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y[k+1]&nbsp;=&nbsp;{&nbsp;1-(1-y[k]^4&nbsp;)^(1/4)&nbsp;}&nbsp;/&nbsp;{&nbsp;1+(1-y[k]^4)^(1/4)&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[k+1]&nbsp;=&nbsp;a[k]･(1+y[k+1])^4&nbsp;-&nbsp;2^(2･k＋3)･y[k+1]･(1+y[k+1]+y[k+1]^2)<br>&nbsp;&nbsp;<br>３．当a[n]和b[n]达到足够精度后，可以确定Pi值<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pi&nbsp;=&nbsp;1&nbsp;/&nbsp;a[n]<br>所以可以看出，该公式首先算出其实是Pi的倒数，算出a[n]后，要做一个&#8220;巨型&#8221;的除法才能得到真正的Pi值<br><br>另一方面必须要认识到，SuperPi的编写年代久远，现在看来实现的效率非常低。Qpi即使用完全同样的算法，在我的E6300机器上只需3.37秒就完成了104万位的计算的19次迭代！<br>计算过程(QPI4.5版&nbsp;使用-agm3参数，<font color=red>和SuperPi完全相同算法</font>&nbsp;E6300未超频&nbsp;Vista环境&nbsp;)：<br>Starting&nbsp;1st&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.13<br>Starting&nbsp;2nd&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;3rd&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.17<br>Starting&nbsp;4th&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;5th&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;6th&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;7th&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.17<br>Starting&nbsp;8th&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;9th&nbsp;&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.17<br>Starting&nbsp;10th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;11th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.17<br>Starting&nbsp;12th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;13th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;14th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.17<br>Starting&nbsp;15th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;16th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.19<br>Starting&nbsp;17th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.17<br>Starting&nbsp;18th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.17<br>Starting&nbsp;19th&nbsp;iteration,&nbsp;time&nbsp;:&nbsp;0.17<br><br>Total&nbsp;iteration&nbsp;time&nbsp;:&nbsp;3.37<br>Computing&nbsp;final&nbsp;value,&nbsp;time&nbsp;:&nbsp;0.14<br><br><font color=red>Total&nbsp;time&nbsp;:&nbsp;3.56&nbsp;seconds</font><br>Total&nbsp;memory&nbsp;used&nbsp;:&nbsp;12,003,171&nbsp;(11.45&nbsp;MB)<br><br>Processor&nbsp;utilization&nbsp;:&nbsp;128.98%<br><br>CPU 利用率达到了128.98%说明其利用了第二个核心的28.98%的效率，发挥了了一定的双核优势，但即使是完全单核执行应该也不会慢到哪里去，比起 SuperPi漫长的30秒计算几乎达到了10倍速，而这个成绩也比超频榜上的那些个发烫的成绩要快得多了，如果使用最快的chudnovsky算法，只要1.5秒便结束了104万的战斗....如果换成超频榜上的那些牛机，只需零点几秒便解决了！<br><br>不知道用SuperPi的人中有几个人知道Pifast，有几个知道Qpi，还有几个人两个都知道的<br><br>SuperPi在历史舞台上的地位是永远存在的，但是考验CPU速度，还是换更先进的算法和程序感觉会更好，更能体验飞速的感觉！看着SuperPi的排行榜，我仿佛看到了喷火的跑车发动机装在了拖拉机上...<br><br>你真的老了SuperPi...<br>别了SuperPi.... 
<img src ="http://www.cppblog.com/hktk/aggbug/97148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/hktk/" target="_blank">海 阔 天 空</a> 2009-09-24 18:12 <a href="http://www.cppblog.com/hktk/archive/2009/09/24/97148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>