理解CPU的并行性

影响性能的主要因素:

CPU : 核心数量、线程数据量,(C/T), 越多越强大, 每个核心拥有自己的L1cpu并行计算 python cpu并行处理能力_缓存, L3cpu并行计算 python cpu并行处理能力_共享高速缓存_02目前能搞32M以上。

SRAM: 静态随机存取存储器,CPU和芯片组的基材,高速缓存,以速度为目标。

DRAM:动态随机存取存储器,主存基材,以更高带宽和存储为目标,读取耗时。

内存带宽: 以千兆字节每秒为单位,越高意味着I/O速度越高。

核心: 按序核心即指令按照顺序串行执行, 低功耗,省钱;乱序核心即指令按照操作可用性顺序执行,高功耗,贵。

瘦线程和胖线程:当两个线程共享一个核心时,必须共享所以核心的资源;一个线程对核心资源需求量少为瘦线程,需要大量核心资源的为胖线程;每个线程都是胖线程,增加线程数量会使大家都挣抢资源降低性能。

开发的方式:

1.读取零碎数据或频繁读写的数据,存储在高速缓存中,高速缓存读取速度快,能保证性能

2.以批量的方式访问存储器DRAM中数据,存储量大,一次读取整行慢,但放入高速缓存再操作性能能够提升,在DRAM中不适合频繁I/O单字节的数据,耗时

3.隔离,每个核心中有独立缓存,每个线程读写数据不多于高速缓存,各自独立,性能能够提升。

4.瘦线程、胖线程协调搭配提升性能,即指令多的和资源消耗大的线程一起搭配。

5.了解计算设备高速缓存每个层次的大小,尽量使程序控制在这个范围内。

L1$ : L1cpu并行计算 python cpu并行处理能力_cpu并行计算 python_03的访问速度非常快(4个时钟),每个核心有独立的。

L2$ : 256KB, 不分数据和指令 ,访问速度很快(11~12个时钟),每个核心有独立的。

L3& : 15MB ,访问比DRAM快 ,(22个时钟),所以核心共享L3$

DRAM: 行读取访问,2KB~8KB, 访问速度很慢(200~400个时钟)

  • 每个线程尽量重复访问32KB范围内的数据
  • 尽可能将更大范围的访问限制在256KB内
  • 所有启动线程,尽量将整体的数据访问规模限制在L3cpu并行计算 python cpu并行处理能力_缓存_04较高的使用率