#pragma UNROLL 4
来源:互联网 发布:美国 量子计算机 知乎 编辑:程序博客网 时间:2024/05/23 05:06
语法:
#pragma UNROLL(n)
#pragma UNROLL告诉编译器一个循环中应该展开n次(其实我觉得是告诉编译器循环展开n次是安全的),有助于对那些不容易展开的循环有更大概率的进行软件流水。
其实很多很多时候编译器会自动判断各种信息,但是这增加了冗余开销,反倒不如直接把我们优化工程师知道的东西告诉编译器。
例:
int JackeryTest [160];
#pragma unroll(4)
for(int i=0;i<160;i )
{
JackeryTest [i]=i;
}
此处你应该知道在GPU处理过程中,对像素点的操作是并行操作的,所以在Shader中,可以看到这样的处理方式,来提高程序执行效!上面代码就告诉了编译器循环中展开4次并行执行的循环是安全的,如果编译器的软件流水可以顺利打开且不考虑软件流水填充和排空,那么上面代码就相当于如下代码并行执行,
for(int i=0;i<160;i +=4)
{
JackeryTest [i]=i; //并行
JackeryTest [i +1]=i +1; //并行
JackeryTest [i +2]=i +2; //并行
JackeryTest [i +3]=i +3; //并行
}
注意:
(1) 循环的次数是n的整数倍
(2) 其实一般都是和#pragma MUST_INTERATE配合使用,这样可以更全面的告诉编译器我们知道的信息,以使编译器有效开通软件流水。
(3) #pragma MUST_INTERAT(1)告知编译器不要进行循环展开。
(4) 不要使用多条#pragma MUST_INTERAT语句,这样做的话编译器不一定执行的是那条#pragma MUST_INTERAT
(5) 如果设置了-O1,-O2,-O3等编译选项则#pragma UNROLL(n)的设置是无效的
- #pragma UNROLL 4
- #pragma unroll
- #pragma unroll的用法
- #pragma unroll的用法
- #pragma unroll的用法
- #pragma unroll的用法
- pragma UNROLL的用法
- #pragma unroll的用法
- 【并行计算-CUDA开发】#pragma unroll伪编译指令的使用
- #pragma
- Pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- #pragma
- 字符编码笔记:ASCII,Unicode和UTF-8
- shell中的一些预算,变量标识符
- Python Intro - C/C++ Extension
- 关于分离线程
- JMX学习<二>
- #pragma UNROLL 4
- 关于ocx的一些东西
- 编程之美6:数组循环移位
- LeetCode:Maximum Product Subarray
- Ecshop之PHP调试环境搭建
- Linux进程间通信——使用数据报套接字
- Android中全屏或者取消标题栏
- setAnimationStyle实现的popwindow…
- 使android:fillAfter="true"在xml…