我在x86和x86-64上已经了解到这一点,英特尔gcc提供了特殊的预取指令:
#include <xmmintrin.h>
enum _mm_hint
{
_MM_HINT_T0 = 3,
_MM_HINT_T1 = 2,
_MM_HINT_T2 = 1,
_MM_HINT_NTA = 0
};
void _mm_prefetch(void *p, enum _mm_hint h);
Run Code Online (Sandbox Code Playgroud)
程序可以_mm_prefetch在程序中的任何指针上使用内在函数.并且与_mm_prefetch
内在函数一起使用的不同提示是实现定义的.一般来说,每个提示都有其自身的含义.
_MM_HINT_T0将 数据提取到包含高速缓存的所有高速缓存级别以及用于独占高速缓存的最低级别高速缓存
_MM_HINT_T1提示将数据拉入L2而不是L1d.如果有一个L3缓存,_MM_HINT_T2 提示可以为它做类似的事情
_MM_HINT_NTA,允许告诉处理器专门处理预取的缓存行
那么当有人使用这条指令时,有人会描述一些例
以及如何正确选择提示?