CUDA分支优化
来源:互联网 发布:雅迅网络股份有限公司 编辑:程序博客网 时间:2024/06/05 00:12
在CUDA中,分支会极大的减弱性能,因为SM没有分支预测,因此只能让束内线程在每个分支上都执行一遍,当然如果某个分支没有线程执行,就可以忽略,因此要减少分支的数目。可以简单的说:
1. 同一个warp中的所有线程执行相同的命令。
2. 并不是所有线程都会执行。
产生分支的一个常见场景就是if,else
语句的使用,比如常用的边界判定。下面从一个实力说起。看如下代码:
int tid = threadIdx.x; if(tid == 0) var = var + 1; else var = var + 2; var = 3 * var;
上述代码在一个warp中执行的情况如下图所示:
- 第一行所有线程执行
int tid = threadIdx.x;
。 - 所以第二行
if(tid == 0) var = var + 1
判断,由于只有线程0执行var = var + 1;
- 第三行是线程0到线程31执行
else var = var + 2;
- 第四行所有线程执行
var = 3 * var;
上述代码有两个方面的缺陷:
1. cuda线程执行if,else
语句的效率非常低。
2. 由于判断产生了分支,导致第二行和第三行是串行执行的。
解决方法:
1. 通过查找表去掉分支
2. 通过计算去掉分支,例如:上述代码可以转换为:var = 3*(var+1+(var>0))
因此,我们在编程的时候要尽量是warp块完美对齐,也就是说一个warp里都满足条件或者都不满足条件,如果实在无法对齐,也就是说产生分支的时候,可以用上述的方法解决分支问题。
0 0
- CUDA分支优化
- CUDA分支优化
- cuda编程优化小技巧之分支优化
- CUDA优化
- cuda优化
- CUDA优化
- cuda优化
- CUDA 学习(十九)、优化策略4:线程使用、计算和分支
- CUDA ---2 分支控制,变量
- CUDA: CUDA程序优化步骤
- CUDA程序性能优化
- CUDA程序优化
- CUDA程序优化
- CUDA 矩阵乘法优化
- cuda优化要点
- cuda优化策略
- CUDA: 矩阵乘法优化
- CUDA程序优化技巧
- UNIX环境高级编程学习笔记(九)进程控制
- Linux大内存页Oracle数据库优化
- 职场气度的养成
- 黑马程序员——JAVA基础------IO流(四)----字节字符转换流和缓冲流
- 学习笔记之Myeclipse学习笔记(二)_MyEclipse跟踪调试
- CUDA分支优化
- LAMP详细搭建及配置
- 【Struts2七】struts2获取表单元素的两种方式
- Android 下拉刷新框架实现
- maven依赖包 打包
- Webservice 封装为 Thread 在主线程进行调用--Android
- 常见面试题之ListView的复用及如何优化
- AdapterView与Adapter(四) --App调试内存泄露之Cursor
- 一个不错的shell 脚本教程 入门级