目录
- CPU VS GPU
- 提升CPU利用率
- 1、提升空间和时间的内存本地性
- 2、并行以利用所有核
- 提升GPU利用率
- 1、并行
- 2、内存本地性
- 3、少用控制语句
- 4、不要频繁在CPU和GPU之间传数据
- 单机多卡并行
- 分布式计算
CPU VS GPU
首先,一个芯片的空间是有限的,给了很多空间给某个内容(能力强),其他内容的空间就会被压缩(能力弱)
CPU擅长的是内存大小&控制流(处理通用计算),大量空间给了内存和逻辑控制单元
GPU擅长的是内存带宽&核——>从内存里读数据快&计算浮点数快(处理矩阵乘法)
提升CPU利用率
1、提升空间和时间的内存本地性
时间:把需要重用的数据保持在缓存里(因为在进行计算前,需要把数据按照主内存——L3——L2——L1——寄存器的顺序进行读取,每步都会有访问延时)
空间:按序读写数据使得可以预读取
2、并行以利用所有核
超线程不一定提升性能,因为他们共享寄存器(比如1核2线程)
提升GPU利用率
1、并行
使用数千个线程,比如考虑到GPU的核数都是上千的,一千维的向量才能重复利用GPU
2、内存本地性
3、少用控制语句
比如ifelse,因为GPU控制流弱
4、不要频繁在CPU和GPU之间传数据
带宽限制、同步开销大
单机多卡并行
一台机器上可装多个GPU,训练和预测时,将一个小批量的计算切分至多个GPU,以加速。常用的切分方案:
1、数据并行:把小批量分为n块,每个GPU都拿到完整的参数,去计算一小块数据的梯度。通常可提升性能!
2、模型并行:把模型分为n块,每个GPU拿到一小块模型,去计算一小块模型的前向&反向结果(Bug在于有顺序性,GPU利用率不佳)。用于超大模型,一个GPU放不下的那种(模型+参数保存的大小)
3、通道并行=数据+模型并行
分布式计算
多台机器,每台多个GPU。数据放在分布式文件系统上,每个机器都可以接触到