캐쉬 알고리즘에 따라 코딩을 하는 것을 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 |