首先归纳评估gpu计算的两个标准:
step:完成特定计算需要的时间
work:工作总量
当计算 a+b+c+d+e+f+g+...时
串行的step的复杂度为O(N-1)
并行的step时间复杂度为O(logn)
Scan运算:
Scan运算由输入向量、二元结合运算符和标识值组成。
identity element:标识值:标识值需要满足 identity op a=a; 例如 op为乘的时候,i为1.
op:二元结合运算符。
Scan运算分为两种,这两种是非常重点的,在课堂上迷迷糊糊听老师讲耳朵被灌输了不下于n次。
第一种:exclusive
区别(exclusive的输出不包含当前的输入值)
第二种:inclusive
下面来计算exclusive和inclusive的step和work的时间复杂度
inclusive scan:
step的时间复杂度与reduce相同,都是O(logn),具体过程不再复述
work的时间复杂度是O()。过程是因为每一步都存在累加,1+2+3+4+...+n-1
时间复杂度太大,下面提出改进方法:
Hills steele inclusive scan:
具体看链接:
【Udacity并行计算课程笔记】- Lesson 3 Fundamental GPU Algorithms (Reduce, Scan, Histogram)-优快云博客
得出横向时间复杂度为O(n),纵向step复杂度为O(logn),所以总的work时间复杂度为O(nlogn)
Blelloch Scan:
具体看链接
【Udacity并行计算课程笔记】- Lesson 3 Fundamental GPU Algorithms (Reduce, Scan, Histogram)-优快云博客
得出step的复杂度为O(2logn),work的时间复杂度为O(n)
不过确实难理解,blelloch Scan