1. Cache와 main memory의 속도 비교:

Array에 data를 access하는 시간을 통해 비교하였다.

Array는 메모리에 연속적으로 할당이 되고, Array에 data를 access할 때 일정 크기만큼 cache에 올라가기 때문에 array 순서대로 참조할 경우 cache에 올라간 값을 access 한다. 하지만 비연속적인 참조를 할 경우 cache에 올라간 값이 아니기 때문에 main memory에 access하게 된다.

windows 버전

Code
#include <stdio.h>
#include <time.h>
#include <windows.h>

#define SIZE 10000
#define CHECK_TIME_START QueryPerformanceFrequency ((_LARGE_INTEGER*)&freq); QueryPerformanceCounter((_LARGE_INTEGER*)&start)
#define CHECK_TIME_END(a) QueryPerformanceCounter((_LARGE_INTEGER*)&end); a=(float)((float) (end - start)/freq)

int a[SIZE][SIZE];

void main() {

__int64 start, freq, end;
    float resultTime=0;
    printf("시작\n");
    CHECK_TIME_START;  
  
    for(int i=0;i<SIZE;i++){
        for(int j=0;j<SIZE;j++){
            a[j][i] = 0;
        } 
    }
    CHECK_TIME_END(resultTime);

printf("끝 %f ",resultTime);

CHECK_TIME_START;  
    
    
    for(int i=0;i<SIZE;i++){
        for(int j=0;j<SIZE;j++){
            a[i][j] = 0;
        } 
    }
    CHECK_TIME_END(resultTime);

printf("끝 %f ",resultTime);
}

리눅스 버전:

Code
 #include <stdio.h>
//#include <time.h>
//#include <windows.h>
#include <sys/time.h>

#define SIZE 10000

long timecacul () {
        struct timeval tv;
        struct timezone tz;
        gettimeofday(&tv,&tz);
        return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
}

int a[SIZE][SIZE];

void main() {
    
    long starttime, endtime, resultTime;
    int i, j;

printf("시작\n");
      starttime = timecacul ();

for(i=0;i<SIZE;i++){
        for(j=0;j<SIZE;j++){
            a[j][i] = 0;
        } 
    }
    endtime = timecacul ();
    resultTime = endtime -starttime;

printf("끝 %ld ",resultTime);

starttime = timecacul ();
    
    
    for(i=0;i<SIZE;i++){
        for(j=0;j<SIZE;j++){
            a[i][j] = 1;
        } 
    }

endtime = timecacul ();
    resultTime = endtime -starttime;

printf("끝 %ld ",resultTime);
}

소스 코드 설명

10000 x 10000의 배열에 0을 넣는 시간을 측정한다. 두 가지 방법으로 넣는데, 위쪽 for loop 에서는 메모리에 비연속적으로 0을 넣고 있고(a[j][i] = 0;) 아래쪽 for loop에서는 메모리에 연속적으로 0을 넣고 있다 (a[i][j] = 0;).

Ubuntu9.10에서 돌린 결과:

rize@rize-laptop:~/end$ ./os
시작
끝 5334 끝 414

2. main memory 와 Magnetic disk의 속도 비교:

Sqlite디비를 메인 메모리와 하드 디스크에서 돌려서 시간 측정한다.

转载于:https://www.cnblogs.com/jinrize/archive/2009/11/23/1608570.html

最新文章

  1. 方向:AI研究方向历史性转变!从机器学习到人类研究
  2. 如何在返回String的Spring MVC @ResponseBody方法中响应HTTP 400错误?
  3. python3ide_Python IDE Windows下载3.4.2 安装版
  4. 新闻发布项目——接口类(commentDao)
  5. 月老盲盒小纸条微信云开发小程序源码
  6. java 对象列表_Java中的对象列表
  7. java 令牌解析_Java JWT的令牌机制
  8. word文字中的数字怎么自动变化_【天华学术】不会为毕业论文“美颜”,怎么办?...
  9. 旋转矩阵、旋转向量(轴角)、四元数、欧拉角之间相互转换的代码实现(利用Eigen实现)...
  10. Windows Server 2012的服务管理自动化
  11. 六石管理学:到了一定境界,确实可以随心所欲
  12. python写界面c这算法_OpenCV算法精解:基于Python与C.pdf
  13. pg数据库多表查询(inner)和级联查询
  14. 飞秋2012、飞秋2013资源文件
  15. 基于大数据分析技术在会计方面的研究
  16. 重采样 上采样 下采样
  17. AB实验只是开始!如何归因才是王道!
  18. 目标检测算法之AAAI2019 Oral论文GHM Loss
  19. 备战第十二届蓝桥杯电子类《EDA设计与开发》国赛
  20. 采集规则七:河溪小说网 www.518cqdl.com 适用于-易读系统小说站河溪小说网的采集规则

热门文章

  1. SecureCRT 或者 超级终端 始终无法ping通主机
  2. zcmu1133(dfs+判重)
  3. Explaining the Genesis Block in Ethereum
  4. OpenSSL X509 Certificate反序列化漏洞(CVE-2015-3825)成因分析
  5. python 12306查询不到车次_python实现自动抢12306火车票,妈妈再也不用担心我没有车回去了...
  6. JZOJ 5909. 【NOIP2018模拟10.16】跑商(paoshang)
  7. 正定矩阵(用于SVM的Mercer定理)
  8. 过拟合、欠拟合的原因和解决办法
  9. 洛谷 P3368 【模板】树状数组 2
  10. 【NOIP2013模拟9.29】Mixing Chemicals