当我用 C 语言对超线程的 CPU 进行基准测试时,我观察到使用超线程时函数的运行时间几乎精确地翻了一番。我期望的是某种速度改进,因为无序执行或其他优化。
我使用 gettimeofday 来估计运行时。为了评估观察结果,我想知道您是否对超线程环境(Debian Linux 32 位)中gettimeofday的稳定性有想法,或者对我的期望(他们可能是错的)?
更新:我忘了提到我运行了两次基准测试应用程序,每次将相关性设置为一个超线程内核。例如,gemm 并行运行两次。
我怀疑你对gettimeofday()
的使用是否解释了这种差异,除非你正在测量非常小的时间间隔。
更重要的是,我不希望启用超线程来提高单线程 BLAS 计算的性能。 单个线程一次仅使用一个处理器,因此超线程提供的其他逻辑处理器无济于事。
经过良好调整的 BLAS 可以充分利用 CPU 的数据缓存来减少内存访问时间。 但是,如果从缓存中逐出所需的数据,则这没有多大帮助,因为当同一物理 CPU 的其他逻辑处理器执行不同的进程时可能会发生这种情况。 即使在负载较轻的系统上,也可能有足够的工作要做,操作系统将始终在每个可用的(逻辑)处理器上安排一个进程。