Lecture 1: Brief Introduction
对ICS的简单回顾
已经学过的几种并行模式:
- 多进程:并发(底层的串行,高层的并行)
- 多线程:并行
- 多核:并行
- 向量运算
对并行计算中几个重要问题的论述
-
计算密集型:
- 比特币:利用随机数碰撞产生答案,最后挖矿的效果主要受计算的效果限制。
- 为什么计算密集:对于存储器访问少,主要可以存储于寄存器
- 计算机中最难做的是数据的传输,但是比特币主要利用GPU或者专用ASIC的计算能力
- 不需要数据传输的并行是embarrassing parrallel,并没有什么难度
- 有一类应用不需要传输,只需要做出计算单元,就可以快速提升任务完成速度
-
访存密集:
- 比如GDDR在芯片外面存储信息,由于传输速度的限制,传输数据到计算单元的速度低于计算速度
- 表现:访存带宽充满(90%+),运算单元吃不饱(20%+),瓶颈在于数据传输
- 过去几年浮点定点大幅提高,但是传输速度只是线性增加
- 访存密集型任务在真实并行任务中大量存在
-
通讯密集:
瓶颈不再是运算,也不再是数据搬运
以排序算法为例,在单个服务器上是访存密集型任务,受制于芯片与内存传输的带宽,计算复杂性较低
-
数据量到达一定程度,需要放置在多个服务器中进行工作。
考察下面的例子:比如我们的服务器从1台到100台:
计算能力(CPU) *100
访存带宽(共同访存) *100
但是并不是这样的情况就会让我们的性能提升100倍,因为这里需要大量服务器之间的交互。
通讯量上升巨大,瓶颈变成了网络带宽(GB/S)
-
访外存密集:
- 某些大数据场景,以地震数据为例,数据量极其巨大,内存根本放不下
- 采用分布式外排序算法,数据都存放在外存中
- 如果硬盘很慢,那么瓶颈在于硬盘带宽
- 硬盘带宽提升迅速
- 通讯带宽都最大可能成为未来并行任务的瓶颈
并行计算解决的一些实际问题
- 宇宙学模拟:在考虑万有引力的时候如果两个两个计算,那么计算的时间复杂度是$O(n^2)$,这在有很多星体的时候明显不是一个很好的想法
- 找一个截断半径,距离长于阶段半径的部分就不再管了
- 对于整个空间(假设为正方体的空间,便于坐标计算)不断均分为8个部分(想像在正方体的三个方向各切一刀),如此进行下去直到每个小块里面只有一个星体。
在计算的时候多个星体可以方便地取到重心,对于大范围内只有一个的星体我们可以直接用大正方体的中心替代其位置
- 湍流现象模拟
- 蛋白质折叠现象模拟
- 利用分子动力学
- 选择合适的step-gap
- Google服务器:
- 并行处理大量事务
- 游戏中的图像处理
- 淘宝服务器:
- Map Reduce
一点后话:
- 实际可以应用的算法最高不超过$O(nlogn)$,因为现实生活中面对的往往都是极其大量的数据
- 如果没有标准的可以达到这个层次的算法,有时就要进行适当的近似(理论模型vs计算模型)
- 利用模型中的稀疏性,具体的应用场景会赋予真实的方程很大的稀疏性,必须要利用起来