본문 바로가기

나의 플랫폼/C언어

Cache Friendly Code 기법

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

캐쉬 알고리즘에 따라 코딩을 하는 것을 Cache Friendly Code 기법이라 합니다.


캐쉬 알고리즘에는 두가지의 로컬리티(Locality)를 이용합니다.

1. Temporal Locality 

    : 프로그램 실행 시 한번 접근이 이루어진 주소의 메모리 영역은 자주 접근하게 된다는 속성.

2. Spatial Locality

    : 프로그램 실행 시 접근하는 메모리 영역은 이미 접근이 이루어진 영역의 근처일 확률이 높다는    

      프로그램의 성격


위 두가지 특징으로 캐쉬 메모리에 Data를 저장 시켜 놓고 메인메모리가 아닌 캐쉬 메모리에서 바로 데이터를 가지고 오게 됩니다.!!!


이 두 형태에 맞게 코딩하는 것이 Cache Friendly Code 인데 한가지 들어보겠습니다.

int tmp[10][10] = 

{

{1,2,3,4,5,6,7,8,9,0},

{12,2,3,4,5,6,7,8,9,0},

{13,2,3,4,5,6,7,8,9,0},

{14,2,3,4,5,6,7,8,9,0},

{15,2,3,4,5,6,7,8,9,0},

...

}

for(int i = 0 ; i < 10 ; i++)

for(int j = 0 ; j < 10 ; j++)

printf("%d\t",tmp[i][j];


간단한 2차원 배열 출력 코드입니다. 행열을 이동시키는 각각i,j변수가 있습니다.

이럴 경우 Temporal Locality는 i,j와 같은 변수에서 적용 된다는 것을 파악할 수 있습니다.

하지만!!

Spatial Locality는 i값이 행 단위로 이동을 하기 때문에 적용이 되고 있지 않습니다.

따라서, 위 코드를  행을 제외 시킨 열단위로 이동을 하면 두 Locality 알고리즘에 부합될 수 있습니다.


[ 수정 코드 ] 

int *pTmp = NULL;

pTmp = (int *)tmp;

for ( int i = 0 ; i < 10 * 10 ; i++ , pTmp++)

printf("%d\t",*pTmp);


이렇게 열단위로 이동시키면 알고리즘에 부합되므로 속도가 더 빨라지지요~^^*

코딩을 할 때  캐쉬 알고리즘은 별로 고려를 하지 않습니다만,

혹시 고려할 상황이 생기면 위 내용을 이용해도 좋을 듯합니다.


그럼 즐코딩~^^

'나의 플랫폼 > C언어' 카테고리의 다른 글

[ESP8266] Exception (29) 발생 시  (1) 2018.07.06
Socket Interface Name으로 IP 주소 가져오기.  (0) 2013.03.06
시그널 종류  (0) 2013.01.18