CPU时间与超线程相关吗?



当使用超线程时,增加的CPU时间(如time CLI命令所报告的)是否表明效率低下(例如,在自旋锁或缓存丢失中花费的时间),或者CPU时间是否可能因HT的奇怪性质而膨胀?(例如,真正的内核很忙,HT不能启动)

我有四核i7,我正在测试一个OpenMP程序的平凡并行部分(图像到调色板的重新映射)-没有锁,没有临界区。所有线程都访问一些只读共享内存(查找表),但只对自己的内存进行写操作。

 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

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

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

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

这很可能是如何测量CPU时间的人工产物。举一个简单的例子,如果您运行一个100 MHz的CPU和一个3 GHz的CPU各1秒钟,每个CPU都会报告它运行了1秒钟。第二个CPU可能会多做30倍的工作,但只需要1秒钟。

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

所以报告的CPU时间增加了。如果小于两倍,则整体性能得到改善。

快速问题—您正在运行的是实时程序/usr/bin/time,还是内置的同名bash命令?我不确定这有什么关系,他们看起来很像。

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

数字显示从1到2核几乎是线性的改进,但是当你使用4核时,这一点明显减弱。超线程内核实际上没有添加任何东西。这意味着共享的东西正在被争夺。你的程序有自由运行的线程,所以这个东西只能是内存(i7上的L3缓存和主内存)。

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

我接近目标了吗?

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

相关内容

  • 没有找到相关文章

最新更新