现在这个AI火热的时代科学计算任务占比越来越大,但是平时使用时也有一些不为人注意的地方需要知道,本文就讨论一下使用超线程CPU时的注意事项。
超线程CPU就是现在的多线程CPU,以Intel和AMD的X86 CPU为例,一个10个物理核心的CPU则有20个逻辑核心,其中多出来的10个核心就是超线程架构扩展出的逻辑CPU核心。假设1个物理核心的计算能力为100%,那么扩展多出的一个逻辑核心的计算能力为30%,也就是说1个物理核心扩展出1个物理核心和一个逻辑核心,那么总性能为130%而不是200%。
一个10个物理核心的CPU,开启超线程功能,共20个逻辑核心。假设一个科学计算任务需要使用5个CPU逻辑核心,在该开启超线程的CPU上用时1个小时完成任务,CPU使用率为25%;那么同时运行两个该任务,那么占用10个CPU逻辑核心,两个任务并行运行,各用时为1个小时,CPU使用率为50%。
重点内容:
如果这次是同时运行四个该任务,那么占用20个CPU逻辑核心,四个任务并行运行,CPU使用率为100%,总用时为2/1.3=1.53846小时。也就是说在使用超线程技术扩展出的CPU后其性能并不是真实物理核心的100%而是30%,因为该CPU共有10个物理核心,运行四个计算任务时需要使用10个真实物理核心和10个扩展多出的逻辑核心,而这多出的10个核心并不能按照真实核心来计算,因此正确计算时我们需要先按照真实物理核心数计算用时2个小时的用时,然后再除去逻辑核心扩展后的CPU性能1.3倍得出最终的运行用时。
可以看到,如果我们希望尽快的完成运算任务,那么在上述的CPU架构中最多可以运行两个计算任务,如果再多运行计算任务那么总的时长就会增加。这个问题是极为被忽略的,而造成这个问题的原因就是超线程扩展出的CPU核心并没有达到真实CPU核心的性能,而是只能达到30%。
扩展内容:
在上述的CPU架构和计算任务下,如果同时运行3个计算任务,那么用时多久?
3个计算任务如果同时并行需要15个物理核心,但是实际只有10个物理核心,因此10个物理核心20个逻辑核心运行3个各需要5个核心的计算任务的运行时间等同于10个物理核心20个逻辑核心运行4个各需要5个核心的计算任务的运行时间,同时也等同于5个物理核心10个逻辑核心运行2个各需要5个核心的计算任务的运行时间,计算式为2/1.3=1.53846小时,此时的CPU使用率为75%。
PS:
操作系统在计算CPU使用率时是不会区分逻辑核心和物理核心的。
=============================