免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wuxb45
打印 上一主题 下一主题

[C] 很大的int数组值初始化为其index,如何做比较快呢? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-06-25 08:59 |只看该作者
根据你的机器cpu的核数开相应的线程,并把数组平均分配,比如四个核,就是四个线程,数组的长度为400万,则 ...
rain_fish 发表于 2010-06-25 08:53


本质上来讲还是用循环么,只不过占用了更多的CPU显得速度变快了。在内存中保存副本然后memcpy的方法似乎比较合理,如果需要频繁赋值的话

论坛徽章:
0
12 [报告]
发表于 2010-06-25 09:06 |只看该作者
本质上来讲还是用循环么,只不过占用了更多的CPU显得速度变快了。在内存中保存副本然后memcpy的方法似乎 ...
InfoHunter 发表于 2010-06-25 08:59



    如果初始化次数很多,这也是个办法

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
13 [报告]
发表于 2010-06-29 10:48 |只看该作者
你可以用脚本生成源代码,然后再编译。虽然这样做程序会比较大,但是速度肯定是最快的
starwing83 发表于 2010-06-24 18:24



    好办法。

论坛徽章:
0
14 [报告]
发表于 2010-06-29 14:41 |只看该作者
本帖最后由 ljt2k 于 2010-06-29 14:43 编辑

前期就生成好数据文件,然后一次读取,应该很快。
几百万,也就几M吧,一秒种都不用。

论坛徽章:
0
15 [报告]
发表于 2010-06-29 16:06 |只看该作者
5楼和14楼的方法均不可取,请记住磁盘是低速IO,内存是高速IO,其差别是数量级的,加载磁盘中预生成数据或者由脚本生成的初始化百万条记录的硬编码指令的时间,与内存的写入时间相比,是云泥之别。

认为有比我在9楼发的方法更优的请赐教。

论坛徽章:
0
16 [报告]
发表于 2010-06-29 16:22 |只看该作者
本帖最后由 ljt2k 于 2010-06-29 16:25 编辑
5楼和14楼的方法均不可取,请记住磁盘是低速IO,内存是高速IO,其差别是数量级的,加载磁盘中预生成数据或者 ...
没本 发表于 2010-06-29 16:06



用awk 测了一下,磁盘更快啊?
显然i++是很耗时的:

<396 >time b.sh
0.2u 0.0s 0:00 95% 2+5k 0+0io 1pf+0w
<397 >time a.sh
1.6u 0.0s 0:01 99% 1+3k 0+0io 0pf+0w
<398 >cat a.sh
echo ""| awk '{ for(i=0;i<2106172;i++) {j=i} }'
<399 >cat b.sh
awk '{ j=$0 }' a.txt
<400 >ls -al a.txt
-rw-r-----   1 gdscu    tellin      8424688 Jun 29 16:13 a.txt
<401 >

论坛徽章:
0
17 [报告]
发表于 2010-06-29 16:27 |只看该作者
回复 16# ljt2k


    请不要把脚本程序和C程序混为一谈,同样速度不是一个量级的。有兴趣比较的话,这里有他们之间的差距的比较。

http://shootout.alioth.debian.or ... php?test=threadring

论坛徽章:
0
18 [报告]
发表于 2010-06-29 16:59 |只看该作者
回复  ljt2k


    请不要把脚本程序和C程序混为一谈,同样速度不是一个量级的。有兴趣比较的话,这里有 ...
没本 发表于 2010-06-29 16:27


我没有说awk快,还是C快,当然没法比。
我只是用awk试了一下两种方式的结果,从awk的测试看,load预先生成的文件,比实时计算数据快。
你也可能用C试一下,我相信结果和脚本是一样的。

你想一下,如果把数据量放大,如果读取1000万个字节(38M)的数据,和让CPU运算1000万次,应该是加载更快吧?
我说的先生成文件的做法,是让运算的过程提前来完成,节省的正是这一段时间。

论坛徽章:
0
19 [报告]
发表于 2010-06-29 17:03 |只看该作者
回复 18# ljt2k


    我前面已经写清楚了,你相信就继续相信吧,无所谓。

论坛徽章:
0
20 [报告]
发表于 2010-06-29 17:05 |只看该作者
memcpy快吗 memcpy是字节copy 如果是long型的 没有直接=快吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP