gpt4 book ai didi

visual-studio-2010 - _mm_prefetch 如何工作?

转载 作者:行者123 更新时间:2023-12-03 14:29:52 25 4
gpt4 key购买 nike

_mm_prefetch 调用如上所述 here 将内容从 RAM 中的给定内存位置预取到缓存行。但是缓存是完全在硬件控制下的吧?根据访问次数较多的内存(基于空间/时间位置),硬件将内容从内存预取到缓存。我认为程序员无法控制缓存,它完全是一种硬件机制。

所以我的理解是错误的,缓存实际上可以由我们控制,对吗?

如果 _mm_prefetch 可以控制可以放入缓存中的内容,

  • 这是否意味着它永远不会从缓存中删除?
  • 什么是等效的汇编级指令,它适用于
    缓存机制?
  • 最佳答案

    我们总是可以通过简单地执行内存访问将数据移动到缓存中,如果处于事件状态。
    我们可以通过简单地提前“触摸”它来预取一个 var,我们不需要特殊的指令。

    不清楚您所说的“控制缓存”是什么意思,因为我们可以启用/禁用它、设置其模式、填充/溢出策略以及与其他硬件线程的共享模式。
    我们还可以用数据填充缓存,并通过使用算术强制逐出一行。

    您认为程序员必须控制缓存的假设并不完全有效,尽管并非不正确:CPU 可以自由地实现它想要的任何缓存策略,只要它遵守记录的规范(包括根本没有缓存或溢出每 X 个时钟滴答缓存一次)。
    然而,我们不能做的一件事是在缓存中固定行,我们不能告诉 CPU 永远不要驱逐特定的行。

    编辑正如评论中的 @Mysticial pointed out 一样,可以将数据固定到较新的 Intel CPU 中的 L3 缓存中。
    PREFETCHT0 编译成的 PREFETCHT1 , PREFETCHT2 , PREFETCHTNTA , PREFETCHWT1 _mm_prefetch 指令只是对硬件预取器的提示,如果存在、事件且愿意尊重提示1。

    Their limited use cases 3 更多来自对数据将停止的缓存层次结构级别的更精细控制以及核心资源的减少使用2,而不是将数据移动到缓存中。

    一旦一行被预取,它就会像任何其他行一样从缓存中删除。

    1 这些硬件预取器通常由内存访问模式(如顺序访问)触发,并且与执行流程异步。

    2 它们本质上是异步的(在本地快速完成),并且可能不会污染负载(例如寄存器、加载单元等)的核心资源。

    3 虽然人们可能认为一个提示在最坏的情况下毫无用处(如果不遵守),但它实际上可以 turns out that prefetch degrates the performance

    关于visual-studio-2010 - _mm_prefetch 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41778094/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com