并行计算
基础知识
电脑功率= 主 频 3 主频^3 主频3,于是主频越高的电脑要求散热越好,于是采用多核并行解决这个问题。
新摩尔定律:处理器主流2-8个核心的多核CPU、十到上千个核心的众核GPU(图形处理器)。
高
性
能
计
算
(
H
P
C
)
{
并
行
计
算
分
布
式
计
算
网
格
计
算
云
计
算
高性能计算(HPC)\begin{cases} 并行计算\\ 分布式计算\\ 网格计算\\ 云计算 \end{cases}
高性能计算(HPC)⎩⎪⎪⎪⎨⎪⎪⎪⎧并行计算分布式计算网格计算云计算
分布式计算
原理:将任务和数据分割成小块,由多个计算机分别计算,上传结果统一合并。
优点:1)稀有资源共享
2)平衡计算负载
3)程序可以放在最合适运行的计算机上
并行计算
原理:多条指令同时进行
分为:
{
时
间
并
行
−
−
流
水
线
空
间
并
行
−
−
多
个
处
理
器
\begin{cases} 时间并行--流水线\\ 空间并行--多个处理器\\ \end{cases}
{时间并行−−流水线空间并行−−多个处理器
常见的几种并行计算
1)进程+线程:硬件是多机+多核,编程环境是MPI+OpenMP,处理大粒度任务。
2)线程+GPU线程:硬件是多核+多GPU,编程环境是OpenMP+CUDA/OpenCL,处理小粒度任务。
3)进程+线程+GPU线程:硬件是多机+多核+多GPU,编程环境是MPI+OpenMP+CUDA/OpenCL,大小任务都可以。
划分任务的时候,任务之间最好是没有关系
{ M P I : 为 每 个 计 算 机 分 配 一 个 进 程 ( 进 程 I D ) O p e n M P : 多 核 分 配 一 个 线 程 ( 线 程 I D ) C U D A / O p e n C L : 多 个 G P U 线 程 处 理 对 应 的 子 任 务 \begin{cases} MPI:为每个计算机分配一个进程(进程ID)\\ OpenMP:多核分配一个线程(线程ID)\\ CUDA/OpenCL:多个GPU线程处理对应的子任务 \end{cases} ⎩⎪⎨⎪⎧MPI:为每个计算机分配一个进程(进程ID)OpenMP:多核分配一个线程(线程ID)CUDA/OpenCL:多个GPU线程处理对应的子任务
CPU vs GPU
1)理论差别
{
C
P
U
:
逻
辑
和
控
制
运
算
厉
害
,
面
向
解
决
延
迟
G
P
U
:
数
据
并
行
任
务
,
面
向
数
据
吞
吐
量
,
图
像
处
理
就
需
要
高
数
据
并
行
\begin{cases} CPU:逻辑和控制运算厉害,面向解决延迟\\ GPU:数据并行任务,面向数据吞吐量,图像处理就需要高数据并行\\ \end{cases}
{CPU:逻辑和控制运算厉害,面向解决延迟GPU:数据并行任务,面向数据吞吐量,图像处理就需要高数据并行
2)结构差别
3)处理数据
GPU:实现需要准备好数据以及分配好内存(c里面的malloc),之后会拷贝到GPU上运算。
CPU:大缓存(Cache)、复杂控制、功能强大的ALU
4)GPU线程和CPU线程
{
C
P
U
一
个
核
心
通
常
只
能
运
行
一
个
线
程
C
P
U
多
线
程
,
解
决
粗
粒
度
,
一
般
由
操
作
系
统
自
带
的
A
P
I
实
现
C
P
U
线
程
切
换
代
价
高
G
P
U
:
轻
量
级
线
程
,
零
开
销
线
程
切
换
\begin{cases} CPU一个核心通常只能运行一个线程\\ CPU多线程,解决粗粒度,一般由操作系统自带的API实现\\ CPU线程切换代价高\\ GPU:轻量级线程,零开销线程切换\\ \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧CPU一个核心通常只能运行一个线程CPU多线程,解决粗粒度,一般由操作系统自带的API实现CPU线程切换代价高GPU:轻量级线程,零开销线程切换
G
P
U
不
适
用
的
应
用
:
GPU不适用的应用:
GPU不适用的应用:
{
复
杂
数
据
结
构
:
树
、
矩
阵
、
链
表
等
等
串
行
和
常
务
性
处
理
较
多
的
情
况
并
行
规
模
很
小
重
设
算
法
和
数
据
结
构
或
打
包
处
理
\begin{cases} 复杂数据结构:树、矩阵、链表等等\\ 串行和常务性处理较多的情况\\ 并行规模很小\\ 重设算法和数据结构或打包处理\\ \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧复杂数据结构:树、矩阵、链表等等串行和常务性处理较多的情况并行规模很小重设算法和数据结构或打包处理
查看电脑的显卡是什么样的
如果电脑显卡是NVIDIA的就可以直接安装软件了