为什么会有并行计算?
并行计算的必要性,现实世界计算需求与日俱增,对工期、规模有非常大的要求,并行计算可以非常好的提供计算能力
- 汽车制造。设计制造领域,用于模拟
- 分子模拟。微观领域不好现实观察
- 石油勘探。通过数据推演,大概模拟地下储存情况
- 数学建模。股市预测等
处理器发展趋势-并行化
功耗墙
现代计算机体系架构下的并行化
体系架构选择、优化成本(制造与功耗)与性能
指令级并行(ILP)
- 流水线(Pipelining)
- 多指令发射
- 乱序执行
向量化(SIMD)
- 单条指令执行能够同时处理多个数据片
多线程(MIMD)
- 多个程序实例能同时运行
- 多核
CPU发展架构的巨大转变
并行化
线程与进程
- 线程与进程是抽象的概念,对应的物理概念是CPU核心
- 每个线程或进程都至少对应一个CPU物理核心
- 进程是
资源分配
的最小单位 - 线程是
CPU调度
的最小单位 - 线程比进程粒度更小
- 一个进程可以拥有多个线程
举例
假设要吃完一盆米饭,多进程是每人一个碗
一起吃这盆米饭,多线程相当于多个人共用一个碗起吃这盆米饭,多线程
相当于多个人 共用一个碗
一起吃这盆米饭
- 多进程时,碗(进程)和碗之间是独立的、互不影响的
- 多线程时,每个人共享个碗的资源
- 看起来多进程永远好于多线程
但是如果加上这样的条件
- 每个人穿不同颜色的衣服,米饭也分不同的种类,大米、小米、紫米....,规定什么颜色的衣服只能吃什么颜色米,但是盛饭的时候不知道盛到碗里的是什么米
- 需要盛上来之后,各个颜色的人、碗互相沟通归类数据
导致:人越多、碗越多,花在沟通上的时间越长,干正事吃饭的时间越短
结论:现实情况并不一定多进程是永远好于多线程的,有的时候需要将多进程和多线程结合起来使用。
多进程:进程和进程之间是互相独立的
多线程:线程和线程之间是共享一个进程的资源
多线程程序
- OpenMP、pthreads、TBB......
- 已被各编译器按收作为基本编程规则,常用编译器都支持
多进程程序
- 使用MPI技术编程
MPI本身是开放的编程接口,各厂商有自己的版本
- Intel MPI (白建超算推荐,无论什么程序优先使用,除非明确无法使月)
- 天河MPICH3 (广州/长沙超算推荐)
- OpenMPI (Intel MPI不可用时备选)
- MPICH (禁用,无法使用高速网)
有些程序只有多进程并行
- MS、OpenFOAM
有些程序只有多线程并行
- Gaussian
有些程序支持多进程和多线程混合并行
- VASP、 WRF......
除只支持多线程的程序及用户特殊要求外,给用户测试交付时默认纯多进程并行
CPU利用率
- 运行程序占用的CPU资源的比率
- 操作系统级别统计,分为用户态和内核态
- 直观反映CPU的繁忙程度
内存使用率
使用的内存超过节点内存,作业会报错退出
网络
高速网
- Infiniband/Ominipath/天河
- 自建超算都使用Infiniband高速网,速度相比以太网提升10倍以上
- 编译和安装软件注意MPI环境使用
评论 (0)