Parallel Programming Abstractions
single program, multiple data
SPMD这个定义还是第一次听到,我在Intel ispc的官网找到了这一定义:https://ispc.github.io/ispc.html
The main idea behind SPMD is that one writes programs as if they were operating on a single data element (a pixel for a pixel shader, for example), but then the underlying hardware and runtime system executes multiple invocations of the program in parallel with different inputs (the values for different pixels, for example).
说白了就是让程序员写出如同处理单个数据的并行程序
ISPC sinx
c++ 版本的sinx函数:
可以看到,main函数调用sinx,然后等待计算完成,这个sinx函数是一个完全串行程序
但是我们可以使用ispc写出并行程序,ispc会生成一个gang,gang就是多个program instance
的集合。这里我的理解,program instance
不应该当做一个线程或者simd中一条lane,虽然它实际上就是simd化,但是我们思考的时候应该把其理解为处理单个数据的program instance
iterleaved
program instance
assign数据的方式是interleaved方式,ISPC也是使用这种assign方式
blocked
一个instance连续处理多个数据
抽象和实现
spmd是编程的抽象,程序员应该把gang多做逻辑上的多个指令流,同时运行多个程序实例
simd是ispc的实现,ispc将condition之类的判断变为simd中的mask
三种并行编程模型
共享内存
抽象和实现:
- 不同线程读写同一块共享内存,线程间通信可以使用load store
- 需要各种同步原语
Message passing
Data-parallel model
Parallel Programming Basics
Amdahl’s Law
amdahl's law 定义了并行处理的最大加速比
S = 内在串行执行比例
最大并行加速度 \(\le 1/S\)
标签:02,sinx,CS149,并行,instance,program,抽象,simd,ispc From: https://www.cnblogs.com/kalicener/p/16858962.html