免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2010-06-29 17:08 |只看该作者
memcpy快吗 memcpy是字节copy 如果是long型的 没有直接=快吧
qianhulou 发表于 2010-06-29 17:05


= 怎么实现?

论坛徽章:
0
22 [报告]
发表于 2010-06-29 17:09 |只看该作者
intel指派了专门的程序员每个版本都在为glibc2优化memcpy系列函数及宏。你有intel i7处理器会更快。

论坛徽章:
0
23 [报告]
发表于 2010-06-29 17:23 |只看该作者
这个月26号刚又对i7更新的:
http://old.nabble.com/PATCH%3A-I ... -i7-to28997180.html

下面是glibc2.11的
2010-01-12  H.J. Lu  <hongjiu.lu@intel.com>

        * sysdeps/i386/i686/bcopy.S: New file.

        * sysdeps/i386/i686/cacheinfo.c (__x86_64_data_cache_size): Define.

        * sysdeps/i386/i686/memcpy.S (__memcpy_chk): Use ENTRY_CHK
        and END_CHK.
        * sysdeps/i386/i686/memmove.S (__memmove_chk): Likewise.
        * sysdeps/i386/i686/mempcpy.S (__mempcpy_chk): Likewise.
        * sysdeps/i386/i686/memset.S (__memset_chk): Likewise.

        * sysdeps/i386/i686/memmove.S: Support USE_AS_BCOPY.

        * sysdeps/i386/i686/multiarch/Makefile (sysdep_routines): Add
        bzero-sse2 memset-sse2 memcpy-ssse3 mempcpy-ssse3 memmove-ssse3
        memcpy-ssse3-rep mempcpy-ssse3-rep memmove-ssse3-rep
        bcopy-ssse3 bcopy-ssse3-rep memset-sse2-rep bzero-sse2-rep
        * sysdeps/i386/i686/multiarch/bcopy-ssse3-rep.S: New file.
        * sysdeps/i386/i686/multiarch/bcopy-ssse3.S: New file.
        * sysdeps/i386/i686/multiarch/bcopy.S: New file.
        * sysdeps/i386/i686/multiarch/bzero-sse2-rep.S: New file.
        * sysdeps/i386/i686/multiarch/bzero-sse2.S: New file.
        * sysdeps/i386/i686/multiarch/bzero.S: New file.
        * sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S: New file.
        * sysdeps/i386/i686/multiarch/memcpy-ssse3.S: New file.
        * sysdeps/i386/i686/multiarch/memcpy.S: New file.
        * sysdeps/i386/i686/multiarch/memcpy_chk.S: New file.
        * sysdeps/i386/i686/multiarch/memmove-ssse3-rep.S: New file.
        * sysdeps/i386/i686/multiarch/memmove-ssse3.S: New file.
        * sysdeps/i386/i686/multiarch/memmove.S: New file.
        * sysdeps/i386/i686/multiarch/memmove_chk.S: New file.
        * sysdeps/i386/i686/multiarch/mempcpy-ssse3-rep.S: New file.
        * sysdeps/i386/i686/multiarch/mempcpy-ssse3.S: New file.
        * sysdeps/i386/i686/multiarch/mempcpy.S: New file.
        * sysdeps/i386/i686/multiarch/mempcpy_chk.S: New file.
        * sysdeps/i386/i686/multiarch/memset-sse2-rep.S: New file.
        * sysdeps/i386/i686/multiarch/memset-sse2.S: New file.
        * sysdeps/i386/i686/multiarch/memset.S: New file.
        * sysdeps/i386/i686/multiarch/memset_chk.S: New file.

        * sysdeps/i386/sysdep.h (ENTRY_CHK): New.
        (END_CHK): Likewise.

        * sysdeps/i386/i686/multiarch/ifunc-defines.sym: Add
        FEATURE_OFFSET, FEATURE_SIZE and FEATURE_INDEX_1.
        * sysdeps/x86_64/multiarch/ifunc-defines.sym: Likewise.

        * sysdeps/x86_64/cacheinfo.c (intel_02_cache_info): Add entries
        for 0x0e and 0x80.
        (__x86_64_data_cache_size): New.
        (init_cacheinfo): Set __x86_64_data_cache_size.

        * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): Turn
        on bit_Fast_Rep_String for Intel Core i7.

        * sysdeps/x86_64/multiarch/init-arch.h (bit_Fast_Rep_String): New.
        (index_Fast_Rep_String): Likewise.
        (FEATURE_INDEX_1): Likewise.
        (FEATURE_INDEX_MAX): Likewise.
        (cpu_features): Add feature.

论坛徽章:
0
24 [报告]
发表于 2010-07-02 12:52 |只看该作者
回复 9# 没本


    的确,我暂时就是这样简简单单地做了。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
25 [报告]
发表于 2010-07-07 06:44 |只看该作者
5楼和14楼的方法均不可取,请记住磁盘是低速IO,内存是高速IO,其差别是数量级的,加载磁盘中预生成数据或者 ...
没本 发表于 2010-06-29 16:06



    有一样东西叫做内存映射文件……你以为人家载入应用程序是傻乎乎的全部一次性地载入内存啊……

论坛徽章:
0
26 [报告]
发表于 2010-07-07 07:45 |只看该作者
如果对速度要求非常高,楼主可以自己把这段用汇编写。另外,我个人感觉楼主说的数据大,貌似感觉不出来。呵呵

论坛徽章:
0
27 [报告]
发表于 2010-07-07 08:15 |只看该作者
回复 23# 没本


    觉得100万长度的数组,这个在大型项目中,正常不?。。。,我怎么觉得当程序里面,有个100万长的数组,怎么初始化,也不太重要了。。

论坛徽章:
0
28 [报告]
发表于 2010-07-07 10:41 |只看该作者
有一样东西叫做内存映射文件……你以为人家载入应用程序是傻乎乎的全部一次性地载入内存啊……
starwing83 发表于 2010-07-07 06:44



    你以为有了内存映射文件,磁盘IO就不需要读入那么多字节了么?磁盘物理读盘的时间是固定的,可测量的。有个成语叫朝三暮四。

论坛徽章:
0
29 [报告]
发表于 2010-07-07 10:44 |只看该作者
回复  没本


    觉得100万长度的数组,这个在大型项目中,正常不?。。。,我怎么觉得当程序里面,有 ...
peidright 发表于 2010-07-07 08:15



    是对,我在9楼说过的。上面23楼是回答质疑memcpy还不如=赋值快的朋友。

如果这是做一遍的初始化,用循环就行了,偶尔的开销不会造成性能瓶颈。如果这是频繁的调用,可以在内存里存一份副本,需要时直接memcpy。
没本 发表于 2010-06-25 08:48

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
30 [报告]
发表于 2010-07-07 11:56 |只看该作者
同学,载入的时候是成块载入的,你觉得会比一个个地慢么?而且是用多少载入多少,不用根本不载入,这么多元素都一定会同时一次性全部访问到?如果那样初始化就绝对不是瓶颈了,因为还有个cache的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP