gpt4 book ai didi

prefetch - 为 ia32、ia64、amd64 和 powerpc 寻找预取指令的最佳等价物

转载 作者:行者123 更新时间:2023-12-04 21:48:52 28 4
gpt4 key购买 nike

我正在查看一些稍微困惑的代码,这些代码尝试使用各种编译器内置程序对预取指令进行平台抽象。它最初似乎基于 powerpc 语义,分别使用 dcbt 和 dcbtst 读取和写入预取变体(这两个都在新的可选流操作码中传递 TH=0)。

在 ia64 平台上,我们可以阅读:

__lfetch(__lfhint_nt1, pTouch)

而写:
__lfetch_excl(__lfhint_nt1, pTouch)

这(读与写预取)似乎与 powerpc 语义相当匹配(除了 ia64 允许临时提示)。

有点奇怪的是,有问题的 ia32/amd64 代码正在使用
prefetchnta

不是
prefetchnt1

就像如果该代码与 ia64 实现一致(在我们的(仍然存在的)hpipf 端口和我们现在已死的 Windows 和 linux ia64 端口的代码中的#ifdef 变体)。

由于我们使用 intel 编译器进行构建,因此通过切换到 xmmintrin.h 内置函数,我应该能够与我们的许多 ia32/amd64 平台保持一致:
_mm_prefetch( (char *)pTouch, _MM_HINT_NTA )
_mm_prefetch( (char *)pTouch, _MM_HINT_T1 )

...只要我能弄清楚应该使用什么时间提示。

问题:
  • 是否有读写 ia32/amd64 预取指令?我在指令集引用中没有看到任何内容。
  • 对于读取与写入预取,nt1、nt2、nta 时间变化中的一个会更受欢迎吗?
  • 知道是否有充分的理由在 ia32/amd64 上使用 NTA 时间提示,而在 ia64 上使用 T1?
  • 最佳答案

    • Are there read vs. write ia32/amd64 prefetch instructions? I don't see any in the instruction set reference.


    部分系统支持 prefetchw写指令

    • Would one of the nt1, nt2, nta temporal variations be preferred for read vs. write prefetching?


    如果该行仅由调用线程使用,则无论您如何携带该行,读取和写入都可以使用它。上面提到的 prefetchw 的好处是它会带来线路并让您拥有它的所有权,如果该线路也被另一个核心使用,这可能需要一段时间。另一方面,提示级别与 MESI 状态正交,并且仅影响预取行的存活时间。如果您在实际访问之前很长时间预取并且不想在该期间丢失预取,或者在访问之前预取,并且不希望预取过多地影响您的缓存,那么这很重要。

    • Any idea if there would have been a good reason to use the NTA temporal hint on ia32/amd64, yet T1 on ia64?


    只是推测 - 也许更大的缓存和激进的内存 BW 更容易受到不良预取的影响,您希望通过非时间提示来减少影响。考虑到您的预取器突然变得松散以获取它所能获取的任何东西,您最终会陷入垃圾预取中,这些预取会通过许多有用的缓存行。 NTA 提示使它们相互覆盖,其余部分完好无损。

    当然,这也可能只是一个错误,我不能肯定,只有开发编译器的人才能确定,但​​由于上述原因,这可能是有道理的。

    关于prefetch - 为 ia32、ia64、amd64 和 powerpc 寻找预取指令的最佳等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9266890/

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