0

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

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

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

4

1 回答 1

2

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

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

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

于 2014-12-12T17:47:58.950 回答