#pragma unroll,减少循环控制的开销,如条件判断、分支跳转、计数器更新;提高指令级并行.

__builtin_assume(cond) 向编译器断言表达式 cond 在此时为 true,编译器可能启用特定优化

__restrict__ 应用于指针声明,向编译器承诺 __restrict__ 修饰的指针是数据唯一的访问途径。免除 aliasing 导致保守优化.

__const__ 将数据放在常量内存,支持广播机制

__ldg() 通过纹理内存或者只读内存缓存

编译器选项

-prec-div=false 禁用高精度除法对除法进行加速,但是牺牲精度

-ftz=true

-use_fast_math 近似计算数学函数,精度换速度

-maxrregcount=N 限制线程寄存器使用数量

-Xptxas -v 输出编译信息

-Xptxas -dlcm=<> 控制 L1 缓存的行为,影响内存访问性能

  1. ca (Cache All)
  2. cg (Cache Global)
  3. cs (Cache Streaming)