【问题标题】:Does Intel intrinsics load functions read from cache or RAM?英特尔内在函数是否加载从缓存或 RAM 读取的函数?
【发布时间】:2016-04-14 04:53:32
【问题描述】:


英特尔内在函数是否加载如下函数:

  _mm256_load_**

cacheRAM 读取到寄存器中?

谢谢!

【问题讨论】:

  • 如果数据已经在缓存中,则从缓存中读取,否则从 RAM 中读取数据(通过缓存)。
  • 如果正在加载的__m256 值已经在寄存器中,它甚至不一定会产生负载。但除此之外,这个问题是无稽之谈。 vmovaps ymm0, [mem] 只是一个普通的加载,和mov eax, [mem] 一样,所以如果数据被缓存,它会从缓存中读取。负载不会绕过缓存或类似的东西。你不妨问问int foo(void) { return global_variable; }是从缓存还是RAM中读取数据。

标签: intel sse intrinsics avx


【解决方案1】:
  1. 正如 Paul R 提到的,数据是“从缓存”或“从内存”加载(这本身过于简单),具体取决于 内存子系统/层次结构的当前状态

  2. 考虑阅读以下完美的书https://people.freebsd.org/~lstewart/articles/cpumemory.pdf 以获得对内存子系统的基本(以及一些高级)理解。在进行练习之前,您最终需要学习最少的理论基础知识,尤其是在像内在函数这样低级别的练习中。

  3. 使答案完整。有一种特殊类型的负载具有 hint 绕过缓存并“直接”从内存中加载数据。这称为非时间负载,相应的 AVX 内在函数是 _mm256_stream_load_* 。这是一个相当高级的话题,我不认为你真的会在学习曲线的给定点上寻找类似的东西。

【讨论】:

    猜你喜欢
    • 2016-09-02
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多