CUDA循环展开
串行循环展开
loop unrolling是一种牺牲程序的尺寸来加快执行速度的优化方法。拿数组来说,数组的数据在内存中是连续存储的,每次取数据的时候可以一次抓取相邻的多个数据,从而减少从内存中读取数据的时间,优化程序。 例子 :
假设n可以被4整除
未展开程序
for(int i = 0; i < n; i++){
c[i] = a[i] + b[i];
}
4层展开程序
for(int i = 0; i < n/4; i++){
c[i] = a[i] + b[i];
c[i+1] = a[i+1] + b[i+1];
c[i+2] = a[i+2] + b[i+2];
c[i+3] = a[i+3] + b[i+3];
}
GPU并行循环展开
在GPU上,同样的也可以进行循环展开优化, 更重要的是展开可以减少warp总得分支,下面是一个简单的程序,将value写入out的N个元素中。
global_write函数未展开版:
template <class T>
__global__ void Global_write(T*out,T value,size_t N){
for ( size_t i = block

本文主要探讨了CUDA编程中的循环展开技术,包括串行循环展开和GPU并行循环展开,并通过一个向量运算的例子——计算out=alpha*x+beta*y,来阐述其在加速计算中的应用。

860

被折叠的 条评论
为什么被折叠?



