본문 바로가기

컴퓨터 과학 & 영상처리 관련/임베디드

돌리는 것도 요령껏

루프 풀기(loop unrolling) 

before

 

int i, j = 10;

for(i=0;i<20;i++){

   function(j);

 

 

 

실행시간 : real 0m0.00s

 after

 

int i,j = 10;

for(i=0;i<20;i+=4){

   function(j);

   function(j);

   function(j);

   function(j);

}

실행시간 : real 0m0.002s

 

루프 병합() 

 before

 

int a[10],i,sum=0;

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

     a[i] = i+1;

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

     sum += a[i];

 after

 

int a[10],i,sum=0;

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

   a[i]=i+1;

   sum+=a[i];

}

 

필요 없이 루프를 끝까지 돌리지 마라

 

루프 변수

register unsigned int loop_var; //네이비트 데이터 타입..그 중에서 unsigned가 더 낫고 register로 하면 더 낫다

 

 

 루프를 빠르게 하는 표현

마이크로프로세서에 따라 다운 카운팅이 더 효과적일 때도 있다.

for(i=10;i != 0 ; i--) {}

이런 표현을 더 빠르게 하면

for(i=10;i--;){}

아래도 같은 의미

for(i=10;i;i--){}

10부터 1까지 반복수행하고 0이 되면 종료한다

 

함수를 반복적으로 부르는 대신에 함수안에 루프를 넣으면 더 낫다