#pragma unroll的作用
·
循环展开
循环展开是一种编译器的优化手段,示例如下:
constexpr int N = 5;
for ( int i = 0; i < N; i++ )
b[i] = i;
当加入循环展开后变成:
b[0] = 0;
b[1] = 1;
b[2] = 2;
b[3] = 3;
b[4] = 4;
循环展开的好处
避免不必要的指令
比如每次i的初始化,每次做一个判断,还有i++的计算,一旦展开后全部没有了,第二就是当循环里有load数据和计算数据的话,展开后可以让这两个pipe并行执行,隐藏延迟
使用场景
需要N是常量,不然编译器不认识,没法展开,这个在CPU和GPU上优化都是通用的,再说一次他是编译器层面的优化
更多推荐

所有评论(0)