CS149笔记02并行抽象

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函数:

image-20221104170427613

可以看到,main函数调用sinx,然后等待计算完成,这个sinx函数是一个完全串行程序

但是我们可以使用ispc写出并行程序,ispc会生成一个gang,gang就是多个program instance的集合。这里我的理解,program instance不应该当做一个线程或者simd中一条lane,虽然它实际上就是simd化,但是我们思考的时候应该把其理解为处理单个数据的program instance

image-20221104170719850 image-20221104170741486

iterleaved

image-20221104170843431

program instanceassign数据的方式是interleaved方式,ISPC也是使用这种assign方式

blocked

image-20221104170947988

一个instance连续处理多个数据

抽象和实现

spmd是编程的抽象,程序员应该把gang多做逻辑上的多个指令流,同时运行多个程序实例

simd是ispc的实现,ispc将condition之类的判断变为simd中的mask

三种并行编程模型

共享内存

抽象和实现:

image-20221104171425195 image-20221104171616635
  • 不同线程读写同一块共享内存,线程间通信可以使用load store
  • 需要各种同步原语

Message passing

image-20221104171744433 image-20221104171756983

Data-parallel model

image-20221104171845147

Parallel Programming Basics

Amdahl’s Law

amdahl's law 定义了并行处理的最大加速比

S = 内在串行执行比例

最大并行加速度 \(\le 1/S\)

image-20221104180542454
posted @ 2022-11-04 19:54  kalice  阅读(337)  评论(0)    收藏  举报