CPU时间与超线程相关吗?

时间:2013-03-12 00:17:30

标签: openmp multicore overhead hyperthreading

增加的CPU时间(由time CLI命令报告)指示使用超线程时的低效率(例如,在自旋锁或高速缓存未命中中花费的时间)或者CPU时间是否可能被奇怪的性质夸大HT? (例如,真核正忙,HT无法启动)

我有四核i7,我正在测试OpenMP program的平凡可并行化部分(图像到调色板重映射) - 没有锁,没有关键部分。所有线程都访问一些只读共享内存(查找表),但只能写入自己的内存。

 cores real CPU
  1:   5.8  5.8
  2:   3.7  5.9
  3:   3.1  6.1
  4:   2.9  6.8
  5:   2.8  7.6
  6:   2.7  8.2
  7:   2.6  9.0
  8:   2.5  9.7

我担心随着核心数超过1或2,使用的CPU时间会迅速增加。

我认为在理想情况下,CPU时间不会增加太多(相同数量的工作只会分布在多个内核上)。

这是否意味着在并行化程序上花费了40%的开销?

2 个答案:

答案 0 :(得分:1)

快速提问 - 您是在运行正版时间程序/ usr / bin / time,还是同名的内置bash命令?我不确定是否重要,它们看起来非常相似。

查看您的数字表我感觉到处理后的数据集(即输入加上所有输出数据)总体上相当大(大于L2缓存),并且每个数据项的处理不是那么冗长。

这些数字显示从1核心到2核心几乎呈线性增长,但是当你使用4核心时,这会显着减少。 hyoethreaded核心几乎没有增加任何东西。这意味着共享的东西正在争夺中。你的程序有自由运行的线程,所以东西只能是内存(i7上的L3缓存和主内存)。

这听起来像是I / O绑定而不是计算绑定的典型示例,在这种情况下,I / O是来自L3缓存和主内存。 L2缓存是256k,所以我猜测输入数据的大小加上一组结果和所有中间数组都大于256k。

我是否接近标记?

一般来说,在考虑使用多少线程时,您必须考虑共享缓存和内存速度以及数据集大小。这可能是一个正确的错误,因为你必须在运行时解决这个问题,这需要大量的编程工作(除非你的硬件配置是固定的)。

答案 1 :(得分:1)

很可能是CPU时间测量的假象。一个简单的例子,如果你运行一个100 MHz CPU和一个3 GHz CPU,每个都会报告它运行一秒钟。第二个CPU的工作量可能会增加30倍,但需要一秒钟。

对于超线程,一个合理的(不太准确)模型是一个核心可以运行一个任务,比如2000 MHz,或两个任务,比如1200 MHz。运行两个任务它只能完成每个线程60%的工作,但是两个线程的工作总量的120%,提高了20%。但是如果操作系统询问使用了多少秒CPU时间,那么第一个将报告" 1秒"每秒后实时,而第二个将报告" 2秒"。

因此报告的CPU时间会增加。如果小于双倍,则整体性能得到改善。