limu|P31-34|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。数据放在分布式文件系统上,每个机器都可以接触到

posted @ 2024-08-26 19:44  xjl_ultrasound  阅读(19)  评论(0)    收藏  举报