《并行算法设计与性能优化》学习笔记一

434 阅读3分钟

第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位的向量寄存器。