可以说,4个线程在Multicore x86处理器的4个独立核心上运行,并且它们不共享任何数据,是否可以通过编程方式使4个核心使用共享L2缓存的单独和预定义部分.
最佳答案
让我们使用两个术语,独占和共享缓存,而不是L1,L2,L3,L4缓存.不同的cpu系列开始在不同级别共享缓存.在所提出的术语中,最初的问题是 – 是否可以将共享缓存拆分为部分,每个部分将由其中一个cpu /核心专用?没有明确的答案.此外,有两个答案彼此相反.
1)首先和一般答案:没有.
缓存是通过硬件管理设计的.在软件中只能访问缓存的控制杠杆很少,例如对整个内存或已定义的内存区域启用/禁用缓存,应用指定的缓存刷新策略(直写/写回).基本上没有,因为它被设计为在硬件中管理.因此,没有有用的界面可以在软件中优雅地管理它.
2)第二个答案:是的.
实际上,缓存是以这种方式设计的,即缓存的每一行都可以保存来自指定内存行的数据.由于这一点,如果内存管理器提供保证,相同的cpu一个cpu /内核拥有并使用专门分配给同一缓存行的所有内存行,则内存管理器保证该cpu将专门使用该缓存行.这是一个非常棘手的解决方法.它的优点非常有限,并且有严重的缺点:内存布局非常分散,缓存使用不平衡,内存管理复杂,非常依赖于软件(详细信息可以在“MetallicPriest”提供的文章中找到).
简历:从理论上说这是可能的,而在实践中几乎是不可能的.