- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
答案What are _mm_prefetch() locality hints?详细说明提示的含义。
我的问题是:我想要哪一个?
我正在处理一个被重复调用数十亿次的函数,其中包含一些 số nguyên
参数。我要做的第一件事是使用该参数(它的低 32 位)作为 4GB 缓存的键来查找一些缓存值。根据调用此函数的算法,我知道从一次调用到下一次调用,该 key 通常会加倍(左移 1 位),所以我正在这样做:
int foo(int key) {
uint8_t value = cache[key];
_mm_prefetch((const char *)&cache[key * 2], _MM_HINT_T2);
// ...
目标是在下次调用此函数时将此 giá trị
保存在处理器缓存中。
我正在寻找对我对两点理解的确认:
_mm_prefetch
的调用不会延迟紧随其后的指令的处理。该函数使用 128 个 128 位值(总共 2 KB)的查找表。有没有办法“强制”它被缓存?该查找表的索引按顺序递增;我也应该预取它们吗?我可能应该使用另一个提示来指向另一个级别的缓存?这里最好的策略是什么?
1 Câu trả lời
如果您做任何与性能相关的事情,了解您需要什么的最佳和终极方法就是尝试一下。幸运的是,您确切地知道要尝试什么,而且只有几种可能性。
关于你的理解——是的,它是正确的。但是,任何事情都是有代价的(例如,如果您在代码中添加任何指令,处理器将浪费一纳秒的时间来执行它)。您应该通过测量前后的性能来验证您的预取想法。对于非常不规则的访问模式,它很可能会起作用。
关于预取任何顺序数据——你可能不应该打扰。缓存以 64 字节粒度保存数据,因此对于顺序数据,预取通常无济于事。此外,一些(全部?)缓存具有预测加载功能——即使没有被告知,它们也会提前预取。
关于c++ - 了解 `_mm_prefetch`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65604355/
答案What are _mm_prefetch() locality hints?详细说明提示的含义。 我的问题是:我想要哪一个? 我正在处理一个被重复调用数十亿次的函数,其中包含一些 int 参数。
intrinsics guide关于 void _mm_prefetch (char const* p, int i) 只说了这么多: Fetch the line of data from memo
_mm_prefetch 调用如上所述 here 将内容从 RAM 中的给定内存位置预取到缓存行。但是缓存是完全在硬件控制下的吧?根据访问次数较多的内存(基于空间/时间位置),硬件将内容从内存预取到缓
我现在用g++4.7在redhat linux上编译一个算法代码,遇到了一些问题。一个 C++ 文件使用的头文件如下: 但是在编译的时候,出现了一些错误,比如 error: '_mm_prefetc
我想使用指令_mm_prefetch。 MSDN specifies它在标题 mmintrin.h 中,但没有。我使用 Visual Studio 2012。 最佳答案 看起来像是他们文档中的错误。我
Tôi là một lập trình viên xuất sắc, rất giỏi!