__restrict__的作用

读风辰大大的代码看到__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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值