我有一个正在使用的课程_mm_prefetch()
预先请求包含 double 类型的类成员的缓存行:
class MyClass{
double getDouble(){
return dbl;
}
//other members
double dbl;
//other members
};
_mm_prefetch() https://software.intel.com/sites/landingpage/IntrinsicsGuide/签名是:
void _mm_prefetch (char const* p, int i)
但是当我这样做时:
_mm_prefetch((char*)(myOb.getDouble()), _MM_HINT_T0);
海湾合作委员会投诉:
错误:从类型“double”到类型“char*”的转换无效
那么我如何预取这个类成员呢?
如果您阅读了说明_mm_prefetch()
从您链接到的网站有:
void _mm_prefetch (char const* p, int i)
从内存中获取包含地址 p 的数据行到由局部性提示 i 指定的缓存层次结构中的位置。
所以你需要传递你想要的变量的地址。为了做到这一点,您需要向函数传递对类成员的引用的地址或指向它的指针。
最简单的解决方案是改变getDouble()
返回引用,然后您可以使用:
_mm_prefetch((char*)(&myOb.getDouble()), _MM_HINT_T0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)