+ -
当前位置:首页 → 问答吧 → 很大的int数组值初始化为其index,如何做比较快呢?

很大的int数组值初始化为其index,如何做比较快呢?

时间:2010-06-24

来源:互联网

  1. for(i=0;i<N;i++){
  2.   buf[i]= i;
  3. }
复制代码
因为这个缓冲很大,比如有一百万个值。
用并行来填吗?
我想找一种比较轻量级的比较简洁的效率还高的方法。

我觉得用openmp应该不错,但是现在是在串行效率上考虑,先不考虑并行

作者: wuxb45   发布时间: 2010-06-24

buf怎么用?

直接buf[i] = -1(这一步调用memset,速度最快,内部用汇编写就)

用的时候if (buf[i] == -1) return i; else return buf[i];

作者: starwing83   发布时间: 2010-06-24

或者直接

int buf[N] = {};

用的时候

if (buf[i] == 0) return i; else buf[i];

也行,不过对buf[0]来说逻辑不太一样。

作者: starwing83   发布时间: 2010-06-24

buf是内部的还是外部的?
外部的话:
int buf[] = {0,1,2,3,4, ..., N};

作者: unistd   发布时间: 2010-06-24

你可以用脚本生成源代码,然后再编译。虽然这样做程序会比较大,但是速度肯定是最快的

作者: starwing83   发布时间: 2010-06-24



QUOTE:
因为这个缓冲很大,比如有一百万个值。
用并行来填吗?
我想找一种比较轻量级的比较简洁的效率还高的方法 ...
wuxb45 发表于 2010-06-24 18:07




    现在的机器,100W次基本感觉不到啥,这个初始化的时间与你使用这个数组的其他代码相比更不算啥了。

作者: hellioncu   发布时间: 2010-06-24

本帖最后由 masonzhang 于 2010-06-24 19:57 编辑

巨型缓冲机制 必须是在硬件上做文章。

作者: masonzhang   发布时间: 2010-06-24