首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超线程对AVX有问题吗?

超线程对AVX有问题吗?
EN

Stack Overflow用户
提问于 2015-05-19 15:32:56
回答 1查看 2.8K关注 0票数 4

在玩超频和运行刻录测试时,我注意到AVX优化的LINPACK版本在启用超线程时测量了比禁用时更低的多线程浮点吞吐量。这是在一个常春藤桥i7 (3770 K)。我还注意到,随着超线程的禁用,LINPACK导致了更高的核心温度,尽管我在较低的核心电压下运行CPU。所有这一切使我相信,没有超线程,管道利用率实际上更高。

我很好奇:这仅仅是LINPACK算法中导致管道阻塞或SMT分配效率低下的内在原因,还是Intel的SMT实现在两个线程都发出广泛的SIMD指令时,在调度管道时是否有问题?如果是这样的话,那是哈斯韦尔已经解决的问题,还是将在未来英特尔架构中解决的问题?这是AVX512容易遇到的问题吗?

最后,在为Intel系统使用AVX进行编程时,是否可以采取任何好的步骤来避免使用SMT进行效率低下的流水线分配?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-08 23:51:38

超线程在两个硬件线程之间共享无序执行资源,而不是将它们全部分配给一个线程。通常,在最坏的情况下,如果一个线程已经能使管道满了,你就不会看到加速。无论哪种方式,执行单元都应该仔细阅读需要运行的指令的4个uop/时钟。

如果每个线程都在自己的内存块上工作,那么CPU内核就会尝试同时处理更多的活数据。L1 / L2缓存的竞争性共享意味着这可能会比没有HT的情况更糟糕。

此外,一些工作负载有并行化的开销。只有令人尴尬的并行问题(比如做许多独立的matmuls,而不是并行一个大的)对于协调线程的开销是可以忽略不计的。

正如Agner在他的优化装配手册中提到的,如果任何具有竞争力的共享或分区的CPU资源是瓶颈,超线程不会有帮助,而且可能会造成伤害。当代码在分支错误预测或缓存错误上花费大量时间时,这是很好的,因为其他线程可以防止饥饿的管道空闲。

矩阵数学有足够的可预测的访问模式,缓存错过和错误预测是罕见的。(尤指)在为缓存大小而小心阻止的代码中。)

如何避免HT没有帮助:使您的代码慢,因此单个线程无法有效地执行它,以保持管道满。>.<。但说真的,如果有一种算法存在缓存丢失或分支错误预测,与蛮力方法相比,其性能相同,那么使用它可能会有所帮助。例如,考虑到分支在单个线程上的开销,早期测试可能几乎是一个清洗,但是当您的代码在同一核心的两个HW线程上运行时,测试速度可能要快得多,因此蛮力方式处于不利地位。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30330013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档