学习笔记之c

来源:互联网 发布:网络棋牌赌博怎么判刑 编辑:程序博客网 时间:2024/04/30 03:13
转帖: 

关键字restrict的使用:

如下程序:两个均完成2个16位短型数据数组的矢量和

程序1:

void vecsum( short *sum, short *in1, short *in2, unsigned int N)

{

  int i;

  for(i=0;i<N;i++)

  sum[i]=in1[i]+in2[i];

}

程序2:

void vecsum(short * restrict sum, restrict short * in1, restrict short * in2,unsigned int N)

{

 int i;

 for (i=0;i<N;i++)

  sum[i]=in1[i]+in2[i];

}

编译器在编译程序1时,无法判断指针*sum与指针*in1,*in2是否独立。此时,编译器采取保守的办法,认为他们是相关的,即:认为*sum指向的存储区与*in1,in2指向的存储区可能混迭。这时编译出的代码必须执行完前一次写,然后才能开始下一次读取。在编译程序2的时候restrict表明指针*in1,*in2是独立的,*sum不会指向他们的存储区,因而可以并行进行多个数据的读取与求和。这两种程序编译出的代码执行速度相差极大。

原创粉丝点击