CUDA(二)并行程序设计概述

串行计算模式

常规软件是串行的

        设计运行于一个中央处理器上(CPU)

        通过离散的指令序列完成一个问题的解决

        一条一条指令的执行

       同时只有一条指令在执行

并行计算模式

       并行计算是同时应用多个计算资源解决一个计算问题

             涉及多个计算资源或处理器

            问题被分解为多个离散的部分,可以同时处理(并行)

           每个部分可以由一系列指令完成。

       每个部分的指令在不同的处理器上执行

概念:

  Flynn 矩阵

SISD

single Instruction,Single Data

SIMD

Single Instruction, Multiple Data

MISD

Multiple Instruction, Single Data

MIMD

Multiple Instruction, Multiple Data

常见名词

Task(任务):可完整得到结果的程序,一个或者若干个代码段,相对独立。

Parallel Task (并行任务):可用并行计算解决的一个任务。

Serial Execution(串行执行):一串

Parallel Execution(并行执行):

Shared Memory(共享存储):

Distributed Memory(分布式存储):

Communications(通信):并行单元需要交互

Synchronization(同步):相同的执行顺序,破坏了独立性原则。导致性能下降

Granularity(粒度):任务划分,每个任务大小

ObservedSpeedup(加速比):对比标志程序并行程序的性能提升。同层次计算性能的比较。

Parallel Overhead(并行开销):为了完成并行预算的开销,通信的开销最大。

Scalability(可扩展性):核数增加后加速比是否为线性增加。

存储器架构

  Shared Memory

  Distributed Memory

  Hybrid Distributed-Shared Memory混合分布式共享存储

并行编程模型

    共享存储模型Shared Memory Model:所有处理单元去共享存储器取数据

    线程模型Threads Model:开多个线程,线程切换,数据放置比较近

    消息传递模型 Message Passing Model:MPI独立存储单元,消息模式传递

    数据并行模型 Data Parallel Model:数据进行切分


具体实例

OpenMP

MPI

SPMD(Single Program Multiple Data):每一个代码段处理

MPMD(Multiple Program Multiple Data):多个任务同时处理


设计并行处理程序和系统

  自动和手动并行:单一模式下自动模式很好了,负责模型需要手动并行。

  理解问题和程序:理解要处理问题的特性,并行的部分在哪里。

  分块分割:数据分块和任务分割。

  通信:不同分块分区之间数据交互,开销比较大,可扩展性影响较大部分

  同步:步调一致

  数据依赖:

  负载均衡:多个独立人物之间负荷,是否均衡

  粒度:任务细分大小

  I/O:

  成本:

  性能分析和优化:


数据和任务的分割:

通信和同步:

           同步:broadcast scatter  gather  reduction

Amdahl's Law 

程序可能的加速比取决于可以被并行化的部分speedup=\frac{1}{1-P}

   如果没有并行化P=0and the speedup=1(no speedup)

   如果全部可以并行化P=1and the speedup is infinite(in theory)

   如果50%则可以冰箱话, maximum speedup=2。

如果有N个处理器并行处理speedup=\frac{1}{\frac{P}{N}+S}

   P=并行部分,N=处理器数码,and S=串行部分

  并行化的可扩展性极限

猜你喜欢

转载自blog.csdn.net/fanre/article/details/83061545