当前位置:   article > 正文

高性能计算考点整理_弱可扩展性

弱可扩展性

预计必考很多名词解释

第一章

串行计算的定义

image-20201205094509012

并行计算的定义(第一章第二章的都行)

image-20201130194920588

并行计算的目的 可能都是简答题

image-20201205094532942

分布式计算的定义

分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理而后在统合计算结果得到最终结果

并行计算&分布式计算的区别

image-20201205094607739

什么是MPI, 什么是openMP 必考一个

message passing interface

image-20201205104534481

image-20201205095137535

什么是超级计算机 概念

  • 通常是指由数百、数千甚至更多的处理器(机)组成的、能计算普通PC机和服务器不能完成的大型复杂课题的计算机

什么是集群

  • 也称作机群、群集
  • 集群一般由高速网络连接起来的高性能工作站或PC机组成,集群在工作中像一个统一的整合资源,所有节点使用单一界面。

什么是网格计算 && 什么是网格

网格:

  • 是一个集成的计算与资源环境,即一个计算资源池。它能够充分吸纳各种计算资源,并将其转化成为一种随处可得的、可靠的、标准的,同时还是经济的计算能力。
  • 这里的计算资源包括网络通信能力、数据资料、仪器设备,甚至是人等各种相关资源。

基于网格的问题求解就是网格计算

云计算的定义 很重要, 至少要知道

image-20201205100057639

什么是边缘计算

  • 指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务

什么是智能计算

image-20201205100423642

第二章:

并行计算的定义(第一章第二章都可)

image-20201130194920588

并行计算的条件:

image-20201130194939855

高性能计算机的概念

  • 国际

    他们把超级计算机(高性能计算机)圈定在Pflops级(千万亿次浮点计算每秒)计算机水平。

  • 市场

    往往认为价格在10万元人民币以上的就是高性能计算机,而把超级计算机看作是最高档的几百台高性能计算机。

并行计算的功能:

降低单个问题的求解时间, 增加问题求解规模, 提高问题求解精度

并行计算的几个相关定义:

  • 粒度

    在并行执行过程中,二次通讯之间每个处理机计算工作量大小的一个粗略描述,分为粗粒度、细粒度

  • 复杂度

    在不考虑通讯开销的前提下,每个处理机上的计算量最大者,即为并行计算复杂性

  • 并行度

    算法可以并行的程度

  • 加速比
    q: 进程数, Ts 串行运行时间, Tp 并行运行时间

    image-20201130200306559
  • 效率
    就是加速比S/进程数np

    image-20201130200322333
  • amdahl定律 & 核心思想& 公式中的变量的意义

    image-20201130200836018

    image-20201130201848818

    image-20201130200934583
  • Gustafson定律的种种(和amdahl相同)

    image-20201205153558437

    image-20201205153609338

可扩展性的定义 很重要:

如果增加进程数(线程数)和问题规模, 并行效率保持不变, 则称并行程序是可扩展的, 具有可扩展性

  • 强可扩展:
    增加进程/线程数, 不增加问题的规模, 可以维持固定的并行效率
  • 弱可扩展:
    增加进程/线程数, 同时以相同的倍率增加问题规模, 可以维持固定的并行效率

SMP的定义 不重要

DSM的定义 不重要

MPP的定义 重要

image-20201130203919899

cluster定义

image-20201130204337828

上头四个之间的区别

image-20201130204908208

image-20201130204900774

image-20201130210056722

第三章:

第三章的基本概念:

  • 进程 很重要
  • 线程 很重要 不就是操作系统里的东西吗

主从式的思想 要掌握

将一个待求解的任务分成一个主任务(主进程)和一些从任务(子进程)
主进程负责将任务分解, 派发和收集各个子进程的求解结果并最后汇总得到问题的最终结果

SPMD 单程序多数据流 很重要 不仅仅是概念, 还要掌握其思想, 运用到编程中 基本上是必考的
image-20201130164834226

image-20201130165115816

PCAM并行应用编程过程 基本概念掌握: 简答题可能会考察

  • 划分: 分解成小任务, 开拓并行性
  • 通信: 确定任务间的数据交换, 监测划分的合理性
  • 组合: 基于任务的局部性, 组成更大的任务
  • 映射: 将每个任务分配到处理器上, 提高并行性

什么是域分解, 什么是功能分解

  1. 域分解划分的对象是数据, 将程序中的输入数据, 中间处理数据或输出数据分解成大致相等的小数据片, 在划分的过程中考虑数据上的相应操作, 如果一个任务需要使用别的任务中的数据, 则会产生任务间的通信
  2. 功能分解也称为任务分解或计算划分, 是一种更深层次的分解, 划分的对象是计算, 将计算划分为不同的任务, 而后研究其所需的数据, 如果数据不相交, 则划分是成功的, 如果数据有相当的重叠, 则意味着大量的通信开销, 要重新进行域分解和功能分解

image-20201130165346634
image-20201130165415423

重复计算 很重要
重复计算的目的是减少算法运行的总时间, 其减少通信量, 但增加了计算量, 应合理设计使得二者保持恰当的平衡

给一个串行代码, 将其转化为并行代码
都是伪代码, 如矩阵计算等
PPT中的例子会稍微变化一下, 注意啊 简答题

并行for的方法, 不考名词解释, 了解即可(就是不考),

后头有个并列的方法, 好像是PPT里没有, 柱子哥说要考的, 很重要

第五章:

MPI基本概念

image-20201130095610227

几个基本概念:

  • 进程组:

    image-20201130095651164

  • 通信器

    image-20201130110620818

  • 进程序号

    image-20201130110631393

  • 消息

    image-20201130110640538

MPI的程序的基本形式 这个敲代码敲多了基本上都记得了(并不) 柱子哥会化身编译器 所以一定要写对

他这里都在讲常用函数啥的, 反正标准模板里所有的都要, 其他看情况

#include <mpi.h>
#include <iostream>
using namespace std;

int main(int argc, char *argv[]){
	int np, myid;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    MPI_Comm_size(MPI_COMM_WORLD, &np);
    
    printf("Process %d on %d\n", myid, np);
    
    MPI_Finalize();
    
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

Helloworld程序的执行流程 挺重要的 执行顺序, 迭代范围

image-20201130153055943

什么是点对点通信

两个进程之间的通信就是点对点通信

点对点通信中的几个重要的函数: 函数没啥问题的话还是推荐全记住

  • MPI_Send(sendBuf, count, MPI_Datatype, destProNum, tag, MPI_Comm)
  • MPI_Recv(recvBuf, count, MPI_Datatype, srcProNum, tag, MPI_Comm, &status)
  • MPI_Getcount(status, MPI_Datatype, &count)

什么是消息

image-20201130155531917

标准阻塞式通信, 他们的区别 简答题

image-20201130155701624

消息传递条件 很重要 简答题

5个

  • 发送进程需要制定一个有效的目标接收进程
  • 接收进程需要指定一个有效的目标接收进程
  • 接收&发送进程需要在同一个通信器内
  • 接收和发送消息的tag要相同
  • 接收缓冲区要足够大

数据环路传送 很重要 18年考的这个 今年很可能出第一个编程题, 这里柱子哥将了好久
多设计几遍, 我就不信还能错
写一个很安全的不管n有多大都不会死锁的代码

#include <mpi.h>
#include <iostream>
using namespace std;

int main(int argc, char *argv[]){
	int np, myid;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    MPI_Comm_size(MPI_COMM_WORLD, &np);
    
    int root=0;
    const int MAXBUF=105;
    int buf[MAXBUF]={0};
    int tag=99;
    MPI_Status status;
    if(myid==root){
		buf[0]=114514;
        MPI_Send(buf, 1, MPI_INT, myid+1, tag, MPI_COMM_WORLD);
        MPI_Recv(buf, 1, MPI_INT, myid+np-1, tag, MPI_COMM_WORLD, &status);
    }else{
        MPI_Recv(buf, 1, MPI_INT, myid-1, tag, MPI_COMM_WORLD, &status);
        MPI_Send(buf, 1, MPI_INT, (myid+1)%np, tag, MPI_COMM_WORLD);
    }
    
    printf("Process %d get %d data=%d\n", myid, myid, buf[0]);
    
    MPI_Finalize();
    
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

阻塞式消息发送模式 四个里任选俩进行比较异同, 简答题

image-20201130161102518

image-20201130161109381

阻塞式通信与非阻塞式通信的区别 大致意思写对就是满分

image-20201130161523108

非阻塞式点对点通信函数一套
这部分的程序设计暂时还未涉及, 之后如果确定会考再来看

  1. MPI_Isend(sendbuf, count, MPI_Datatype, destProNum, tag, &request)
  2. MPI_Irecv(recvbuf, count, MPI_Datatype, srcProNum, tag, &request)
  3. MPI_Wait(&request, &status)
  4. MPI_Test(&request ,&flag, &status)
  5. 后头还有很多函数, 不知道有没用…暂时先放着

持久通信不考察了

数据类型 很重要 必考一个
数据类型的一整套函数

后头的聚合通信就归约代码

第六章:

本章重点考察简答题, 程序题, 概念性的东西较少

openMP定义

共享存储体系结构上的一个并行编程模型或基于线程的并行编程模型

openMP的代码肯定会考一个

重点 是编译制导语句

  • 编译制导语句的组成:

    image-20201130212818080

并行域の概念

一个能被多个线程并行执行的代码段

归约字句 很重要

后头三个选一个考求PI的程序

数据竞争问题, 给出一个代码, 找出哪里发生的数据竞争, 怎么改

打印接口的题, 即给出一个程序, 求程序的输出

single制导 & master制导的区别

后头几个制导几乎全要考, 都TMD很重要
几个不需要的:

  1. barrier制导
  2. atomic锁

后头的几个例子也挺重要的, 应该康康

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/820018
推荐阅读
相关标签
  

闽ICP备14008679号