并行计算的一些背景知识
来源:互联网 发布:和还原精灵类似软件 编辑:程序博客网 时间:2024/04/28 17:42
1.冯诺依曼结构
经典冯诺依曼结构为 : 主存, 中央存贮单元(CPU) , 以及 主存和中央存贮单元之间的传输部分。CPU 又由 ALU(计算单元)和 控制单元组成。 主存和CPU之间的分离称为冯诺依曼瓶颈。
2.进程,多线程及线程
线程为程序员提供了一种机制,将程序划分为多个大致独立的任务,当某个任务阻塞时能够执行其他任务。线程的切换比进程要快。
进程和 线程的关系: 线程从进程中fork,当线程结束时 又join回进程。
3. 对冯诺依曼瓶颈的改进:Cache 的引入,虚拟内存,低层次并行。
1) Cache 是利用内存连续或者数据的局部性一次读取一整块代码和数据,提高速度。
// sampleint A[10][10] int B[10]// 内存是连续的for(int i =0;i<10;i++) for(int j =0;j<10;j++) sum += A[i][j] * B[j];/* 在 row-major情况下,下面程序性能不好,每个元素之间差了10 */for(int i =0;i<10;i++) for(int j =0;j<10;j++) sum += A[j][i] * B[j]
根据文献:实际运行时,当矩阵大小为1000*1000时第一个比第二个快三倍左右(也没那么快-_-!)
2) 虚拟存贮器
就是常用的虚拟内存,当运行一个大型程序,程序需要访问大型数据集,那么所有的指令或者数据可能在主存中放不下。
3)指令级并行
略
上面是对冯诺依曼的扩展, 下面是现有的一些并行系统
SIMD系统 (GPU属于这一种)
全称单指令多数据流,顾名思义,SIMD通过对多个数据执行相同的指令从而实现在多个数据流上的操作。为了实现多数据流操作, SIMD中的ALU很多, 具体可以参考GPU架构。
for(int i =0; i<n;i++) x[i] += y[i];/* 在SIMD中, 每一个ALU 载入x[i]和y[i],并将计算结果放入x[i] */
所有的ALU要么执行相同的指令,要么同时处于空闲。
90年代唯一广泛生产的是向量处理器,近来是GPU。
MMID系统
多指令多数据流,有两种类型,共享内存系统和分布式内存系统。
0 0
- 并行计算的一些背景知识
- GPU并行计算入门1——背景知识
- DLL的一些背景知识
- 并行计算知识
- 并行计算相关知识
- 并行计算知识
- 关于并行计算发展的一些思考
- 并行计算与GLSL的一些总结
- 一些关于并行计算的科研思路
- 关于并行计算的一些名词
- 一些数值计算的知识
- 理解ActiveX控件的一些背景知识
- 理解ActiveX控件的一些背景知识
- linux kernel makefile的一些背景知识
- 关于云计算知识的一些摘抄
- 云计算的一些基础入门知识
- 云计算入门的一些小知识
- 云计算的一些总结知识
- 不经意间的流占用,导致json总为空问题
- Linux多线程,生产者消费者算法和条件变量的使用
- poj3083 Children of the Candy Corn dfs 和 bfs 的综合,终于AC了
- @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
- Leetcode之Median of Two Sorted Arrays
- 并行计算的一些背景知识
- 技术网站汇总
- 高效能人士的七个习惯摘录
- Android Studio 快捷键
- 毗邻目录算法与左右值无限分支算法的结合
- 青蛙的烦恼 题解
- HDU--1052
- win8下更改codeblocks颜色
- java验证码