博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
다양한 저장매체의 속도를 측정
阅读量:5278 次
发布时间:2019-06-14

本文共 2019 字,大约阅读时间需要 6 分钟。

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

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

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

 

windows 버전

 

ContractedBlock.gif
ExpandedBlockStart.gif
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);
}

 

 리눅스 버전:

 

ContractedBlock.gif
ExpandedBlockStart.gif
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

你可能感兴趣的文章
CF1215E Marbles
查看>>
BZOJ2339 HNOI2011卡农(动态规划+组合数学)
查看>>
octave基本操作
查看>>
axure学习点
查看>>
WPF文本框只允许输入数字[转]
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>