Parallel Amplifier的并行度分析

今天讨论一下Parallel Amplifier中并行度分析(Concurrency Analysis)。并行度是衡量一个多线程程序在运行中对多个CPU或核的利用率。在解释几个相关定义前先作一个假设,大家知道一台计算机上除了OS以外总有若干个后台程序在运行,假定这些程序运行时占用CPU的时间很小,不影响被Amplifier分析的程序的正常运行。


1. Available CPU time(可用CPU时间)= Elapsed time * Target Concurrency



  • l Elapsed time是被测程序的运行时间

  • l Target Concurrency即目标并行度,一般指该计算机中CPU/Core的总数,如2个4核的CPU,Target Concurrency为8.


2. Used CPU time(用到的CPU时间)= sum of (Concurrency(i)* duration(i))



  • l 多线程程序运行时激活线程数量不一定是恒定的。有时线程的数量超过CPU/Core的总数,但各个线程分时共享CPU/Core,并行度不会大于CPU/Core的总数,即concurrency(i) = Min(actived thread #, Target Concurrency)

  • l Duration(i)表示程序在某一并行度下运行的时间。

  • l 例如在一台有2个双核CPU的计算机上,一个程序运行10秒.





























Actived Thread number12345
Duration(sec)32221
Used CPU time(sec)34684

在Actived Thread Number等于5,因为总核数为4,所以Concurrency(5)为4,总Used CPU Time为25秒。


3.   Unused CPU Time = Available CPU - Used CPU Time


4.   Concurrency(并行度)= Used CPU Time/Elapsed Time. 理论上最大为运行该程序的计算机上CPU/Core的总数。


5.   CPU/Core utilization = Used CPU Time/Available CPU Time


 


本例中


Available CPU time = 10 *4 = 40 sec


Used CPU time = 25 sec


Unused CPU time = 40 -25 = 15 sec


Concurrency = 25/10 = 2.5


CPU/Core utilization = 25/40 = 62.5%


2.5的并行度表示相比运行在一个单核/CPU,在该程序运行在4核的计算机上时,最多可节省60%的运行时间。你可能会问该程序运行在8核机器上会怎么样呢?如果代码中限定了actived Thread number最多为5,结论是性能提高非常有限。换个说法这个程序的可扩展性不好。顺便提一下,用OpenMP实现的多线程能动态设定合适的actived Thread number.


Para obtener información más completa sobre las optimizaciones del compilador, consulte nuestro Aviso de optimización.
Etiquetas: