超线程对gettimeofday和其他时间测量的影响

时间:2014-12-12 17:05:52

标签: c hyperthreading gettimeofday

当我使用C语言中的BLAS矩阵运算对超线程CPU进行基准测试时,我观察到使用超线程时函数运行时几乎完全加倍。由于乱序执行或其他优化,我所期望的是某种速度提升。

我使用gettimeofday来估计运行时。为了评估观察结果我想知道你是否对超线程环境(Debian Linux 32位)中gettimeofday的稳定性有所了解,或者可能是我的预期(可能是错误的)?

更新:我忘了提到我正在运行基准测试应用程序两次,将关联设置为每个超线程核心。例如,gemm并行运行两次。

1 个答案:

答案 0 :(得分:2)

我怀疑您使用gettimeofday()是否解释了这种差异,除非您测量的时间间隔非常短。

更重要的是,我不希望启用超线程来提高单线程BLAS计算的性能。单个线程只使用一个处理器(一次),因此超线程提供的额外逻辑处理器无济于事。

经过良好调优的BLAS可以充分利用CPU的数据缓存来减少内存访问时间。如果所需数据从高速缓存中逐出,则这没有多大帮助,但是,当同一物理CPU的另一个逻辑处理器执行不同的进程时,可能会发生这种情况。即使在负载较轻的系统上,也可能有足够的工作要求操作系统在每个可用(逻辑)处理器上始终安排进程。