assembly 效率内核是否支持与性能内核相同的指令?

5cnsuln7  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(146)

当编写需要高计算性能的程序时,通常需要多线程、SIMD矢量化或其他扩展。可以使用CPUID查询CPU,以了解它支持什么指令集。但是,由于程序员无法控制哪些内核实际执行不同的线程,因此如果不同的内核支持不同的指令集,则可能会出现问题。
如果一个人在程序开始时询问CPU,那么假设所有线程都支持相同的指令集是否安全?如果不是,那么这是否会破坏假设它们都支持相同指令的程序,或者CPU是否足够聪明,意识到它们不应该使用这些内核?
是否需要在每个线程上分别查询CPUID?
有没有什么方法可以避免程序在E核上运行?
如果指令集是相同的,那么“效率”在哪里?是更少的缓存,更低的时钟速度,还是其他什么?
这个问题是出于好奇而提出的,但答案可能会影响我将来编写程序的方式。我希望对这些问题有任何有见地的评论,但如果你不知道它是如何工作的,请不要只是分享你的想法和意见。谢谢。
我只是试着在互联网上查找信息,但没有发现任何足够低的水平来充分回答这些问题。

3z6pesqy

3z6pesqy1#

效率内核是否支持与性能内核相同的指令?
是的(对于英特尔的桤木Lake,但也对于big.LITTLE ARM)。
为桤木湖;操作系统“被认为不能”处理异构CPU;因此英特尔削弱了对性能内核(主要是AVX-512)中已有的扩展的支持,以匹配效率内核中存在的特性。
遗憾的是,支持异构CPU在某些情况下实际上并不难(例如,管理程序不会将所有CPU分配给单个客户机),并且在一般情况下是可以解决的;并且未能提供重新启用禁用的扩展(如果OS支持异构CPU)的方式阻止了OS在将来尝试支持异构CPU;基本上把一个临时的解决办法变成了一个永久的问题。
是否需要在每个线程上分别查询CPUID?
如果你有高度优化的代码(例如针对不同的CPU类型进行了不同的代码调整),你可能仍然需要(即使这不是一个严格的需求);而且还需要将线程固定到特定的CPU或CPU组。
有没有什么方法可以避免程序在E核上运行?
通常情况下,这只会让事情变得更糟(在E核上运行总比因为P核已经很忙碌而根本不运行要好)。
如果指令集是相同的,那么“效率”在哪里?是更少的缓存,更低的时钟速度,还是其他什么?
更低的时钟、更短的流水线、更少的推测性执行......

相关问题