来自炼数成金罗老师的课
- 并行编程的通讯模式(Communication Patterns)
1.1 什么是通讯模式
并行计算:很多线程的通力合作来解决一个问题。拿For循环距离,比如一个For循环循环一百次,CPU的话就是这100次一次一次的执行,但是GPU的话是这100次同时执行。
并行模式:1.同时读取同个位置。2.所有循环都往一个地方写数据。3. 不同的数据位置,还有一部分内容或结果是需要交换的。
最常见的通讯模式分别有:
1. 映射(Map):输入输出关系:一一对应(one-to-one)。例子:每个元素倍数扩大,y[i]=3*x[i]
2. 聚合(gatter):输入输出关系:多对一(many-to-one),例如,每相邻三个元素求平均,y[i]=(x[i-1+x[i]+x[i+1]])/3。gather模型在图像领域用的非常多。
3. 分散(scatter):与gatter对应,输入输出关系:一对多(one-to-many)不一定读入的值一个是一个,但一定是比输出的值少一些。
4. 模板(stencil):以固定的模式读取相邻的内存数值。输入输出关系:serveral-to-one
5.转置:输入输出关系:一对一(one-to-one)
6. 压缩reduce:输入输出关系:多对一(all-to-one)
输入输出关系:多对一(all-to-one)
7. 重排scan/sort,输入输出关系:多对多
1.2通讯模式的类型和原理