1.inline
内联函数,在调用处直接将函数体替换,少一次函数调用。
2.constexpr constexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式
3 #define pi 3.14159f; 如果不加最后的f 则pi的类型将会是double,他参与计算的表达式也将默认变为double类型,在cuda中会严重影响性能,至少你可能是希望32位浮点下的计算,一不小心变双精度浮点了。
4 #program unroll 强制for循环展开,一般应用于判断语句比较简单,且执行次数编译期就可知的情况,比如下面。
int sum=0;
for(int i=0;i<100;i++)
{
sum+=pow(3,i);
}
5__restrict
当对指针增加 __restrict 修饰之后,表示当前指针在存活期间是独占内存的,不会有其他指针指向这个地址。编译器在知道这个信息之后,就可以做出优化,从而提升性能。
用对象指针来调用一个函数,有以下两种情况:
- 如果是虚函数,会调用派生类中的版本。
- 如果是非虚函数,会调用指针所指类型的实现版本。