如何在C++中让某个函数一直处于cache中?

发布于 2022-09-06 22:48:18 字数 922 浏览 34 评论 0

目前在工程中有一个高性能模块中的函数,需要它一直保存在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文