如何在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 */
    }
}
阅读 3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题