超级计算机和桌面计算正在向着异构计算发展—人们试图通过将中央处理器(CPU)和图形处理器(GPU)技术混合在一起来实现更高的性能,让适合CPU的计算类型让CPU算,适合GPU的运算让GPU算,这也是一种分布式计算架构。
现大多数计算属于“内存受限型”,现代计算机三级缓存技术受到成本的考验。
历史上出现的超算发展:
克雷(Cray)系列
连接机,出现单指令多数据
Cell处理器,一个常规监管处理器相连大量高速流处理器
多点计算,出现单核“收益递减规律”,集群计算,出现CPU/GPU集群
早期的GPU编程:编程接口不友善,难度大
单核的消亡:处理器往多核方向发展,但是工业界(尤其是游戏产业)偏向最少核数编程(减少成本),是新技术发展的阻力。
英伟达与CUDA
CUDA C既适用于主机处理器(CPU)也适用于设备处理器(GPU),相比传统串行编程其可能达到的最大加速比受限于程序中的串行代码数量。
语言特性:编译模型与Java类似—基于虚拟指令集的运行时编译。
CUDA替代选择
OpenCL:允许使用多种计算设备的开放标准,但相比CUDA更加复杂
DirectCompute:微软出品,但是只能在Windows平台上使用
CPU的替代选择
MPI(Message Passing Interface),目前使用最广泛的消息传递接口。实现并行处理的表现为,在集群的各个节点上派生出成百上千个进程,这些进程通常通过基于网络的高速通信链路显式地交换消息,协同完成一个大任务。
OpenMP:面向单个节点或单个计算机系统而设计的并行计算平台。编译器可以根据核数,自动将问题分成N份。
其他的还有pthreads,应用于Linux上的多线程应用程序,ZeroMQ、Hadoop。
Reference:
ShaneCook, 库克, 苏统华,等. CUDA并行程序设计:GPU编程指南[M]. 机械工业出版社, 2014.