目前,我正在使用 CPU 学习并行处理,这是一个涵盖面广的主题,有大量教程和书籍。
但是,我找不到任何一个教程或资源来讨论超线程 CPU 的编程技术。没有一个代码示例。
我知道要利用超线程,必须实现代码,以便可以同时使用 CPU 的不同部分(最简单的例子是同时计算整数和 float ),所以它不是即插即用的-播放。
如果我想了解有关该主题的更多信息,我应该查看哪些书籍或资源?谢谢。
编辑:当我说超线程时,我指的是一般的同步多线程,而不是特指英特尔的超线程。
编辑 2: 例如,如果我有一个 i7 8 核 CPU,我可以制作一个排序算法,当它使用所有 8 核而不是 1 个时,运行速度提高 8 倍。但是它将在 4 核 CPU 和 4c-8t CPU 上运行相同,所以在我的情况下 SMT 什么都不做。
同时,与 4c-4t CPU 相比,Cinebench 在 4c-8t CPU 上的运行要好得多。
最佳答案
当一个线程从内存中加载某些内容时,SMT 通常是最有效的。根据内存(L1、L2、L3 缓存、RAM)的不同,读/写延迟可能会跨越很多 CPU 周期,如果每个内核只执行一个线程,那么这些周期将不得不浪费在什么都不做的情况下。
所以,如果你想最大化SMT的影响,尽量让两个线程的内存访问交错进行,这样一个线程执行指令,另一个线程读取数据。理论上,您也可以使用一个线程仅用于缓存预热,即将数据从 RAM 或主存储器加载到缓存中以供其他线程后续使用。
成功应用此方法的方式因系统而异,因为缓存、RAM 和主存储器的访问延迟及其大小可能相差很大。
关于c++ - 如何优化同时多线程的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369550/