【发布时间】:2014-12-12 17:05:51
【问题描述】:
当我在 C 语言中使用超线程和 BLAS 矩阵运算对 CPU 进行基准测试时,我观察到使用超线程时函数的运行时间几乎翻了一番。由于乱序执行或其他优化,我期望的是某种速度的提高。
我使用 gettimeofday 来估计运行时间。为了评估观察结果,我想知道您是否对 gettimeofday 在超线程环境(Debian Linux 32 位)中的稳定性或我的期望(他们可能是错误的)有想法?
更新:我忘了提到我正在运行基准测试应用程序两次,每次都将亲和性设置为一个超线程核心。例如 gemm 并行运行两次。
【问题讨论】:
-
如果您的代码和数据在很大程度上适合缓存(尤其是 L1,但也可能在 L2 中),而 BLAS 之类的事情是设计/优化的,那么该代码的执行将缺乏大部分超线程在其中调度来自另一个线程的指令的管道停顿和冒泡,这几乎击败了超线程。
标签: c hyperthreading gettimeofday