如何测试一次内存访问的耗时?

程序在运行的过程访问主存每次是按cpu cache line 64B访问的(主流cpu cache line一般都是64B),如果命中L1 cache耗时约1ns,如果命中L2 cache耗时约3ns,如果命中L3 cache耗时约12ns,如果访问内存约50-100ns,上面这些数据都是从些网上的文章资料得知的。
如何写段代码测试下内存的访问时间,结果应该接近50-100ns ,本文介绍下测试方法:
1. 申请几段连续的虚拟内存,总大小4GB;
2. 给申请的4GB内存按页的大小4KB间隔,每页第1个字节写入值,目的是访问内存,让系统真正的分配物理内存;
3. 按照步长64B 128B … 4096B分别测试下按顺序访问已申请的4GB内存;
注:测试机器要尽量干净,未运行服务程序,以免测试过程中产生cpu切出运行其它服务程序,影响计时;


#include <sys/time.h>
#include <stdlib.h>
#include <stdio.h>

long long ustime(void) 
{
   
    struct timeval tv;
    long long ust;

    gettimeofday(&tv, NULL);
    ust = ((long)tv.tv_sec)*1000000;
    ust += tv.tv_usec;
    return ust;
}

#define LOOPLEN  4*1024
#define STEPLEN  64

#define LOOPLENREFRSH 512

typedef struct bigData{
   
    char buf[1024*1024]; /* 1MB buffer */
} bigData;

struct bigData * apstData[LOOPLEN];
struct bigData * apstDataTmp[LOOPLENREFRSH];

void test()
{
   
    long long t1;
   
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值