第1章 绪论
-
并行与并发。
并行(parallelism)多个处理单元处理数据,微观上也是并行。并发(concurrency)是指一个处理单元上运行多个应用,各应用分时占用处理单元,微观串行,宏观并行。也称为时间上串行,空间上并行。一般来说,并发是为了满足功能性需求,比如在计算的同时,用户界面能够响应用户的需求。并行更多是为了提高速度或解决更大规模的问题。 -
在2003年以前,计算机性能的提升主要依赖于cpu主频的提升。但是,cpu的功耗与频率的三次方近似成正比,由于功耗的原因,无限提升频率已不可能。
-
向量化是指使用同一条指令同时操作多个数据。多核技术指在同一芯片上集成多个核心。多路是指服务器上集成多个多核处理器。 -
目前提升算力主流的三种方式:
(1)让处理器一个周期处理多条指令。
(2)使用向量指令。即一条指令处理多个数据。
(3)同一个芯片上集成多个处理单元。
-
进程、线程与超线程。
进程是对操作系统正在运行程序的一种抽象,多个进程可以并发运行在一个核心上,通过时间片的轮转,就好像进程一直在使用核心。保存一个进程的状态切换到另一个进程的状态称为“上下文切换”。进程的上下文切换比较耗时,因此基于进程的并发往往只适合大粒度的任务并行。进程之中可以有多个
线程,这写线程共享进程的上下文,如虚拟地址空间和文件。进程终止时,进程内的所有线程也会终止。线程有其私有的逻辑寄存器、栈和指令指针。多核处理器应优先选择线程级并行,多机系统应优先选择进程级并行。
超线程,Intel的一些高端机器支持超线程,超线程通过双倍资源(如寄存器)来减少线程的切换代价。对绝大多数应用提升不会超过20%。 -
阻塞和非阻塞,同步和异步。
阻塞是相对于进程或线程本身而言。一个操作并不阻碍进程或线程,可以接着执行代码,称这个操作为
非阻塞,反之为阻塞。同步或异步是针对通信的多个进程或线程,如果一个进程或线程与其他进程与线程通信时,不需要其他进程或线程做好准备,则称之为
异步,反之为同步。 -
X86多核
1.发挥多核处理器多个核心性能的编程方式通常时使用OpenMP和thread并行,容易产生的性能问题主要是伪共享和负载均衡。
2.向量指令。SSE是X86多核向量处理器支持的向量指令,具有16个长度为128位的向量寄存器。AVX将SSE的向量长度延长为256位。使用向量指令:(1)可以通过openmp。(2)内置函数。(3)汇编。
-
ARM支持的向量指令集称为NEON,是16个长度为128位的向量寄存器。