【发布时间】:2020-04-09 16:18:33
【问题描述】:
目前,我正在学习使用 CPU 进行并行处理,这是一个涵盖了很多教程和书籍的主题。
但是,我找不到一个关于超线程 CPU 编程技术的教程或资源。没有一个代码示例。
我知道要使用超线程,必须实现代码以便可以同时使用 CPU 的不同部分(最简单的例子是同时计算整数和浮点数),所以它不是即插即用-玩。
如果我想了解有关此主题的更多信息,我应该查看哪个书籍或资源?谢谢。
编辑:当我说超线程时,我指的是同时多线程,而不是英特尔的超线程。
编辑 2: 例如,如果我有一个 i7 8 核 CPU,当它使用全部 8 核而不是 1 时,我可以使运行速度提高 8 倍的排序算法。但它将在 4 核 CPU 和 4c-8t CPU 上运行相同,所以在我的情况下,SMT 什么都不做。
同时,Cinebench 在 4c-8t CPU 上比在 4c-4t CPU 上运行得更好。
【问题讨论】:
-
您搜索的不是使用超线程的代码,这是SMT 的营销术语,而是多线程。关于这个话题有很多资源,但我个人不知道有什么好的建议,所以我不会对此做出回答。您可能应该编辑您的问题以要求使用多线程,以便获得有用的答案。
-
不,您误解了:超线程 (SMT) 是 CPU 制造商使用的一种技术,允许每个 CPU 内核执行多个线程。多线程通常意味着同时运行多个线程,这就是您要搜索的内容。 SMT 不是你在编程时可以与之交互的东西,它只是增加了 CPU 可以同时执行的线程数。
-
要添加到@eike 的评论中,您只能间接与 SMT 交互...您可以以允许 SMT 更好地执行的方式构建代码,但您不能告诉 CPU 如何在您的代码上“使用”SMT。这种情况与缓存稍有相似:您无法将数据显式加载到缓存中,但您可以重新构造代码以更好地填充缓存。
-
“我应该像不存在 SMT 一样编程吗?” 对于通常的 (TM) 多线程应用程序,是的。稍后优化时,您绝对应该考虑 SMT。抱歉,我现在无法给出详细的答案,自从我使用这种东西已经有一段时间了:-)
-
@user3192711 我的最后一条评论:几年前我参加过this very good three day course,它是关于节点级性能工程的。在第 2 天,他们讨论 SMT(重点关注 HPC 应用程序),也许它可以给你一个指点。
标签: c++ multithreading parallel-processing multiprocessing hyperthreading