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

[擂台] 平方数数字和

[复制链接]
发表于 2008-7-11 13:05:36 | 显示全部楼层
刚测试的
170后一个结果要240亿以上的筛选
呵呵
上次停在181了
不知道这次能越过181么
估计181以上要过千亿的筛选了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-7-11 13:05:50 | 显示全部楼层
我觉得对于充分大的数据,应该是会出现0的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 13:20:42 | 显示全部楼层


一个月内是看不到的了
你有强力的机器么
只要1000个亿的运算速度
64位的CPU
512G的内存
那样估计运算一个星期能接近到10^32
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 14:39:14 | 显示全部楼层
过了181了
但已经搜索了7个双字的数据了
还没新的数据出现
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 16:47:32 | 显示全部楼层
184    057997787999988988979689
187    059668999996988999989969

184和181距离达到了25个多双字
就是说搜索了超过一千个亿的数字的平方
呵呵
恐怖阿

Current: 085297744596832966672384
最后搜索到上面的位置
被我复制Ctrl-C给搞停止了
哈哈
windows下的习惯阿

已经接近了10^23了
呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 17:00:53 | 显示全部楼层


另外
考虑是否以10^6为进位单位
可节约点加法时间
再辅助以SSE2汇编
我想能否增加到原来的搜索速度的两倍呢?
==================
不过如果以字为单位,10000为进制
10^32内数字正好是8个字
符合一个128 SSE寄存器的要求
一个加法就搞定了
呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 18:45:22 | 显示全部楼层
提高速度可以加大每个 LIMB 的位数,比如从当前的4位,提高为6位、8位,甚至更高;
但所需的 table[] 的 size 就相应的迅速增加,
根据先前的经验(比如分段筛素数),太大的数组不利于 CPU cache 的使用,应避免。

反过来,table[] 的 size 缩减也可通过改变数据类型解决,
比如从当前的 UINT32 改为 BYTE,
即便为后者,亦可使每个 LIMB 最大甚至达到64bit,因为 $9 xx log_10(2^64) < 9 xx 20 < 256$。
但是,在32bit OS中,DWORD 与 BYTE 哪个更快?

这个问题似乎很难用 SIMD 加速,难点主要在于有进位问题,想必大家已深有体会。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-11 19:10:26 | 显示全部楼层
目前x86 CPU
双字快于字节,字节快于字
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-14 08:12:05 | 显示全部楼层
这是 72# 代码,从上周六下午5:00起运行到今天早上7:30止的输出结果(历时38.5h,强行中断):
00:00:00.000        X = 1                S = 1
00:00:00.000        X = 4                S = 4
00:00:00.000        X = 9                S = 9
00:00:00.000        X = 7                S = 16
00:00:00.000        X = 13                S = 49
00:00:00.000        X = 10                S = 64
00:00:00.000        X = 16                S = 169
00:00:00.000        X = 19                S = 289
00:00:00.000        X = 18                S = 576
00:00:00.000        X = 22                S = 1849
00:00:00.000        X = 27                S = 3969
00:00:00.000        X = 25                S = 4489
00:00:00.000        X = 31                S = 6889

****** Searched all perfect squares less then 10^4 ******

00:00:00.000        X = 28                S = 17956
00:00:00.000        X = 34                S = 27889
00:00:00.000        X = 36                S = 69696
00:00:00.000        X = 40                S = 97969
00:00:00.000        X = 37                S = 98596
00:00:00.000        X = 43                S = 499849
00:00:00.000        X = 46                S = 698896
00:00:00.000        X = 45                S = 1887876
00:00:00.000        X = 49                S = 2778889
00:00:00.000        X = 52                S = 4999696
00:00:00.000        X = 54                S = 9696996
00:00:00.000        X = 55                S = 19998784
00:00:00.000        X = 58                S = 46689889
00:00:00.000        X = 61                S = 66699889
00:00:00.000        X = 63                S = 79869969

****** Searched all perfect squares less then 10^8 ******

00:00:00.000        X = 64                S = 277788889
00:00:00.000        X = 67                S = 478996996
00:00:00.000        X = 70                S = 876988996
00:00:00.001        X = 73                S = 1749999889
00:00:00.001        X = 72                S = 3679999569
00:00:00.001        X = 76                S = 5599977889
00:00:00.002        X = 79                S = 7998976969
00:00:00.002        X = 81                S = 8998988769
00:00:00.003        X = 82                S = 17999978896
00:00:00.004        X = 85                S = 36799899889
00:00:00.007        X = 88                S = 88998998929
00:00:00.013        X = 90                S = 297889998849
00:00:00.013        X = 91                S = 299879997769
00:00:00.023        X = 94                S = 897977978689
00:00:00.023        X = 97                S = 975979998889

****** Searched all perfect squares less then 10^12 ******

00:00:00.045        X = 100                S = 2699997789889
00:00:00.056        X = 99                S = 3957779999889
00:00:00.094        X = 103                S = 9879498789889
00:00:00.094        X = 106                S = 9998768898889
00:00:00.174        X = 108                S = 29998985899689
00:00:00.303        X = 109                S = 85986989688889
00:00:00.324        X = 112                S = 97888999968769
00:00:00.643        X = 115                S = 386999898769969
00:00:00.680        X = 117                S = 429998989997889
00:00:00.793        X = 118                S = 578889999977689
00:00:00.991        X = 121                S = 898999897988929
00:00:01.446        X = 124                S = 1959999889996996
00:00:01.947        X = 127                S = 3699998989898689
00:00:02.648        X = 126                S = 6788999798879769
00:00:03.409        X = 130                S = 9895699989899689

****** Searched all perfect squares less then 10^16 ******

00:00:07.295        X = 133                S = 38896878989988889
00:00:07.305        X = 136                S = 38999699989995889
00:00:09.770        X = 135                S = 67699789959899889
00:00:16.520        X = 139                S = 188997899869998769
00:00:20.123        X = 142                S = 279869897899999969
00:00:26.869        X = 144                S = 498999778899898896
00:00:37.941        X = 148                S = 989879999979599689
00:00:52.302        X = 145                S = 1877896979979898969
00:01:32.808        X = 153                S = 5899989587897999889
00:01:40.930        X = 151                S = 6979497898999879969
00:01:54.009        X = 154                S = 8899988895999696889
00:03:25.862        X = 157                S = 28979978999958969889
00:05:39.988        X = 160                S = 78897999969769888996
00:05:59.087        X = 162                S = 87989899898866889889

****** Searched all perfect squares less then 10^20 ******

00:09:29.659        X = 163                S = 199989299899788979969
00:14:49.937        X = 166                S = 449998999899988698769
00:20:04.779        X = 171                S = 789899899796987988996
00:22:27.659        X = 169                S = 969988797999759789889
00:44:30.277        X = 172                S = 3599979999987777888889
00:52:09.701        X = 175                S = 4899976999986989889796
01:10:51.428        X = 178                S = 8889998799995887887889
01:14:53.205        X = 180                S = 9899698989999989958489
01:41:50.523        X = 181                S = 17989999975899879969889
03:07:21.670        X = 184                S = 57997787999988988979689
03:10:10.325        X = 187                S = 59668999996988999989969
06:53:10.902        X = 189                S = 289959998978968689899889
10:25:03.810        X = 190                S = 649969889997895999999489
11:56:20.077        X = 193                S = 857799969779899989969889

****** Searched all perfect squares less then 10^24 ******

17:18:44.406        X = 196                S = 1679898987989978888999689
27:16:36.456        X = 198                S = 3899689979989899957996996
30:49:37.180        X = 199                S = 4899999899498984599899889


其中,运行出 无心人 之前的最大结果 X=187,耗时为:3h10m10.325s

其实,72# 代码还可进一步优化,比如采用将循环展开,用函数指针切换技术。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-7-14 08:19:28 | 显示全部楼层
哈哈

你没保存状态阿
多运行的8小时你也不知道
运行到哪里了阿

我是每隔2^32就输出一次当前平方的

这个问题
我觉得应该这么做
一旦遇到结果
就打开文件写进去
再马上关闭,省得文件内容丢失

然后每隔一个阶段,再写一个状态到其他文件
另外,程序增加读状态功能

启动后自动读状态
呵呵

================
另外,不知道linux如何计时和输出?呵呵
GxQ老想知道我的运算时间是多少,嘿嘿

[ 本帖最后由 无心人 于 2008-7-14 08:25 编辑 ]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-4-26 17:09 , Processed in 0.043444 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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