如何在C++中让某个函数一直处于cache中?
目前在工程中有一个高性能模块中的函数,需要它一直保存在cache中,在执行这个函数期间可能会调用大量的其他非高性能操作,用rdtscp指令测试出来的结果是连续调用10次main_task的性能比执行some_task+main_task函数快10倍,应该是cache miss的问题。
备注: linux系统(centos)
测试样例代码如下:
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
static int datas[2 * 60 * 80 * 40];
static const int data_size = sizeof(datas) / sizeof(int);
void some_task()
{
for (size_t i = 0; i < data_size * 60; ++i)
{
const int index = abs(rand()) % data_size;
datas[index] = static_cast<int>(log(static_cast<double>(abs(rand()) + 1)));
}
}
void main_task()
{
/* ...do something... */
}
int main()
{
for (size_t i = 0; i < 10; ++i)
{
some_task();
/* start_time rdtscp */
main_task();
/* end_time rdtscp */
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论