sách gpt4 ai đã đi

c++ - 了解 `_mm_prefetch`

In lại 作者:行者123 更新时间:2023-12-03 11:15:04 33 4
mua khóa gpt4 Nike

答案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ị 保存在处理器缓存中。

我正在寻找对我对两点理解的确认:

  1. Phải _mm_prefetch 的调用不会延迟紧随其后的指令的处理。
  2. 预取错误的位置不会受到惩罚,只是猜测正确会失去好处。

该函数使用 128 个 128 位值(总共 2 KB)的查找表。有没有办法“强制”它被缓存?该查找表的索引按顺序递增;我也应该预取它们吗?我可能应该使用另一个提示来指向另一个级别的缓存?这里最好的策略是什么?

1 Câu trả lời

如果您做任何与性能相关的事情,了解您需要什么的最佳和终极方法就是尝试一下。幸运的是,您确切地知道要尝试什么,而且只有几种可能性。

关于你的理解——是的,它是正确的。但是,任何事情都是有代价的(例如,如果您在代码中添加任何指令,处理器将浪费一纳秒的时间来执行它)。您应该通过测量前后的性能来验证您的预取想法。对于非常不规则的访问模式,它很可能会起作用。

关于预取任何顺序数据——你可能不应该打扰。缓存以 64 字节粒度保存数据,因此对于顺序数据,预取通常无济于事。此外,一些(全部?)缓存具有预测加载功能——即使没有被告知,它们也会提前预取。

关于c++ - 了解 `_mm_prefetch`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65604355/

33 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com