__restrict__的作用

  • Post author:
  • Post category:其他


读风辰大大的代码看到__restrict__,发现nvcc早就支持这个编译优化提示了,可是没看到哪本书讲过。

NV手册上说明与C99引入的restrict是相同特性,下面转自百度百科:

restrict是c99引入的,它只可以用于限定指针,并表明指针是访问一个数据对象的唯一且初始的方式.

考虑下面的例子:  int ar[10];  int * restrict restar=(int *)malloc(10*sizeof(int));  int *par=ar;  这里说明restar是访问由malloc()分配的内存的唯一且初始的方式。par就不是了。  那么:  for(n=0;n<10;n++)  {  par[n]+=5;  restar[n]+=5;  ar[n]*=2;  par[n]+=3;  restar[n]+=3;  }  因为restar是访问分配的内存的唯一且初始的方式,那么编译器可以将上述对restar的操作进行优化:  restar[n]+=8;  而par并不是访问数组ar的唯一方式,因此并不能进行下面的优化:  par[n]+=8;  因为在par[n]+=3前,ar[n]*=2进行了改变。使用了关键字restric,编译器就可以放心地进行优化了。  这个关键字据说来源于古老的FORTRAN。



版权声明:本文为linxxx3原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。